Блок на определенных страницах и типах узлов

drupal.stackexchange https://drupal.stackexchange.com/questions/2681

  •  16-10-2019
  •  | 
  •  

Вопрос

Я пытаюсь сделать дисплей блока на определенной странице и внутри типа узла; Я получил этот код от drupal.org, но я продолжаю получать эту ошибку.

Warning: array_flip() [function.array-flip]: Can only flip STRING and INTEGER values! in DrupalDefaultEntityController->load() (line 178 of /home/content/45/6861545/html/includes/entity.inc).
Warning: array_flip() [function.array-flip]: Can only flip STRING and INTEGER values! in DrupalDefaultEntityController->cacheGet() (line 354 of /home/content/45/6861545/html/includes/entity.inc).

Это код, который я использовал.

$match = FALSE;
$types = array('middle_content' => 1);
if (arg(0) == 'node' && is_numeric(arg(1))) {
  $nid = arg(1);
  $node = node_load(array('nid' => $nid));
  $type = $node->type;
  if (isset($types[$type])) {
    $match = TRUE;
  }
}

if (substr($_SERVER["REQUEST_URI"], 0, 10) == '/test'){
  $match = TRUE;
}

if (substr($_SERVER["REQUEST_URI"], 0) == "/node/add/middle_content") {
  $match = TRUE;
}

return $match;
Это было полезно?

Решение

Чтобы фактически исправить эту ошибку, посмотрите Мой ответ на вопрос Stackoverflow.

Однако в этом случае ваш код может быть упрощен много с помощью menu_get_object ():

$types = array('middle_content' => 1);
if ($node = menu_get_object()) {
  if (isset($types[$node->type])) {
    return TRUE;
  }
}

И в любом случае, вы должны избегать PHP в блоках и т. Д. (См. Каковы недостатки использования кода фильтра PHP в блоках, узлах, видах-аргах и т. Д.?), проверить Контекст. Анкет Это позволяет вам настроить ваши блоки (среди прочего) для условий, таких как это без необходимости писать код. Это также намного быстрее.

Другие советы

Фактическая ошибка возникает из -за того, что node_load() Либо берет целое число, либо числовое множество NIDS, а не ассоциативный массив. $node = node_load($nid); совершенно верен.

Тем не менее, ответ Бердира является лучшим решением.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с drupal.stackexchange
scroll top