Skip to content
vkiranananda edited this page Oct 18, 2020 · 14 revisions

Работа с полями

Описание полей

В данной секции перечисляются все поля которые будут использоваться.

Обязательные опции поля

name название поля в БД, оно же используется как ключ для поля.

type Тип поля

Не обязательные опции поля

label Заголовок

desc описание поля

validate Валидация как в Laravel

field-save Куда сохраняем, если не указано, то корневую ячейку в таблице, если array то в массив в специальной ячейке (удобно для хранения данных не участвующих в where).

col-classes Классы бутстрап или свои отвечающие за размерность поля, по умолчанию col-12 .

protected Дополнительно защищает поле от случайных изменений

show Опция отображения, привязывается к полю типа select. Пример использования

'show' => [ 
    [ 'type' => '==', 'field' => 'template', 'value' => '' ],
    [ 'operator' => '||', 'type' => '==', 'field' => 'template', 'value' => 'contacts' ]
]	

Если используется более одного условия, во всех последующих надо указывать опцию operator.

Текстовый input

'name' => [
    'name' => 'name',
    'type' => 'text', 
    'label' => 'Заголовок',
    'validate' => 'required',
],

Текстовый редактор

upload включает загрузку файлов

size Высота редактора, по умолчанию самый маленький, значения: normal

format количество элементов, по умолчанию минимум, значения: fool

'text' => [	
    'name' => 'text',
    'type' => 'editor', 
    'label' => 'Текст',
    'upload' => true,
],

Select. Он же radio и checkbox. Просто меняем тип поля.

options указываем массив опций

'template' => [ 
    name' => 'template',
    'type' => 'select', 
    'field-save' => 'array',
    'label' => 'Шаблон', 
    'options' => [
	[ 'value' => '', 'label' => 'По умолчанию' ],
     	[ 'value' => 'contacts', 'label' => 'Контакты' ],
     	[ 'value' => 'about', 'label' => 'О нас' ],
     	[ 'value' => 'clients', 'label' => 'Клиенты' ],
     	[ 'value' => 'main', 'label' => 'Главная' ],
    ],
],

Галерея файлов, то же но с типом files для загрузки файлов.

max-files указывается максимальное количество файлов.

'gallery' => [
    'name' => 'gallery',
    'type' => 'gallery',
    'label' => 'Галерея',
],

Тип group для создания отдельной группы полей.

load-from указывает откуда подгрузить поля.

fields список полей.

'seo' => [
    'name' => 'seo',
    'type' => 'group',
    'load-from' => 'seo-fields',
    'field-save' => 'array' 
],

Повторители, те поля которые можно добавлять сколько угодно раз.

add-label название кнопки добавить. По умолчанию "Добавить".

'plashki' => [
    'name' => 'plashki',
    'type' => 'repeated', 
    'label' => 'Вращающиеся элементы',
    'add-label' => 'Добавить новый блок',
    'fields' => [
	'text' => [
		'name' => 'text',
		'type' => 'editor', 
		'size' => 'small',
		'label' => 'Текст',
	],
    ],	
], 

Рабочий пример

