Каким образом добавить динамическое содержимое в node?

Аватар пользователя roman-ivannikov roman-ivannikov 9 августа в 19:34

Камрады, привет!
Каким образом добавить динамическое содержимое в node?

Исходные данные.
Drupal 7. Модули Domain Access, Taxonomy. В Таксономии - города.
Задача. На определенных нодах добавить динамическое содержимое.

Что пробовал.
Через редактирование ноды добавлял в нее php-код, в котором брал значение из глобального массива _SESSION.
Описываю действия:
Выбираю город, перехожу на соответствующий домен, открываю ноду. Значение из глобального массива - ОК.
Меняю город, соответственно открывается эта же нода, но на другом поддомене. Но динамическое содержимое остается с прошлой сессии. Помогает только ctrl+f5.
Я так понимаю, что при смене поддомена содержимое ноды берется из кэша.

Как мне решить поставленную задачу - для разных поддоменов на ноде выводить разную информацию?
Подскажите, пожалуйста, в какую сторону начать "копать"?

0 Thanks

Комментарии

Аватар пользователя Semantics Semantics 9 августа в 20:25
1

Странный кейс.

Во-первых, я не уверен, что сессия ребилдится при смене домена или как у вас вообще меняется там значение.
Во-вторых, CTRL+F5 вы кеш друпала не сбросите никакой.

Ставьте более точно задачу

Аватар пользователя gun_dose gun_dose 9 августа в 22:30
1

Во-первых, объясните, что за динамическое содержимое, возможно, хватит вьюса с контекстным фильтром.
Во-вторых, лучше писать не в сессию, а в куки.

Аватар пользователя Mnilionic Mnilionic 10 августа в 0:51
1

Ну или вообще получать "динамическое содержимое " с помощью java script. И не придётся ломать кеш сервера, кеш сущностей, кеш браузеров, прокси, шмокси и тд :)

Аватар пользователя roman-ivannikov roman-ivannikov 21 августа в 12:23

Камрады, привет! Извините за долгое отсутствие.
Вопрос маленько изменю, так как в некоторых вещах пришло понимание, но над одной "странностью" сломал голову.
И так. Исходные данные не изменились: Drupal 7. Модули Domain Access, Taxonomy. В Таксономии - города.
Города выбираются из Представления (каждый город в виде гиперссылки со своим параметром). После выбора города происходит переход на соответствующий поддомен.

Весь "хоровод" вертится вокруг глобального массива _SESSION. Так было сделано изначально и сейчас пока не время это менять.

Что и как динамически формируется:
1. Title. Формируется в шаблоне html.tmp.php. Берется значение элемента из глобального массива (далее - _SESSION['city']).
2. Description. Формируется через хук basic_html_head_alter основной темы в файле tempate.php. Также используется _SESSION['city'].
3. _SESSION['city'] обретает значение в файле модуля .module в двух функциях _boot() и _page_alter(). В первой функции глобальное значение берется после определения ip посетителя страницы. Во второй функции глобальное значение заполняется из таксаномии в зависимости от домена. Здесь динамически формируется кусок страницы блока в шапке. Формируется нормально с нужным названием города.
4. В блоке в регионе footer вставил php-код для вывода _SESSION['city']. И вот здесь появилась странность.

Если выбрать город из списка, то все хорошо. И в Title, и в Description, и в подвале подставляется одно и тоже значение.
Но, если перейти на нужный поддомен через адресную строку, то в Title и Description значение будет верным, то есть соответствовать поддомену, а вот в Подвале значение будет из прошлого сеанса.
Например, в браузере с почищенными куками или в безопасном режиме захожу на домен или поддомен, то в Title и Description значение соответствуют городу, а в подвале значение пустое. Если перейти на поддомен через список городов, то значение _SESSION['city'] верное во всех местах. И если тут же набрать в адресной строке любой другой поддомен, то в подвале будет значение из предыдущего сеанса.

Вопрос. Куда мне начать смотреть? Почему так происходит?

Аватар пользователя Mnilionic Mnilionic 21 августа в 12:37

Зачем? Я так понимаю каждому городу свой поддомен? Почему не использовать поддомен чтоб получить текущий город?

Аватар пользователя roman-ivannikov roman-ivannikov 21 августа в 13:16
Mnilionic wrote:

Зачем? Я так понимаю каждому городу свой поддомен? Почему не использовать поддомен чтоб получить текущий город?

