Редактировал product display в коммерце, убрал надпись валюты "рубл.", и в поле стоимости дописываю span (стояла задача вывести знак рубля предложенный Лебедевым).
Span вывожу через hook_page_alter(). Так вот, при смене цвета на странице дисплея продукта, перегружается часть страницы вместе с ценой (перегружается ajax-ом), и после перегрузки нет нужного span-a.
Причем, когда только сделал это переопределение, вроде работало даже после ajax перезагрузки. Сейчас перестало работать.
Подскажите:
1. файл из темы template.php, получается, не участвует при ajax перестроении страницы ?
2. Я сейчас благодаря модулю devel и команде dpm(), могу увидеть первоначальное содержимое переменной $page. Как можно отследить, как меняется переменная $page при ajax перегрузках?
Комментарии
Что за ajax запрос, что именно он загружает?
При ajax запросе страница не проходит темизацию заново. Темизируется только та часть, которая возвращается Если, конечно, вы ajax'ом не загружаете всю страницу целиком
Drupal 7, commerce.
Стандартный ajax запрос модуля commerce. В ноде, которая отображает продукты (product_display), выводятся поля продукта. При нажатии на те поля, которые были указанны атрибутами, формируется запрос и меняются поля товара (line_item_fields) на поля другого товара.
У меня цвет товара сделан атрибутом (commerce_fancy_attributes), при нажатии на другой цвет, в ноде меняются те поля, которые были взяты из продукта. Это скорее всего неправильная формулировка в терминах друпала, но может так станет яснее.
То что не проходит темизацию, это я догадался. Просто хотелось, чтобы кто-то из знающих подтвердил или опроверг догадку.
Остается открытым второй вопрос: чем можно следить за переменными друпала во время ajax перегрузок (здесь dpm() и devel не помогут). Просто давно столкнулся с тем, что при ajax перегрузках, не знаешь как меняются перменные и посмотреть никак не могу. И в итоге сидишь гадаешь, где ошибся и тратишь кучу времени. Может есть какой-то способ смотреть переменные друпала, так сказать динамически, чтобы знать что твориться при ajax перегрузках ?
Раньше я выводил все переменные в файл. потом нашел функцию dd в модуле devel. Вот тут куча инфы по установке софта для дебага http://ratatosk.net/drupal/tutorials/debugging-drupal.html
Насчет темизации. Зря вы меняете символ валюты через темизацию страницы. можно сделать это через темизацию поля цены. Тогда при ajax запросе должно подхватываться правильная темизация
Я не совсем понимаю, что за темизация поля цены?
Это поле выводится не в форме, а как поле страницы. То есть hook_form_alter здесь уже не подойдет. Если вы про хук hook_commerce_currency_info_alter, то я его использую. Но там загвоздка, я могу ввести только текстовые данные, если введу html разметку, то ее выведет, как текст. А для того чтобы вывести этот злосчастный значок, мне нужно вывести картинку. Я картинку выводил бэкграунд имеджем в span. Но span я в этот хук если вставлю, то пользователю выведется текст вида "500
<span class="someclass"></span>
".Был там модуль для смены названия валюты, но опять же он работал через хук hook_commerce_currency_info_alter со всеми вытекающими.
ПыСы за ссылку спасибо, поизучаю.
В общем-то вопрос хоть и не решен, но уже не актуален. Забил я на хитросделанные значки рубля.
Как и страница, блок или нода, поле может иметь свой шаблон.
тут все написано https://api.drupal.org/api/drupal/modules!field!theme!field.tpl.php/7, в комментах есть пример того, как должны выглядеть имена шаблонов для поля.
Другой вариант - создать форматтер для поля, скопировать код из существующего форматера и добавить проверку валюты.
Про field.tpl.php помню. Но если при перегрузке не используется page.tpl.php, то по идее и не будет использоваться field.tpl.php .
Форматтер когда-то писал для своего поля. Но форматтер для поля определяется в файле модуля, через hook_field_formatter_view() и hook_field_formatter_info(). Если я определю форматтер в другом модуле, то я не знаю, как указать, что этот дополнительный форматтер относится к подмодулю commerce_price модуля commerce. Патчить commerce считаю не вариантом, так как хочется получать обновления безопасности.
Если знаете вариант, как в стороннем модуле можно определить форматтер для какого-либо модуля, то подскажите, пожалуйста.
будет, по крайней мере должно.
Насчет форматтера, все верно, вам нужно вот эти два хука hook_field_formatter_view() и hook_field_formatter_info()
<?php
function mymodule_field_formatter_info() {
return array(
'label' => t('my label'),
'field_types' => array('commerce_price')
);
}
function mymodule_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
// копируете код из commerce_price для форматтера, который у вас основной.
// добавляете проверку валюты и для рубля выводите измененное поле.
}
?>
так все будет работать, и не надо патчить commerce_price. Форматтер можно определить для любого поля, не обязательно для того, которое реализовано в модуле