Создание сайта на Drupal 8

Опубликовано 2015.04.04 в разделе Drupal.

В этой серии статей мы разберем основы Drupal 8, начиная от установки и заканчивая небольшим практическим заданием. На данный момент(апрель 2015) восьмёрка ещё сыровата и модулей для неё мало, но знакомиться с ней уже давно пора. Если вы ещё не работали с Drupal - лучше начинайте с 8, пока научитесь и поймёте что там к чему - система будет гораздо стабильнее.

Подружить Admin menu и Toolbar

Опубликовано 2016.09.18 в разделе Drupal.

Чтобы подружить эти 2 модуля - включайте:
  • Administration menu
  • Administration menu Toolbar style
  • Toolbar
Создавайте свой модуль и в нём пропишите следующий хук:
  1. function mymodule_theme_registry_alter(&$theme_registry) {
  2. $theme_registry['toolbar']['path'] = $theme_registry['toolbar']['theme path'] = drupal_get_path('module', 'mymodule');
  3. }
Затем в папку модуля положите файл с именем toolbar.tpl.php и содержимым:
  1. <div id="toolbar" class="<?php print $classes; ?> clearfix"></div>

Colorbox node + Webform + Redirect

Опубликовано 2016.09.18 в разделе Drupal.

Если поставить модули colorbox, colorbox_node и webform - то можно чудесным образом выводить форму в модульном окне. Для этого создавайте вебформу, ставьте чекбокс "Доступен как блок" Затем в нужном месте прописывайте ссылку
  1. <a class="link colorbox-node" href="/node/304?width=420&height=150" >Закажи звонок!</a>
Такая ссылка откроет вебформу(nid=304) в колорбоксе размерами 420х150 пикселей. Однако, если этой форме добавить редирект после сабмита - то он не сработает. Для этого добавьте get параметр destination

Panels + Statistics + Drupal 8

Опубликовано 2016.09.14 в разделе Drupal.

Модуль статистики(тот что в ядре) ""цепляется за ноды в hook_ENTITY_TYPE_view. Если вы выводите ноды через панели(Pages) - то этот хук соответственно не будет работать. Разрулить проблему можно если самому подрубить библиотеку модуля statistics к страницам материалов. Я сделаю это в hook_page_attachments. Код хука
  1. /**
  2.  * Implements hook_page_attachments().
  3.  */
  4. function module_page_attachments(array &$page) {
  5. $request = \Drupal::request()->getRequestUri();
  6. $nid = NULL;
  7. if (substr($request, 0, 6) == '/node/') {
  8. $nid = substr($request, 6);
  9. } else {

DataBase API в Drupal 8

Опубликовано 2016.09.14 в разделе Drupal.

API в восьмёрке очень похоже на API.
  1. //не забываем
  2. use Drupal\Core\Database\Database;
  3. use Drupal\Core\Database\Query\Select;
  4.  
  5. //далее просто пример моего запроса
  6. $connection = Database::getConnection();
  7. $sql = new Select('node__field_tags', 'ft', $connection);
  8. $sql->condition('field_tags_target_id', $tids, 'in');
  9. $sql->leftJoin('taxonomy_term_field_data', 'tfd', 'tfd.tid=ft.field_tags_target_id');
  10. $sql->leftJoin('node_field_data','nfd', 'nfd.nid=ft.entity_id');
  11. $sql->fields('ft', array('field_tags_target_id', 'entity_id'));
  12. $sql->fields('tfd', array('name'));

Шаблон для field и fields во вьюсе для Drupal 8

Опубликовано 2016.09.12 в разделе Drupal.

Информацию о шаблонах из интерфейса вьюса успешно выпилили(надеюсь не навсегда). Чтобы сделать шаблон для поля - добавьте следующий хук:
  1. function template_preprocess_views_view_field(&$vars) {
  2. $field_id = $vars['field']->options['id'];
  3. $views_name = $vars['view']->id();
  4. $display_name = $vars['view']->getDisplay()->display['id'];
  5. $vars['theme_hook_original'] = 'views_view_field__' . $views_name . '__' . $display_name . '__' . $field_id;
  6. }
для полей
  1. function template_preprocess_views_view_fields(&$vars) {
  2. $views_name = $vars['view']->id();

Подключение css в Drupal 8

Опубликовано 2016.09.09 в разделе Drupal.

В файлах module_name.libraries.yml css подключается немного сложнее, чем js. Пример:
  1. map_render:
  2. js:
  3. js/infobox.js: {}
  4. js/markerclusterer.js: {}
  5. js/map_render.js: {}
  6. css:
  7. base:
  8. css/map_base.css: {}
  9. layout:
  10. css/map_layout.css: {}
  11. component:
  12. css/map_component.css: {}
  13. state:
  14. css/map_state.css: {}
  15. theme:
  16. css/map_theme.css: {}
Конкретно в этом случае все css подключатся в порядке добавления, одна происходит это за счёт веса их родительского раздела. Веса следующие:

    Ссылка с html кодом в анкоре

    Опубликовано 2016.09.08 в разделе Drupal.

    В семёрке в функцию l можно было передать третьим аргументом 'html' => TRUE В восьмёрке этого нет. Вместо этого анкор ссылки надо превратить в Markup. Простой пример:
    1. //не сработает
    2. $render_image = '<img src="/my-image.png" />';
    3. $link = Link::fromTextAndUrl($render_image, $url)->toRenderable();
    4.  
    5. //сработает
    6. $render_image = Markup::create('<img src="/my-image.png" />');
    7. $link = Link::fromTextAndUrl($render_image, $url)->toRenderable();