Кастомный вывод любых элементов из массива $content в теме Drupal 7


17:24, 19/03/2018

Drupal 7 предоставляет достаточно возможностей для темизации любого блока, региона и элемента с помощью CSS, но это не всегда удобно, особенно если речь идет о сложной структуре вывода информации на сайте. Допустим, если стоит задача вывести результат работы каких-нибудь модулей или содержимого CCK поля внутри tabs. Эту задачу будет достаточно проблематично реализовать только с помощью CSS, без кастомного вывода содержимого того или иного элемента непосредственно в файле темы (в нашем случае)внутри разметки самих табов.
В 7-ке результат работы всех стандартных и дополнительных моделей пишется в массив $content

$content: An array of node items. Use render($content) to print them all, or print a subset such as render($content['field_example']). Use hide($content['field_example']) to temporarily suppress the printing of a given element.

Согласно определению в API Drupal, массив $content - это массив, содержащий в себе все элементы ноды. Соотвественно, мы имеем возможность выводить весь массив сразу:


или обратиться к любому элементу находящемуся внутри этого массива


и вывести его содержимое в нужном вам месте.

Как узнать название элементов массива?

Установите и включите модуль Devel. После активации модуля, у вас появится новая вкладка Devel в каждой ноде, внутри интерфейса перейдите во вкладку Render(верхний-правый угол), в которой и будет массив элементов текущей ноды с именами полей.

Если хотите разложить массив прямо в теме, добавьте в node.tpl.php (или node--product.tpl.php, если необходимо узнать имена элементов в Ubercart)

Абсолютно аналогичную информацию выводит

но в области $messages отвечающей за вывод системных сообщений.

Без модуля Devel можно разложить массив ноды на составные элементы таким образом:

'. check_plain(print_r($node, 1)) .'
'; ?>

Пример кастомной темизации страницы товара Ubercart в node--product.tpl.php


Содержимое анонса(тизера)


Комментарии