contacts_events-8.x-1.x-dev/contacts_events.theme.inc

contacts_events.theme.inc
<?php

/**
 * @file
 * Contains theme hooks for contacts_events.
 */

use Drupal\Core\Link;
use Drupal\Core\Render\Element;
use Drupal\Core\StringTranslation\TranslatableMarkup;
use Symfony\Component\Routing\Exception\RouteNotFoundException;

/**
 * Implements hook_theme().
 */
function contacts_events_theme() {
  return [
    'contacts_event' => [
      'render element' => 'elements',
      'template' => 'contacts_event',
    ],
    'contacts_event__listing' => [
      'base hook' => 'contacts_event',
      'template' => 'contacts_event--listing',
    ],
    'event_content_add_list' => [
      'render element' => 'content',
      'variables' => ['content' => NULL],
    ],
    'contacts_ticket' => [
      'render element' => 'elements',
      'template' => 'contacts_ticket',
    ],
    'contacts_ticket_content_add_list' => [
      'render element' => 'content',
      'variables' => ['content' => NULL],
    ],
    'contacts_events_checkout_progress' => [
      'variables' => [
        'steps' => [],
      ],
    ],
    'contacts_events_ticket_summary' => [
      'variables' => [
        'order_entity' => NULL,
        'checkout_step' => '',
      ],
    ],
    'contacts_events_booking_summary' => [
      'variables' => [
        'order_entity' => NULL,
        'tickets' => NULL,
        'manage_tickets_url' => NULL,
        'booking_total' => NULL,
        'amount_paid' => NULL,
        'balance' => NULL,
      ],
    ],
    'commerce_order_receipt__contacts_booking' => [
      'template' => 'commerce-order-receipt--contacts-booking',
      'base hook' => 'commerce_order_receipt',
    ],
  ];
}

/**
 * Implements hook_theme_suggestions_HOOK().
 */
function contacts_events_theme_suggestions_contacts_event(array $variables) {
  $suggestions = [];
  $entity = $variables['elements']['#contacts_event'];
  $sanitized_view_mode = strtr($variables['elements']['#view_mode'], '.', '_');

  $suggestions[] = 'contacts_event__' . $sanitized_view_mode;
  $suggestions[] = 'contacts_event__' . $entity->bundle();
  $suggestions[] = 'contacts_event__' . $entity->bundle() . '__' . $sanitized_view_mode;
  $suggestions[] = 'contacts_event__' . $entity->id();
  $suggestions[] = 'contacts_event__' . $entity->id() . '__' . $sanitized_view_mode;
  return $suggestions;
}

/**
 * Prepares variables for Event templates.
 *
 * Default template: contacts_event.html.twig.
 *
 * @param array $variables
 *   An associative array containing:
 *   - elements: An associative array containing the user information and any
 *   - attributes: HTML attributes for the containing element.
 */
function template_preprocess_contacts_event(array &$variables) {
  // Fetch Event Entity Object.
  /** @var \Drupal\contacts_events\Entity\Event $contacts_event */
  $contacts_event = $variables['elements']['#contacts_event'];

  $text_overrides = [];
  foreach ($contacts_event->get('link_overrides') as $item) {
    $text_overrides[$item->name] = $item->text;
  }

  $variables['link'] = $contacts_event->toUrl()->toString();
  $variables['links']['more_info'] = $contacts_event->toLink($text_overrides['more_info'] ?? 'More info', 'canonical')->toRenderable();
  $variables['links']['more_info']['#access'] = $contacts_event->access('view');

  // Generate the render array for the Book Now link but assume no access.
  $variables['links']['book'] = $contacts_event->toLink($text_overrides['book'] ?? 'Book now', 'book')->toRenderable();
  $variables['links']['book']['#access'] = FALSE;

  // Only show the Book Now link if the user has access or is anonymous and the
  // event is open for public bookings. Anonymous users will be redirected to
  // the login URL with a destination to bring them back to the booking form.
  $booking_access = $contacts_event->access('book');
  if ($booking_access || (\Drupal::currentUser()->isAnonymous() && $contacts_event->isBookingOpen())) {
    $variables['links']['book']['#access'] = TRUE;
  }

  try {
    $event_listing_route_name = 'view.contacts_events_listings.page_1';
    // If the route doesn't exist this will throw a RouteNotFoundException
    // whereas createFromRoute will error without exception.
    \Drupal::service('router.route_provider')->getRouteByName($event_listing_route_name);
    $variables['links']['listing'] = Link::createFromRoute(new TranslatableMarkup('Back to events'), $event_listing_route_name, [])->toRenderable();
  }
  catch (RouteNotFoundException $exception) {
  }

  // Helpful $content variable for templates.
  foreach (Element::children($variables['elements']) as $key) {
    $variables['content'][$key] = $variables['elements'][$key];
  }
}

/**
 * Implements hook_theme_suggestions_HOOK().
 */
function contacts_events_theme_suggestions_contacts_ticket(array $variables) {
  $suggestions = [];
  $entity = $variables['elements']['#contacts_ticket'];
  $sanitized_view_mode = strtr($variables['elements']['#view_mode'], '.', '_');

  $suggestions[] = 'contacts_ticket__' . $sanitized_view_mode;
  $suggestions[] = 'contacts_ticket__' . $entity->bundle();
  $suggestions[] = 'contacts_ticket__' . $entity->bundle() . '__' . $sanitized_view_mode;
  $suggestions[] = 'contacts_ticket__' . $entity->id();
  $suggestions[] = 'contacts_ticket__' . $entity->id() . '__' . $sanitized_view_mode;
  return $suggestions;
}

/**
 * Prepares variables for Ticket templates.
 *
 * Default template: contacts_ticket.html.twig.
 *
 * @param array $variables
 *   An associative array containing:
 *   - elements: An associative array containing the user information and any
 *   - attributes: HTML attributes for the containing element.
 */
function template_preprocess_contacts_ticket(array &$variables) {
  // Fetch Ticket Entity Object.
  $contacts_ticket = $variables['elements']['#contacts_ticket'];

  // Helpful $content variable for templates.
  foreach (Element::children($variables['elements']) as $key) {
    $variables['content'][$key] = $variables['elements'][$key];
  }
}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc