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?

screenshot

screenshot

(Test_content_example is a node of type 'test_content', so there should be a system message displayed, but there's none.)

Was it helpful?

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)
Licensed under: CC-BY-SA with attribution
Not affiliated with drupal.stackexchange
scroll top