Как при нажатии на кнопку сделать запрос к бд?

Главные вкладки

Аватар пользователя One_Two One_Two 1 июня 2018 в 16:23

Всем привет!

Прошу помощи!
Пишу модуль просмотра книжки, который достает из postgres бд не друпальной структуры картинки в формате bytea.
Мне нужна чистая страница с элементами управления (2 кнопки вперед и назад), которая достает картинки из таблицы, 1 запись - 1 картинка.
Натолкнулся на две проблемы, друпал везде подтягиевает оформление шаблона. Решил тем что создал пустой twig шаблон для модуля в папке с шаблонами темы (page--MODULE_NAME.html.twig).
А вот дальше ступор, с помощью js отрисовал 2 кнопки, а как на них повесить события, чтобы происходил запрос к бд и доставались картинки? Т.е. при каждом нажатии (вперед) например, будет запрос в не друпальную бд, вытаскивание картинки и её отображение.

Лучший ответ

Аватар пользователя fairrandir fairrandir 1 июня 2018 в 17:28
1

М. Сделать роут, /book/{book_id}/page/{page_number}, возвращать по этому роуту JsonResponse, в котором: номера соседних страниц (сами кнопки строить), и данные для построения страницы от запроса в базу.

Комментарии

Аватар пользователя One_Two One_Two 1 июня 2018 в 16:26

Какой костыль я собрал сейчас:
В settings.php добавил вторую бд, в модуле описал подключение и с помощью db_query() делаю выборку ВСЕХ картинок, далее с помощью $variables['#attached']['drupalSettings']['book_viewer']['images'] передаю этот массив картинок в js, и на странице уже вытаскивают из массива drupalSettings.images картинки.
Всё это с помощью хука hook_preprocess_page.
Но если книга большая (870 страниц, т.е. 870 картинок), то ничего не работает(

Аватар пользователя OldWarrior OldWarrior 1 июня 2018 в 17:27

One_Two wrote:
Какой костыль я собрал сейчас:

Это ещё даже не костыль. Это просто провальный эксперимент.

Используйте контроллеры и роуты Друпала. Но через AJAX. Вместо химии с кнопками на JS есть стандартный путь привязки AJAX-запросов к любой ссылке с помощью класса "use-ajax".

Ну, исключительно для примера:
https://drupalfly.ru/lesson/drupal-8-sozdanie-ajax-ssylki
В примере выводится alert(), но в можно изменить AlertCommand('Hello ' .$name)) на HTMLCommand() с указанием селектора-получателя.

Аватар пользователя One_Two One_Two 1 июня 2018 в 16:27

По идее мне просто нужно не тянуть все картинки сразу, а запрашивать одну картинку книги делая запрос в бд, с этим проблема..

Аватар пользователя fairrandir fairrandir 1 июня 2018 в 17:28
1

М. Сделать роут, /book/{book_id}/page/{page_number}, возвращать по этому роуту JsonResponse, в котором: номера соседних страниц (сами кнопки строить), и данные для построения страницы от запроса в базу.

Аватар пользователя One_Two One_Two 4 июня 2018 в 8:15

Подскажите пожалуйста, а как мне использовать роуты если {book_id} приходит через get?
У меня такой роут:
path: /book_viewer
а дальше в url приходит get "?id=1234"