Задача
Настроить удобное управление анонсами статей.
Решение
Варианты
- Использовать стандартное средство Друпал: <!--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.
Вывод
Использование модуля meta tags нужно для поисковой оптимизации, поэтому рано или поздно нужно будет решать вопрос интеграции с модулями создания анонсов. Лучше это сделать сразу!











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