Шпаргалка по Drupal 8

27 февраля 2016 - 11:37

(статья периодически обновляется)

Кеширование

Отключение кеширования на время разработки - https://www.drupal.org/node/1903374 (при добавлении шаблонов в тему кеш все равно нужно сбрасывать, очистка кеша иногда занимает до минуты, поэтому сразу добавляйте по несколько шаблонов).

Темизация

Хорошее руководство по темизации Drupal 8 - http://sqndr.github.io/d8-theming-guide/index.html.
Подключение CSS/JS в теме - https://www.drupal.org/theme-guide/8/assets.
Добавление регионов - https://www.drupal.org/theme-guide/8/adding-regions.
Хуки темы, preprocess-функции в восьмерке добавляем в файл THEME.theme (аналог семерочного template.php).

Создание шаблона страницы для определенного типа материала

/**
 * Implements hook_theme_suggestions_HOOK_alter().
 */

function THEME_theme_suggestions_page_alter(array &$suggestions, array $variables) {

  if ($node = \Drupal::routeMatch()->getParameter('node')) {
    $content_type = $node->bundle();
    $suggestions[] = 'page__' . $content_type;
  }
}

Добавление плейсхолдера в поле ввода формы поиска

/**
* Implements hook_form_alter()
*/

function THEME_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
  if ('search_block_form' == $form_id) {
    $form['keys']['#attributes']['placeholder'][] = t('Search');
  }
}

Добавление заголовка страницы в хлебные крошки

function THEME_preprocess_breadcrumb(&$variables) {
  $request = \Drupal::request();
  $route_match = \Drupal::routeMatch();
  $page_title = \Drupal::service('title_resolver')->getTitle($request, $route_match->getRouteObject());
  $variables['breadcrumb'][] = array(
    'text' => $page_title
  );
}

Добавление названия сайта в переменную для шаблона страницы

function THEME_preprocess_page(&$variables) {
  $variables['site_name'] = \Drupal::config('system.site')->get('name');
}

Создание шаблона для кастомного типа блока

function THEME_theme_suggestions_block_alter(array &$suggestions, array $variables) {
  if (isset($variables['elements']['content']['#block_content'])) {
    array_splice($suggestions, 1, 0, 'block__bundle__' . $variables['elements']['content']['#block_content']->bundle());
  }
}

Пример создания опций темы

function THEME_form_system_theme_settings_alter(&$form, \Drupal\Core\Form\FormStateInterface &$form_state, $form_id = NULL) {
  // Work-around for a core bug affecting admin themes. See issue #943212.
  if (isset($form_id)) {
    return;
  }

  $form['custom_setting'] = array(
    '#type' => 'textfield',
    '#title' => t('Custom setting'),
    '#default_value' => theme_get_setting('custom_setting'),
  );
}

Twig

Краткая справка по Twig - https://github.com/vito/chyrp/wiki/Twig-Reference.
Путь к папке с темой - {{ base_path ~ directory }}.