diff --git a/core/modules/block_content/src/BlockContentViewBuilder.php b/core/modules/block_content/src/BlockContentViewBuilder.php index ff2a8536b3c..915d6905717 100644 --- a/core/modules/block_content/src/BlockContentViewBuilder.php +++ b/core/modules/block_content/src/BlockContentViewBuilder.php @@ -16,6 +16,25 @@ use Drupal\Core\Entity\EntityViewBuilder; */ class BlockContentViewBuilder extends EntityViewBuilder { + /** + * {@inheritdoc} + */ + public function view(EntityInterface $entity, $view_mode = 'full', $langcode = NULL) { + return $this->viewMultiple(array($entity), $view_mode, $langcode)[0]; + } + + /** + * {@inheritdoc} + */ + public function viewMultiple(array $entities = array(), $view_mode = 'full', $langcode = NULL) { + $build_list = parent::viewMultiple($entities, $view_mode, $langcode); + // Apply the buildMultiple() #pre_render callback immediately, to make + // bubbling of attributes and contextual links to the actual block work. + // @see \Drupal\block\BlockViewBuilder::buildBlock() + unset($build_list['#pre_render'][0]); + return $this->buildMultiple($build_list); + } + /** * {@inheritdoc} */ @@ -33,7 +52,7 @@ class BlockContentViewBuilder extends EntityViewBuilder { protected function alterBuild(array &$build, EntityInterface $entity, EntityViewDisplayInterface $display, $view_mode, $langcode = NULL) { parent::alterBuild($build, $entity, $display, $view_mode, $langcode); // Add contextual links for this custom block. - if (!$entity->isNew() && $view_mode == 'full') { + if (!$entity->isNew()) { $build['#contextual_links']['block_content'] = array( 'route_parameters' => array('block_content' => $entity->id()), 'metadata' => array('changed' => $entity->getChangedTime()), diff --git a/core/modules/block_content/src/Entity/BlockContent.php b/core/modules/block_content/src/Entity/BlockContent.php index 6dec6487dea..6b5736e3fb6 100644 --- a/core/modules/block_content/src/Entity/BlockContent.php +++ b/core/modules/block_content/src/Entity/BlockContent.php @@ -53,7 +53,13 @@ use Drupal\block_content\BlockContentInterface; * }, * bundle_entity_type = "block_content_type", * field_ui_base_route = "entity.block_content_type.edit_form", + * render_cache = FALSE, * ) + * + * Note that render caching of block_content entities is disabled because they + * are always rendered as blocks, and blocks already have their own render + * caching. + * See https://www.drupal.org/node/2284917#comment-9132521 for more information. */ class BlockContent extends ContentEntityBase implements BlockContentInterface { diff --git a/core/modules/quickedit/src/Tests/QuickEditLoadingTest.php b/core/modules/quickedit/src/Tests/QuickEditLoadingTest.php index 682f2cd9dfd..5865655c382 100644 --- a/core/modules/quickedit/src/Tests/QuickEditLoadingTest.php +++ b/core/modules/quickedit/src/Tests/QuickEditLoadingTest.php @@ -8,11 +8,10 @@ namespace Drupal\quickedit\Tests; use Drupal\Component\Serialization\Json; -use Drupal\simpletest\WebTestBase; -use Drupal\quickedit\Ajax\MetadataCommand; -use Drupal\Core\Ajax\AppendCommand; use Drupal\Component\Utility\Unicode; +use Drupal\block_content\Entity\BlockContent; use Drupal\node\Entity\Node; +use Drupal\simpletest\WebTestBase; /** * Tests loading of in-place editing functionality and lazy loading of its @@ -493,4 +492,23 @@ class QuickEditLoadingTest extends WebTestBase { } } + /** + * Tests that Quick Edit's data- attributes are present for content blocks. + */ + public function testContentBlock() { + \Drupal::service('module_installer')->install(array('block_content')); + + // Create and place a content_block block. + $block = BlockContent::create([ + 'info' => $this->randomMachineName(), + 'type' => 'basic', + 'langcode' => 'en', + ]); + $block->save(); + $this->drupalPlaceBlock('block_content:' . $block->uuid()); + + // Check that the data- attribute is present. + $this->drupalGet(''); + $this->assertRaw('data-quickedit-entity-id="block_content/1"'); + } }