function TourViewBuilder::viewMultiple

Same name and namespace in other branches
  1. 10 core/modules/tour/src/TourViewBuilder.php \Drupal\tour\TourViewBuilder::viewMultiple()
  2. 9 core/modules/tour/src/TourViewBuilder.php \Drupal\tour\TourViewBuilder::viewMultiple()

Overrides EntityViewBuilder::viewMultiple

File

core/modules/tour/src/TourViewBuilder.php, line 16

Class

TourViewBuilder
Provides a Tour view builder.

Namespace

Drupal\tour

Code

public function viewMultiple(array $entities = [], $view_mode = 'full', $langcode = NULL) {
  /** @var \Drupal\tour\TourInterface[] $entities */
  $build = [];
  foreach ($entities as $entity_id => $entity) {
    $tips = $entity->getTips();
    $count = count($tips);
    $list_items = [];
    foreach ($tips as $index => $tip) {
      if ($output = $tip->getOutput()) {
        $attributes = [
          'class' => [
            'tip-module-' . Html::cleanCssIdentifier($entity->getModule()),
            'tip-type-' . Html::cleanCssIdentifier($tip->getPluginId()),
            'tip-' . Html::cleanCssIdentifier($tip->id()),
          ],
        ];
        $list_items[] = [
          'output' => $output,
          'counter' => [
            '#type' => 'container',
            '#attributes' => [
              'class' => [
                'tour-progress',
              ],
            ],
            '#children' => t('@tour_item of @total', [
              '@tour_item' => $index + 1,
              '@total' => $count,
            ]),
          ],
          '#wrapper_attributes' => $tip->getAttributes() + $attributes,
        ];
      }
    }
    // If there is at least one tour item, build the tour.
    if ($list_items) {
      end($list_items);
      $key = key($list_items);
      $list_items[$key]['#wrapper_attributes']['data-text'] = t('End tour');
      $build[$entity_id] = [
        '#theme' => 'item_list',
        '#items' => $list_items,
        '#list_type' => 'ol',
        '#attributes' => [
          'id' => 'tour',
          'class' => [
            'hidden',
          ],
        ],
        '#cache' => [
          'tags' => $entity->getCacheTags(),
        ],
      ];
    }
  }
  // If at least one tour was built, attach the tour library.
  if ($build) {
    $build['#attached']['library'][] = 'tour/tour';
  }
  return $build;
}

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