Showing a message for specific content type
-
29-01-2021 - |
Question
I'm trying to show a message for specific content type through a new module, on Drupal 8.3.0. (I'm a beginner.)
This is part of the code I am using.
File test_module.module (updated code, still not working)
/**
* @file
* Implementation of hook_node_view();
*/
function test_module_node_view($node, $view_mode) {
if ($view_mode == 'full' && $node->type == 'test_content') {
/*Message with current date and time*/
$current_time = time();
drupal_set_message(t('Hello! Today is '.format_date($current_time,'medium')));
}
}
As far as I know, this should work, but it doesn't and I don't know why. The message is not showing for a node of content type "test_content". How can I fix this? Is there another way to alter nodes of custom content types?
(Test_content_example is a node of type 'test_content', so there should be a system message displayed, but there's none.)
Solution
$node->type
is a reference to the node type config entity - it's not a string.
You can use NodeInterface::getType()
instead, e.g.:
if ($view_mode == 'full' && $node->getType() == 'test_content') {
}
Incidentally you could also use $node->bundle()
, or even $node->type->entity->id()
. But getType()
is probably most appropriate for your specific needs.
You also have the function signature wrong - it should be:
function test_module_node_view(array &$build, \Drupal\node\NodeInterface $node, \Drupal\Core\Entity\Display\EntityViewDisplayInterface $display, $view_mode)