@Vlad171

Как вывести разные типы материалов в разных регионах на одной странице?

Осваиваю Drupal. Чтобы поглубже вникнуть в работу системы, решил начать с создания своей темы с нуля. Создал page.tpl, создал свои типы материалов и переопределил под них шаблоны для вывода(node--type.tpl). Проблема в том, что добавляемое содержимое разных типов выводится всегда в одном регионе. По умолчанию это "content". Да, можно назначить для содержимого другой регион и материалы просто выводятся в другом месте. Пробовал через "Показывать блок для определённых типов материалов" закрепить метериал за блоком, но тогда тизер все равно выводится в "content", при переходе по ссылке на полное описание материал появляется в нужном блоке, но дублируется и в "content"
Вопрос: как сделать так чтобы один тип добавляемого материала выводился только в одном определенном регионе, другой- в другом на этой же странице. Знаю про Views, особо с ним не разбирался, но хочется реализовать это именно на уровне кода а не с помощью вспомогательных модулей. Есть переменная $content, через которую осуществляется вывод содержимого, возможно есть способ вывести через нее содержимое конкретного типа материала. Кто-нибудь поможет?
  • Вопрос задан
  • 727 просмотров
Решения вопроса 1
afi13
@afi13
Views давно не вспомогательный модуль, а must have. В Drupal 8 он уже входит в ядро. И использовать Views это было бы правильно в данной ситуации.
Если же Вы все таки хотите использовать кастомный блок, то вам необходимо использовать hook_block_info() для того чтобы объявить блоки. Один блок для каждого типа материала, либо сделать форму настроек для блока с помощью хука hook_block_configure(), где можно выбирать какой тип материала необходимо отображать в этом блоке. Далее в hook_block_view() необходимо выбрать из базы ноды нужного типа, можете использовать что-то такое:
$query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'node');
$query->propertyCondition('status', NODE_PUBLISHED);
$query->propertyCondition('type', 'CONTENT_TYPE');
$result = $query->execute();
$nodes = node_load_multiple(array_keys($result['node']));
где в CONTENT_TYPE подставить machine name нужного вам типа материала. И теперь можно использовать node_view_multiple() для того чтобы отобразить все полученные ноды в нужном режиме отображения.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@heartdevil
плыву как воздушный шарик
Привет.

По той логике, которую предлагает drupal, самый правильный способ -- это создать кастомный блок под каждый тип материала и назначить для этого блока регион. Вот так можете создать кастомный блок тыц .
Чтобы изменить стандартный вывод содержимого в drupal обычно используют всякие preprocess хуки. К примеру, такой хук
function THEME_preprocess_page(&$vars, $hook)
Ответ написан
tlito
@tlito
drupal, c++, seo
вам надо освоить Display Suite tlito.ru/node/126
Ответ написан
Комментировать
mav5555
@mav5555
Системщик в широком смысле этого слова
И, как вариант, есть неплохие уроки с примерами webcraftsmen.ru/content/drupal-7-polzovatelyu-vved...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы