15 лучших модулей в Drupal 8
Drupal 8 одна из популярнейших CMS в области создания сайтов. При этом для неё доступно огромное количество модулей, упрощающих жизнь как простому разработку, так и обычному пользователю.
В этой статье я перечислю отдельные модули, которые чаще всего пригаждаются мне, возможно Вам также они будут полезны.
Сегодня мы поговорим о 15 лучших, на мой взгляд, модулях Drupal 8, существующих
1. Paragraphs
Paragraphs - модуль позволяющий с помощью функциональности перетаскивания редактировать структуру статьи из взаимосвязанных полей. В некоторой степени это "шаблон" разметка, которая позволяет в дальнейшем её использовать многократно. В любом расположении на странице, что улучшает гибкость данного модуля и отображение структуры сайта.
В дополнение к сказанному, Paragraphs позволяет использовать встраивать шаблоны друг друга неоднократно.
2. Webform
Данный модуль поддерживает возможность установки различных форм, которые поддерживают формы с несколькими этапами заполнения, различный набор полей input и т.д.
Данный модуль я поставлю на второе место за следующие его положительные свойства:
- Гибкость настроек;
- Возможность Yaml и Rest;
- Формы в несколько этапов (что очень удобно для пользователей интернет магазинов).
3. Display Suite
Display Suite полезный и удобный модуль, позволяющий настраивать шаблон с помощью функциональности перетаскивания полей.
При этом позволяет указать настройки отображения полей для различных видов отображения данных (для полной статьи для teaser и т.д.).
4. Rabbit Hole
Данный модуль имеет возможность скрывать от пользователя нежелательный контент на сайте. Например, когда пользователь по той или иной причине зашел на страницу представления (view), или к примеру, сайт содержит типы файлов, которые пользователь не должен просматривать и никогда к ним обращаться.
По моему мнению, данный модуль вполне может Вам пригодится в дальнейшем для улучшения поисковой выдачи сайта.
5. Field Group
Из названия можно догадаться, что модуль поддерживает группировку чего-то. На самом деле с его помощью Вы можете группировать отдельные поля. Группировка на основе вкладок (tabs), пори чем как горизонтальных так и вертикальных.
6. Pathauto & Redirect
Ничего сложного, но модуль полезен тем, что создает автоматически алиасы статей и отдает 301 Redirect. Думаю без него не обойдется ни одни нормальный сайт.
7. MMenu
С помощью данного модуля возможно создать меню для мобильный устройств с поддержкой тачскрин. Также одним из плюсов данного модуля является возможность комбинировать несколько меню, а также поддержка hammer.js и superfish.
8. AdvAgg
Модуль дополняющий стандартные возможноcти Drupal 8 для аггрегации CSS и JS файлов. С учетом интернет аудитории, состоящей на 50% из смартфонов, оптимизация контента будет востребована, что позволяет сделать данный модуль.
При этом, на странице модуля указаны тесты, основанные на Google's PageSpeed Insights and WebPagetest.org. Из которых следует прирост производительности и ускорения загрузки сайта.
9. Twig Tweak
Модуль поддерживающий возможность вставки блоков и сущностей Drupal 8 в шаблонах Twig. Примеры (взяты с официальной страницы Drupal):
<dl class="examples">
{# This accepts views arguments as well. #}
<dt>View:</dt>
<dd>{{ drupal_view('who_s_new', 'block_1') }}</dd>
{# This might be useful to check if a view returns nothing. #}
<dt>View results:</dt>
<dd>{{ drupal_view_result('who_s_new', 'block_1') }}</dd>
{# No need to configure this block on "admin/structure/block" page. #}
<dt>Block:</dt>
<dd>{{ drupal_block('system_branding_block', {label: 'Branding', use_site_name: false}) }}</dd>
{# Bypass block.html.twig theming. #}
<dt>Block (without wrapper):</dt>
<dd>{{ drupal_block('system_branding_block', wrapper=false) }}</dd>
{# Pass theme name as a second argument if needed. #}
<dt>Region:</dt>
<dd>{{ drupal_region('sidebar_first') }}</dd>
{# It can be any content entity. #}
<dt>Entity:</dt>
<dd>{{ drupal_entity('block_content', 1) }}</dd>
{# Form mode can be passed in third parameter. #}
<dt>Entity edit form:</dt>
<dd>{{ drupal_entity_form('node', 1) }}</dd>
{# Bundle (type) property is required for creating a new entity. #}
<dt>Entity add form:</dt>
<dd>{{ drupal_entity_form('node', values={type: 'article'}) }}</dd>
{# Render a single entity field. #}
<dt>Field:</dt>
<dd>{{ drupal_field('field_image', 'node', 1) }}</dd>
{# Expand menu items to display the entire menu tree. #}
<dt>Menu:</dt>
<dd>{{ drupal_menu('main') }}</dd>
{# Specify menu level, depth and expand all children. #}
<dt>Part of menu:</dt>
<dd>{{ drupal_menu('admin', 2, 3, TRUE) }}</dd>
{# Slashes should be escaped. #}
<dt>Form:</dt>
<dd>{{ drupal_form('Drupal\\search\\Form\\SearchBlockForm') }}</dd>
{# The argument can be FID, UUID or URI. Renders an <img> tag #}
<dt>Image:</dt>
<dd>{{ drupal_image('public://ocean.jpg', null, {alt: 'Insert alternative text here', title: 'The title text'}) }}</dd>
{# Check out 'admin/config/media/responsive-image-style' page for available responsive image styles. Renders an <img srcset> or <picture> #}
<dt>Responsive image:</dt>
<dd>{{ drupal_image('public://ocean.jpg', 'wide', responsive=true) }}</dd>
{# The filter processes either path or URI to original image. Renders a plain URL #}
<dt>Image style:</dt>
<dd>{{ 'public://images/ocean.jpg'|image_style('thumbnail') }}</dd>
{# Use token API to deliver data to your templates. #}
<dt>Token:</dt>
<dd>{{ drupal_token('site:name') }}</dd>}
{# Tokens can be extracted from the context. #}
<dt>Token with context:</dt>
<dd>{{ drupal_token('node:title', {node: node}) }}</dd>
{# Replace multiple tokens at once. #}
<dt>Token replace:</dt>
<dd>{{ '<h1>[site:name]</h1><div>[site:slogan]</div>'|token_replace }}</dd>
{# Another way to get site name. #}
<dt>Config:</dt>
<dd>{{ drupal_config('system.site', 'name') }}</dd>
{# Without arguments this would dump all available Twig variables. #}
<dt>Dump variable:</dt>
<dd>{{ drupal_dump(var) }}</dd>
{# Same as previous but shorter. #}
<dt>Dump variable (alias):</dt>
<dd>{{ dd(var) }}</dd>
{# The title is cached per URL. #}
<dt>Page title:</dt>
<dd>{{ drupal_title() }}</dd>
{# Unlike core URL function it accepts path as an argument (not route). #}
<dt>URL:</dt>
<dd>{{ drupal_url('node/1', {absolute: true}) }}</dd>
{# The arguments are pretty much the same as in drupal_url(). #}
<dt>Link:</dt>
<dd>{{ drupal_link('Example'|t, 'node/1') }}</dd>
{# Prints Drupal status messages without block wrapper. #}
<dt>Status messages:</dt>
<dd>{{ drupal_messages() }}</dd>
{# Same as above but for breadcrumbs. #}
<dt>Breadcrumbs:</dt>
<dd>{{ drupal_breadcrumb() }}</dd>
{# The wrapper element must have 'contextual-region' class. #}
<dt>Contextual links:</dt>
<dd>
<div class="contextual-region">
{{ contextual_links('entity.view.edit_form:view=frontpage&display_id=page_1') }}
{{ drupal_view('frontpage') }}
</div>
</dd>
{# This makes Xdebug break on the specific line in the compiled Twig template. #}
<dt>Breakpoint:</dt>
<dd>{{ drupal_breakpoint() }}</dd>
{# Welcome back old friend! Refer to Notes (below) to enable. #}
<dt>PHP filter:</dt>
<dd class="bad-practice">© {{ 'return date("Y");'|php }}</dd>
{# The easiest way to alter their output. #}
<dt>Preg replace:</dt>
<dd>{{ 'Drupal - community plumbing!'|preg_replace('/(Drupal)/', '<b>$1</b>') }}</dd>
{# Input language can be passed through arguments. #}
<dt>Transliteration:</dt>
<dd>{{ 'Привет!'|transliterate }}</dd>
{# This supports file, image and media fields. #}
<dt>File URL:</dt>
<dd>{{ node.field_media|file_url }}</dd>
{# Check out available input formats on admin/config/content/formats page. #}
<dt>Check markup:</dt>
<dd>{{ '<b>bold</b> <strong>strong</strong>'|check_markup('restricted_html') }}</dd>
{# See Drupal\Component\Utility\Unicode::truncate(). #}
<dt>Truncate:</dt>
<dd>{{ 'Some long text'|truncate(10, true) }}</dd>
{# This is an opposite of core 'without' filter. #}
<dt>With:</dt>
<dd>{{ item|with('#title', 'Example') }}</dd>
{# Do not put this into node.html.twig template to avoid recursion. #}
<dt>Entity view:</dt>
<dd>{{ node|view }}</dd>
{# You can supply display settings or view mode if necessary. #}
<dt>Field view:</dt>
<dd>{{ node.field_image|view }}</dd>
{# This is useful for processing individual field items. #}
<dt>Children:</dt>
<dd>{{ node.field_example|children }}</dd>
</dl>
9. Coffee
Модуль для навигации по меню admin панели к примеру alt + D или alt + shift + D.
10. Adminimal Admin Toolbar
Модуль для навигации по меню в режиме смартфона. Вместо текста в меню будут содержаться иконки.
11. File Entity Browser/Media
Данный модуль заменяет стандартную загрузку файлов. В дополнение Вы можете загружать множественные изображения и в дальнейшем использовать из неоднократно.
12. Admin Toolbar
На первое место я поставлю данный модуль, поскольку он существенно сокращает мое время для передвижения по администраторскому разделу сайта. Данный модуль также поддерживает ярлыки (shortcut).
13. Module Filter
Также существенно сокращает мое время на поиск и установку модулей. С его использованием будет доступно поле autocomplete, по которому возможно будет фильтровать модули для их поиска.
14. Content Lock
Пригодится для многопользовательской системы Drupal, модуль позволяет блокировать редактирование материалов, если в данный момент их редактирует другой пользователь.
15. reCAPTCHA
Без Google каптчи мой сайт бы заспанили роботы и Ваш тоже).
На этом остановлюсь.
Для сведения, в интернет наткнулся на статистику использования модулей.