Chris@0: t('View', [], ['context' => 'View entity type']), Chris@0: 'description' => t('Tokens related to views.'), Chris@0: 'needs-data' => 'view', Chris@0: ]; Chris@0: $info['tokens']['view']['label'] = [ Chris@0: 'name' => t('Label'), Chris@0: 'description' => t('The label of the view.'), Chris@0: ]; Chris@0: $info['tokens']['view']['description'] = [ Chris@0: 'name' => t('Description'), Chris@0: 'description' => t('The description of the view.'), Chris@0: ]; Chris@0: $info['tokens']['view']['id'] = [ Chris@0: 'name' => t('ID'), Chris@0: 'description' => t('The machine-readable ID of the view.'), Chris@0: ]; Chris@0: $info['tokens']['view']['title'] = [ Chris@0: 'name' => t('Title'), Chris@0: 'description' => t('The title of current display of the view.'), Chris@0: ]; Chris@0: $info['tokens']['view']['url'] = [ Chris@0: 'name' => t('URL'), Chris@0: 'description' => t('The URL of the view.'), Chris@0: 'type' => 'url', Chris@0: ]; Chris@0: $info['tokens']['view']['base-table'] = [ Chris@0: 'name' => t('Base table'), Chris@0: 'description' => t('The base table used for this view.'), Chris@0: ]; Chris@0: $info['tokens']['view']['base-field'] = [ Chris@0: 'name' => t('Base field'), Chris@0: 'description' => t('The base field used for this view.'), Chris@0: ]; Chris@0: $info['tokens']['view']['total-rows'] = [ Chris@0: 'name' => t('Total rows'), Chris@0: 'description' => t('The total amount of results returned from the view. The current display will be used.'), Chris@0: ]; Chris@0: $info['tokens']['view']['items-per-page'] = [ Chris@0: 'name' => t('Items per page'), Chris@0: 'description' => t('The number of items per page.'), Chris@0: ]; Chris@0: $info['tokens']['view']['current-page'] = [ Chris@0: 'name' => t('Current page'), Chris@0: 'description' => t('The current page of results the view is on.'), Chris@0: ]; Chris@0: $info['tokens']['view']['page-count'] = [ Chris@0: 'name' => t('Page count'), Chris@0: 'description' => t('The total page count.'), Chris@0: ]; Chris@0: Chris@0: return $info; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Implements hook_tokens(). Chris@0: */ Chris@0: function views_tokens($type, $tokens, array $data, array $options, BubbleableMetadata $bubbleable_metadata) { Chris@0: $url_options = ['absolute' => TRUE]; Chris@0: if (isset($options['language'])) { Chris@0: $url_options['language'] = $options['language']; Chris@0: } Chris@0: $replacements = []; Chris@0: Chris@0: if ($type == 'view' && !empty($data['view'])) { Chris@0: /** @var \Drupal\views\ViewExecutable $view */ Chris@0: $view = $data['view']; Chris@0: Chris@0: $bubbleable_metadata->addCacheableDependency($view->storage); Chris@0: Chris@0: foreach ($tokens as $name => $original) { Chris@0: switch ($name) { Chris@0: case 'label': Chris@0: $replacements[$original] = $view->storage->label(); Chris@0: break; Chris@0: Chris@0: case 'description': Chris@0: $replacements[$original] = $view->storage->get('description'); Chris@0: break; Chris@0: Chris@0: case 'id': Chris@0: $replacements[$original] = $view->storage->id(); Chris@0: break; Chris@0: Chris@0: case 'title': Chris@0: $title = $view->getTitle(); Chris@0: $replacements[$original] = $title; Chris@0: break; Chris@0: Chris@0: case 'url': Chris@0: try { Chris@0: if ($url = $view->getUrl()) { Chris@0: $replacements[$original] = $url->setOptions($url_options) Chris@0: ->toString(); Chris@0: } Chris@0: } Chris@0: catch (\InvalidArgumentException $e) { Chris@0: // The view has no URL so we leave the value empty. Chris@0: $replacements[$original] = ''; Chris@0: } Chris@0: break; Chris@0: case 'base-table': Chris@0: $replacements[$original] = $view->storage->get('base_table'); Chris@0: break; Chris@0: case 'base-field': Chris@0: $replacements[$original] = $view->storage->get('base_field'); Chris@0: break; Chris@0: case 'total-rows': Chris@0: $replacements[$original] = (int) $view->total_rows; Chris@0: break; Chris@0: case 'items-per-page': Chris@0: $replacements[$original] = (int) $view->getItemsPerPage(); Chris@0: break; Chris@0: case 'current-page': Chris@0: $replacements[$original] = (int) $view->getCurrentPage() + 1; Chris@0: break; Chris@0: case 'page-count': Chris@0: // If there are no items per page, set this to 1 for the division. Chris@0: $per_page = $view->getItemsPerPage() ?: 1; Chris@0: $replacements[$original] = max(1, (int) ceil($view->total_rows / $per_page)); Chris@0: break; Chris@0: } Chris@0: } Chris@0: } Chris@0: Chris@0: return $replacements; Chris@0: }