Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Как сделать модули-конструкторы?


Автор: shurup_312 17.4.2013, 20:08
Приветствую, винградовцы. Постараюсь максимально кратко.
Идея сделать систему модулей-конструкторов. Все модули состоят так или иначе из записей, будь то новости в модуле новостей или картинки в фотогалерее. У каждой записи есть элементики, из которых состоит запись - у новости это краткое и полное описание, название и дата выпуска допустим. У фотогалереи это сама фотка, ее название и допустим автор. 
Элеменентики опять же в плане верстки имеют конечно число отображений. В админке допустим в формах они могут быть выведены инпутами или селектами, которые один раз можно задать и все. То есть вот мы создали 5 полей в таблице и указали что первое будет инпутом, второе текстарией. третье селектом с такими-то полями. 
И тогда можно просто создать поля в таблице и сразу построятся формы добавления, редактирования. В общем-то примерно это сделано в yii в расширении gii, но хотелось бы чтобы было не в виде генератора кода, а в виде динамического движка, который один раз написан и какую ты ему таблицы не подсунь, он построит админскую часть зная только для какого кполя какой элементик. 
Вот где грамотно написать как именно должно строиться то или иное поле?

Автор: Sanchezzz 17.4.2013, 21:19
Я похожею задачу делал, в отдельную таблицу.

Структура проста
table_name | config_json

первое поле имя таблицы из БД
второе поле это массив в JSON для таблицы

ключ это названия колонки в таблице
 вложенные ключи 
 type - тип что это? text texeditor image
 sort позиция если вы планируете вывод списком полей.

Ваша идея не новая и я думаю если поискать в готовых решениях то можно найти полную реализацию.
 

Автор: shurup_312 17.4.2013, 21:40
Цитата(Sanchezzz @ 17.4.2013,  21:19)
Я похожею задачу делал, в отдельную таблицу.

Структура проста
table_name | config_json

первое поле имя таблицы из БД
второе поле это массив в JSON для таблицы

ключ это названия колонки в таблице
 вложенные ключи 
 type - тип что это? text texeditor image
 sort позиция если вы планируете вывод списком полей.

Ваша идея не новая и я думаю если поискать в готовых решениях то можно найти полную реализацию.

Если подскажете в какую сторону копать или хоть какой поисковый запрос сделать, то буду очень благодарен.

Автор: Fortop 17.4.2013, 23:01
Цитата(shurup_312 @  17.4.2013,  20:08 Найти цитируемый пост)
Вот где грамотно написать как именно должно строиться то или иное поле? 

где угодно.
json, yaml, xml, да и просто php конфиги.

Можно даже просто реализовать в виде набора классов.

Вообще можно посмотреть в сторону гридов jqGrid например.

Автор: Sanchezzz 18.4.2013, 09:27
Из моего опыта работы разработчика и слушания жалоб от клиентов, это будет худшие решение в плане удобства даже если по клику в гриде по нужной строки и всплывающем окне будет открыватеся форма.

Причем если используется задуманное  для фремворка Yii то нужно использовать встроенный инструмент CGridView (yiiGidView).

ТС Не знаю как поможет готовое если тут и так задача ясна как это сделать, уже подсказал.
Получаем информацию о таблице в Yii через CDBShema или еврейский вариант
Код

$db = Yii::app()->db;
$arr = $db->createCommand("SHOW COLUMNS FROM `".$table."`")->queryAll();


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

Автор: shurup_312 18.4.2013, 10:28
Sanchezzz, спасибо за подсказку. Мне идея нравится, я больше того думаю, можно этот конфиг брать первый раз из таблицы конфигов и продублировать запись для данного поля в комментарии для поля самой таблицы с данными модуля. И тогда даже не придется доп. запрос делать на вытаскивание конфига. Но я не закрываю тему, может кто еще идеи предложит.
Да и потом, вот еще вопрос, как по умному сделать, чтобы поле (допустим дата публикации новости, если новость отложенная) влияло на выборки товаров. Ну в смысле понятно, что оно никак не будет влиять если его в запрос не включишь, н как по уму сделать схему движка, чтобы перез запросом в БД добавлялись условия тех или иных полей? То есть мы вставили поле для указания даты отложенно публикации и все, на часть запросов это стало влиять. Может тут еще мысли есть?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)