Использование в блоке PHP переменных, которые определяются в шаблоне страницы

Главные вкладки

Аватар пользователя Quty Quty 18 января 2015 в 18:19

Здравствуйте.
Столкнулся с задачей, к которой не могу подобрать нормальное название, чтобы нагуглить. ((

В шаблоне страниц выполняется PHP код, который записывает в переменную $var определённое значение. Эта переменная используется для построения самого шаблона. С этим никаких проблем.

Вопрос в том, как это значение передать в блок, чтобы в содержании блока я смог использовать эту переменную? В содержании блока эта переменная не видна (( А значение этой переменной требуется, чтобы в содержании блока вывести разный результат.

Также на всякий случай уточню, что у разных пользователей значение этой переменной может быть разным. Значение генерируется скриптом в шаблоне страницы в зависимости от данных пользователя.

Заранее благодарен за любую помощь.

Комментарии

Аватар пользователя Orion76 Orion76 18 января 2015 в 18:43

http://www.php.su/learnphp/vars/?statvars

в template.php

<?php

function MYTHEME_set_myvar($var=NULL){
  static 
$myvar;
  if(!
is_null($var)){
   
$myvar=$var
  }
  return 
$myvar;
}
?>

В шаблоне страницы вызываете эту функцию передавая в параметре свою переменную.
В шаблоне блока эта функция без параметра вернет вам вашу переменную.

Аватар пользователя Quty Quty 18 января 2015 в 19:15

orion76 wrote:
http://www.php.su/learnphp/vars/?statvars

в template.php

<?php

function MYTHEME_set_myvar($var=NULL){
  static 
$myvar;
  if(!
is_null($var)){
   
$myvar=$var
  }
  return 
$myvar;
}
?>

В шаблоне страницы вызываете эту функцию передавая в параметре свою переменную.
В шаблоне блока эта функция без параметра вернет вам вашу переменную.

Не уверен, что это сработает.
Тонкость в том, что значение нужно вывести именно в СОДЕРЖАНИЕ блока, а не в шаблоне.

Скорее всего в шаблоне блока переменная будет видна напрямую и без обёртывания в эту функцию, раз функция будет работать.

Аватар пользователя Quty Quty 18 января 2015 в 20:46

Lotar wrote:
формат ввода PHP придуман как раз для подобных случаев

Это никак не относится к вопросу. В блоке включён формат с поддержкой PHP. В блоке работает PHP. Но в содержании блока невозможно получить значение переменной, которая определена в шаблоне страницы. Область видимости у той переменной не распространяется на содержание блока.

Аватар пользователя Quty Quty 20 января 2015 в 20:29

orion76 wrote:
"Quty" wrote:
Не уверен, что это сработает.

А Вы попробуйте-)

Добрый вечер. Столкнулся с тем, что не могу вызвать эту функцию в блоке. Оказалось, что вообще никакую функцию не получается вызвать. При попытке вызвать любую функцию в блоке сайт ломается и передо мной белый экран.

Нагуглил единственное упоминание подобной проблемы - http://drupal.stackexchange.com/questions/118041/how-to-add-functions-in...

Но ответа там нет толкового. Отсылают к обработке проблемы белого экрана, но там нет никакой связи с возможностью вызова функции в блоках и связанных.

Подскажите, пожалуйста, в чём может быть проблема.
При возникновении этой ошибки в Журнале не появляется запись, а исходный код страницы при этом содержит только стандартную заготовку + содержание блока, которое есть в блоке ДО вызова функции.

Повторюсь, что проблема с любой функцией, а не только с описанной Вами ((

Аватар пользователя Quty Quty 20 января 2015 в 21:02

orion76 wrote:
код покажите, который в блоке выполняется..

Сейчас перепроверил - если функция объявлена в самом содержимом блока, то всё в порядке. То есть следующий код выполняется:

<?php
function hello() { echo "hello"; }
hello();
?>

----
Вызов функции rdtheme_set_myvar(), которая объявлена в шаблоне страницы (или вызов несуществующей функции) приводит к белому экрану. Никаких ошибок. Просто белый экран.

function rdtheme_set_myvar($var=NULL){
static $myvar;
if(!is_null($var)){
$myvar=$var;
}
return $myvar;
}

---------
Результат аналогичный на всех сайтах.

Аватар пользователя Orion76 Orion76 20 января 2015 в 21:47

Функция должна объявляться не в шаблоне, а как минимум в template.php
В шаблоне она только вызывается с параметром.

шаблон точно - шаблон страницы? (page.tpl.php)

на всякий случай проверьте последовательность "вызова" шаблонов.
В шаблоне страницы watchdog('my','page');
В шаблоне блока watchdog('my','block');

В журнале друпал проверьте очередность выведенных сообщений.

Аватар пользователя drupby drupby 20 января 2015 в 22:02

что то мне подсказывает, что пытаетесь собрать велосипед из костылей, лучше распишите подробно свою задачу, что конкретно нужно сделать и потом уже подскажут, как правильно реализовать