Создание анонса статьи

29 Май 2008
Опубликовано VladSavitsky

Задача

Настроить удобное управление анонсами статей.

Решение

Варианты

  • Использовать стандартное средство Друпал: <!--break-->
  • Использовать модуль nodeteaser
  • Использовать модуль Content Templates

Использовать стандартное средство Друпал: <!--break-->

В этом случае можно настроить длину анонса. Текст анонса хранится в node_revisions.teaser
Модуль meta tags будет заполнять тег description страницы текстом анонса, если ничего не задано при редактировании статьи.

Если тег <!--break--> не найдет в тексте статьи, то для будет браться количество символов ("Длина усеченных материалов"), которое указано на странице

  • Друпал5: "Публикация" (admin/content/node-settings)
  • Друпал6: "Публикация" (admin/content/node-settings)

Максимальное число знаков в усеченной версии материала. Drupal использует эту настройку, чтобы отрезать определенное количество знаков в начале текста для усеченного варианта, который обычно используется как анонс основной страницы, XML-лент и т.п. Для отключения анонсов, установите 'Неограничено'. Обратите внимание, что это изменение будет касаться только новых или обновленных материалов и не повлияет на существующие анонсы.

Использовать модуль nodeteaser

Модуль предоставляет возможность при изменении документа задавать анонс отдельно от текста статьи.
Нет интеграции с модулем meta tags и тег description не будет по-умолчанию заполяться анонсом, так как модуль хранит свой анонс в отдельной таблице базы данных.

Для использования анонса, который создаёт этот модуль нужно в файле /sites/all/modules/nodewords/metatags/description.inc изменить (хакнуть) функцию, чтобы она имела такой вид:

 
function nodewords_description_prepare($type, $ids, $value, $settings) {
  if ((!isset($value) || empty($value)) && $settings['use_teaser'] && count($ids) == 1) {
    switch ($type) {
      case 'node':
        $node = node_load($ids[0]);
        if ($node && node_access('view', $node)) {
          // HACK: see http://drupal.org/node/79315 (can't use php functions in
          // body of nodes). Note that this still won't work if you have a
          // CCK field with PHP format.
          if (filter_format_allowcache($node->format)) {
            // We would like to use node_view($node, TRUE, FALSE), unfortunately
            // this uses theme_node() which, by default, adds 'Posted by ...'
            // information (which we don't want). The code below calls all
            // functions node_view() does, without the theme.
            $node = node_build_content($node, TRUE, FALSE);
            $content = drupal_render($node->content);
            $node->teaser = $content;
            node_invoke_nodeapi($node, 'alter', TRUE, FALSE);
            $value = $node->teaser;
          }
// Start of hack
          elseif ($node->format!=2) {//Not PHP filter format
            $node = node_build_content($node, TRUE, FALSE);
            $content = drupal_render($node->content);
            $node->teaser = $content;
            node_invoke_nodeapi($node, 'alter', TRUE, FALSE);
            $value = $node->teaser;
          }
// End of hack
        }
        break;

      case 'term':
        // TODO: probably we have to do a db_rewrite_sql() query here so access is restricted
        $term = taxonomy_get_term($ids[0]);
        if ($term) {
          $value = $term->description;
        }
        break;
      case 'vocabulary':
        // TODO: probably we have to do a db_rewrite_sql() query here so access is restricted
        $voc = taxonomy_get_vocabulary($ids[0]);
        if ($voc) {
          $value = $voc->description;
        }
        break;
    }
  }
  return $value;
}

Использовать модуль Content Templates

Модуль совместим с meta tags и анонс будет использоваться для заполнения descriptions, если это указано в настройках модуля meta tags.

Описание модуля contemplate

Вывод

Использование модуля meta tags нужно для поисковой оптимизации, поэтому рано или поздно нужно будет решать вопрос интеграции с модулями создания анонсов. Лучше это сделать сразу!

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

Комментарии

вопрос. при использовании break текст режется не там где надо, а после пропуска еще примерно одного абзаца. редактор tinimce. где это можно починить?

SHTRLZ2 | Июн 23rd, 2008 в 4:37 после полудня

Судя по всему тег разрыва не учитывается и анонс определяется согласно системных настроек.
Убедитесь, что тег разрыва не вырезается форматом ввода.
Убедитесь, что правильно настроена последовательность фильтров в формате ввода.
Попробуйте поставить формат ввода: Полный HTML.
Обратите внимание:
- анонс формируется ТОЛЬКО при сохранении статьи.
- тег разрыва не содержит пробелов возле угловых скобок как в статье - они были добавлены, чтобы их было видно на странице.

VladSavitsky | Июн 24th, 2008 в 11:25 утра
 
 
 

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

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

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

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