Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
инвентаризация:dev:model:fields [2024/05/26 17:55] adminинвентаризация:dev:model:fields [2025/09/21 07:40] (текущий) admin
Строка 1: Строка 1:
-{{tag>dev Инвентаризация}} +{{tag>dev Инвентаризация model fields}} 
-====== Инвентаризация: modelfields ======+====== Инвентаризация: DEVModel Fields ======
  
 Описание атрибутов модели делаем в одной функции: Описание атрибутов модели делаем в одной функции:
 <code php> <code php>
-    public $parentAttr='parentService'; //имя атрибута в котором у нас объект-предок (родительское помещение/сервис/отдел и т.д.)+    /** @var string как называется один экземпляр модели (для страницы Create -> Новый объект) */ 
 +    public static $title='Объект'; 
 +  
 +    /** @var string как называется список моделей (для страницы Index) */ 
 +    public static $titles='Объекты'; 
 +  
 +    /** @var string надпись на кнопке создания нового объекта в списке */ 
 +    public static $addButtonText='Добавить'; 
 +  
 +    /** @var null|string подсказка для кнопки создания нового объекта */ 
 +    public static $addButtonHint=null; 
 +  
 +    /** @var string Префикс для страницы Create (Новый $title) */ 
 +    public static $newItemPrefix='Новый'; 
 + 
 +    public $parentAttr='parentService'; //имя атрибута в котором у нас объект-предок (родительское помещение/сервис/отдел и т.д.) - нужен для рекурсивных функций обхода дерева
     public function attributeData() {     public function attributeData() {
         return [         return [
             ['model_id'] => [             ['model_id'] => [
 +                //Атрибуты отображаются в следующих основных сценариях: 
 +                //  - form (заполнение) поиск значений:label,hint
 +                //  - view (просмотр) поиск значений:viewLabel->label,viewHint->indexHint->''
 +                //  - grid (заголовок в таблице) поиск значений:indexlabel->viewLabel->label,indexHint->viewHint->''v
 +                //  - search (заголовк в таблице с фильтром) значение: indexHint()+(searchHint->'')
 +                //  - api (формирование документации) поиск значений:apiLabel->label,apiHint->hint
 +                //метка атрибута
                 //позже транслируется в attributeLabels, используется в отображении атрибута в формах                 //позже транслируется в attributeLabels, используется в отображении атрибута в формах
                 'label'=>'Модель ПК',                   'label'=>'Модель ПК',  
                 //позже транслируется в attributeHints, используется для пояснения атрибута в формах                 //позже транслируется в attributeHints, используется для пояснения атрибута в формах
                 'hint'=>'Модель системного блока / ноутбука. '                  'hint'=>'Модель системного блока / ноутбука. ' 
-                       .'Если нужная модель отсутствует в списке, то нужно сначала завести в ее в соотв. категории оборудования',  +                       .'<br>Если нужная модель отсутствует в списке, то нужно сначала завести в ее в соотв. категории оборудования',   
 +                //метка атрибута для GRID
                 //позже транслируется в attributeIndexLabels, используется в отображении атрибута в списках                 //позже транслируется в attributeIndexLabels, используется в отображении атрибута в списках
 +                //рекомендуется использовать более короткое название атрибута чем 'label', т.к. должен умещаться в ширину колонки
                 'indexLabel'=>'Модель ПК',                   'indexLabel'=>'Модель ПК',  
                 //позже транслируется в attributeIndexHints, используется для пояснения атрибута в списках                 //позже транслируется в attributeIndexHints, используется для пояснения атрибута в списках
-                'indexHint'=>'Модели можно перечислить варианты через верт. черту &quot;|&quot;',  +                //если отсутствует, то используется значение из hint 
 +                //макрос {same} будет заменен на значение в hint 
 +                'indexHint'=>'Модель системного блока / ноутбука.', 
 +                //подсказка для поиска. добавляется к indexHint если в GRID включен поиск 
 +                'searchHint' => 'Имена модели можно перечислить через верт. черту &quot;|&quot;', 
 +                'viewLabel'=>'Модель ПК', 
 +                'viewHint'=>'Модель системного блока / ноутбука.' 
 +                      .'<br> Клик для перехода на описание модели' 
 +                //метка атрибута для API документации 
 +                //если отсутствует, то используется indexLabel 
 +                'apiLabel' => 'Модель ПК', 
 +                //подсказка атрибута для API документации 
 +                //макрос {same} будет заменен на значение в hint 
 +                //если отсутствует, то используется indexHint 
 +                'apiHint' => 'Модель системного блока / ноутбука.', 
 +                //тип Input этого аттрибута в форме редактирования 
 +                //  - boolean - да / нет (чекбокс) 
 +                //  - toggle - это как boolean, но только для 0 и 1 есть свои названия, напр сервис/услуга 
 +                //  - radios - это как toggle, только значений может быть больше 2 
 +                //  - list - это как radios, только значений прям много и оформляется в виде dropdown 
 +                //  - ntext - textarea (простой текст без форматирования с конвертацией nl -> <br> при рендере) 
 +                //  - text - текст с форматированием (какой формат прописывается в параметрах) 
 +                //  - date - дата 
 +                //  - datetime - дата/время 
 +                //  - ips - список IP 
 +                //  - macs - список MAC 
 +                //  - urls - список URL  
 +                //  - link - одиночная ссылка 
 +                //  - number - число (ввод через обычный input/поиск числовой) 
 +                //  - string - обычный текст (по умолчанию) 
 +                'type' => 'toggle', 
 +                //список констант-значений атрибута (для toggle/radios/list) 
 +                'fieldList' => ['Услуга','Сервис'],
                 //чем заполнить селектор в форме, если значение не введено                 //чем заполнить селектор в форме, если значение не введено
                 'placeholder' => 'Модель ПК не выбрана',                   'placeholder' => 'Модель ПК не выбрана',  
                 //поле наследуемое (если не задано в этом объекте, то значение берется из родителя)                 //поле наследуемое (если не задано в этом объекте, то значение берется из родителя)
                 'is_inheritable'=>true,                 'is_inheritable'=>true,
-                //поле является ссылкой на объекты с обратной ссылкой на этот.  +                //атрибут только для чтения (updated_at, раскрытые ссылки) -> для API документации 
-                //при наличии объектов в этом поле, считаем что себя удалять нельзя,  +                'readOnly'=>true
-                //иначе в объектах ссылающихся на нас будут битые ссылки +                //атрибут только для записи (пароль) -> для API документации 
-                //(если не объявлять явно, определяется из $linkSchema +                'writeOnly'=>true,
-                'is_reverseLink'=false,+
                 //при вызове функции absorb это поле нужно поглощать из переданного объекта                 //при вызове функции absorb это поле нужно поглощать из переданного объекта
                 // - false - нет (по умолчанию для полей - "не обратных ссылок"                 // - false - нет (по умолчанию для полей - "не обратных ссылок"
-                // - 'ifemty' - если локальное значение отсутствует, то принимать с абсорбируемого объекта+                // - 'ifEmpty' - если локальное значение отсутствует, то принимать с абсорбируемого объекта
                 // - true - да (по умолчанию для полей, являющихся обратными ссылками)                 // - true - да (по умолчанию для полей, являющихся обратными ссылками)
                 'absorb'=>true,                 'absorb'=>true,
 +                //что нужно заджойнить при отображении этого атрибута в списке (для жадной загрузки + поиск)
 +                'join'=>['techModel','techType']
             ],             ],
             'model'=>['alias'=>'model_id'], //значения параметров атрибута брать из model_id             'model'=>['alias'=>'model_id'], //значения параметров атрибута брать из model_id
Строка 41: Строка 98:
      * 'services_ids'=>[      * 'services_ids'=>[
      * Service::class, //на какой класс ссылаемся      * Service::class, //на какой класс ссылаемся
-     * 'acls_ids', //если там есть обратная ссылка, то в каком аттрибуте +     * 'acls_ids', //если там есть обратная ссылка, то в каком аттрибуте 
-      ], +                      'updater' => ['class' => ManyToManySmartUpdater::class,], //Если запись в many-2-many таблицу делается кастомным способом 
-     * 'user_id'=>[ +                                              //Передается в behaviors() 
-     * Users::class, +                                              //https://github.com/voskobovich/yii2-linker-behavior?tab=readme-ov-file#custom-junction-table-values 
-     * 'loader'=>'user' //как загрузчик этого объекта называется в мастер-классе+     * 'loader'=>'servicesList',//как загрузчик этого объекта называется, если он не формируется автоматически из названия ссылки 
 +     * 'deleteable'=>true,     //можно ли удалять объект с такими ссылками (если ссылки удаляются в beforeDelete)
      * ],      * ],
      * ];      * ];
  • инвентаризация/dev/model/fields.1716746105.txt.gz
  • Последнее изменение: 2024/05/26 17:55
  • admin