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


Я застрял на получении пользовательской функции 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;
}}
 3
Author: Community, 2013-08-28

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, было бы лучше придерживаться соглашения и использовать этот метод.

 3
Author: Clive, 2013-08-28 16:46:20