Всем привет!
Прошу помощи!
Пишу модуль просмотра книжки, который достает из postgres бд не друпальной структуры картинки в формате bytea.
Мне нужна чистая страница с элементами управления (2 кнопки вперед и назад), которая достает картинки из таблицы, 1 запись - 1 картинка.
Натолкнулся на две проблемы, друпал везде подтягиевает оформление шаблона. Решил тем что создал пустой twig шаблон для модуля в папке с шаблонами темы (page--MODULE_NAME.html.twig).
А вот дальше ступор, с помощью js отрисовал 2 кнопки, а как на них повесить события, чтобы происходил запрос к бд и доставались картинки? Т.е. при каждом нажатии (вперед) например, будет запрос в не друпальную бд, вытаскивание картинки и её отображение.
Комментарии
Какой костыль я собрал сейчас:
В settings.php добавил вторую бд, в модуле описал подключение и с помощью db_query() делаю выборку ВСЕХ картинок, далее с помощью $variables['#attached']['drupalSettings']['book_viewer']['images'] передаю этот массив картинок в js, и на странице уже вытаскивают из массива drupalSettings.images картинки.
Всё это с помощью хука hook_preprocess_page.
Но если книга большая (870 страниц, т.е. 870 картинок), то ничего не работает(
Это ещё даже не костыль. Это просто провальный эксперимент.
Используйте контроллеры и роуты Друпала. Но через AJAX. Вместо химии с кнопками на JS есть стандартный путь привязки AJAX-запросов к любой ссылке с помощью класса "use-ajax".
Ну, исключительно для примера:
https://drupalfly.ru/lesson/drupal-8-sozdanie-ajax-ssylki
В примере выводится alert(), но в можно изменить AlertCommand('Hello ' .$name)) на HTMLCommand() с указанием селектора-получателя.
По идее мне просто нужно не тянуть все картинки сразу, а запрашивать одну картинку книги делая запрос в бд, с этим проблема..
М. Сделать роут, /book/{book_id}/page/{page_number}, возвращать по этому роуту JsonResponse, в котором: номера соседних страниц (сами кнопки строить), и данные для построения страницы от запроса в базу.
Всем спасибо за помощь! Буду пробовать
Подскажите пожалуйста, а как мне использовать роуты если {book_id} приходит через get?
У меня такой роут:
path: /book_viewer
а дальше в url приходит get "?id=1234"
https://drupal.stackexchange.com/questions/207044/how-to-get-post-and-ge...
В контроллере $request->query->get('id');
Всё можно сделать немного проще.
В объявлении роутов (*.routing.yml) используйте параметры через слеш.
Например:
path: '/foo/{node1}/{node2}'
...
https://www.drupal.org/docs/8/api/routing-system/using-parameters-in-routes
Спасибо! Всё получилось, забыл отписаться, сделал по такому способу