function HelpTopicPluginController::viewHelpTopic

Same name and namespace in other branches
  1. 9 core/modules/help_topics/src/Controller/HelpTopicPluginController.php \Drupal\help_topics\Controller\HelpTopicPluginController::viewHelpTopic()
  2. 10 core/modules/help/src/Controller/HelpTopicPluginController.php \Drupal\help\Controller\HelpTopicPluginController::viewHelpTopic()
  3. 11.x core/modules/help/src/Controller/HelpTopicPluginController.php \Drupal\help\Controller\HelpTopicPluginController::viewHelpTopic()

Displays a help topic page.

Parameters

string $id: The plugin ID. Maps to the {id} placeholder in the help.help_topic route.

Return value

array A render array with the contents of a help topic page.

1 string reference to 'HelpTopicPluginController::viewHelpTopic'
help_topics.routing.yml in core/modules/help_topics/help_topics.routing.yml
core/modules/help_topics/help_topics.routing.yml

File

core/modules/help_topics/src/Controller/HelpTopicPluginController.php, line 70

Class

HelpTopicPluginController
Controller for help topic plugins.

Namespace

Drupal\help_topics\Controller

Code

public function viewHelpTopic($id) {
    $build = [];
    if (!$this->helpTopicPluginManager
        ->hasDefinition($id)) {
        throw new NotFoundHttpException();
    }
    
    /* @var \Drupal\help_topics\HelpTopicPluginInterface $help_topic */
    $help_topic = $this->helpTopicPluginManager
        ->createInstance($id);
    $build['#body'] = $help_topic->getBody();
    $this->renderer
        ->addCacheableDependency($build, $help_topic);
    // Build the related topics section, starting with the list this topic
    // says are related.
    $links = [];
    $related = $help_topic->getRelated();
    foreach ($related as $other_id) {
        if ($other_id !== $id) {
            
            /** @var \Drupal\help_topics\HelpTopicPluginInterface $topic */
            $topic = $this->helpTopicPluginManager
                ->createInstance($other_id);
            $links[$other_id] = [
                'title' => $topic->getLabel(),
                'url' => Url::fromRoute('help.help_topic', [
                    'id' => $other_id,
                ]),
            ];
            $this->renderer
                ->addCacheableDependency($build, $topic);
        }
    }
    if (count($links)) {
        uasort($links, [
            SortArray::class,
            'sortByTitleElement',
        ]);
        $build['#related'] = [
            '#theme' => 'links__related',
            '#heading' => [
                'text' => $this->t('Related topics'),
                'level' => 'h2',
            ],
            '#links' => $links,
        ];
    }
    $build['#theme'] = 'help_topic';
    $build['#title'] = $help_topic->getLabel();
    return $build;
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.