Как по феншую создавать свой модуль?
Небольшая форма.
Огромная таблица которая изменяется от значений которые в форме.
Сейчас всё пишу в файл:
/modules/custom/mymod/src/Form/tablica.php
И вывожу через:
<?php...
$form['izmenenie_oplaty'] = [
'#type' => 'tableselect',
'#header' => $h,
'#options' => $o,
'#empty' => t('No users found'),
];
return $form;
...?>
Это не совсем удобно. Хотелось бы чтоб Таблица выводилась простым HTML-PHP
Как это организовать?
Спасибо.
Комментарии
По такому ТЗ сложно будет что-то подсказать. Слишком мало вводных данных. Но вообще, можно готовить нужные данные в препроцессе, а потом в шаблоне twig выводить их в любом виде. Там и циклы доступны для формирования HTML таблиц, например
https://druki.ru/wiki/9/modules/create
1. От изменения значений формы - меняется запрос к БД.
2. По результатам этого запроса строится Таблица
Это, вроде как, - По умолчанию
Хотелось бы чтоб Таблица выводилась простым HTML-PHP -- Вы хотите перейти на более низкий уровень абстракции матрешки
Вариант выше скорее всего собирается через кучу шагов в исходную таблицу..
Как это сделать на 8ке...
Можно использовать класс ответа для маршрута друпала вроде бы..
$response = new Response(
'Content',
Response::HTTP_OK,
['content-type' => 'text/html']
);
Можно внутрь закинуть таблицу которую нужно..
Нужно немного потренироватся
https://symfony.com/doc/current/components/http_foundation.html#response
Думаю общей смысл таков.
Это отход от канонов друпала. Но тут просто не используется шаблонизатор
По сути шаблон будет в контроллере или како-то методе который будет тянутся из контроллера
Этот способ точно не феншуй)
А если форму создавать отдельно. А таблицу в Контроллере - отдельно. А потом всё это объединить в Твиге?
Получилось так:
1. В Твиге - форма и таблица
2. В контроллере - Обработка Поста, Запрос, Передача массива для таблицы и массива для засветки элементов таблицы.
По сравнению с обычным PHP конечно сложно, и не удобно, и не нужно. Но Феншуя ради - можно и так писать.
Или у меня опять не по Феншую? Ведь Форму то нужно в Form писать.
Или нормально?
Весьма спорное утверждение, однако. Причём по всем трём пунктам.
Массив "для таблицы" и массив "для засветки элементов таблицы" можно слить в один, просто снабдив его флагами ячеек. Ну, это просто к слову.
Нет, не нормально. По фэншую - таки build-функция в отдельном классе формы.
То есть так?:
Форму создавать отдельно. А таблицу в Контроллере - отдельно. А потом всё это объединить в Твиге?
Забудьте (пока) про темизацию формы в Twig. Контроллер (в каноническом понимании) вам тоже не нужен, обработку сабмита делайте в submit-функции собственного класса формы. Этого уже достаточно для самой минимальной реализации по фэншую. Есть же уже давно отработанный паттерн механизма формы:
> __constructor(...) (если нужен)
> buildForm(...) (здесь строим форму)
> validateForm(...)
> submitForm(...)
Логику получения/обработки рядов таблицы для удобства можно вывести в отдельный класс, если необходимо. И работать с этим классом в submit-функции.
Вытаскивать оформление в Twig на мой взгляд имеет смысл, если вы пишете контрибный модуль для какого-то массового применения, где требуется удобный способ правки разметки для каждого частного случая. Или ожидается, что будут какие-то многочисленные правки вывода разметки таблицы. Хотя тут тоже спорно, что именно будет удобно. А если пишете модуль для разовой задачи или для себя, то стоит подумать, нужна ли вообще темизация через Twig. Поскольку это дополнительный слой вывода и на каждом чихе (добавление новых переменных в шаблон и т.д.) нужно будет править код нескольких компонентов.
Короче, всё определяется конкретными задачами. А минимум я обрисовал выше.
Удачи.
Именно так у меня сейчас и написано. Но. (повтор):
Таблицу вывожу так:
<?php $form['izmenenie_oplaty'] = [
'#type' => 'tableselect',
'#header' => $h,
'#options' => $o,
'#empty' => t('No users found'),
];?>
Это не совсем удобно. Хотелось бы чтоб Таблица выводилась простым HTML-PHP
А в каком тогда виде будет эта таблица? Напишите пожалуйста хоть 2 элемента.
Изучите наконец-таки API... это совсем не сложно!
Скоро вторая страница - а ответа так и нет. Это потому что "несложно"?
https://druki.ru/wiki/9/modules/create - вот ответ! Реально - ничего сложного, просто вы никак не перейдёте на уровень выше.
Тут, видимо, нужно выбирать: по фэншую или же как вам удобно. Иначе фэншуй не состоится. Меняйте философию, что сказать.
Давайте прикинем. Вам, видимо, нужно привязать twig-шаблон к выводу таблицы. В чём проблема? Примеров множество в сети, погуглите, найдёте.
Однако, тут же вы пишете (зачем-то): "А потом всё это объединить в Твиге". "Всё это" - видимо, подразумевается форма и выходная таблица. Зачем? Зачем эти механизмы объединять в один шаблон?
Справедливости ради, должен отметить, что в D8 (или 9) мне попадались случаи, когда форма строилась на выходе контроллера вообще как маркап. И сабмитилась на этот же контроллер с выдачей опять же маркапа. Если не ошибаюсь, это был какой-то контрибный модуль для платёжного аггрегатора типа Робокассы или подобной системы. Но там речь шла об интеграции СТОРОННЕЙ формы сервиса оплаты. Не сказать, что это полностью оправдывает такой подход, но это хотя бы как-то обосновано. Что вас вынуждает велосипедить, если вы пишете модуль и хотите его сделать именно по фэншую?
Дело в том, что таблица - это вообще не форма. А оно выводит её внутри формы, слева выставляет галочки
Ну тогда почему бы вам вместо ссылок не написать 2 строчки на мой вопрос:
Хотелось бы чтоб Таблица выводилась простым HTML-PHP
Или же в виде Таблицы, но не в виде формы
Если вы хотите простым простым HTML-PHP, то друпал вам точно не нужен.
Согласен. Зачем использовать друпал, если его не используешь? Го**окодить на чистом PHP конечно интереснее
Друпал используется там и для того - где есть готовые решения.
В Друпале есть готовое решение по созданию и хранению Нод - значит мы его используем.
Всё просто.
Оооо, мне встречался такой проект!
Там был кусок от друпал 6, своя, отдельная админка над ним. Плюс резервные копии, типа index.php1, index.php588 и т.д. Итого, почти на 500Мб кода.
И уже есть подозрения, кто автор сего чуда.
хороший способ смотреть код внутри друпала и делать так как там уже написано