Что именно зачем?
В принципе по поддомену и выбирается город, он и заносится в глобальную переменную. Или Вы имели в виду зачем он туда заносится?
То есть, например, сделать функцию, возвращающую название города по поддомену и вызывать ее в тех местах где надо?

Аватар пользователя Mnilionic Mnilionic 21 августа в 13:29
1

То есть, например, сделать функцию, возвращающую название города по поддомену и вызывать ее в тех местах где надо?

Ну, да. Зачем этот огород с сессиями?

function mymodule_current_cityname(){
  static $name;
  if (!$name){
    $name = 'получаете имя';
  }
  return $name;
}
Аватар пользователя roman-ivannikov roman-ivannikov 21 августа в 21:07
Mnilionic wrote:

Ну, да. Зачем этот огород с сессиями?

Ну да! Это логично и правильно с точки зрения программирования.
Но, с другой стороны получается, что функция будет вызваться по несколько раз на одной и той же странице. Не проще вызвать ее один раз при формировании страницы, запомнить город в глобальной переменной и пользоваться ей?
Осталось понять где это место - "при формировании страницы".

Аватар пользователя Mnilionic Mnilionic 22 августа в 1:53
1

Как думаете для чего возле переменной стоит ключевое слово static?
С точки зрения программирования, мы именно программированием и занимаемся.
Даже если допустить, что вам нужна глобальная переменная... Но сессия то вам зачем?

Аватар пользователя roman-ivannikov roman-ivannikov 22 августа в 14:39
Mnilionic wrote:

Как думаете для чего возле переменной стоит ключевое слово static?
С точки зрения программирования, мы именно программированием и занимаемся.
Даже если допустить, что вам нужна глобальная переменная... Но сессия то вам зачем?

Понятно. Не теряем значение переменной после выхода из функции.
А подскажите, откуда правильнее осуществлять то самый единственный вызов функции?
На счет зачем сессия. Я не знаю, судя по обсуждениям - она не нужна. Так же как и глобальная переменная.
Но, мне кажется, была задумка брать информацию из куков, чтобы открывать пользователю тот домен, на котором он был в последнем сеансе.

Аватар пользователя Mnilionic Mnilionic 22 августа в 19:54
1

Определять предпочтительный город/поддомен и выводить текущий город - это разные задачи, разные функции.
Определять предпочтение надо как можно раньше (в инициализиции, в миддлварах где-нить), чтоб в случае чего редиректнуть на желаемый домен. А получить имя текущего города - это уже что-то где-то возле вьюсов и шаблонов.

Аватар пользователя roman-ivannikov roman-ivannikov 23 августа в 9:14
Mnilionic wrote:

Определять предпочтительный город/поддомен и выводить текущий город - это разные задачи, разные функции.
Определять предпочтение надо как можно раньше (в инициализиции, в миддлварах где-нить), чтоб в случае чего редиректнуть на желаемый домен. А получить имя текущего города - это уже что-то где-то возле вьюсов и шаблонов.

Уважаемый камрад.
Не могли бы Вы дать мне ссылку (или ссылки) на материал, что бы почитать про " ... в инициализиции, в миддлварах где-нить ..."?
Например, ранее попытался найти что-нибудь про хук _boot(), упомянутый в посте. Не нашел. Я понимаю, что, скорей всего, плохо искал, но факт остается фактом. Поэтому сразу прошу ссылку на ресурс, тем более, я уверен, Вы намного лучше ориентируетесь в материалах по drupal.
Благодарю.

Аватар пользователя roman-ivannikov roman-ivannikov Сегодня в 7:06
Mnilionic wrote:

https://api.drupal.org/api/drupal/modules%21system%21system.api.php/func...

Камрад, благодарю.
Не могли бы Вы помочь мне разобраться еще в одном вопросе, связанным с темой.
Я уже эту ситуацию описывал. Опишу еще раз.
Значение глобальной переменной использовалось в нескольких местах:
1. Шаблон html.tmp.php;
2. В tempate.php в функции basic_html_head_alter. Basic - название основной темы;
3. В файле модуля в функции page_alter();
4. В одно из блоков в регионе Подвал в php-коде.

Почему значение этой глобальной переменной в местах из пунктов 1-3 отличается от значения в месте из пункта 4? В какой последовательности происходит формирование страниц?