Сниппеты

Drupal 8: Программное удаление и изменение мета-тегов

По мотивам вопроса http://dru.io/question/4777 ("Как переопределить META теги в head для Drupal 8?"), в котором автор вопроса решал задачу удаления ненужных ему мета-тегов в Drupal 8, решил написать этот небольшой сниппет. В Drupal 7 такая задача решалась в hook_html_head_alter(), которого в Drupal 8 уже нету.

Использование CKEditor в любых формах

Задача привязки CKEditor в Drupal 7 к текстовому полю любой формы решается довольно таки легко. Дело в том, что CKEditor инициализируется на элементах форм, которые имеют тип 'text_format'. Соответственно достаточно просто заменить существующий тип текстового поля textfield или textarea на text_format. При необходимости можно в свойстве поля #format указать машинное имя текстового формата.

Примеры выполнения HTTP запросов с помощью drupal_http_request()

Для выполнения HTTP запросов в Drupal API используется функция drupal_http_request(). Она позволяет выполнять GET, POST, PUT http запросы. В этом сниппете рассмотрим базовые примеры выполнения запросов с помощью этой функции. Данная функция актуальна для Drupal 6 и Drupal 7, так как в Drupal 8 запросы выполняются с помощью Guzzle.

Для начала выполним простой запрос к сервису яндекса для получения данных о погоде:

Выполнение действий после первого входа пользователя

Для того, чтобы выполнить какие-либо действия после авторизации пользователя, можно воспользоваться хуком hook_user_login(). Этот хук будет вызываться после каждого входа пользователя. Но если нужно, чтобы действия выполнялись только один раз после первого входа пользователя сразу после того, как он зарегистрировался, то можно использовать свойство объекта пользователя access ($user->access). В это свойство записывается время предыдущей "активности" пользователя. И, если пользователь залогинился первый раз, то это свойство будет равным нулю.

Google Analytics Counter - Вывод количества просмотров материалов

Для ведения статистики просмотра материалов в ядре Drupal есть модуль Statistics. Но в плане производительности этот модуль "тяжеловат". Это связано с тем, что модуль при каждом просмотре материала делает соответствующую запись в базу данных и также делает выборку количества просмотров для просматриваемого материала. Но можно использовать в качестве более легковесного решения модуль Google Analytics Counter, который использует данные о просмотрах страниц сервиса Google Analytics.

Ограничение допустимого выбора в exposed filters

Чтобы ограничить список допустимых значений в раскрытом фильтре (exposed filter) для views, можно в настройках фильтра вручную выбрать термины которые можно будет выбирать. Но термины могут со временем добавляться, да и их может быть большое количество и неудобно выбирать из большого списка. Можно программно ограничить допустимые значения терминов в hook_form_FORM_ID_alter(). Его можно имплементировать либо в кастомном модуле, либо в template.php файле темы.

Редирект с http на https

В свете последних заявлений Google о дополнительных преимуществах сайтов, работающих по протоколу https, и даже о возможном участии этого фактора в ранжировании сайтов в поисковой выдаче, встает вопрос о перенаправлении всех страниц сайта с http протокола на https. В данном случае будем рассматривать перенаправление именно всех страниц, а не отдельных страниц (страницы логина или checkout страниц для магазинов).

Редирект будет выполняться в .htaccess файле, который находиться в корневом каталоге drupal установки. Для создания редиректа открываем этот файл и находим там строку

Кастомизация хлебных крошек и заголовков страниц представлений

Хлебные крошки и тайтлы, выводимые на страницах вьюсов, порой нуждаются в изменениях, которые невозможно сделать из админки самого представления. В таких случаях можно вмешаться программно и изменить крошки и заголовок страницы вьюшки. Для этого подходит hook_views_post_build(), который выполняется после сборки представления, в самом конце views::build(), при этом SQL запрос уже построен, но ещё не передан в db_rewrite_sql().

Выбор цветовой схемы в настройках темы

Для добавления выбора цветовой схемы темы в друпале имеется модуль color. Но возможно также и создать собственные настройки в своей теме для выбора цветовой схемы, для которой в css файле заранее описаны стили. Самый простой вариант, в зависимости от настроек темы, добавлять тегу body уникальный для каждого цвета класс. Для этого нужно внести в тему следующие изменения:

Добавим в форму настроек темы селект с выбором цветовой схемы. Для этого создаем в папке с темой файл theme-settings.php и туда добавляем код:

Синонимы урлов материалов на основе иерархии терминов таксономии

Зачастую возникает необходимость создания алиасов путей материалов с помощью pathauto на основе иерархии терминов таксономии, прикрепленных к материалу с помощью поля taxonomy term reference. Для добавления таких алиасов понадобится модуль Entity API и его подмодуль Entity token. Для примера рассмотрим интернет магазин, продающий мужскую и женскую одежду и обувь.