«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'
<плагин>: (ОПЦИОНАЛЬНО) если передан этот параметр то метод редактирования будет вызван в переданном, контроллере
  ]);
 
`name и email - поля в таблице users`
 
Чтобы обновить запись
 
  $model->updateItem($fields, $where);
 
  $model->updateItem([
    'name'=>'Герман'
  ], 'id='.(int)$this->params['id']);


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


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


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


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


Перед отрисовкой формы вызывает метод '''segetdata<Имя объекта(первая буква большая)>''' сначала модели, затем контроллера, в случае если они определены
$model->get("name","id=".(int)$this->params['id']);
При вызове метода модели, данные, возвращённые методом помещаются в массив $data, доступный в шаблоне редактирования объекта. Первым аргументом передаётся массив с параметрами, содержащий элементы запроса и переменные


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




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


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


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


  Ресурс для контроля прав '''<текущий [[плагин]]>/<текущий [[контроллер]]>/seedit<имя объекта>'''
  $userData = $model->s_fetchRow("select * from users where id=".(int)$this->params['id']);




===Сохранение данных===
Чтобы получить набор строк


При сохранение данных об объекте вызываются по очереди методы текущего [[контроллер|контроллера]] и его [[модель|модели]] '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'");