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


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.


Хм, я думаю, что это близко, но содержимое поля не отображается, просто 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,  
    );
  }
}

0

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

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.