Я установил модуль «Сообщение».Я хочу отобразить токены с эталонным полем узла.В настоящее время:
[message:node-title]
заменено из заголовка родительского узла, но [message:field_node_reference:entity:title]
не заменяется.
Вот полный код моего пользовательского модуля.Он основан на субмодуле Пример сообщения:
<?php
/**
* @file
* Holds hook implementation for the Message Activity Stream module.
*/
use Drupal\Core\Entity\ContentEntityBase;
use Drupal\group\Entity\Group;
use Drupal\node\Entity\Node;
use Drupal\comment\Entity\Comment;
use Drupal\commerce_store\Entity\Store;
use Drupal\commerce_product\Entity\Product;
use Drupal\user\Entity\User;
use Drupal\profile\Entity\Profile;
use Drupal\message\Entity\Message;
/**
* Implements hook_profile_insert().
*/
function message_activity_stream_profile_insert(Profile $profile) {
$message = Message::create(['template' => 'mas_create_node', 'uid' => $profile->get('uid')]);
$message->set('field_profile_reference', $profile);
$message->set('field_published', $profile->isPublished());
$message->save();
}
/**
* Implements hook_commerce_store_insert().
*/
function message_activity_stream_commerce_store_insert(Store $commerce_store) {
$message = Message::create(['template' => 'mas_create_store', 'uid' => $commerce_store->get('uid')]);
$message->set('field_store_reference', $commerce_store);
$message->save();
}
/**
* Implements hook_commerce_product_insert().
*/
function message_activity_stream_commerce_product_insert(Product $commerce_product) {
$message = Message::create(['template' => 'mas_create_product', 'uid' => $commerce_product->get('uid')]);
$message->set('field_product_reference', $commerce_product);
$message->set('field_published', $commerce_product->isPublished());
$message->save();
}
/**
* Implements hook_group_insert().
*/
function message_activity_stream_group_insert(Group $group) {
$message = Message::create(['template' => 'mas_create_group', 'uid' => $group->get('uid')]);
$message->set('field_group_reference', $group);
$message->save();
}
/**
* Implements hook_node_insert().
*/
function message_activity_stream_node_insert(Node $node) {
$message = Message::create(['template' => 'mas_create_node', 'uid' => $node->get('uid')]);
$message->set('field_node_reference', $node);
$message->set('field_published', $node->isPublished());
$message->save();
}
/**
* Implements hook_comment_insert().
*/
function message_activity_stream_comment_insert(Comment $comment) {
$message = Message::create(['template' => 'mas_create_comment', 'uid' => $comment->getOwnerId()]);
$message->set('field_comment_reference', $comment);
$message->set('field_published', $comment->isPublished());
$message->save();
}
/**
* Implements hook_user_insert().
*/
function message_activity_stream_user_insert(User $account) {
Message::create(['template' => 'mas_user_register', 'uid' => $account->id()])->save();
}
/**
* Implements hook_commerce_store_update().
*/
function message_activity_stream_commerce_store_update(Store $commerce_store) {
if (empty($commerce_store->original)) {
return;
}
message_activity_stream_update_message_status($commerce_store);
}
/**
* Implements hook_commerce_product_update().
*/
function message_activity_stream_commerce_product_update(Product $commerce_product) {
if (empty($commerce_product->original)) {
return;
}
message_activity_stream_update_message_status($commerce_product);
}
/**
* Implements hook_group_update().
*/
function message_activity_stream_group_update(Group $group) {
if (empty($group->original)) {
return;
}
message_activity_stream_update_message_status($group);
}
/**
* Implements hook_node_update().
*/
function message_activity_stream_node_update(Node $node) {
if (empty($node->original)) {
return;
}
message_activity_stream_update_message_status($node);
}
/**
* Implements hook_comment_update().
*/
function message_activity_stream_comment_update(Comment $comment) {
if (empty($comment->original)) {
return;
}
message_activity_stream_update_message_status($comment);
}
/**
* Set message entity published field when it changes in the related entity.
*
* @param \Drupal\Core\Entity\ContentEntityBase $entity
* The entity object.
*/
function message_activity_stream_update_message_status(ContentEntityBase $entity) {
if ($entity->isPublished() == $entity->original->isPublished()) {
return;
}
$query = \Drupal::entityQuery('message');
$field = 'field_' . $entity->getEntityType()->id() . '_reference';
$query->condition($field . '.target_id', $entity->id());
$results = $query->execute();
if (empty($results)) {
return;
}
$messages = Message::loadMultiple($results);
foreach ($messages as $message) {
$message->set('field_published', $entity->isPublished());
$message->save();
}
}
Я создал 2 шаблона сообщения:
Поток активности сообщения - Создать комментарий mas_create_comment
и
Поток активности сообщений - Создать узел mas_create_node
Все они имеют справочные поля field_node_reference
Поле справки field_node_reference
не заполнено для этого шаблона, поскольку его нет в коде модуля.
Поток активности сообщения - Создать комментарий mas_create_comment
Ссылочное поле field_node_reference
для этого шаблона заполнено должным образом, поскольку оно содержится в коде модуля.
Поток активности сообщений - Создать узел mas_create_node
МОЙ ВОПРОС
Что я должен изменить в своем модуле, чтобы 2 шаблона заполнились справочным полем field_node_reference
?
Я попытался заменить этот код:
/**
* Implements hook_node_insert().
*/
function message_activity_stream_node_insert(Node $node) {
$message = Message::create(['template' => 'mas_create_node', 'uid' => $node->get('uid')]);
$message->set('field_node_reference', $node);
$message->set('field_published', $node->isPublished());
$message->save();
}
на:
/**
* Implements hook_node_insert().
*/
function message_activity_stream_node_insert(Node $node) {
$message = Message::create(['template' => 'mas_create_node', 'uid' => $node->get('uid')]);
$message->set('field_node_reference', $node);
$message->set('field_published', $node->isPublished());
$message->save();
}
/**
* Implements hook_node_insert().
*/
function message_activity_stream_node_insert(Node $node) {
$message = Message::create(['template' => 'mas_create_comment', 'uid' => $node->get('uid')]);
$message->set('field_node_reference', $node);
$message->set('field_published', $node->isPublished());
$message->save();
}
Ноэто не работает.