You are here

public function HelpTopicPluginController::viewHelpTopic in Drupal 9

Same name and namespace in other branches
  1. 8 core/modules/help_topics/src/Controller/HelpTopicPluginController.php \Drupal\help_topics\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;
}