Розбиття полів вмісту на різні регіони


11

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

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

Ура.

EDIT: Це для Drupal 7 .


Яка версія Drupal?
keva

Вибачте, це для Drupal 7. Я додав цю інформацію до свого початкового запитання.
Лестер Пібоді

Я прийму відповідь, як тільки прийду до вирішення проблеми. Наразі я розгадую, як налаштувати свої пропозиції для відповідного відображення вмісту ...
Lester Peabody

Відповіді:


11

Існує непростий спосіб, як додати вміст вузла до різних регіонів сторінки. Існує кілька способів вирішити цю проблему.

Некодування спосіб: Перегляди та блоки

Створіть подання

  • Тип: Блок
  • Контекстуальний фільтр: Вміст: Nid
    • значення за замовчуванням: схопити з поточної сторінки
  • Поля: що хочете
  • Фільтр:
    • Тип змісту: семінар

(плюс усі додаткові налаштування, які ви хочете)

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

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

Шлях кодування з topic_preprocess_region ():

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

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

Це лише для Drupal 7. Тепер доступний у вашому регіоні.tpl.php.


1
Підхід перегляду / блокування - це насправді той, який я вважаю за краще, але я запропонував Display Suite, оскільки деякі вважають його більш доступним.
jhedstrom

Як я виявляю, перегляди для цього чудово підходять. Погляди загалом фантастичні. Я також використовую модуль "Блок меню", щоб розділити свої меню залежно від того, де я перебуваю на сайті (давайте мені розділити головне меню, щоб воно завжди відображалось, і підменю, залежно від того, під яке меню я підпадаю в головному меню). Повністю дивовижний модуль, дуже рекомендується.
Лестер Пібоді

Начебто божевільний, що я просив це майже місяць, прийняв відповідь, але я зараз переходжу до застосування цієї відповіді зараз (хоча я з тих пір використовував перегляди тонну). Чи можете ви трохи роз’яснити ваше використання Views для Drupal 7? Здається, що Argument: nid не існує у переглядах 3 для Drupal 7. Дякую.
Лестер Пібоді

Я зрозумів це. Поняття Аргумент було замінено контекстними фільтрами в розділі Додаткові.
Лестер Пібоді

D7, Контекстуальний фітлер: Зміст: NID. Редагувати: дивіться, ви знайшли його, перш ніж я зміг відповісти
iStryker

7

Модуль Display Suite дозволяє це зробити. Вам потрібно буде включити модуль "Додаткові засоби для показу", щоб виставити регіони тем як цілі для компонентів вузла. Інформацію про те, як це зробити, можна знайти в полях Add (Додати) до сторінки блоку документації Display Suite


5

У мене була така ж проблема. Рішення досить легко. Ви можете обґрунтувати той факт, що в Drupal 7 ми можемо визначити наш власний view_mode, а не лише ПОВНИЙ та TEASER (як ми знаємо з найстаріших версій). Отже, визначте інший view_mode для використання у вашому регіоні: напр. LEFTHAND. Drupal виводить ПОВНИЙ view_mode в області вмісту. Отже, ви повинні сказати Drupal, щоб відобразити LEFTHAND у лівій області Sidebar.

  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 - режими перегляду сутності: drupal.org/project/entity_view_mode
paul-m

Мені це дуже сподобалось. Загорніть його у функцію if, щоб вона відображалася лише на певних сторінках. Раніше я if (array_key_exists('block_14',$vars['page']['main_content'])){}з'являвся лише на сторінках із певним блоком.
Домінік Вудман

3

Якщо Display Suite здається вам занадто великим (вам це чудовий модуль, але це може бути зайвим, якщо вам просто потрібно переїхати кілька полів), є модуль тільки для цієї мети -> CCK Blocks .

Я знаю, що це називається "CCK" блоками, але він працює з Drupal 7 (який довів функціональність CCK до ядра).


1

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

Змінено на:

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

Що, здається, вирішило проблему.


0

Тим часом для цього є модуль. На сторінці модуля:

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

Цей модуль має на меті бути легкою альтернативою таким модулям, як "Панелі" та "Набір дисплеїв", або використовувати "Огляд" для визначення блоку, який отримує лише одне поле.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.