Как отобразить сводку (тизер) над телом в полноэкранном режиме

11

Я хочу отобразить тизер в верхней части каждой статьи под заголовком, как показано в следующем макете «полный контент»:

  1. заглавие
  2. Тизер (реферат статьи)
  3. Образ
  4. тело

Кроме того, тизер должен иметь свое собственное форматирование (например, курсив и больший шрифт)

Я не нашел способа сделать это без редактирования файлов TPL или файлов ядра.

Решением было бы добавить новое поле «article_teaser» для моего типа контента, а затем управлять отображением, чтобы получить мой макет в представлении «Полный контент». Это работает, но мне не нравится иметь два тизера-поля в форме ввода контента, потому что я должен набирать два раза один и тот же текст.

Кажется, я не могу разделить тело поля на части «текст» и «сводка», но я могу отображать только одну или другую, но не обе!

Есть ли способ (модуль?) Сделать это?

(Моя среда: Drupal 7 с подтемой Zen.)

Гинго
источник

Ответы:

10

Вы можете сделать это с помощью Views. Создайте представление, которое переопределяет пути для вашего типа контента. Установите отображение на Поля и затем добавьте поле тела дважды; установите первый экземпляр для отображения тизера и второй экземпляр для отображения тела. Вы можете добавить изображения между ними. Представления также позволяют легко настраивать CSS полей тизера / тела (по умолчанию в представлениях предусмотрено несколько классов, и при необходимости можно добавить дополнительные классы).

Для справки: Node Одна серия видео-скринкастов по использованию Views

Патрик Кенни
источник
Большое спасибо. Ссылка очень полезна, и я много узнаю о представлениях: я получил представление, которое сделало вещи. Но представления отображают список узлов, в то время как мой тип контента (страница книги) представляет собой одну страницу: как я могу переопределить одну страницу книги (узел) списком узлов (представление, которое я создал)? Я, вероятно, что-то упускаю из представлений, возможно, как переопределить страницу книги по умолчанию своей собственной.
Джинго
@gingo Чтобы переопределить все страницы книги, вам нужно настроить путь просмотра особым образом. Для примера посмотрите на представление термина Таксономия , которое предоставляется представлениями по умолчанию (отключено). Путь установлен в /taxonomy/term/%; если вы отредактируете это представление, вы увидите, как используются аргументы (контекстные фильтры), чтобы позволить вам редактировать отображение терминов таксономии. Вы можете установить нечто подобное для страниц книги на вашем сайте.
Патрик Кенни
ну, я должен смотреть глубже в контекстных фильтрах, но я думаю, что я на правильном пути. Спасибо.
Гинго,
3

Представления могут определенно сделать работу. Но я думаю, что это немного излишне для этого требования.

Другой способ добиться этого - реализовать hook_field_extra_fields () и hook_node_view () в вашем пользовательском модуле.

/**
 * Implements hook_field_extra_fields().
 */
function mymodule_field_extra_fields() {
  // Put the content type you want to display summary field here.
  $content_type = 'page';

  $extra['node'][$content_type]['display']['body_summary'] = array(
    'label' => t('Body summary'),
    'description' => t('Display body summary.'),
    'weight' => 0,
  );

  return $extra;
}

/**
 * Implements hook_node_view().
 */
function mymodule_node_view($node, $view_mode, $langcode) {
  // Put the content type you want to display summary field here.
  $content_type = 'page';

  if ($node->type == $content_type) {
    $summary = field_view_field('node', $node, 'body', array(
      'type' => 'text_summary_or_trimmed',
    ));

    $node->content['body_summary'] = array(
      '#markup' => $summary,
      '#weight' => 0,  
    );
  }
}

Очистите кеш, и вы можете перейти к настройкам типа содержимого «Управление отображением», чтобы перетащить их в поле «Сводка тела». Например admin/structure/types/manage/page/display.

eric.chenchao
источник
Хм, я думаю, что это близко, но содержимое поля не отображается, просто Array.
Арджан
Эй, @arjan, ты проверил данные массива и скопировал их сюда, пожалуйста?
eric.chenchao
Какой смысл создавать переменную, на 1 строку выше единственного места, где она используется, просто поместите строку в оператор if
Kiee
Привет @ Ки, ты прав. Но этот фрагмент используется в качестве примера с комментарием;)
eric.chenchao
3

на друпале 7:

В поле «Тело» вы можете использовать «переписать результат» и использовать в «шаблонах замены» это:

[body-summary]

и это будет отображать полное резюме.

Хавьер Эдуардо
источник
Вы - гений Хавьер, все остальные объяснения излишни, ваше самое лучшее, безусловно, и оооочень простое!
Бруно Винсент
0

Для переопределения типов контента вам нужно взглянуть на Панели, потому что одна из функций Панелей точно переопределяет базовый вид определенных типов контента (или информации, основанной на других критериях выбора). Csaba

Чаба
источник
0

Как заметил Арджан, фрагмент кода Cityreader дает результат, но он не отображается должным образом.

Этот вариант работал для меня:

 /**
 * Implements hook_field_extra_fields().
 */
function mymodule_field_extra_fields() {
  // Put the content type you want to display summary field here.
  $content_type = 'page';

  $extra['node'][$content_type]['display']['body_summary'] = array(
    'label' => t('Body summary'),
    'description' => t('Display body summary.'),
    'weight' => 0,
  );

  return $extra;
}

/**
 * Implements hook_node_view().
 */
function mymodule_node_view($node, $view_mode, $langcode) {
  // Put the content type you want to display summary field here.
  $content_type = 'page';

  if ($node->type == $content_type) {
    $summary = field_view_field('node', $node, 'body', array(
      'type' => 'text_summary_or_trimmed',
    ));

    $node->content['body_summary'] = array(
      '#markup' => $summary['#items'][0]['safe_summary'],
      '#weight' => 0,  
    );
  }
}
Майк Джуик3
источник
0

Если вас интересует решение без кода с использованием модулей Views и Display Suite, вы можете:

  1. Создайте блок Views с полем итогов. Под опцией Контекстный фильтр в дополнительных настройках вы можете установить опцию «Предоставить значение по умолчанию» с типом Content ID из URL.

  2. В разделе «Типы содержимого» -> [ваш тип содержимого] -> «Управление отображением» выберите параметр «Пользовательские поля» (меню внизу) и создайте поле «Пользовательский блок» из представления, созданного на шаге 1.

  3. При сохранении пользовательское поле появится в списке полей типа узла, где вы можете выбрать, в каком регионе оно будет отображаться.

user1795440
источник