|
|
Строка 1: |
Строка 1: |
| StandartEdit это схема редактирования стандартных объектов.
| | Работа с БД организована через класс ormModel (/cms/system/ormModel.php), который расширяет /cms/system/dbModel.php |
|
| |
|
| ===Форма редактирования===
| |
|
| |
|
| Например создаём страницу с таблицей, содеращей определённые элементы, стандартная ситуация, не так ли?
| | Если нам надо осуществить какие-то действия с таблицей users, схемы public - инициируем класс |
|
| |
|
| Для редактирования каждого элемента создаём кнопку "Редактировать" и в качестве действия указываем:
| | $model = ormModel::init('public','users'); |
| | |
| | Чтобы добавить новую записсь - вызываем |
|
| |
|
| '''onclick="seEdit(<имя объекта>,<ID объекта>,<контроллер>, <плагин>)"'''
| |
|
| |
| Параметры:
| |
| <имя объекта>: Любое название объекта состоящее из латинских букв '''без пробелов''' ''пример: org''
| |
| <ID объекта>: ID объекта - целое число. Также можно передать объект с несколькими параметрами ''пример: {'id': 2, 'parent': 4}''
| |
| <контроллер>: (ОПЦИОНАЛЬНО) если передан этот параметр то метод редактирования будет вызван в переданном, контроллере
| |
| <плагин>: (ОПЦИОНАЛЬНО) если передан этот параметр то метод редактирования будет вызван в переданном, контроллере
| |
|
| |
|
| функция JS вызовет переданный [[плагин]], [[контроллер]](если параметры не переданы будут вызваны текущий плагин и контроллер) с [[экшн|экшном]] '''seeditobject'''
| | $model->newItem([ |
| | 'name' => 'Валера', |
| | 'email' => 'valera@yandex.ru' |
| | ]); |
|
| |
|
| * Для работы, необходима активация [[Транспорт переменных в среду JavaScript|транспорта переменных в среду JavaScript]]
| | `name и email - поля в таблице users` |
|
| |
|
| | Чтобы обновить запись |
|
| |
|
| Экшн steditobject, находящийся в [[CmsBaseController]] в свою очередь возвращает форму редактирования элемента, которую он берёт из папки
| | $model->updateItem($fields, $where); |
|
| |
| Шаблон редактирования объекта
| |
| '''/<ПАПКА [[ПЛАГИН|ПЛАГИНА]]>/views/seedit/<имя объекта>.tpl''' | |
|
| |
|
| Перед отрисовкой формы вызывает метод '''segetdata<Имя объекта(первая буква большая)>''' сначала модели, затем контроллера, в случае если они определены
| | $model->updateItem([ |
| При вызове метода модели, данные, возвращённые методом помещаются в массив $data, доступный в шаблоне редактирования объекта. Первым аргументом передаётся массив с параметрами, содержащий элементы запроса и переменные
| | 'name'=>'Герман' |
| | ], 'id='.(int)$this->params['id']); |
|
| |
|
| object - тип объекта
| |
| objectid - его ID (второй аргумент js функции seEdit)
| |
|
| |
|
| | Чтобы получить ячейку |
|
| |
|
| или принимает данные для редактирования(в случае отправки запроса методом POST).
| | $model->s_fetchOne("select name from public.users where id=".(int)$this->params['id']) |
|
| |
|
| ===Контроль прав===
| | или |
|
| |
|
| Так как при редактировании у нас вызывается один и тот же экшн то в схему внедрена дополнительная проверка [[права доступа|прав доступа]]
| | $model->get("name","id=".(int)$this->params['id']); |
| для корректной работы нам необходимо добавить [[ресурс контроля прав|ресурс]], выглядящий следующим образом
| |
|
| |
|
| Ресурс для контроля прав '''<текущий [[плагин]]>/<текущий [[контроллер]]>/seedit<имя объекта>'''
| |
|
| |
|
| Такое поведение работает только когда используется [[ACL плагин|плагин ACL]].
| |
|
| |
|
| Во всех остальных случаях просто проверяется переменная контроллера $this->edit_allowed. Если она = true, то редактирование будет разрешено.
| | Чтобы получить строку |
|
| |
|
| ===Сохранение данных=== | | $userData = $model->getRow("id=".(int)$this->params['id']); |
|
| |
|
| При нажатии на кнопку "Сохранить" во всплывающем окне вызывается функция seSaveData которая собирает данные с формы и отправляет POST AJAX запрос на сохранение данных.
| | или |
|
| |
|
| В случае если функция обнаружит в форме input type="file" то экшн сохранения будет вызван не через AJAX, а через обычный POST так как AJAX запрос не умеет загружать файлы.
| | $userData = $model->s_fetchRow("select * from users where id=".(int)$this->params['id']); |
|
| |
|
| Бывают такие ситуации когда на форме есть input для загрузки файла, но форму необходимо сохранить через AJAX. В этом случае мы просто добавляем тег seIgnore="true" к input-у и его наличие будет проигнорировано.
| |
|
| |
|
| | Чтобы получить набор строк |
|
| |
|
| При сохранение данных об объекте вызываются по очереди методы текущего [[контроллер|контроллера]] и его [[модель|модели]] 'seedit<Имя объекта>'(к примеру: seeditOrg) в случае если они определены.
| |
| методу модели в качестве аргумента передаётся массив с [[параметры запроса|параметрами запроса]]
| |
|
| |
|
| ===Завершение=== | | $users = $model->getAll("name='valera'") |
|
| |
|
| По завершении вызывается метод управляющего контроллера '''sefinishedit<Имя объекта>'''
| | или |
| | |
| | $users = $model->s_fetchAll("select * from users where name='valera'"); |
Работа с БД организована через класс ormModel (/cms/system/ormModel.php), который расширяет /cms/system/dbModel.php
Если нам надо осуществить какие-то действия с таблицей users, схемы public - инициируем класс
$model = ormModel::init('public','users');
Чтобы добавить новую записсь - вызываем
$model->newItem([
'name' => 'Валера',
'email' => 'valera@yandex.ru'
]);
`name и email - поля в таблице users`
Чтобы обновить запись
$model->updateItem($fields, $where);
$model->updateItem([
'name'=>'Герман'
], 'id='.(int)$this->params['id']);
Чтобы получить ячейку
$model->s_fetchOne("select name from public.users where id=".(int)$this->params['id'])
или
$model->get("name","id=".(int)$this->params['id']);
Чтобы получить строку
$userData = $model->getRow("id=".(int)$this->params['id']);
или
$userData = $model->s_fetchRow("select * from users where id=".(int)$this->params['id']);
Чтобы получить набор строк
$users = $model->getAll("name='valera'")
или
$users = $model->s_fetchAll("select * from users where name='valera'");