Не удается заставить функцию узла предварительной обработки переопределять элементы
Я застрял на получении пользовательской функции preprocess_node для работы в установке Drupal 6. Я могу заставить его повторять вещи, основанные на ценностях, но я просто не могу заставить переопределения работать. Последнее, что я попробовал, - это ответ, описанный в ответе на этой странице. Если я сделаю:
$node->title = "Test";
И сделайте print_r на узле $ Я вижу, что он переопределен в массиве новым значением, но выводимый заголовок по-прежнему остается старым. Я также попытался установить переменные $[название], но безуспешно. На самом деле я пытаюсь нацелиться на что-то более глубокое, чем название, но подумал, что начну с этого. Вот пример, который я попытался привести в template.php файл. Я заменил свое настоящее название темы на мифическое имя.
function mythemename_preprocess_node(&$variables) {
//Profiles
if($variables['type'] == "child_profile"){
$node = $variables['node'];
$node->title = "Test";
//This echo correctly shows the new title but it's not actually overriding anything
echo $node->title;
$variables['node']=$node;
}}
1 answers
Если вы посмотрите на node.tpl.php , заголовок печатается следующим образом:
<?php if (!$page): ?>
<h2><a href="<?php print $node_url ?>" title="<?php print $title ?>"><?php print $title ?></a></h2>
<?php endif; ?>
Как вы можете видеть, это использует переменную $title
, а не $node->title
.
Существует взаимно однозначное сопоставление между ключами массива переменных шаблона и именами переменных, доступных в файле шаблона. Если у вас есть $variables['my_awesome_var']
в функции предварительной обработки, эта переменная будет доступна как $my_awesome_var
в файле шаблона.
Итак, имея это в виду, все, что вам нужно сделать в вашем функция предварительной обработки такова:
function mythemename_preprocess_node(&$variables) {
//Profiles
if ($variables['type'] == "child_profile") {
$variables['title'] = 'Test';
}
}
Чтобы завершить мысль - вы также можете изменить шаблон узла на print $node->title
вместо этого, и ваш текущий код будет работать нормально. Но поскольку исходный файл шаблона использует отдельную переменную $title
, было бы лучше придерживаться соглашения и использовать этот метод.