<?php
	return [

        'list' => [
        	[ 'name' => 'name', 'icon' => 'file', 'link' => 'edit', 'sortable' => true ],
        	[ 'name' => 'category', 'label' => 'Категория', 'attr' => [ 'width' => '20%' ], 'func' => 'indexCategoryField', 'link' => 'category' ],
        	[ 'name' => 'url', 'attr' => [ 'width' => '10%' ] ],
        	[ 'name' => 'updated_at', 'label' => 'Дата модификации', 'attr' => [ 'width' => '190px' ], 'sortable' => true ]
        ],

		'fields' => [
  	        'name' => [
	        	'name' => 'name',
	            'type' => 'text', 
	            'label' => 'Заголовок',
	            'validate' => 'required',
	        ],
	        'text' => [
	        	'name' => 'text',
	            'type' => 'editor', 
	            'label' => 'Текст',
	            'format' => 'fool',
	            'size' => 'normal',
	            'upload' => true,
    			'show' => [ 
	            	[ 'type' => '==', 'field' => 'template', 'value' => '' ],
	            	[ 'operator' => '||', 'type' => '==', 'field' => 'template', 'value' => 'contacts' ]
	            ]	
	        ],
    		'seo' => [
    			'name' => 'seo',
    			'type' => 'group',
    			'load-from' => 'seo-fields',
    			'field-save' => 'array' 
    		],
	        'template' => [ 
	        	'name' => 'template',
        		'type' => 'select', 
        		'field-save' => 'array',
        		'label' => 'Шаблон', 
        		'options' => [
        			[ 'value' => '', 'label' => 'По умолчанию' ],
	         		[ 'value' => 'contacts', 'label' => 'Контакты' ],
	         		[ 'value' => 'about', 'label' => 'О нас' ],
	         		[ 'value' => 'clients', 'label' => 'Клиенты' ],
	         		[ 'value' => 'main', 'label' => 'Главная' ],
        		],
    		],
    		'category_id' => [ 
	        	'name' => 'category_id',
        		'type' => 'select', 
        		'name' => 'category_id', 
        		'label' => 'Категория', 
    		],
			'url' => [
	            'name' => 'url',
	            'type' => 'text', 
	            'label' => 'URL',
	            'validate' => 'required|alpha_dash',
	        ],
	        // unique:pages,url

	        'slider' => [
	        	'name' => 'slider',
	            'type' => 'gallery',
	            'label' => 'Слайдер',
	        ],

	        // clients
	        'clients' => [
	        	'name' => 'clients',
	            'type' => 'group', 
	            'field-save' => 'array',
	            'fields' => [
			        'map' => [
			        	'name' => 'map',
			            'type' => 'gallery',
			            'label' => 'Карта',
			            'max-files' => 1, 
			        ],	            	
				  	'gallery4' => [
			        	'name' => 'gallery4',
			            'type' => 'gallery',
			            'label' => 'Логотипы по 4 в ряд',
			        ],
				  	'gallery5' => [
			        	'name' => 'gallery5',
			            'type' => 'gallery',
			            'label' => 'Логотипы по 5 в ряд',
			        ],
	            ],
    			'show' => [ 
	            	[ 'type' => '==', 'field' => 'template', 'value' => 'clients' ],
	            ]	
	        ], 


	        // main page
	        'main' => [
	        	'name' => 'main',
	            'type' => 'group', 
	            'field-save' => 'array',
	            'fields' => [
			        'slider' => [
			        	'name' => 'slider',
			            'type' => 'repeated', 
			            'label' => 'Слайдер',
			            'field-save' => 'array',
			            'fields' => [
				  	        'title' => [
					        	'name' => 'title',
					            'type' => 'text', 
					            'label' => 'Заголовок',
					            'col-classes' => 'col-6',
					        ],
				  	        'desc' => [
					        	'name' => 'desc',
					            'type' => 'text', 
					            'label' => 'Описание',
					            'col-classes' => 'col-6',
					        ],
				  	        'url' => [
					        	'name' => 'url',
					            'type' => 'text', 
					            'label' => 'URL',
					            'col-classes' => 'col-6',
					        ],
					        'gallery' => [
					        	'name' => 'gallery',
					            'type' => 'gallery',
					            'label' => 'Слайд',
					            'col-classes' => 'col-6',
					            'max-files' => 1, 
					        ],
			            ],	
			        ],  
			        'plashki' => [
			        	'name' => 'plashki',
			            'type' => 'repeated', 
			            'label' => 'Вращающиеся элементы',
			            'field-save' => 'array',
			            'fields' => [
				  	        'text' => [
					        	'name' => 'text',
					            'type' => 'editor', 
					            'size' => 'small',
					            'label' => 'Текст',
					        ],
			            ],	
			        ], 
			        'gallery' => [
			        	'name' => 'gallery',
			            'type' => 'gallery',
			            'label' => 'Галерея',
			            'desc' => 'Если картинка вертикальная, то она отобразится в 2 ряда, если горизонтальная и ширина в 2 раза больше высоты, она отобразиться в 2 ячейки.'
			        ],
	            ],
    			'show' => [ 
	            	[ 'type' => '==', 'field' => 'template', 'value' => 'main' ],
	            ]	
	        ],  

	        // about us
	        'about' => [
	        	'name' => 'about',
	            'type' => 'repeated', 
	            'label' => 'Страница',
	            'field-save' => 'array',
	            'fields' => [
			        'type' => [ 
			        	'name' => 'type',
		        		'type' => 'select', 
		        		'field-save' => 'array',
		        		'label' => 'Тип', 
		        		'options' => [
		        			[ 'value' => 'big', 'label' => 'Большой банер' ],
		        			[ 'value' => 'big_title', 'label' => 'Заголовок' ],
			         		[ 'value' => 'left', 'label' => 'Картинка слева' ],
			         		[ 'value' => 'right', 'label' => 'Картинка справа' ],
		        		],
		        		'col-classes' => 'col-6'
		    		],
		  	        'big_title' => [
			        	'name' => 'big_title',
			            'type' => 'text', 
			            'label' => 'Заголовок',
		    			'show' => [ 
			            	[ 'type' => '==', 'field' => 'type', 'value' => 'big_title' ],
			            ],
			            'col-classes' => 'col-6'
			        ],
			        'gallery' => [
			        	'name' => 'gallery',
			            'type' => 'gallery',
			            'label' => 'Картинка',
			            'max-files' => 1, 
			            'col-classes' => 'col-6',
		    			'show' => [ 
			            	[ 'type' => '!=', 'field' => 'type', 'value' => 'big_title' ],
			            ],
			        ],
		  	        'text' => [
			        	'name' => 'text',
			            'type' => 'editor',
			            'size' => 'small', 
			            'label' => 'Текст',
		    			'show' => [
			            	[ 'type' => '!=', 'field' => 'type', 'value' => 'big' ],
			            	[ 'operator' => '&&', 'type' => '!=', 'field' => 'type', 'value' => 'big_title' ],
			            ],
			        ],
	            ],
    			'show' => [ 
	            	[ 'type' => '==', 'field' => 'template', 'value' => 'about' ],
	            ]	
	        ], 
    		'sitemap' => [
    			'name' => 'sitemap',
    			'type' => 'group',
    			'load-from' => 'Sitemap::page',
    			'field-save' => 'array',
    			'label' => 'Карта сайта' 
    		], 
	    ],

		'edit' => [
			'default' => [
				'label' => 'Основные',
				'name' => 'default',
				'fields' => [ 'name', 'text', 'clients', 'main', 'about' ],
			],
			'attr' => [
				'label' => 'Атрибуты',
				'name' => 'attr',
				'fields' => [ 'category_id', 'template' ],
			],
			'seo' => [
				'label' => 'SEO',
				'name' => 'seo',
				'fields' => [ 'url', 'seo' ],
			],'sitemap' => [
				'label' => 'Карта сайта',
				'name' => 'sitemap',
				'fields' => [ 'sitemap' ],
			]
		],
		'search' => [
          	[
          		'name' => 'search',
          		'type' => 'text',
        		'attr' => [ 'placeholder' => 'Введите текст для поиска' ],
          		'fields' => [ 'name', 'text' ],
          	],[
          		'options-empty' => 'Все категории',
          		'name' => 'parent_cat',
          		'field-from' => 'category_id',
          		'label' => '',
          		'fields' => [ 'category_id'],
          		'search-type' => 'filter',
          	],
        ]
    ];
Clone this wiki locally