Вы здесь

Как из PHP filter достать переменную?

0

В 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

Ответы

1

Если задача стоит в том, чтобы в тексте содержимого ноды выводить результат какой-то функции, то вот есть неплохой способ.
http://xandeadx.ru/blog/drupal/897
И, кстати, для него не требуется формат php code.

Если же значение функции вычисляется довольно долго, то может быть, его можно каким-то образом кешировать ? Или хотя бы кешировать на какое-то время ?

Ответ дан 03.12.2016 - 12:11

Спасибо за подсказку. Попробовал модулем token_filter, но сходу не нашел способ подставить им свою переменную. Покопаюсь еще с ним.

Комментарий оставлен 03.12.2016 - 13:43

Либо можно вот так.

Оставляете php-filter и просто в тексте ноды, где нужно, вызываете функцию

<?php print my_function(); ?>
Комментарий оставлен 03.12.2016 - 14:13

Я так уже пробовал. Саму функцию написал вначале текста и потом вызывал ее из нужного участка текста. Но антивирус на сервере ругается, т.к. эта функция обращается к стороннему сервису. Эта функция определяет город посетителя по IP, через http://ipgeobase.ru.

Комментарий оставлен 04.12.2016 - 11:14

Сделал способом по ссылке. Спасибо за наводку.

Комментарий оставлен 04.12.2016 - 12:14

Если город по IP или некие другие обращения к стороннему серверу, то может быть, такие дела лучше кешировать через свою таблицу ?
Если не каждый адрес, то, может, реально диапазон IP как-то получать и кешировать ?

Комментарий оставлен 04.12.2016 - 12:50

Можно и через куки тогда, еще проще. Но на мой взгляд это лишено смысла, т.к. город нужно подставлять только на одной странице.

Комментарий оставлен 04.12.2016 - 19:04