Форма поиска товаров на 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, чтобы объявить шаблон для отрисовки блока.

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

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

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

Изменить http код ответа для кастомной страницы

Октябрь 30, 2023 г.

Когда вы создаёте свою страницу, используя контроллер, то возможности тут же выбрать какой код ответа она возвращает нет. Контроллер занимается только формированием содержания страницы. Таким образом, страница возвращается с кодом 200. Что делать, ...

Читать

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

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

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

Читать

TMGMT переводит поле view_mode, объявленное плагином menu_link_extras

Июнь 17, 2024 г.

Поля, определенные модулями, не попадают в конфиг файлы сайта, и их не получается настроить привычным способом. В данном случае, требуется как то указать TMGMT модулю, что не нужно переводить поле view_mode. Чтобы предотвратить проблему, можно ...

Читать

Чем заменить file_create_url в Drupal 9/10

Январь 9, 2024 г.

Функция file_create_url устаревает, начиная с версии 9.3, а в 10й версии она уже отсутствует. Документация предлагает воспользоваться реализацией интерфейса \Drupal\Core\File\FileUrlGeneratorInterface, чтобы заместить устаревающую функцию в вашем ...

Читать
 

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

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



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