Форма поиска товаров на 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

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

Весьма распространённый случай, когда в качестве exposed filter используется поле, связанное с таксономией. Так вы получаете набор опций в фильтре для своего представления, которое доступно пользователю. Также весьма часто некоторые дополнительные ...

Читать

Переадресация на основной домен в Drupal

Июль 17, 2023 г.

Данный подход скорее полезен как демонстрация инструментария, чем действительно реализация редиректа на основной домен. Потому что лучше это делать средствами сервера, а не ПО, чтобы уменьшить нагрузку на сервер. Drupal 8 работает на базе симфонии, ...

Читать

Ошибка обновления metatag remove_robots_noydir_noodp

Май 24, 2023 г.

Если у вас собран Drupal + Commerce, то, возможно, при обновлении модуля метатегов возникает ошибка. Модуль не находит таблицы мета информации для сущности commerce_product и прерывается с выводом сообщения: [crayon-6a4bd8f682e54454954764/] ...

Читать

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

Январь 9, 2024 г.

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

Читать
 

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

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



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