/** * {@inheritdoc} */ public function execute($comment = NULL) { $build = $this->viewBuilder->view($comment); $text = $this->renderer->renderPlain($build); foreach ($this->configuration['keywords'] as $keyword) { if (strpos($text, $keyword) !== FALSE) { $comment->setPublished(FALSE); $comment->save(); break; } } }
/** * {@inheritdoc} */ public function build() { // Track whether a block that shows the main content is displayed or not. $main_content_block_displayed = FALSE; $build = array(); // Load all region content assigned via blocks. foreach ($this->getRegionAssignments() as $region => $blocks) { /** @var $blocks \Drupal\block\BlockInterface[] */ foreach ($blocks as $key => $block) { if ($block->access('view')) { $block_plugin = $block->getPlugin(); if ($block_plugin instanceof MainContentBlockPluginInterface) { $block_plugin->setMainContent($this->mainContent); $main_content_block_displayed = TRUE; } $build[$region][$key] = $this->blockViewBuilder->view($block); } } if (!empty($build[$region])) { // self::getRegionAssignments() returns the blocks in sorted order. $build[$region]['#sorted'] = TRUE; } } // If no block that shows the main content is displayed, still show the main // content. Otherwise the end user will see all displayed blocks, but not // the main content they came for. if (!$main_content_block_displayed) { $build['content']['system_main'] = $this->mainContent; } return $build; }
/** * Generates printer-friendly HTML for a node. * * @param \Drupal\node\NodeInterface $node * The node that will be output. * @param string $children * (optional) All the rendered child nodes within the current node. Defaults * to an empty string. * * @return array * A render array for the exported HTML of a given node. * * @see \Drupal\book\BookExport::exportTraverse() */ protected function bookNodeExport(NodeInterface $node, $children = '') { $build = $this->viewBuilder->view($node, 'print', NULL); unset($build['#theme']); // @todo Rendering should happen in the template using render(). $node->rendered = drupal_render($build); return array('#theme' => 'book_node_export_html', '#node' => $node, '#children' => $children); }
/** * {@inheritdoc} */ public function build() { // Track whether blocks showing the main content and messages are displayed. $main_content_block_displayed = FALSE; $messages_block_displayed = FALSE; $build = ['#cache' => ['tags' => $this->blockListCacheTags]]; // Load all region content assigned via blocks. $cacheable_metadata_list = []; foreach ($this->blockRepository->getVisibleBlocksPerRegion($cacheable_metadata_list) as $region => $blocks) { /** @var $blocks \Drupal\block\BlockInterface[] */ foreach ($blocks as $key => $block) { $block_plugin = $block->getPlugin(); if ($block_plugin instanceof MainContentBlockPluginInterface) { $block_plugin->setMainContent($this->mainContent); $main_content_block_displayed = TRUE; } elseif ($block_plugin instanceof MessagesBlockPluginInterface) { $messages_block_displayed = TRUE; } $build[$region][$key] = $this->blockViewBuilder->view($block); // The main content block cannot be cached: it is a placeholder for the // render array returned by the controller. It should be rendered as-is, // with other placed blocks "decorating" it. if ($block_plugin instanceof MainContentBlockPluginInterface) { unset($build[$region][$key]['#cache']['keys']); } } if (!empty($build[$region])) { // \Drupal\block\BlockRepositoryInterface::getVisibleBlocksPerRegion() // returns the blocks in sorted order. $build[$region]['#sorted'] = TRUE; } } // If no block that shows the main content is displayed, still show the main // content. Otherwise the end user will see all displayed blocks, but not // the main content they came for. if (!$main_content_block_displayed) { $build['content']['system_main'] = $this->mainContent; } // If no block displays status messages, still render them. if (!$messages_block_displayed) { $build['content']['messages'] = ['#weight' => -1000, '#type' => 'status_messages']; } // The access results' cacheability is currently added to the top level of the // render array. This is done to prevent issues with empty regions being // displayed. // This would need to be changed to allow caching of block regions, as each // region must then have the relevant cacheable metadata. $merged_cacheable_metadata = CacheableMetadata::createFromRenderArray($build); foreach ($cacheable_metadata_list as $cacheable_metadata) { $merged_cacheable_metadata = $merged_cacheable_metadata->merge($cacheable_metadata); } $merged_cacheable_metadata->applyTo($build); return $build; }
/** * {@inheritdoc} */ public function build() { $build = array(); // Load all region content assigned via blocks. foreach ($this->getRegionAssignments() as $region => $blocks) { /** @var $blocks \Drupal\block\BlockInterface[] */ foreach ($blocks as $key => $block) { if ($block->access('view')) { $build[$region][$key] = $this->blockViewBuilder->view($block); } } if (!empty($build[$region])) { // self::getRegionAssignments() returns the blocks in sorted order. $build[$region]['#sorted'] = TRUE; } } return $build; }
/** * {@inheritdoc} */ public function build() { // Track whether blocks showing the main content and messages are displayed. $main_content_block_displayed = FALSE; $messages_block_displayed = FALSE; $build = ['#cache' => ['tags' => $this->blockListCacheTags]]; $contexts = $this->getActiveBlockContexts(); // Load all region content assigned via blocks. foreach ($this->blockRepository->getVisibleBlocksPerRegion($contexts) as $region => $blocks) { /** @var $blocks \Drupal\block\BlockInterface[] */ foreach ($blocks as $key => $block) { $block_plugin = $block->getPlugin(); if ($block_plugin instanceof MainContentBlockPluginInterface) { $block_plugin->setMainContent($this->mainContent); $main_content_block_displayed = TRUE; } elseif ($block_plugin instanceof MessagesBlockPluginInterface) { $messages_block_displayed = TRUE; } $build[$region][$key] = $this->blockViewBuilder->view($block); // The main content block cannot be cached: it is a placeholder for the // render array returned by the controller. It should be rendered as-is, // with other placed blocks "decorating" it. if ($block_plugin instanceof MainContentBlockPluginInterface) { unset($build[$region][$key]['#cache']['keys']); } } if (!empty($build[$region])) { // \Drupal\block\BlockRepositoryInterface::getVisibleBlocksPerRegion() // returns the blocks in sorted order. $build[$region]['#sorted'] = TRUE; } } // If no block that shows the main content is displayed, still show the main // content. Otherwise the end user will see all displayed blocks, but not // the main content they came for. if (!$main_content_block_displayed) { $build['content']['system_main'] = $this->mainContent; } // If no block displays status messages, still render them. if (!$messages_block_displayed) { $build['content']['messages'] = ['#weight' => -1000, '#type' => 'status_messages']; } return $build; }
/** * Generates printer-friendly HTML for a node. * * @param \Drupal\node\NodeInterface $node * The node that will be output. * @param string $children * (optional) All the rendered child nodes within the current node. Defaults * to an empty string. * * @return array * A render array for the exported HTML of a given node. * * @see \Drupal\book\BookExport::exportTraverse() */ protected function bookNodeExport(NodeInterface $node, $children = '') { $build = $this->viewBuilder->view($node, 'print', NULL); unset($build['#theme']); return array('#theme' => 'book_node_export_html', '#content' => $build, '#node' => $node, '#children' => $children); }