Вопрос с внедрением функции в ноду типа PHP-code

8 июля 2014 в 12:23
Аватар пользователя choy choy 0 11

Есть насущная потребность вставить в ноду выполнение php-функции.
Тип материала ноды — PHP code.

Если написать прямо в ноде код

<?php
print (get_id("1"));
function get_id($id){
   return ($id);
}
?>

…то Всё отлично работает.

Если же изъять эту функцию из ноды и переместить её в template.php, оставив в ноде только

<?php
print (get_id("1"));
?>

…то вместо ноды (и вообще сайта) выдаётся белая страница.

В чём может быть дело?

Комментарии

Функции в template оформляются миллионом способов. В этом его, template, без сомнения, огромный плюс. Но весь интернет прочитать нельзя. Если вас не затруднит, ткните меня носом, в то, что вы имеете в виду. Я именно для этого сюда и написал.

8 июля 2014 в 15:09

"ХулиGUN" wrote:
Как раз-таки наоборот, либо в темлей, либо в своём модуле... А то потом просто охереваешь от таких кастомизаторов с определением методов в шаблонах

Дак я хз, чо за функция ему там нужна была. Ясно если это от модуля, пихаем в модуль, от темы в тему (ну чтобы понятнее было). А если ему забубенить калькулятор для определенной странице надо? В темплей лезть?

8 июля 2014 в 20:33

ХулиGUN wrote:
"whiesam" wrote:
А если ему забубенить калькулятор для определенной странице надо? В темплей лезть?

Да

Ну вот в template.php я и полез, и функция, которая в пределах ноды отлично работает, там работать не желает, а выдаёт белую страницу. Что не так?

Функция, если что, нужна чтобы выводить html-строку, находящуюся в зависимости от входной переменной.

9 июля 2014 в 10:16

ХулиGUN wrote:
"choy" wrote:
находящуюся в зависимости от входной переменной

А переменная откуда берётся?
preproccess_node() - определите свою "строку" и выводите в шаблоне как хотите

переменная берётся из строки, вызывающей функцию:
в ноде будет как-то так:

<?php
print (имяфункции("переменная"))
?>

попробую preproccess_node(), спасибо

9 июля 2014 в 13:34

нужно не фунцию внедрять в ноду, а создать в препроцессе переменную и в нее записать возвращаемое значение функции, а затем эту переменную выводить в шаблоне ноды(node.tpl.php)
вот вам ядерный препроцесс ноды template_preprocess_node()
в template.php создаете препроцесс-функцию для ноды ИМЯТЕМЫ_preprocess_node() по аналогии с template_preprocess_node()

9 июля 2014 в 12:22

drupby wrote:
нужно не фунцию внедрять в ноду, а создать в препроцессе переменную и в нее записать возвращаемое значение функции, а затем эту переменную выводить в шаблоне ноды(node.tpl.php)
вот вам ядерный препроцесс ноды template_preprocess_node()
в template.php создаете препроцесс-функцию для ноды ИМЯТЕМЫ_preprocess_node() по аналогии с template_preprocess_node()

Подскажите, мне нужно, чтобы моя функция отрабатывла только в нодах. Я в template.php вставляю код
function моятема_preprocess_node($namespace, $path, $alt = '', $title = '', $attributes = NULL) {
$node = node_load(array('nid' => arg(1)));
if (is_null($attributes)) {
$attributes['class'] = 'imagecache imagecache-'. $namespace;
}
$attributes = drupal_attributes($attributes);
$imagecache_url = imagecache_create_url($namespace, $path);

if ($node) {
$alt=$node->title;
$title=$node->title;
}
return ''. check_plain($alt) .'';
}

И НИЧЕГО. Ткните носом что я делаю не так
З.Ы. Не могу нормально вставить здесь код

21 января 2015 в 15:21

"Docent" wrote:
И НИЧЕГО.

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

21 января 2015 в 15:59

Я переходил и смотрел, но поскольку я в коде, мягко говоря, не очень, то мне это ничего не дало. У меня задача заполнить alt и title в ноде. Именно только в ноде. Если у Вас есть возможность подсказать-буду очень благодарен или есть только желание тыкнуть носом не дав ответа..?
При добавлении данной функции в template - она отрабатывает на всех страницах, а мне нужно только в ноде

21 января 2015 в 18:22