Установка патчей в Drupal 8
Ставим пакет, позволяющий композеру работать с патчами:
composer require cweagans/composer-patches
В файле composer.json, что в корне сайта, в разделе extra необходимо создать дополнительное вложение patches.
В нем патчи будут описываться по следующем образцу:
"patches": {
"drupal/config_installer": {
"Memory leak": "https://www.drupal.org/files/issues/2018-08-21/2991182-6.pat..."
}
}
Модуль, который будет пропатчен, обязательно должен быть установлен через composer.
Для того чтобы применить патч — в терминале в корневой папке сайта прописываем команду:
composer update nothing
Простейший поиск в Drupal 8
Добавляем новое представление:
/admin/structure/views/add
Если вы выводите содержимое вместо полей, то в настройках формата поставьте галку Принудительно использовать поля.
Добавьте поля, по которым будет производится поиск:
В Критериях фильтрации добавляем поле Фильтр комбинированных полей и делаем его раскрытым.
В селекте «Оператор» выбираем «Содержит».
В поле «Выберите объединяемые для фильтрации поля», зажимая клавишу CTRL, выберите поля, по которым будет производится поиск.
Сохраняем представление.
Переходим на страницу поиска:
Форма поиска привязана к странице. Для того чтобы сделать ее отдельным блоком:
В настройках представления → Расширенные → Раскрытая форма → Раскрытая форма в блоке → Ставим radiobutton в положение «Да».
В схеме блоков:
/admin/structure/block
Добавляем блок поиска нашего представления:
Я расположил в сайдбар:
Если вам нужно сделать очень простой поиск — данный подход для вас.
В иных случаях советую смотреть в сторону SEARCH API.
Меняем иконки в AddToAny / Drupal 8
Заходим в настройки модуля:
/admin/config/services/addtoany
Стандартная разметка выглядит так:
<a class="a2a_button_facebook"></a>
<a class="a2a_button_twitter"></a>
<a class="a2a_button_google_plus"></a>
Для того чтобы заменить иконки на свои достаточно подставить внутрь ссылок свои картинки:
<a class="a2a_button_facebook">
<img src="/sites/default/files/custom/icons/fb.png" width=32 height=32>
</a>
<a class="a2a_button_twitter">
<img src="/sites/default/files/custom/icons/tw.png" width=32 height=32>
</a>
<a class="a2a_button_google_plus">
<img src="/sites/default/files/custom/icons/google.png" width=32 height=32>
</a>
Обновление ядра и модулей / Drupal 8
Прежде чем приступать к обновлению — всегда читайте логи на странице релиза ядра/модуля и уже на основании этой информации — принимайте решение — обновляться или нет.
Бэкап
Делаем резервную версию сайта:
drush ard
Если сайт сделан через Drupal Project, то девятый drush будет поставлен локально. Команда drush ard может не сработать.
Именно поэтому бэкап придется сделать вручную.
Выгружаем базу данных в текущую папку:
drush cr ; drush sql-dump > dump.sql
Архивируем папку с сайтом:
zip -r site.zip site
Обновление ядра
Ядро обновляется командой:
composer update drupal/core --with-dependencies -o
После обновления ядра необходимо обновить базу данных и выгрузить конфиги:
drush cr ; drush updb --entity-updates -y ; drush cex -y
Идем на страницу “Отчет о состоянии” и проверяем на наличие ошибок и смотрим на версию ядра:
/admin/reports/status
В некоторых случаях, когда нужно обновить старый сайт, нужно удалять папки core, vendor и composer.lock, предварительно сделав резервную копию:
zip -r core.zip core ; zip -r vendor.zip vendor ; zip composer.lock.zip composer.lock ; rm -rf core ; rm -rf vendor ; rm composer.lock
И обновить весь сайт:
composer update --with-dependencies -o ; drush updb --entity-updates -y ; drush cr ; drush cex -y
Будьте крайне осторожны, обновляя все на сайте. После обновления некоторых модулей — часть функционала сайта может оказаться неработоспособной.
Обновление модуля
Модуль обновляется точно также как и ядро. Единственное отличие, что вместо core необходимо прописать название модуля:
composer update drupal/modulename ; drush updb --entity-updates -y ; drush cr ; drush cex -y
Если модуль не обновился - возможно его нет в файле composer.json. Как правило, это значит, что модуль был установлен через drush.
Нужно заново установить его через composer:
composer require drupal/modulename ; drush updb --entity-updates -y ; drush cr ; drush cex -y
Все настройки модуля сохранятся.
Восстановление сайта через бэкап
Это больше актуально, если вы по каким-то причинам обновили сайт сразу на продакшине. Этого делать не рекомендуется. Лучше сделать апдейт на локалке или техническом сервере, после чего — перенести изменения на основной сайт.
drush
Если сайт сломан и нет времени разбираться, то лучше сразу развернуть бэкап.
drush arr backup.tar.gz --overwrite
Файл с бэкапом должен располагаться параллельно с папкой сайта.
Вручную
Если бэкап был сделан вручную, то просто разархивируем архив и заменяем старый на него.
Импортировать БД, которая находится в файле dump.sql можно командой:
drush sql-drop ; drush sql-cli < dump.sql
sql-drop полностью очистит БД, доступы к которой хранятся в файле:
/sites/default/settings.php
sql-cli < dump.sql импортирует БД из файла dump.sql в БД, доступы к которой хранятся в файле:
/sites/default/settings.php
Убедитесь, что файл dump.sql на месте. Иначе можно очистить текущую БД, а импортировать будет нечего.
Сбрасываем кэш:
drush cr
Возможные проблемы
Последние записи журнала
Если сайт перестал работать, вместо страницы открывается непредвиденная ошибка или страница 500, то причину можно прочитать на странице “Последние записи журнала”:
/admin/reports/dblog
Находим последнюю ошибку. Если по контексту понятно в чем проблема - исправляем. Если нет - копируем ошибку и гуглим.
Журнал в ISPmanager
Попасть в журнал ISPmanager можно по адресу:
site.ru:1500/ispmgr
Журналы ошибок находится в сайдбаре -> WWW -> Журналы.
Открываем:
site.ru.error.log
Далее, аналогично с пунктов “Последние записи журнала”
Проблемные модули
Должен предупредить, что все, что написано ниже — это проблемы, с которыми столкнулся лично я. Вполне вероятно, что я делал что-то не так, и информация не отражает действительности. Если это так — напишите мне, буду рад исправиться.
Следующие модули лучше не обновлять:
- Block tabs;
- Color field;
С этими стоит быть осторожнее:
- Webform;
- Admin Toolbar;
После апдейта может поменяться разметка, а следовательно - верстка слетит.
Для того чтобы модули не обновились после команды:
composer update --with-dependencies -o
Нужно установить конкретную версию модуля. Например мы видим, что Block Tabs требует обновления:
Т.к. сейчас установлена версия 8x-1.0-alpha3, то я копирую все, после 8x- и переустанавливаю Block Tabs, чтобы он не обновлялся и был зафиксирован на этой версии:
composer require drupal/blocktabs:1.0-alpha3
Создание вебформы в Drupal 8
Устанавливаем и включаем модуль Webform:
composer require drupal/webform ; drush en webform_ui -y
Заходим на страницу списка всех вебформ:
/admin/structure/webform
Нажимаем кнопку «Add webform» и пишем заголовок вебформы.
Наша вебформа будет состоять из:
- Имя;
- Почта;
- Комментарий;
- Согласие на обработку персональных данных;
- Кнопка отправки.
Добавим текстовое поле. Для этого в настройках вебформы нажимаем кнопку «Добавить элемент» и выбираем «Текстовое поле»:
Пишем название поля и меняем машинное имя:
Сохраняем. Аналогично добавляем Почту и Комментарий, но вместо текстового поля — Email и Текстовая область соответственно.
Теперь добавим поле с согласием на обработку персональных данных. Нам понадобится чекбокс / флажок:
Осталось только настроить кнопку и форма готова:
Заходим на страницу «Подтверждение».
/admin/structure/webform/manage/машинное_имя_вебформы/settings/confirmation
Что увидит пользователь после заполнение формы?
Самый простой способ — модальное окно!
Теперь можем протестировать нажав на кнопку «Тест».
Все заявки можно увидеть на странице «Результаты»:
/admin/structure/webform/manage/машинное_имя_вебформы/results/submissions
Для того чтобы сообщения с вебформы приходили на почту — заходим на страницу «Emails/Handlers»
/admin/structure/webform/manage/feedback/handlers
Нажимаем кнопку «Add email». Необходимо заполнить следующие настройки:
Здесь я настраиваю отправку почты для себя, чтобы иметь возможность протестировать вебформу.
Кому будут приходить письма с вебформы? CC email и BCC email это второй и третий получатель. Но я никогда не пользуюсь этими полями.
От кого будут приходить письма. Почта отправителя не обязательно должна существовать. Главное, чтобы домен отправителя совпадал с доменом сайта.
Тема и содержимое сообщения. Особое внимание к Twig — он позволит более или менее оформить письмо.
После окончания тестирования формы — отправку можно отключить во вкладке «Расширенные»:
Если сайт не отправляет формы — вам нужно настроить SMTP.
Если письма не приходят сверстанными — вам нужно настроить Mime Mail.
Отключаем кэширование в Drupal 8
Открываем файл:
sites/default/settings.php
Раскомментируем следующие строки:
if (file_exists($app_root . '/' . $site_path . '/settings.local.php')) {
include $app_root . '/' . $site_path . '/settings.local.php';
}
Создаем файл settings.local.php:
cp sites/example.settings.local.php sites/default/settings.local.php
Раскомментируем следующие строки:
$settings['cache']['bins']['render'] = 'cache.backend.null';
$settings['cache']['bins']['page'] = 'cache.backend.null';
$settings['cache']['bins']['dynamic_page_cache'] = 'cache.backend.null';
Создаем файл development.services.yml:
cp sites/development.services.yml sites/default/development.services.yml
Создаем файл services.yml:
touch sites/default/services.yml
И добавляем в него параметры:
parameters:
twig.config:
debug : true
auto_reload: true
cache: false
Сбрасываем кэш:
drush cr
Оптимизация CSS и JS в Drupal 8
1. Перейти в раздел производительность.
/admin/config/development/performance
2. Поставить галки на Объединение CSS файлов и Объединить файлы JavaScript.
3. Нажать кнопку Сохранить конфигурацию.
Это простейший способ оптимизировать CSS и JS, которого должно быть достаточно в 90% случаев (в рамках drupal).