Дополнительные возможности
MV позволяет делать дополнительную обработку данных внутри методов ядра. Для этого необходимо например перегрузить в модели функцию из ядра.
Дополнительная проверка данных в модели
Допустим необходимо вносить данные в формате процентов "12%". Нам необходимо проверить введенные данные на соответствие шаблону регулярного выражения.
<? class Discount extends Model { protected $name = "Скидки"; protected $name_field = "amount"; protected $model_elements = array( array("Активация", "bool", "active", array("on_create" => true)), array("Величина скидки, %", "char", "amount", array("required" => true, "help_text" => "пример 10%, 17%, 30%")), array("Сумма, от", "int", "summ_from", array("required" => true)), array("Сумма, до", "int", "summ_to", array("zero_allowed" => false)) ); public function validate() { $amount = $this -> elements["amount"] -> getValue(); if($amount && !preg_match("/^[1-9]d?%$/", $amount)) $this -> errors[] = "Величина скидки должна быть задана целым числом с % на конце."; return parent :: validate(); } } ?>
Получение и изменение значений полей модели
Из объекта модели можно получить свойства ее полей, а также установить полям новые свойства.
- getFieldProperty($field, $property) - получить значение свойства $property поля $field
- setFieldProperty($field, $property, $value) - установить значение равное $value свойства $property поля $field
$value = $mv -> discount -> getFieldProperty("summ_to", "zero_allowed"); if( ... ) $mv -> discount -> setFieldProperty("summ_to", "zero_allowed", true);
Преобразование значений полей в таблице административной панели
При выводе таблицы записей модели в административной панели, значения поле могут быть изменены нужным образом. Для этого в модели может быть добавлен специальный метод, который может преобразовывать значения полей для таблицы.
- processAdminModelTableFields($name, $row) - где $name - название поля, $row - массив значений всех полей включая id.
//Добавляем метод в модель и в колонке с весами рядом со значениями будут стоять "кг" public function processAdminModelTableFields($name, $row) { if($name = "weight" && $row[$name]) return $row[$name]." кг"; }
Предыдущий раздел
Управление простыми моделями