Объект пользовательского модуля Drupal не доступен из PHP-тегов GUI - PullRequest
1 голос
/ 15 октября 2010

Итак, я создал собственный модуль для Drupal 6.x, и он работает так, как я вижу желаемые результаты на странице page.tpl.php, но когда я редактирую страницу из графического интерфейса пользователя (это позволяет использовать теги php),объект недоступен.

Я могу установить значения в СЕССИИ, к которым я могу получить доступ через графический интерфейс, а также из модуля, но это правильный способ сделать это?

Вотя получаю сообщение об ошибке:

Fatal error: Call to a member function getEmail() on a non-object in /var/www/domain/includes/common.inc(1695) : eval()'d code on line 221

Call Stack
#   Time    Memory  Function    Location
1   0.0003  64108   {main}( )   ../index.php:0
2   0.0965  11659504    menu_execute_active_handler( )  ../index.php:18
3   0.1040  12626908    call_user_func_array ( )    ../menu.inc:348
4   0.1040  12627316    node_page_view( )   ../menu.inc:0
5   0.1040  12627532    node_show( )    ../node.module:1797
6   0.1040  12627848    node_view( )    ../node.module:1101
7   0.1040  12628192    node_build_content( )   ../node.module:1006
8   0.1041  12648832    node_prepare( ) ../node.module:1085
9   0.1041  12649112    check_markup( ) ../node.module:1041
10  0.1047  12671980    module_invoke( )    ../filter.module:457
11  0.1047  12693240    call_user_func_array ( )    ../module.inc:462
12  0.1047  12693900    php_filter( )   ../module.inc:0
13  0.1048  12694164    drupal_eval( )  ../php.module:82
14  0.1059  12883728    eval( ''?>

getEmail () - это функция в классе, которая находится в моем пользовательском модуле.Я могу назвать его из page.tpl.php просто отлично, так почему я не могу вызвать его со страницы, которую я редактировал в GUI администратора?

РЕДАКТИРОВАТЬ:

Добавление кодаиз модуля:

//wrapperFunction() is calling the class and setting the values
// this is just a getter/setter class w/ 1 function that formats a phone number, nothing special
$custom = new CustomObj(); 
$custom->setEmail('blah@blah,com');

return $custom;

page.tpl.php

// calls the wrapper function and returns the object
$custom_obj = wrapperFunction();
echo $custom_obj->getEmail(); // this prints the email just fine

Редактирование страницы через GUI администратора (разрешает использование тегов PHP) Добавление этого кода на страницу

<?php echo $custom_obj->getEmail(); ?> // throws the error

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

Ответы [ 2 ]

1 голос
/ 16 октября 2010

Вы должны попробовать поместить фрагмент

// calls the wrapper function and returns the object
$custom_obj = wrapperFunction();
echo $custom_obj->getEmail(); // this prints the email just fine

в node.tpl.php вместо page.tpl.php.node.tpl.php выполняется до page.tpl.php, поэтому ваша ошибка возникает из-за того, что $ custom_obj не существует, поскольку он создается только в page.tpl.php (путем вызова wrapperFunction (), который выполняет new).

[Я не знаю, чего именно вы пытаетесь достичь.Как правило, плохая идея иметь какую-либо бизнес-логику в ваших tpl-файлах, которые у вас, похоже, есть здесь ...]

0 голосов
/ 18 октября 2010

Ну, чтобы решить мою проблему, я перенес всю логику в модуль и поля, которые я хотел изменить, на лету я установил для сеанса.поэтому на странице page.tpl.php я проверил, было ли установлено значение SESSION, если оно использовалось, то еще используем значение по умолчанию.Используя SESSION, я смог передать все нужные значения на любую страницу независимо от того, где была создана страница (с графическим интерфейсом пользователя или жестким кодом).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...