Overrides Drupal\Core\Entity\EntityRenderController::buildContent().
In addition to modifying the content key on entities, this implementation will also set the node key which all comments carry.
Overrides EntityRenderController::buildContent
public function buildContent(array $entities, array $displays, $view_mode, $langcode = NULL) {
$return = array();
if (empty($entities)) {
return $return;
}
// Pre-load associated users into cache to leverage multiple loading.
$uids = array();
foreach ($entities as $entity) {
$uids[] = $entity->uid->target_id;
}
user_load_multiple(array_unique($uids));
parent::buildContent($entities, $displays, $view_mode, $langcode);
// Load all nodes of all comments at once.
$nids = array();
foreach ($entities as $entity) {
$nids[$entity->nid->target_id] = $entity->nid->target_id;
}
$nodes = node_load_multiple($nids);
foreach ($entities as $entity) {
if (isset($nodes[$entity->nid->target_id])) {
$node = $nodes[$entity->nid->target_id];
}
else {
throw new \InvalidArgumentException(t('Invalid node for comment.'));
}
$entity->content['#node'] = $node;
$entity->content['#theme'] = 'comment__node_' . $node
->bundle();
$entity->content['links'] = array(
'#theme' => 'links__comment',
'#pre_render' => array(
'drupal_pre_render_links',
),
'#attributes' => array(
'class' => array(
'links',
'inline',
),
),
);
if (empty($entity->in_preview)) {
$entity->content['links'][$this->entityType] = array(
'#theme' => 'links__comment__comment',
// The "node" property is specified to be present, so no need to check.
'#links' => comment_links($entity, $node),
'#attributes' => array(
'class' => array(
'links',
'inline',
),
),
);
}
}
}