2016-12-31 46 views
0

我正在爲drupal 8構建一個模塊,它需要使用hook_node_view。我嘗試下面的代碼: -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無法正常工作。

+0

以防萬一......你需要添加一個新的鉤子後清除Drupal的高速緩存(例如'drush cr')。另外,嘗試用打印/回顯行替換設置的消息行,以防掛鉤被調用,但由於其他原因不會顯示消息。 –

回答

0

首先不要忘記清除緩存。其次,請考慮在頁面的某個地方必須使用類型節點的實際實體來觸發該鉤子。既然你正在使用表單,也許你沒有加載節點?

掛鉤被調用也是可能的,但drupal_set_message由於重定向或某些東西清除消息而不起作用(我不知道你的環境是否足夠)。立即嘗試echo東西然後exit;

最後,你可以嘗試使用hook_entity_view(這是[hook_ENTITY_TYPE_view][1]的更寬泛的版本看,如果你是一個不同的效果。

+0

謝謝,我試過hook_entity_view,但它不是工作,8使用回聲,它顯示消息。 –