Как по феншую создавать свой модуль?

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

Аватар пользователя kompospec kompospec 30 января 2022 в 20:41

Как по феншую создавать свой модуль?

Небольшая форма.
Огромная таблица которая изменяется от значений которые в форме.

Сейчас всё пишу в файл:
/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

Как это организовать?
Спасибо.

Комментарии

Аватар пользователя ivnish ivnish 30 января 2022 в 23:50

По такому ТЗ сложно будет что-то подсказать. Слишком мало вводных данных. Но вообще, можно готовить нужные данные в препроцессе, а потом в шаблоне twig выводить их в любом виде. Там и циклы доступны для формирования HTML таблиц, например

Аватар пользователя kompospec kompospec 30 января 2022 в 23:50

ivnish wrote: Слишком мало вводных данных.

1. От изменения значений формы - меняется запрос к БД.
2. По результатам этого запроса строится Таблица

Это, вроде как, - По умолчанию

Аватар пользователя dashiwa dashiwa 31 января 2022 в 0:21

Хотелось бы чтоб Таблица выводилась простым HTML-PHP -- Вы хотите перейти на более низкий уровень абстракции матрешки

Вариант выше скорее всего собирается через кучу шагов в исходную таблицу..
Как это сделать на 8ке...

Можно использовать класс ответа для маршрута друпала вроде бы..
$response = new Response(
'Content',
Response::HTTP_OK,
['content-type' => 'text/html']
);

Можно внутрь закинуть таблицу которую нужно..
Нужно немного потренироватся
https://symfony.com/doc/current/components/http_foundation.html#response

Думаю общей смысл таков.

Это отход от канонов друпала. Но тут просто не используется шаблонизатор

По сути шаблон будет в контроллере или како-то методе который будет тянутся из контроллера

Аватар пользователя kompospec kompospec 31 января 2022 в 5:16

Получилось так:
1. В Твиге - форма и таблица
2. В контроллере - Обработка Поста, Запрос, Передача массива для таблицы и массива для засветки элементов таблицы.

По сравнению с обычным PHP конечно сложно, и не удобно, и не нужно. Но Феншуя ради - можно и так писать.

Или у меня опять не по Феншую? Ведь Форму то нужно в Form писать.
Или нормально?

Аватар пользователя OldWarrior OldWarrior 31 января 2022 в 6:09

kompospec wrote: По сравнению с обычным PHP конечно сложно, и не удобно, и не нужно.

Весьма спорное утверждение, однако. Причём по всем трём пунктам.

kompospec wrote: 2. В контроллере - Обработка Поста, Запрос, Передача массива для таблицы и массива для засветки элементов таблицы.

Массив "для таблицы" и массив "для засветки элементов таблицы" можно слить в один, просто снабдив его флагами ячеек. Ну, это просто к слову.

kompospec wrote: Или у меня опять не по Феншую? Ведь Форму то нужно в Form писать.
Или нормально?

Нет, не нормально. По фэншую - таки build-функция в отдельном классе формы.

Аватар пользователя kompospec kompospec 31 января 2022 в 7:07

OldWarrior wrote: Нет, не нормально. По фэншую - таки build-функция в отдельном классе формы.

То есть так?:
Форму создавать отдельно. А таблицу в Контроллере - отдельно. А потом всё это объединить в Твиге?

Аватар пользователя OldWarrior OldWarrior 31 января 2022 в 19:35

Забудьте (пока) про темизацию формы в Twig. Контроллер (в каноническом понимании) вам тоже не нужен, обработку сабмита делайте в submit-функции собственного класса формы. Этого уже достаточно для самой минимальной реализации по фэншую. Есть же уже давно отработанный паттерн механизма формы:

class SomeForm
  > __constructor(...) (если нужен)
  > buildForm(...) (здесь строим форму)
  > validateForm(...)
  > submitForm(...)

Логику получения/обработки рядов таблицы для удобства можно вывести в отдельный класс, если необходимо. И работать с этим классом в submit-функции.

