Предупреждение: нельзя использовать скалярное значение в качестве массива в include().

Для оформления определенной страницы на моем сайте я создал файл с именем node--2.tpl.php. В некоторых других учебниках, которые я прочитал, я добавил это в свой файл template.php:

function mtheme_preprocess_node(&$vars) {
  if (request_path() == 'node/2') {
    $vars['theme_hook_suggestions'][] = 'node__2';
  }
}

На этой странице я хотел, чтобы отображалась область под названиемschools_landing. Таким образом, node--2.tpl.php выглядит так и ничего больше:

<?php print render($page['schools_landing']); ?>

После этого я начал видеть следующие сообщения об ошибках в верхней части наложения администратора:

Warning: Cannot use a scalar value as an array in include() (line 1 of /home/something/public_html/project/sites/all/themes/mtheme/node--2.tpl.php).

Кроме того, я могу написать текст в файле node--2.tpl.php, и он отображается нормально (вместо содержимого страницы по умолчанию), но я вообще не могу заставить блоки отображаться внутри региона. Если я назначу блок блокуschools_landing, я ничего не увижу на странице.

  1. Является ли это правильным процессом для определения пользовательского контента на конкретной странице?
  2. Как я могу исправить ошибку, вызывающую скалярное значение как сообщение об ошибке массива?
  3. Как я могу заставить свои блоки начать рендеринг в регионе?

person KinsDotNet    schedule 10.12.2012    source источник


Ответы (1)


В шаблоне узла $page – это логическое значение значение, а не массив. Вот почему вы получаете эту ошибку.
template_preprocess_node() устанавливает его с помощью следующего кода.

$variables['page']      = $variables['view_mode'] == 'full' && node_is_page($node);

Именно hook_preprocess_page() получает переменную $page с ожидаемым значением.
template_preprocess_page() содержит следующий код.

  foreach (system_region_list($GLOBALS['theme']) as $region_key => $region_name) {
    if (!isset($variables['page'][$region_key])) {
      $variables['page'][$region_key] = array();
    }
  }

page.tpl.php описывает $page как:

Регионы:

  • $page['help']: Динамический текст справки, в основном для страниц администратора.
  • $page['highlighted']: Элементы для выделенной области содержимого.
  • $page['content']: основное содержимое текущей страницы.
  • $page['sidebar_first']: элементы для первой боковой панели.
  • $page['sidebar_second']: Элементы для второй боковой панели.
  • $page['header']: Элементы для области заголовка.
  • $page['footer']: Элементы для области нижнего колонтитула.

Дополнительные регионы могут быть реализованы из тем.

В качестве примечания: template_preprocess_node() уже предлагает следующие имена шаблонов.

  $variables['theme_hook_suggestions'][] = 'node__' . $node->type;
  $variables['theme_hook_suggestions'][] = 'node__' . $node->nid;

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

person apaderno    schedule 10.12.2012
comment
Хорошо, ваше примечание имело большой смысл. Я удалил свое предложение за ненадобностью. В остальном, следует ли использовать шаблоны страниц вместо шаблонов узлов? То есть, если я хочу отобразить регион school_landing на определенной странице, должен ли я создать шаблон страницы, который будет это делать? - person KinsDotNet; 10.12.2012