public function HelpTopicSection::renderTopicForSearch in Drupal 9
Same name and namespace in other branches
- 8 core/modules/help_topics/src/Plugin/HelpSection/HelpTopicSection.php \Drupal\help_topics\Plugin\HelpSection\HelpTopicSection::renderTopicForSearch()
Renders one topic for search indexing or search results.
Parameters
string $topic_id: The ID of the topic to be indexed.
\Drupal\Core\Language\LanguageInterface $language: The language to render the topic in.
Return value
array An array of information about the topic, with elements:
- title: The title of the topic in this language.
- text: The text of the topic in this language.
- url: The URL of the topic as a \Drupal\Core\Url object.
- cacheable_metadata: (optional) An object to add as a cache dependency if this topic is shown in search results.
Overrides SearchableHelpInterface::renderTopicForSearch
File
- core/
modules/ help_topics/ src/ Plugin/ HelpSection/ HelpTopicSection.php, line 205
Class
- HelpTopicSection
- Provides the help topics list section for the help page.
Namespace
Drupal\help_topics\Plugin\HelpSectionCode
public function renderTopicForSearch($topic_id, LanguageInterface $language) {
$plugin = $this->pluginManager
->createInstance($topic_id);
if (!$plugin) {
return [];
}
// We are rendering this topic for search indexing or search results,
// possibly in a different language than the current language. The topic
// title and body come from translatable things in the Twig template, so we
// need to set the default language to the desired language, render them,
// then restore the default language so we do not affect other cron
// processes. Also, just in case there is an exception, wrap the whole
// thing in a try/finally block, and reset the language in the finally part.
$old_language = $this->defaultLanguage
->get();
try {
if ($old_language
->getId() !== $language
->getId()) {
$this->defaultLanguage
->set($language);
$this->translationManager
->setDefaultLangcode($language
->getId());
$this->languageManager
->reset();
}
$topic = [];
// Render the title in this language.
$title_build = [
'title' => [
'#type' => '#markup',
'#markup' => $plugin
->getLabel(),
],
];
$topic['title'] = $this->renderer
->renderPlain($title_build);
$cacheable_metadata = CacheableMetadata::createFromRenderArray($title_build);
// Render the body in this language. For this, we need to set up a render
// context, because the Twig plugins that provide the body assumes one
// is present.
$context = new RenderContext();
$build = [
'body' => $this->renderer
->executeInRenderContext($context, [
$plugin,
'getBody',
]),
];
$topic['text'] = $this->renderer
->renderPlain($build);
$cacheable_metadata
->addCacheableDependency(CacheableMetadata::createFromRenderArray($build));
$cacheable_metadata
->addCacheableDependency($plugin);
if (!$context
->isEmpty()) {
$cacheable_metadata
->addCacheableDependency($context
->pop());
}
// Add the other information.
$topic['url'] = $plugin
->toUrl();
$topic['cacheable_metadata'] = $cacheable_metadata;
} finally {
// Restore the original language.
if ($old_language
->getId() !== $language
->getId()) {
$this->defaultLanguage
->set($old_language);
$this->translationManager
->setDefaultLangcode($old_language
->getId());
$this->languageManager
->reset();
}
}
return $topic;
}