Issue #2099133 by Wim Leers: Comment form on same page as comments forces node render caching to be per user.
parent
67f30bc0a1
commit
4ae91a1d34
|
@ -1731,3 +1731,20 @@ function comment_library_info() {
|
||||||
);
|
);
|
||||||
return $libraries;
|
return $libraries;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* #post_render_cache callback; replaces the placeholder with the comment form.
|
||||||
|
*
|
||||||
|
* @param array $context
|
||||||
|
* An array with the following keys:
|
||||||
|
* - entity_type: an entity type
|
||||||
|
* - entity_id: an entity ID
|
||||||
|
* - field_name: a comment field name
|
||||||
|
*
|
||||||
|
* @return array $element
|
||||||
|
* The updated $element.
|
||||||
|
*/
|
||||||
|
function comment_replace_form_placeholder(array $context) {
|
||||||
|
$entity = entity_load($context['entity_type'], $context['entity_id']);
|
||||||
|
return comment_add($entity, $context['field_name']);
|
||||||
|
}
|
||||||
|
|
|
@ -138,8 +138,25 @@ class CommentDefaultFormatter extends FormatterBase implements ContainerFactoryP
|
||||||
if ($status == COMMENT_OPEN && $comment_settings['form_location'] == COMMENT_FORM_BELOW) {
|
if ($status == COMMENT_OPEN && $comment_settings['form_location'] == COMMENT_FORM_BELOW) {
|
||||||
// Only show the add comment form if the user has permission.
|
// Only show the add comment form if the user has permission.
|
||||||
if ($this->currentUser->hasPermission('post comments')) {
|
if ($this->currentUser->hasPermission('post comments')) {
|
||||||
|
// All users in the "anonymous" role can use the same form: it is fine
|
||||||
|
// for this form to be stored in the render cache.
|
||||||
|
if ($this->currentUser->isAnonymous()) {
|
||||||
$output['comment_form'] = comment_add($entity, $field_name);
|
$output['comment_form'] = comment_add($entity, $field_name);
|
||||||
}
|
}
|
||||||
|
// All other users need a user-specific form, which would break the
|
||||||
|
// render cache: hence use a #post_render_cache callback.
|
||||||
|
else {
|
||||||
|
$output['comment_form'] = array(
|
||||||
|
'#type' => 'render_cache_placeholder',
|
||||||
|
'#callback' => 'comment_replace_form_placeholder',
|
||||||
|
'#context' => array(
|
||||||
|
'entity_type' => $entity->entityType(),
|
||||||
|
'entity_id' => $entity->id(),
|
||||||
|
'field_name' => $field_name
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$elements[] = $output + array(
|
$elements[] = $output + array(
|
||||||
|
|
Loading…
Reference in New Issue