Получить форматированный текст анонса

09 Авг 2008
Опубликовано VladSavitsky

Решение

Drupal 5

В этой версии текст анонса является переменной объекта $node:

echo $node->teaser;

Drupal 6

В D6 объект $node не содержит переменной, которая хранит текст анонса, потому что поменялся механизм анонсов.

В то время, когда шаблон получает данные ноды, существуют только $body и $content. $content содержит только анонс (при просмотре списка статей) или текст ноды (для полного просмотра). Анонс никогда не создаётся в виде отдельной переменной при просмотре полного текста ноды.

Для решения этой проблемы используется имя_темы_preprocess_node(), чтобы определить был ли анонс задан вручную и ВЫКЛЮЧЕН ли параметр "Показать анонс при полном просмотре". Когда этот включено "Показать анонс при полном просмотре", Друпал автоматически добавляет анонс в $body (или $content) ноды - это выглядит как вступление к статье, а не вывод того, что вы читаете:

function phptemplate_preprocess_node(&$variables) {
  if ($variables['page'] == TRUE) {
    $node = node_load($variables['nid']);
    if (strpos($node->body, '<! --break-- >') === 0) {//Убрать пробелы
      $variables['style_teaser_differently'] = TRUE;
      $variables['only_teaser'] = check_markup($node->teaser, $node->format, FALSE);
    }
  }
}

Обратите внимание:
Нода уже была загружена раньше и node_load() вернёт кешированную версию.

Вывод в node.tpl.php

<?php if ($style_teaser_differently) { ?>
  <div class="node-summary"><?php print $only_teaser; ?></div>
<?php } ?>

Обратите внимание:
Нужно очистить кеш на странице "Производительность" (admin/settings/performance) - иначе изменения в template.php не будут видны...

Полезные рецепты по этой теме

Использованные материалы

Полезные материалы

Авторы решений:
Версия Drupal:
 
 
 

RSS-лента новостей

Dries Buytaert по-русски
]]>Русский поиск Drupal]]>

Перенос сайта из Joomla в Drupal
Перенос сайта из WordPress в Drupal

]]> Drupal - это бесплатная система управления контентом с открытым исходным кодом ]]>