«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 - инициируем класс


  '''onclick="seEdit(<имя объекта>,<ID объекта>,<контроллер>, <плагин>)"'''
  $model = ormModel::init('public','users');
 
Параметры:
Чтобы добавить новую записсь - вызываем
  <имя объекта>: Любое название объекта состоящее из латинских букв '''без пробелов''' ''пример: org''
 
  <ID объекта>: ID объекта - целое число. Также можно передать объект с несколькими параметрами ''пример: {'id': 2, 'parent': 4}''
 
  <контроллер>: (ОПЦИОНАЛЬНО) если передан этот параметр то метод редактирования будет вызван в переданном, контроллере
  $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']);


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


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


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


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


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


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


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


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


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


При сохранение данных об объекте вызываются по очереди методы текущего [[контроллер|контроллера]] и его [[модель|модели]] 'seedit<Имя объекта>'(seeditOrg) в случае если они определены.
$users = $model->getAll("name='valera'")
методу модели в качестве аргумента передаётся массив с [[параметры запроса|параметрами запроса]]


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