.../src/Render/Placeholder/BigPipeStrategy.php | 23 ++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/core/modules/big_pipe/src/Render/Placeholder/BigPipeStrategy.php b/core/modules/big_pipe/src/Render/Placeholder/BigPipeStrategy.php index 63229bc..be75fcb 100644 --- a/core/modules/big_pipe/src/Render/Placeholder/BigPipeStrategy.php +++ b/core/modules/big_pipe/src/Render/Placeholder/BigPipeStrategy.php @@ -107,7 +107,7 @@ public function processPlaceholders(array $placeholders) { continue; } else { - $return[$placeholder] = static::createBigPipeJsPlaceholder($placeholder_elements); + $return[$placeholder] = static::createBigPipeJsPlaceholder($placeholder, $placeholder_elements); } } @@ -117,19 +117,30 @@ public function processPlaceholders(array $placeholders) { /** * Creates a BigPipe JS placeholder. * + * @param string $original_placeholder + * The original placeholder. * @param array $placeholder_render_array * The render array for a placeholder. * * @return array * The resulting BigPipe JS placeholder render array. */ - protected static function createBigPipeJsPlaceholder(array $placeholder_render_array) { + protected static function createBigPipeJsPlaceholder($original_placeholder, array $placeholder_render_array) { // Generate a BigPipe selector (to be used by BigPipe's JavaScript). // @see \Drupal\Core\Render\PlaceholderGenerator::createPlaceholder() - $callback = $placeholder_render_array['#lazy_builder'][0]; - $arguments = $placeholder_render_array['#lazy_builder'][1]; - $token = hash('crc32b', serialize($placeholder_render_array)); - $big_pipe_js_selector = UrlHelper::buildQuery(['callback' => $callback, 'args' => $arguments, 'token' => $token]); + if (isset($placeholder_render_array['#lazy_builder'])) { + $callback = $placeholder_render_array['#lazy_builder'][0]; + $arguments = $placeholder_render_array['#lazy_builder'][1]; + $token = hash('crc32b', serialize($placeholder_render_array)); + $big_pipe_js_selector = UrlHelper::buildQuery(['callback' => $callback, 'args' => $arguments, 'token' => $token]); + } + // When the placeholder's render array is not using a #lazy_builder, + // anything could be in there: only #lazy_builder has a strict contract that + // allows us to create a more sane selector. Therefore, simply the original + // placeholder into a usable selector, at the cost of it being obtuse. + else { + $big_pipe_js_selector = Html::getId($original_placeholder); + } return [ '#markup' => '
',