Вытаскивать оформление в Twig на мой взгляд имеет смысл, если вы пишете контрибный модуль для какого-то массового применения, где требуется удобный способ правки разметки для каждого частного случая. Или ожидается, что будут какие-то многочисленные правки вывода разметки таблицы. Хотя тут тоже спорно, что именно будет удобно. А если пишете модуль для разовой задачи или для себя, то стоит подумать, нужна ли вообще темизация через Twig. Поскольку это дополнительный слой вывода и на каждом чихе (добавление новых переменных в шаблон и т.д.) нужно будет править код нескольких компонентов.

Короче, всё определяется конкретными задачами. А минимум я обрисовал выше.

Удачи.

Аватар пользователя kompospec kompospec 31 января 2022 в 21:04

OldWarrior wrote: Есть же уже давно отработанный паттерн механизма формы:

Именно так у меня сейчас и написано. Но. (повтор):
Таблицу вывожу так:

<?php  $form['izmenenie_oplaty'] = [
'#type' => 'tableselect',
'#header' => $h,
'#options' => $o,
'#empty' => t('No users found'),
];
?>

Это не совсем удобно. Хотелось бы чтоб Таблица выводилась простым HTML-PHP

Аватар пользователя kompospec kompospec 31 января 2022 в 21:06

OldWarrior wrote: Логику получения/обработки рядов таблицы для удобства можно вывести в отдельный класс, если необходимо. И работать с этим классом в submit-функции.

А в каком тогда виде будет эта таблица? Напишите пожалуйста хоть 2 элемента.

Аватар пользователя OldWarrior OldWarrior 31 января 2022 в 22:10

kompospec wrote: Это не совсем удобно. Хотелось бы чтоб Таблица выводилась простым HTML-PHP

Тут, видимо, нужно выбирать: по фэншую или же как вам удобно. Иначе фэншуй не состоится. Меняйте философию, что сказать.

Давайте прикинем. Вам, видимо, нужно привязать twig-шаблон к выводу таблицы. В чём проблема? Примеров множество в сети, погуглите, найдёте.

Однако, тут же вы пишете (зачем-то): "А потом всё это объединить в Твиге". "Всё это" - видимо, подразумевается форма и выходная таблица. Зачем? Зачем эти механизмы объединять в один шаблон?

Справедливости ради, должен отметить, что в D8 (или 9) мне попадались случаи, когда форма строилась на выходе контроллера вообще как маркап. И сабмитилась на этот же контроллер с выдачей опять же маркапа. Если не ошибаюсь, это был какой-то контрибный модуль для платёжного аггрегатора типа Робокассы или подобной системы. Но там речь шла об интеграции СТОРОННЕЙ формы сервиса оплаты. Не сказать, что это полностью оправдывает такой подход, но это хотя бы как-то обосновано. Что вас вынуждает велосипедить, если вы пишете модуль и хотите его сделать именно по фэншую?

Аватар пользователя kompospec kompospec 31 января 2022 в 22:22

OldWarrior wrote: Тут, видимо, нужно выбирать: по фэншую или же как вам удобно. Иначе фэншуй не состоится. Меняйте философию, что сказать.

Дело в том, что таблица - это вообще не форма. А оно выводит её внутри формы, слева выставляет галочки

Аватар пользователя kompospec kompospec 31 января 2022 в 22:27

vlucas wrote: Реально - ничего сложного,

Ну тогда почему бы вам вместо ссылок не написать 2 строчки на мой вопрос:
Хотелось бы чтоб Таблица выводилась простым HTML-PHP
Или же в виде Таблицы, но не в виде формы

Аватар пользователя schnauss schnauss 1 февраля 2022 в 9:14
1

Согласен. Зачем использовать друпал, если его не используешь? Го**окодить на чистом PHP конечно интереснее

Аватар пользователя kompospec kompospec 1 февраля 2022 в 20:47

schnauss wrote: Зачем использовать друпал, если его не используешь?

Друпал используется там и для того - где есть готовые решения.
В Друпале есть готовое решение по созданию и хранению Нод - значит мы его используем.

Всё просто.

Аватар пользователя VVS VVS 6 мая 2022 в 17:47

Оооо, мне встречался такой проект!
Там был кусок от друпал 6, своя, отдельная админка над ним. Плюс резервные копии, типа index.php1, index.php588 и т.д. Итого, почти на 500Мб кода. Biggrin
И уже есть подозрения, кто автор сего чуда. Crazy