hook_node_view不起作用

时间:2016-12-31 18:58:30

标签: php drupal drupal-8

我正在为drupal 8构建一个需要使用hook_node_view的模块。我尝试了以下代码: -

<?php

/**
 * @file
 * Demonstrates the possibilities of forms in Drupal 8.
 */

use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Entity\Node;
use Drupal\Core\Entity\Display\EntityViewDisplayInterface;
use Drupal\Core\Entity\EntityInterface;

/**
 * Implements hook_form_alter()
 */
function demo_form_form_alter(&$form, FormStateInterface $form_state, $form_id) {
  drupal_set_message(t('Found a form with ID %form_id', array('%form_id' => $form_id)));
}

/**
 * Implements hook_node_view()
 */
function demo_form_node_view(array &$build, \Drupal\Core\Entity\EntityInterface $entity, \Drupal\Core\Entity\Display\EntityViewDisplayInterface $display, $view_mode) {
   drupal_set_message(t('its working'));
}

/**
 * Implements hook_form_FORM_ID_alter().
 *
 * Only alters the Search form 'search_block_form'.
 */
function demo_form_form_search_block_form_alter(&$form, FormStateInterface $form_state, $form_id) {
  $form['hello'] = array(
    '#markup' => t('Go ahead, try me ...') . '<br />',
    '#weight' => -1,
  );
}

我无法看到来自demo_form_node_view的任何消息,如果挂钩是正确的,那么它应该显示消息。我是drupal的新手,无法弄清楚demo_form_node_view无效的原因。

1 个答案:

答案 0 :(得分:0)

首先不要忘记清除缓存。其次,请考虑必须在页面中的某个位置使用类型node的实际实体来触发该挂钩。既然您正在使用表单,那么您可能没有加载节点吗?

也可能正在调用钩子但drupal_set_message因为重定向或清除消息而无效(我不太了解您的环境)。尝试echo某事,然后立即exit;

最后,您可以尝试使用hook_entity_view(这是[hook_ENTITY_TYPE_view][1]更通用的版本,看看您是否有不同的效果。