Разделение полей контента на разные регионы

11

Моя ситуация выглядит следующим образом: у меня есть семинар по типу контента с полями A, B и C. У меня есть регионы Header, Footer, Content и Sidebar Left. В семинаре есть несколько полей, которые я хочу отображать в области содержимого, а также в левой части боковой панели.

Как мне это сделать? Извиняюсь, если на это уже был дан ответ. Я разработчик и не колеблюсь, чтобы погрузиться в функции ловушки и препроцессора. У меня установлен модуль Views, но я никогда не использовал его (это мой первый сайт на Drupal, если вы не можете сказать: P).

Приветствия.

РЕДАКТИРОВАТЬ: Это для Drupal 7 .

Лестер Пибоди
источник
Какая версия Drupal?
Кева
Извините, это для Drupal 7. Я добавил эту информацию к своему первоначальному вопросу.
Лестер Пибоди
Я приму ответ, как только доберусь до решения проблемы. В настоящее время я выясняю, как настроить свои предложения для отображения контента соответствующим образом ...
Лестер Пибоди

Ответы:

11

Не существует простого способа добавить содержимое узла в разные области на странице. Существует несколько способов решения этой проблемы.

Некодирующий способ: виды и блоки

Создать вид

  • Тип: Блок
  • Контекстный фильтр: Содержание: Nid
    • значение по умолчанию: захват с текущей страницы
  • Поля: все, что вы хотите
  • Фильтр:
    • Тип контента: Семинар

(плюс любые дополнительные настройки, которые вы хотите)

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

Повторите для всех регионов

Путь кодирования с theme_preprocess_region ():

код будет выглядеть примерно так

MYTHEME_preprocess_region(&$variables) {
  if (isset($node) && ($node->type == 'seminar' )) {
     //add new variable here.     
  }
}

Это только для Drupal 7. Теперь его можно найти в вашем region.tpl.php.

iStryker
источник
1
Я предпочитаю подход «просмотр / блок», но предложил Display Suite, поскольку некоторые считают его более доступным.
Джедстром
Представления прекрасно работают для этого, как я обнаружил. Виды просто фантастические. Я также использую модуль «Блок меню», чтобы разделить мои меню в зависимости от того, где я нахожусь на сайте (давайте разделим главное меню, чтобы оно всегда отображалось, и подменю в зависимости от того, под каким меню я попал в главное меню). Абсолютно потрясающий модуль, очень рекомендуется.
Лестер Пибоди
В некотором роде сумасшествие, что я спросил об этом почти месяц, принял ответ, но сейчас только начинаю применять этот ответ (хотя с тех пор я использовал Views за тонну). Не могли бы вы немного разъяснить, как вы используете Views для Drupal 7? Похоже, что Аргумент: nid не существует в Views 3 для Drupal 7. Спасибо.
Лестер Пибоди
Я понял. Понятие аргумента было заменено контекстными фильтрами в разделе «Дополнительно».
Лестер Пибоди
D7, Contextual Fitler: Содержимое: NID. Изменить: увидеть, что вы нашли его, прежде чем я смог ответить
iStryker
7

Модуль Display Suite позволяет вам сделать это. Вам нужно будет включить модуль Display Suite Extras, чтобы выставлять области тем как цели для компонентов узла. Информацию о том, как это сделать, можно найти в полях «Добавить» на страницу блока документации Display Suite.

jhedstrom
источник
5

У меня была такая же проблема. Решение довольно простое. Вы можете обосновать тот факт, что в Drupal 7 мы можем определить наш собственный view_mode, а не только FULL и TEASER (как мы знаем из самых старых версий). Итак, определите другой view_mode для использования в вашем регионе: например, LEFTHAND. Drupal отображает FULL view_mode в области контента. Итак, вы должны сказать Drupal для отображения LEFTHAND в боковой панели левой области.

  1. В template_preprocess_page ()

    if ($vars['node']) {
    $vars['page']['sidebar_left'][] = node_view($vars['node'], 'lefthand');
    }

  2. В node.tpl.php добавьте новый экран для режима просмотра слева.

    if ($view_mode == 'lefthand') {
    // render content fields here
    }

Патрик Лукан
источник
1
Этот ответ является супер-умным и не требует никаких внешних модулей, кроме как для определения режимов просмотра. Простая альтернатива Display Suite - режимы Entity View: drupal.org/project/entity_view_mode
paul-m
Мне очень понравился этот. Оберните его в функцию if, чтобы он отображался только на определенных страницах. Раньше я if (array_key_exists('block_14',$vars['page']['main_content'])){}делал так, чтобы он появлялся только на страницах с определенным блоком.
Доминик Вудман
3

Если Display Suite кажется вам слишком большим (это отличный модуль, но он может быть излишним, если вам просто нужно переместить несколько полей), есть модуль только для этой цели -> Блоки CCK .

Я знаю, что это называется «CCK» блоки, но он работает с Drupal 7 (который принес функциональность CCK в ядро).

Шанс Г
источник
1

Небольшое изменение в ответе @Patrik Lucan if ($vars['node'])вызвало у меня проблемы на страницах, которые не были узлами, например, пользовательская лицевая страница с блоком или страницами просмотра.

Изменился на:

if (array_key_exists('node', $vars))

Который, кажется, решил проблему.

Доминик Вудман
источник
0

Между тем есть модуль для этого. Со страницы модуля:

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

Этот модуль призван стать легкой альтернативой таким модулям, как Panels и Display Suite, или использовать Views для определения блока, который извлекает только одно поле.

Phils
источник