Форма поиска товаров на Drupal

Здесь подробно рассмотрим небольшую задачу для сайта под управлением CMS Drupal.

Требуется выводить поисковую форму для товаров в виде блока. Форма состоит всего из одного текстового поля, и должна искать товары по названию и аналогам. В поле будет использоваться авто-дополнение текста, показывая список, где можно выбрать товар. При выборе товара из списка, пользователь будет перенаправлен на страницу товара.

Компоненты задачи

Во-первых, у нас фигурирует форма, хоть и очень простая. Я буду реализовывать форму, расширяя класс Drupal\Core\Form\FormBase.

Далее — форма должна быть отображена в составе блока, поэтому я создам класс на базе Drupal\Core\Block\BlockBase.

Для формы нам требуется источник данных для списка авто-дополнения. Добавим маршрут и реализуем контроллер на базе Drupal\Core\Controller\ControllerBase.

Все эти компоненты я объединю в один модуль.

Файловая структура

Модуль, названный custom_blocks, хранит все нужные нам файлы, исключая только стили, которые мы рассматривать не будем. Стили размещены где то в /themes.

Форма

Для описания формы создадим класс ProductSearch с id ‘product_search‘ в файлe /src/Form/ProductSearch.php, как того требует стандарт PSR-4.

Листинг формы.

Блок

Блок SearchGoodsBlock реализуем в файле /src/Plugin/Block/SearchGoodsBlock.php. Ему потребуется собственный шаблон /templates/search-form-for-goods.html.twig, который в свою очередь будет использовать библиотеку /libs/product-search-autocomplete.js, где я добавлю переход на страницу товара при выборе элемента списка.

Листинг файлов блока.

Контроллер

Контроллер с длинным названием
/src/Controller/ProductSearchAutoCompleteController.php
будет обслуживать список авто-дополнения (‘#autocomplete_route_name’) формы, возвращая список товаров как пару значений value: label. В value я запишу url страницы товара.

Листинг контроллера.

Модуль

YML файлы и файл модуля custom_blocks.module настраивают описанные компоненты.

custom_blocks.info.yml — описатель модуля: название, версия ядра и пара зависимостей — вот и всё что там указано.

custom_blocks.libraries.yml — здесь описан js файл, который мы подключим в шаблоне блока.

custom_blocks.routing.yml — объявляет endpoints и связывает их с контроллерами. У нас тут всего один маршрут.

custom_blocks.module — реализует hook_theme, чтобы объявить шаблон для отрисовки блока.

Программный вывод блока

Все компоненты готовы, теперь выведем блок.

Мало букафф? Читайте есчо !

Дополняем результаты views

Февраль 14, 2024 г.

Пример того, как можно дополнить результаты views в Drupal 9/10. Задача - вывести для статьи блок со связанными публикациями. В начале нужно было просто выводить последние статьи того же типа, а потом у заказчика возникло желание переопределять выдачу, ...

Читать

Редактируем атрибуты ссылки в twig шаблоне

Июль 14, 2023 г.

Как без хуков preprocess в Drupal добавить, например, атрибут target для ссылки в шаблоне? Например, возьмем штатный шаблон file-link.html.twig: [crayon-68fc6c94d10a6432016643/] Используем фильтр merge, добавляя нужные атрибуты: [crayon-68fc6c94d10af797655992/]

Читать

Создание контроллера для скачивания файла в Drupal

Сентябрь 6, 2023 г.

Пример кода, реализующий endpoint скачиваемого файла. [crayon-68fc6c94d130c363608511/] Кроме контроллера, вам потребуется еще задать маршрут. Пример описания маршрута: [crayon-68fc6c94d1315807104344/]

Читать

Сохранение файла, полученного через форму в Drupal

Февраль 17, 2024 г.

Вы создали форму с полем типа file, и хотите сохранять файл как сущность друпала при отправке данных формы. [crayon-68fc6c94d15ac277132065/] Обычно объявления форм в Drupal 8+ размещаются в виде расширений класса FormBase в каталоге модуля /scr/Form/*. ...

Читать
 

Комментарии к «Форма поиска товаров на Drupal»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий: