Настройка модели
Для более тонкой настройки поведения модели можно передать дополнительные параметры в свойстве "$model_display_params" в классе модели. Все опции действительны для административной панели, а также методов "create()", "update()" и "delete()".
Редактируемые и не редактируемые поля
"editable_fileds" - редактируемые поля модели
по умолчанию: "*" (все поля)
"not_editable_fields" - не редактируемые поля модели, в административном интерфейсе не редактируются
по умолчанию: пустой массив "array()"
Видимые и скрытые поля
"visible_fields" - видимые поля модели
по умолчанию: "*" (все поля)
"hidden_fields" - скрытые поля модели, в административном интерфейсе не отображаются
по умолчанию: пустой массив "array()"
Операции создания, редактирования и удаления
"create_actions" - возможность создания записей модели в административной панели
"update_actions" - возможность редактирования записей модели в административной панели
"delete_actions" - возможность удаления записей модели в административной панели
"mass_actions" - возможность массового редактирования/удаления записей модели в административной панели.
Все четыре параметра по умолчанию имеют значение "true".
Группировка полей по вкладкам
Если в модели много полей, то можно разгруппировать их по вкладкам (при создании и редактировании записей в административном интерфейсе).
"fields_groups" => array("Наименование группы 1 (вкладки)" => array(массив из названий полей), "Наименование группы 2 (вкладки)" => array(массив из названий полей));
Поля по умолчанию в общей таблице записей модели
"default_table_columns" - массив полей, которые выводятся в общей таблице до того момента, как пользователь сам установил свои настройки полей
"default_table_columns" => array("name", "date", "color", "options")
Переход в другие модели
Для некоторых записей модели в административной панели можно задать возможность перехода в другие модели. Такая необходимость возникает, например, в модели "Меню страниц", когда пункт "Новости" присутствует в списке записей модели, но при этом сами новости располагаются в модели "Новости". Для удобства пользователей можно задать возможность при клике на ссылку "Новости" переходить не на следующий уровень дерева, а в саму модель "Новости".
"redirects_to_models" - массив параметров для перехода в другие модели по прописанным признакам ("id"=32, "url"="news", "name"="Галерея"). Данная опция задействуется только в древовидных моделях (с полем вида "parent").
"redirects_to_models" => array("url" => array("news" => "News"), "name" => array("Каталог" => "Catalogs"), "id" => array("8" => "Faq"))
Ссылки на внешние ключи
Если данная опция задана, то в общей таблице записей в административной панели к полю со значением внешнего ключа будет добавлена ссылка для перехода на страницу редактирования записи данного значения внешнего ключа.
"foreign_keys_admin_links" => true
Ограничение на количество версий
При обновлении записей через административную панель старая версия записи сохраняется, и возможно произвести откат до прежних значений полей. Ограничение на количество хранимых версий одной записи задается опцией "ModelVersionsLimit" в файле "config/settings.php" и по умолчанию составляет 25. Для каждой модели данное значение может быть изменено или полностью отключена возможность сохранять версии. При достижении лимита версий для записи, версии начинают удаляться, начиная с самой старой.
"versions_limit" => 30 "versions_limit" => 0
Настройка фильтров модели
"default_filters" - массив фильтров, которые видны по умолчанию до запуска фильтрации (если опция не задана, то выводятся первые 7 фильтров модели)
"show_empty_default_filters" - если опция включена, фильтры по умолчанию будут отображаться в колонке даже если они не запущены, а другие при этом запущены
"default_filters" => array("price", "articul"), "show_empty_default_filters" => true
Параметры "$name_field" и "$name_field_extra"
Используется когда в модели отсутствует поле с именем "name". Данное являтся полем имени записи, которое отображается в статистике, например на главной странице. Параметр "$name_field" указывает какое поле в модели считать именным. Также можно задать дополнительный параметр "$name_field_extra", чтобы присоединить к названию записи значение еще одного поля.
Пример, модель клиентов для регистрации на сайте
class Clients extends Model { protected $name = "Клиенты"; protected $name_field = "first_name"; protected $name_field_extra = "last_name"; protected $model_elements = array( array("Активация", "bool", "active"), array("Подтверждение региcтрации", "bool", "confirm"), array("Имя", "char", "first_name", array("required" => true)), array("Фамилия", "char", "last_name", array("required" => true)), ... ); protected $model_display_params = array( "editable_fields" => array("active", "first_name", "last_name"), "hidden_fields" => array("confirm"), "create_actions" => false, "fields_groups" => array("Основные параметры" => array("first_name","last_name"), "Прохождение регистрации" => array("active","confirm"), ... ), "default_table_columns" => array("first_name", "last_name", "active"), "default_filters" => array("first_name", "last_name") ); }
Событийные методы
Когда в административной части происходит создание, редактирование или удаление записи, могут быть вызваны специальные методы для проведения дополнительных операций над данными. Во всех методах $id - ключ текущей записи, $fields - ассоциированный массив полей записи вида "array('name' => 'Maxim', 'age' => 27)".
- beforeCreate($fields) - метод вызывается перед созданием записи (id еще не существует)
- afterCreate($id, $fields) - метод вызывается после создания записи (id уже получен после запроса INSERT)
- beforeUpdate($id, $old_fields, $new_fields) - перед редактированием записи (старые и новые значения полей)
- afterUpdate($id, $new_fields) - после редактирования записи (новые значения полей)
- beforeDelete($id, $fields) - до удаления в корзину
- afterDelete($id, $fields) - после удаления в корзину (записи в таблице модели уже нет)
- beforeRestore($id, $fields) - до восстановления из корзины
- afterRestore($id, $fields) - после восстановления из корзины
- beforeFinalDelete($id, $fields) - до окончательного удаления из корзины
- afterFinalDelete($id, $fields) - после окончательного удаления из корзины (записи в таблице корзины уже нет)
Внимание! Методы beforeCreate и beforeUpdate могут возвращать массив измененных полей, которые будут записаны в базу данных и историю изменений. При этом, возвращаемый массив может содержать только те поля, которые были изменены внутри данного метода. В метод beforeUpdate на вход передаются старые и новые (для сравнения) значения полей записи. Смотрите примеры ниже.
Внимание! Если beforeDelete() или beforeRestore() вернут значение "false", операция по удалению (восстановлению) произведена не будет.
class Products extends Model { protected $name = "Товары каталога"; protected $model_elements = array( ... ); protected function beforeCreate($fields) { if(!$fields["price"]) return array("active" => 0); } protected function beforeUpdate($id, $old_fields, $new_fields) { if(!$old_fields["active"] && $new_fields["active"]) return array("status" => "new", "order" => 1); } protected function beforeDelete($id, $fields) { if($fields["type"] == "special") { $this -> addError("Удаление не было произведено по причине..."); return false; } } }
Вставка кода в административный интерфейс
При необходимости в административной панели можно добавлять собственные фрагменты HTML и PHP кода. Для этого в папке "customs/models/" создаем файлы, которые будут автоматически подключаться в заранее обозначенных местах. В названии фалов вместо слова "model" должно стоять название модели, например "products-create.top.php".
Для обычных моделей
Список записей модели
- model-index-top.php - перед кнопками верхней навигации
- model-index-bottom.php - после постраничной разбивки
Создание новой записи
- model-create-top.php - перед формой
- model-create-form.php - перед кнопками до закрытия формы
- model-create-bottom.php - после формы и кнопок
Редактирование записи
- model-update-top.php - перед формой
- model-update-form.php - перед кнопками до закрытия формы
- model-update-bottom.php - после формы и кнопок
Создание и редактирование записи
- model-action-top.php - перед кнопками верхней навигации
- model-action-bottom.php - после формы и кнопок
Для простых моделей
Редактирование полей простой модели
- model-index-top.php - перед формой
- model-index-form.php - перед кнопками до закрытия формы
- model-index-bottom.php - после формы
Пример подключаемого файла, добавим кнопку для перехода на специальную страницу в административной панели, которые описаны в разделе Дополнения к административной панели. Для модели товаров создадим файл с кнопкой, которая будет располагаться под таблицей с записями модели. Название файла для модели "Products" будет "customs/models/products-index-bottom.php".
<? //Если у пользователя есть права на редактирование, выводим ссылку, //если нет то сообщение о нехватке прав if($system -> user -> checkModelRights($system -> model -> getModelClass(), "update")) $update_path = "location.href='".$system -> registry -> getSetting("AdminPanelPath")."custom/?view=upload'"; else $update_path = "dialogs.showAlertMessage('{no_rights}')"; ?> <div class="extra-admin-buttons"> <input type="button" class="button-light" value="Обновить товарную базу" onclick="<? echo $update_path; ?>" /> </div>
Предыдущий раздел
Типы данных