Динамическая вставка виджетов на странице

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
fly2k
Сообщения: 155
Зарегистрирован: 2013.03.19, 05:31

Динамическая вставка виджетов на странице

Сообщение fly2k »

Ку!

Делаю виджет, который позволяет редактировать набор определенных свойств - типа табулярной формы, только набор типов свойств довольно разнообразен. То есть у какого то свойства это 1 нативный инпут, у какого то - несколько сложных виджетов. В "статике"(вьюха выводит все свойства, с возможностью вкл-выкл на форме) на всё используются виджеты от \yii\widgets\InputWidget. Стараюсь так делать, чтобы иметь возможность абстрагировать конфиг возможных свойст - там просто класс виджета задается. Ну и весь остальной код одинаков для всех типов свойств.

Так то красотища, но свойств порядочно, и в итоге не хотелось бы рендерить все свойства, а чтобы юзер имел возможность добавлять/удалять свойства(строки форы) по своему желанию. При этом, повторюсь, свойства и их виджеты могут быть разные.

Если бы речь шла о каких то бд-моделях, то я бы не парился - ajax-ом спрашиваем виджет для нужного свойства и никаких проблем. Но, так как бд тут не используется(все свойства, их типы, определения виджетов и тд - всё в конфигах-массивах), то появляется соблазн вообще не дергать сервер лишний раз.

Воот. Кто что посоветует? Такто, можно изначально базу делать на js, например как плагин jquery или еще как. А уже её оборачивать в виджеты Yii. Но мне ой как нравится идея определять всё в конфигах на уровне Yii - очень удобно, виджеты вкладываешь друг вдруга и не паришься о сложности особо... Поэтому хотелось бы, чтобы изначальное опрделения свойств и способов их ввода было на базе Yii-виджетов. То есть чтобы определение нового типа свойства сводилось к написанию нового yii-виджета + правке пхп-конфига, без каких лобо изменений в коде главного виджета(контейнера) и уже тем более без правки его js.

Детская идея в лоб: в главном виджете генерировать вывод виджетов для всех типов свойств, заменяя id, name, value какими нибудь placeholder'ами, чтобы потом в js их легко подменять. Получится куча строк, на базе которых, мы может сгенерить js-код для добавления соотв.виджетов на страницу. Но подозреваю, что это будет работать только с нативными инпутами. Когда речь идет о виджете который хотя бы свои js регает, то вот тут я уже трескаю - не уверен что всё гладко будет... А уж что получится с комплексными виджетами с несколькими уровнями вложенности?

Ну а если не жалеть сервер и спрашивать виджеты каждый раз у него, то тут тоже вопрос - как грамотнее сделать экшн? Вроде везде делаю отдельный акшэн(от \yii\base\Action) и его подключают к какому нибудь контроллеру. Но мне не очень нравится такая идея, так как в данном случае, контроллеры приложения или модулей к этому не имеют никакого отношения. На языке вертится что-то типа "контроллер виджета" - такое вообще бывает?

Буду рад любым мыслям, идеям, пожеланиям.

Спасибо!
// Yii2Rulez!
Ответить