Pull to refresh

Comments 16

Есть такой язык Python, а на нём волшебный фреймворк Django.

Поговаривают, что административный интерфейс этот фреймворк собирает на лету, опираясь на структуру конкретной модели (объектная прослойка над объектной прослойкой таблицы в БД).

Он конечно не один такой красивый, я просто пример привёл...
ZendFramework, в частности, Zend_Db_Table и Zend_Db_Table_Row, позволяют сделать дефолтные функции (редактирование, удаление, просмотр, сортировка) в одну строчку.
Очень рекомендую применительно именно к пхп.
Расскажу в общих чертах, как делаем подобное на Django + Google Web Toolkit.

Упомянутая выше автоматическая админка Django, конечно, хороша, но для всех её можно заточить, ну и AJAX-овых красивостей хочется.

На сервере Django диктует архитектуру MVC (или MVT, где T = template, как её называют сами джангисты), к подобному стремимся и на клиенте. Модель сервера оборачивается на стороне GWT интерфейсом (набор getters/setters и, возможно, несколько служебных методов, delete и т.п.). Реализация этого интерфейса спрятана в недра другого класса, который и отвечает за взаимодействие с сервером (данные ходят в формате JSON), и представляет собой «коллекцию» объектов-записей. Коллекция observable, т.е. можно подписаться на события добавления, удаления и т.д. Аналогично, для объекта-записи можно подписаться на события изменения свойства. Таким образом реализуется привязка к интерфейсу. Это может быть простая таблица, это может быть специальный виджет для редактирования такого вида записей — на что фантазии хватит, благо в GWT можно нормально собирать интерфейс из «кирпичиков». Если всё это реализовывать вручную, получается изрядно многословно (ну Java же), но вполне расширяемо. Что приятно, в этой модели есть много мест для автоматизации:
— генерация Java-интерфейсов по моделям;
— data-binding к элементам управления в GWT-интерфейсе;
— генерация REST API для CRUD-операций с моделями.

Не всё из этого пока реализовано, но есть желание собрать в общеполезный набор утилит/библиотеку для связки Django с GWT. К сожалению, пока есть более приоритетные задачи.
UFO just landed and posted this here
момете кинуть парочку толкових статтей об Zend Framework... убедить меня перелезть из CakePHP на него...
а чем вас в этом случае CakePHP не устраивает? bake.php умеет "печь" все дефолтные функции(запись, редактирование, удаление, просмотр). Причем он "печет" две версии каждой функции: для обычных пользователей и для администраторов/редакторов.
я сказал какие-то весомие доказательства (для проекта до 1к визитов в день), чтоб перейти из Cake на ZF
Про Zend Framework пока ничего не могу сказать - скоро начну его изучать. Пока представление очень поверхностное.

Обычно решаю эти задачи с помощью Django. В нем есть очень удобная админка, которую ...совершенно не надо делать - она получается сразу готовая и удобная в работе.
Тут есть видео-пример на 7 минут (правда на английском) - http://www.throwingbeans.org/video/djang…
Создание приложения, работающего с БД.
Одновременно "в подарок" создается редактор для таблиц. При этом учитывается валидация, ограничения, отношения один-ко-многим, много-ко-многим и прочие моменты.

Что мне очень нравится в Django - полный контроль над таблицами и отсутствие мусора в БД. Я имею ввиду наличие каких-то левых таблиц, идиотских связок и прочего бреда. Структура получается прямо "академическая" :) - соответственно ее очень просто использовать в другом приложении.
У меня один проект так сделан: общие таблицы, с которыми работает мое приложение для обработки данных и админка на Django. Очень быстро и удобно.
если Вы о GUIшных таблицах, то много javascript библиотек представляют так называемый "editable data grid". особенно преуспел в этом ExtJs, но и под mootools, к примеру, я видел пару замечательных плагинов. думаю стоит просто поискать в гугле

если же таблицы баз данных и под манипуляции с РНР, то тут как было выше замечено ZF будет в помощь, ну или моя менее тяжелая и довольно шутрая реализация: http://blog.azazel.org.ua/bazovaya-obrabotka-bd/
правда сейчас переписываю на полностью объектную модель
Я делал web приложение такого типа. Правда в нем редактируется не таблица, а список (та же таблица только с одним столбцом).
Использовал prototype + scriptaculous на клиентской стороне и php - на серверной.

В общем, получился одностраничный редактор. При щелчке по записи вместо нее появляется небольшая форма с текстовым полем и кнопками "Сохранить" и "Отмена". Используется компонент in-place text editor.

Если интересно, посмотреть этот пример можно здесь: http://www.demosites.org.ua/weblistedito…

А прочитать подробное описание - в статье Как сделать редактор списка в стиле Web 2.0
А зачем там prototype + scriptaculous? Для AJAX?
Отправку AJAX запросов выполняет prototype.
А из scriptaculous используется компонент in-place text editor, который создает форму при клике по записи, и эффект подсветки (появляется при добавлении новой записи).
Действительно, удобнее всего использовать т. зв. in-place editor, который работает по довольно-таки нехитрому (кликнул на значение некоторого поля, сиё значение немедленно превращаетсья в , нововведенное значение которого опосля нажатия Enter благополучно заменяет текущее в базе) и простому в реализации (большинство популярных js-бибиотек предоставляют вполне удобный функционал подобного рода) принципу.
Очень часто использую jQuery+php для таких задач, хотя функиционал и удобность использования ExtJS намного выше. Имеет смысл его использовать только вместе с как минимум половиной мощи сего фреймворка.
... немедленно превращаеться в "input".
Насчет ExtJs вы правы, потому что подключать 500кб-ую библиотеку только для редактирования форм нецелесообразно.
Советую посмотреть как это реализовано в Symfony. Вот здесь видео: http://www.symfony-project.org/screencast/admin-generator
Sign up to leave a comment.

Articles