«StandartEdit» и «Работа с БД»: разница между страницами

Материал из GLENN CMS WIKI
(Различия между страницами)
Перейти к навигации Перейти к поиску
 
(Новая страница: «Работа с БД организована через класс ormModel (/cms/system/ormModel.php), который расширяет /cms/system/dbModel.php...»)
 
Строка 1: Строка 1:
StandartEdit это схема редактирования стандартных объектов.
Работа с БД организована через класс ormModel (/cms/system/ormModel.php), который расширяет /cms/system/dbModel.php


===Форма редактирования===


Например создаём страницу с таблицей, содеращей определённые элементы, стандартная ситуация, не так ли?
Если нам надо осуществить какие-то действия с таблицей users, схемы public - инициируем класс


Для редактирования каждого элемента создаём кнопку "Редактировать" и в качестве действия указываем:
$model = ormModel::init('public','users');


'''onclick="seEdit(<имя объекта>,<ID объекта>,<контроллер>, <плагин>)"'''
Чтобы добавить новую записсь - вызываем
 
Параметры:
 
  <имя объекта>: Любое название объекта состоящее из латинских букв '''без пробелов''' ''пример: org''
  $model->newItem([
<ID объекта>: ID объекта - целое число. Также можно передать объект с несколькими параметрами ''пример: {'id': 2, 'parent': 4}''
  'name' => 'Валера',
  <контроллер>: (ОПЦИОНАЛЬНО) если передан этот параметр то метод редактирования будет вызван в переданном, контроллере
  'email' => 'valera@yandex.ru'
<плагин>: (ОПЦИОНАЛЬНО) если передан этот параметр то метод редактирования будет вызван в переданном, контроллере
  ]);


функция JS вызовет переданный [[плагин]], [[контроллер]](если параметры не переданы будут вызваны текущий плагин и контроллер) с [[экшн|экшном]] '''seeditobject'''
`name и email - поля в таблице users`


* Для работы, необходима активация [[Транспорт переменных в среду JavaScript|транспорта переменных в среду JavaScript]]
Чтобы обновить запись


$model->updateItem($fields, $where);


Экшн steditobject, находящийся в [[CmsBaseController]] в свою очередь возвращает форму редактирования элемента, которую он берёт из папки
$model->updateItem([
    'name'=>'Герман'
Шаблон редактирования объекта
  ], 'id='.(int)$this->params['id']);
  '''/<ПАПКА [[ПЛАГИН|ПЛАГИНА]]>/views/seedit/<имя объекта>.tpl'''


Перед отрисовкой формы вызывает метод '''segetdata<Имя объекта(первая буква большая)>''' сначала модели, затем контроллера, в случае если они определены
При вызове метода модели, данные, возвращённые методом помещаются в массив $data, доступный в шаблоне редактирования объекта. Первым аргументом передаётся массив с параметрами, содержащий элементы запроса и переменные


object - тип объекта
Чтобы получить ячейку
objectid - его ID (второй аргумент js функции seEdit)


$model->s_fetchOne("select name from public.users where id=".(int)$this->params['id'])


или принимает данные для редактирования(в случае отправки запроса методом POST).
или


===Контроль прав===
$model->get("name","id=".(int)$this->params['id']);


Так как при редактировании у нас вызывается один и тот же экшн то в схему внедрена дополнительная проверка [[права доступа|прав доступа]]
для корректной работы нам необходимо добавить [[ресурс контроля прав|ресурс]], выглядящий следующим образом


Ресурс для контроля прав '''<текущий [[плагин]]>/<текущий [[контроллер]]>/seedit<имя объекта>'''


Чтобы получить строку


===Сохранение данных===
$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'");

Версия от 12:47, 13 сентября 2022

Работа с БД организована через класс 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'");