В Template.php Задаю переменную примерно так:
function MYTHEME_preprocess_node(&$variables) {
if ($variables['node']->nid == 17) {
$variables['test'] = 'test';
}
}
Из шаблона ноды переменная доступна. Но у меня нода использует формат текста php code, и из него эта переменная не доступна. А переменную нужно вставить в текст.
Как сделать переменную доступной из php code? И желательно чтобы функция создающая эту переменную была доступна только для этой ноды, т.к. она довольно медленная.
Версия Drupal:
7.xКатегория:
Theming
Вопрос задан 03.12.2016 - 11:42
Ответы
Если задача стоит в том, чтобы в тексте содержимого ноды выводить результат какой-то функции, то вот есть неплохой способ.
http://xandeadx.ru/blog/drupal/897
И, кстати, для него не требуется формат php code.
Если же значение функции вычисляется довольно долго, то может быть, его можно каким-то образом кешировать ? Или хотя бы кешировать на какое-то время ?
Ответ дан 03.12.2016 - 12:11
Спасибо за подсказку. Попробовал модулем token_filter, но сходу не нашел способ подставить им свою переменную. Покопаюсь еще с ним.
Либо можно вот так.
Оставляете php-filter и просто в тексте ноды, где нужно, вызываете функцию
Я так уже пробовал. Саму функцию написал вначале текста и потом вызывал ее из нужного участка текста. Но антивирус на сервере ругается, т.к. эта функция обращается к стороннему сервису. Эта функция определяет город посетителя по IP, через http://ipgeobase.ru.
Сделал способом по ссылке. Спасибо за наводку.
Если город по IP или некие другие обращения к стороннему серверу, то может быть, такие дела лучше кешировать через свою таблицу ?
Если не каждый адрес, то, может, реально диапазон IP как-то получать и кешировать ?
Можно и через куки тогда, еще проще. Но на мой взгляд это лишено смысла, т.к. город нужно подставлять только на одной странице.