Документация

Начало работы

Модели (models)

Шаблоны (views) и маршрутизация (routes)

Формы

SQL запросы

Сессии и безопасность

Плагины

Настройка модели

Для более тонкой настройки поведения модели можно передать дополнительные параметры в свойстве "$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>

Предыдущий раздел

Типы данных

Следующий раздел

Простые модели