Включить условия для этой рубрики
[tag:img:/путь]
[tag:c200x100:/путь]
<img> из пути (можно [tag:value])
из пути (можно [tag:value])
$hook->fail('Причина')
(отключён)
, используйте
12 колонок
; готовый вывод поля:
; сырое поле:
<img> из пути (можно [tag:value])
[tag:c200x100:/путь]
[tag:img:/путь]
Header, основной шаблон и footer рубрики.
HTML-шаблон элемента
HTML-шаблоны отображения поля и request.
ID уже доступен. Изменённые свойства документа автоматически записываются ещё раз без повторного запуска хуков; значения полей сохраняются после обработчика.
ID, название, алиас или описание
OG-разметка
PHP и JavaScript запрещены. Доступны теги документа и добавленных полей.
{{ type.enabled ? 'Отключить' : 'Включить' }} тип {{ type.name }}
{{ type.enabled ? 'Убрать из выбора новых полей' : 'Добавить в выбор новых полей' }}
· включите
Авто
Авто meta
Автоматически
активна
Активны
Активных
Алиас
алиас поля
Анонс
Анонсы
Базовая разметка
Базовые параметры рубрики.
без алиаса
Без группы
Безопасная HTML-разметка
в текущем фильтре,
Вариант шаблона для документов рубрики.
Вид документов
Вид документов рубрики
Видимость, доступность и обязательность
Включена
Включить
Включить условие группы
Включить условия формы
Включить условия формы для рубрики
Включён
Включённые
Вручную
Все типы
всего.
Выберите добавленное поле
Выберите запись в истории выше.
Выберите поле на холсте
Выберите ревизию
Выберите тип поля.
Выбор
Выбранные поля как колонки
выкл
Выключена
Выключены
Выполняется при формировании страницы документа. Не относится к сохранению.
готов
Готовая группа полей без изменения существующих данных.
Групп
Группа полей внутри рубрики.
Группы тегов
Действие при совпадении
До сохранения документа
Добавить в выбор новых полей
Добавить выбранный набор
Добавить набор
Добавьте нужные данные в представление.
документ
Документ и поля через
документа
документов
доп. шаблонов
Дополнительные
Дополнительные шаблоны
Дополнительный шаблон
Доступны
Доступные поля
Доступные теги
если поле заполнено
если поле пустое
Есть несохранённые изменения
Ещё не размещены на форме.
Запретить изменение
Здесь можно изменить подпись, формат и ширину.
Здесь появится точный список изменений до восстановления.
Значение по умолчанию
значение по умолчанию
значение поля целиком
и
Изменение шаблона не переписывает URL уже созданных документов.
Изменения попадут в первую запись. Для нового документа
Изменить значение при совпадении
Изображение
Изображение задаётся полем рубрики
или
Индексировать значение
Использование
Используемые
Используются документами через поле `rubric_tmpl_id`.
История алиасов
История полей, групп, раскладки и условий формы.
К развёрнутому шаблону добавляется alias документа. Пустой шаблон оставляет документ в корне.
Как составить шаблон
Как формируется адрес
Канонический URL
Карточки
кг
клик — вставить в активный редактор
Код рубрики
Код шаблона
Конструктор формы документа.
Контекст и системные API
Контекст публичного вывода
Копия
Материалы
Метатеги для соцсетей и мессенджеров на страницах этой рубрики.
Метка
миниатюра: c-обрезка/r-ресайз/f-вписать
Можно скрыть группу или запретить изменение всех её полей.
Набор полей
Наборы полей
название поля
Название сайта
Название, URL-алиас и описание рубрики.
Название, алиас, тип и группа поля.
Название, код или назначение
Наименование
Найти поле
Настройка списка в разделе документов.
Настройки появятся здесь и сохранятся вместе с раскладкой.
Настройки, зависящие от выбранного типа поля.
Настройте рабочий набор для новых рубрик. Отключение не влияет на уже созданные поля.
Настройте состав формы, затем сразу переходите к материалам выбранной рубрики.
Не выбран
Не изменять
Не индексировать
Не сохранено
Новая группа
Новая рубрика
Новое значение
Новое поле
Новые типы
Новый
Обработчики сохранения документа и код публичного вывода.
Обычное значение
Обычные части пути пишутся напрямую. Маркеры даты берутся из даты публикации документа.
Обязательно при показе
Обязательность настраивается в «Редакторе типа» → Валидация.
Ограничить варианты
Выберите, какие поля будут доступны при настройке рубрик.
Основной
Основной вывод
Основной шаблон
Основной шаблон и дополнительные варианты.
Отключено
Отключить
Отключён
Откройте палитру тегов, вставьте медиаполе и добавьте формат
Открыть документы
Открыть материалы рубрики
Оформление в документе
Оформление выбранного поля.
Очистить поле
ошибка
Ошибок реестра
Первые документы рубрики, без сохранения настроек.
Перетаскивайте поля за маркер.
Перетащите строки за ручку, чтобы изменить порядок.
Доступные типы полей
По выбранным условиям типы не найдены.
Подпись
Поиск тегов
Поиск, тип значения и значение по умолчанию.
Показывать группу
Показывать поле
Показывают, скрывают, блокируют и делают поля обязательными в зависимости от введённых значений.
Полей
полей
Полей в БД
Полная
Половина
Поля в компактной сетке
Поля рубрики
Поля рубрик
После добавления поле исчезает из этого списка.
После сохранения документа
Последствия восстановления
Префикс
При публичном выводе документа
При совпадении оставить только отмеченные значения
Пример
Приставка
проверить
Проверяется также на сервере
продолжают работать.
Просмотр структуры рубрик.
Публикация и вывод
Публичный teaser-шаблон для списков и запросов сайта.
Пустая рубрика
равен
Разделы рубрик
Расширенные настройки
Реальный порядок, группы и ширина полей.
Ревизии схемы
Ревизии схемы рубрики
Редактор типа
Режим представления
Рубрик
Рубрика будет создана без дополнительных полей.
Рубрики
Справочники
Структура контента
Рубрики не найдены.
Свой шаблон
Свойства выбранного поля.
Связанный
Системная таблица документов
Скрывать группу
Скрывать поле
Скрыты
Слева, напр. №, $.
Снимки схемы
Снимок не выбран
Совместимость со старым кодом
Создать материал
Создать материал в рубрике {{ rubric.rubric_title|e('html_attr') }}
Создать рубрику
Состав
Состав и порядок
Состояние типов полей
Сохранить представление
Сохранить раскладку
Список рубрик
Способ добавления
Способ добавления набора
Справа, напр. ₽, кг, %.
Сработает один раз, когда условие станет выполненным. Значение можно отменить до сохранения документа.
Средняя
Стандартный
Стартовый набор полей
Структура документов
Суффикс
Таблица
Текущий документ:
Тип поля
Тип хранится в схеме рубрики; панель управления подбирает для него подходящий редактор.
Типы материалов, их поля и оформление.
Типы полей
Типы полей не найдены.
Треть
Убрать из выбора новых полей
Удалить снимок
Узкая
Узкие поля встают в колонки.
Условие для всей группы
Условия формы
Условия формы документа
Установить значение
Участвует в поиске
Форма документа
Формат
Хранить числовой индекс
часть значения №N (по «|»)
Четверть
Число
Числовое
Числовое значение
Что делать при совпадении
Шаблон URL документов
Шаблон вывода
Шаблон рубрики
Шаблон сайта
Шаблон сайта, видимость документов и генерация meta.
Шаблоны вывода
Шаблоны рубрики
Ширина
Ширина в сетке и приставка/суффикс поля.
Ширина в строке
Ширина поля
Широкая
— весь payload документа
— все переданные значения полей
— изменить поле
— настройка
— остановить сохранение
" data-document-color-picker aria-label="Выбрать цвет">
" placeholder="Значение" data-builder-condition-value
" placeholder="Название значения" data-settings-map-label>
" placeholder="Например, 0" data-settings-map-key>
"></i><span><b>Условия будут
' + (!result.linked_available ? ' disabled' : '') + '>Связанный набор</button></div></div>'
+ (conflicts.length ? '<div class=
(исходное поле имеет тип
. Сначала уберите эти связи.
0 или 1
3 колонки
4 колонки
6 колонок
: alias занят типом
: нельзя автоматически изменить тип заполненного или локально изменённого поля
</b> запросов</span>
</b> модулей</span>
</b> шаблонов</span>
</b><small>изменится</small></span>
</b><small>полей с изменениями</small></span><span><b>
</b><small>скрыто · заблокировано
</b><small>форм изменят поведение</small></span><span><b>
</div><button class="btn btn-ghost" type="button" data-impact-cancel>Вернуться</button><button class="btn btn-primary" type="button" data-impact-confirm><i class="ti ti-check"></i>Применить изменения</button></div></div>
</span><small>Всего документов в рубрике:
<b>Preview edit-режима</b>
<button class="btn btn-ghost btn-icon btn-sm ax-settings-map-remove" type="button" data-settings-map-remove data-tooltip-left="Удалить" aria-label="Удалить значение"><i class="ti ti-trash"></i></button>
<button class="btn btn-ghost btn-icon btn-sm documents-drag-handle" type="button" data-doc-drag draggable="true" data-tooltip="Перетащить" aria-label="Перетащить"><i class="ti ti-grip-vertical"></i></button>
<button class="btn btn-ghost btn-icon btn-sm documents-value-remove" type="button" data-document-value-remove data-tooltip="Удалить" aria-label="Удалить"><i class="ti ti-trash"></i></button>
<button class="btn btn-ghost btn-icon btn-sm rubrics-action-danger" type="button" data-builder-condition-group-remove data-tooltip-left="Удалить группу" aria-label="Удалить группу"><i class="ti ti-trash"></i></button>
<button class="btn btn-ghost btn-icon btn-sm rubrics-action-danger" type="button" data-builder-condition-remove data-tooltip-left="Удалить условие" aria-label="Удалить условие"><i class="ti ti-trash"></i></button>
<button class="btn btn-ghost btn-icon btn-sm rubrics-action-danger" type="button" data-group-delete data-tooltip-left="Удалить" aria-label="Удалить"><i class="ti ti-trash"></i></button>
<button class="btn btn-ghost btn-icon btn-sm rubrics-action-edit" type="button" data-group-edit data-open-drawer="rubricGroupDrawer" data-tooltip-left="Изменить" aria-label="Изменить"><i class="ti ti-pencil"></i></button>
<button class="btn btn-ghost btn-icon btn-sm rubrics-group-drag" type="button" data-group-drag-handle data-tooltip-right="Перетащить" aria-label="Перетащить"><i class="ti ti-grip-vertical"></i></button>
<button class="btn btn-ghost btn-icon btn-sm" type="button" data-builder-condition-add data-tooltip-left="Добавить условие" aria-label="Добавить условие"><i class="ti ti-plus"></i></button>
<button class="btn btn-ghost btn-icon btn-sm" type="button" data-builder-condition-group-add data-tooltip-left="Добавить группу" aria-label="Добавить вложенную группу"><i class="ti ti-brackets"></i></button>
<button class="btn btn-ghost btn-icon btn-sm" type="button" data-document-value-down data-tooltip="Ниже" aria-label="Ниже"><i class="ti ti-arrow-down"></i></button>
<button class="btn btn-ghost btn-icon btn-sm" type="button" data-document-value-up data-tooltip="Выше" aria-label="Выше"><i class="ti ti-arrow-up"></i></button>
<button class="btn btn-ghost btn-sm" type="button" data-document-value-clear><i class="ti ti-trash"></i>Очистить</button>
<button class="btn btn-secondary btn-sm" type="button" data-document-value-add><i class="ti ti-plus"></i>Добавить</button>
<button type="button" class="btn btn-ghost btn-icon btn-sm documents-relation-clear" data-document-relation-clear data-tooltip="Очистить" aria-label="Очистить"
<button type="button" class="documents-relation-choice" data-document-relation-pick data-tooltip="Выбрать документ">
<div class="empty-state">Выберите тип поля.</div>
<div class="empty-state">Группы не созданы.</div>
<div class="empty-state">Правила полей не изменились.</div>
<div class="empty-state">Ревизий пока нет. Первый снимок появится после изменения полей или конструктора.</div>
<div class="modal-footer"><div class="mf-left text-secondary text-sm">Документов проверено:
<div class="modal-header"><span class="dialog-icon warning"><i class="ti ti-git-compare"></i></span><div class="rubrics-impact-heading"><h3 id="rubricsBuilderImpactTitle">Проверьте влияние условий</h3><p>Изменения затронут форму уже созданных документов.</p></div><button class="modal-close" type="button" data-impact-cancel aria-label="Закрыть"><i class="ti ti-x"></i></button></div>
<div class="rubrics-plugin-ok"><i class="ti ti-circle-check"></i>Критичных проблем не найдено.</div>
<div class="rubrics-revision-change-list"><b class="rubrics-revision-change-list-title">Будут изменены</b>
<div class="rubrics-revision-dependencies-head"><div><h5>Зависимости схемы</h5><p>
<div class="rubrics-revision-empty"><i class="ti ti-history"></i><b>Снимок не выбран</b><span>Выберите запись в истории выше.</span></div>
<div class="rubrics-revision-row-main"><div><b>Снимок
+
<label class="field"><span class="field-label">URL ролика</span>
<label class="field"><span class="field-label">Высота</span><input class="input" type="number" min="0" name="
<label class="field"><span class="field-label">Значение
<label class="field"><span class="field-label">Метод</span><select class="select" name="
<label class="field"><span class="field-label">Ширина</span><input class="input" type="number" min="0" name="
<option value="">Не выбрано</option>
<p class="rubrics-impact-notice"><i class="ti ti-info-circle"></i>Проверены
<p class="text-secondary">Изменений нет.</p>
<select class="select" data-builder-condition-join aria-label="Логика группы"><option value="and"
<span class="field-hint">Только документы из рубрики
:
<span class="rubrics-builder-field-condition" data-tooltip="Условное поле" aria-label="Условное поле"><i class="ti ti-git-branch"></i></span>
<span class="text-secondary text-sm">Варианты не настроены.</span>
>'
+ '<div><b>' + esc(item.title) + '</b><small>Шаблон
+ '<div class=
>' + links.length + '</span></div>'
+ links.map(function (link) {
var state = !link.available ? 'Источник недоступен' : (link.update_available ? 'Есть обновление' : 'Актуален');
var badge = !link.available ? 'badge-red' : (link.update_available ? 'badge-amber' : 'badge-green');
return '<article><span><b>' + esc(link.title || link.code) + '</b><small><code>' + esc(link.code) + '</code></small></span>'
+ '<span class=
></i>' + esc(field.alias || 'без алиаса') + '</span><span><i class=
></i>' + esc(field.type || '') + '</span><code>[field:' + esc(field.alias || field.id) + ']</code>';
}
},
renderAdminViewTokens: function () {
var root = document.querySelector('[data-admin-view-tokens]');
if (!root || !this.adminViewState) { return; }
var tokens = [
{ token: '[document:title]', label: 'Название' },
{ token: '[document:id]', label: 'ID' },
{ token: '[document:alias]', label: 'Alias' }
];
this.adminViewState.items.forEach(function (item) {
tokens.push({ token: '[field:' + (item.alias || item.field_id) + ']', label: item.label });
});
root.innerHTML = tokens.map(function (item) {
return '<button type=
></i></span>'
+ '<div><h3>' + esc(group.id ? group.title : 'Основные поля') + '</h3><p>' + esc(group.description || (group.id ? 'Группа полей документа' : 'Поля без отдельной группы')) + '</p></div>'
+ (groupCondition.tree ? '<span class=
></i></span><span><b>' + esc(result.title || 'Набор полей') + '</b><small>' + esc(result.description || 'Описание не задано') + '</small></span></div>'
+ '<div class=
></i><b>Все поля размещены</b><span>Новых полей для добавления нет.</span></div>';
}
if (count) { count.textContent = items.length; }
var search = document.querySelector('[data-builder-search]');
if (search && search.value) { this.filterBuilderPalette(search.value); }
},
resetBuilderInspector: function () {
this.builderSelectedId = 0;
document.querySelectorAll('[data-builder-select].is-selected').forEach(function (node) { node.classList.remove('is-selected'); });
var empty = document.querySelector('[data-builder-inspector-empty]');
if (empty) { empty.hidden = false; }
if (this.builderForm) { this.builderForm.hidden = true; }
},
unplaceBuilderField: function (row) {
if (!row) { return; }
var id = parseInt(row.getAttribute('data-id'), 10) || 0;
var field = this.builderField(id);
var palette = document.querySelector('[data-builder-palette]');
if (!field || !palette) { return; }
if (this.builderSelectedId === id) { this.captureBuilderInspector(); }
if (!palette.querySelector('[data-builder-palette-item][data-id=
></i><b>Настройки типа</b></div>' + type.settings_html
: '<p class=
></i><b>Поля не добавлены</b><span>Выберите их в левой колонке. Название, состояние и действия документа останутся системными.</span></div>';
var count = document.querySelector('[data-admin-view-item-count]');
if (count) { count.textContent = items.length + ' / 10'; }
},
renderAdminViewInspector: function () {
var empty = document.querySelector('[data-admin-view-inspector-empty]');
var form = document.querySelector('[data-admin-view-inspector]');
var item = this.adminViewItem(this.adminViewSelected);
if (empty) { empty.hidden = !!item; }
if (form) { form.hidden = !item; }
if (!item || !form) { return; }
form.querySelector('[data-admin-view-label]').value = item.label || '';
form.querySelector('[data-admin-view-format]').value = item.format || 'text';
var width = form.querySelector('input[name=
></i><b>Связанные наборы</b><span class=
></i><div><b>Конфликт типов</b><p>' + esc(conflicts.join(', ')) + '</p></div></div>' : '<div class=
></i><div><b>Набор не готов к импорту</b><p>' + esc(message) + '</p></div></div>';
stateRoot.hidden = true;
};
var preview = function (file) {
if (!file) { return; }
nameRoot.textContent = file.name || 'field-set.json';
if (file.size > 262144) { showError('Файл превышает 256 КБ'); return; }
var reader = new FileReader();
reader.onerror = function () { showError('Не удалось прочитать выбранный файл'); };
reader.onload = function () {
descriptor = String(reader.result || '');
stateRoot.hidden = false;
stateRoot.classList.add('is-loading');
stateRoot.innerHTML = '<i class=
></i><div><b>Стандартный список документов</b><span>ID, название, рубрика, состояние, дата и системные действия.</span></div></div>';
return;
}
if (!this.adminViewPreview.length) {
root.innerHTML = '<div class=
></i><span><b>Выберите JSON набора</b><small>AVE.cms field-set, не более 256 КБ</small></span><input type=
></i><span><b>Проверяем набор</b><small>Сравниваем alias и типы полей.</small></span>';
previewRoot.hidden = true;
applyButton.disabled = true;
var data = new FormData();
data.append('_csrf', self.form.elements._csrf.value);
data.append('descriptor', descriptor);
fetch(self.base() + '/rubrics/' + self.currentRubricId + '/field-sets/import/preview', {
method: 'POST', body: data, headers: { 'Accept': 'application/json' }, credentials: 'same-origin'
}).then(function (response) { return response.json(); }).then(function (json) {
if (!json.success) { throw new Error(json.message || 'Набор не прошёл проверку'); }
var result = json.data || {};
fingerprint = result.fingerprint || '';
var conflicts = result.conflicts || [];
importHasConflicts = !!conflicts.length;
stateRoot.hidden = true;
previewRoot.hidden = false;
previewRoot.innerHTML = '<div class=
></i><span><b>Сначала выполняется проверка</b><small>Документы и существующие поля не меняются.</small></span></div><div data-field-set-import-preview hidden></div></div>'
+ '<div class=
></i><span>В рубрике пока нет документов</span></div>';
return;
}
var self = this;
if (this.adminViewState.mode === 'table') {
root.innerHTML = '<div class=
></i><span>Перетащите поле в эту группу</span></div>';
}
canvas += '</div></section>';
});
var canvasRoot = document.querySelector('[data-builder-canvas]');
var paletteRoot = document.querySelector('[data-builder-palette]');
var count = document.querySelector('[data-builder-field-count]');
if (canvasRoot) { canvasRoot.innerHTML = canvas || '<div class=
></i><span>Поля не найдены</span></div>';
var count = document.querySelector('[data-admin-view-field-count]');
if (count) { count.textContent = this.adminViewFields.length; }
},
renderAdminViewItems: function () {
var root = document.querySelector('[data-admin-view-items]');
if (!root || !this.adminViewState) { return; }
var self = this;
var items = this.adminViewState.items || [];
root.innerHTML = items.length ? items.map(function (item, index) {
return '<article class=
></i>Загрузка настроек типа...</div>';
fetch(this.base() + '/rubrics/fields/' + field.Id + '/plugin', { headers: { 'Accept': 'application/json' }, credentials: 'same-origin' })
.then(function (res) { return res.json(); })
.then(function (json) {
if (self.builderSelectedId !== parseInt(field.Id, 10)) { return; }
var data = json.data || {};
var type = data.type || {};
root.innerHTML = type.settings_html
? '<div class=
></i>Импортировать</button></div></div>';
document.body.appendChild(overlay);
requestAnimationFrame(function () { overlay.classList.add('show'); });
var fileInput = overlay.querySelector('[data-field-set-import-file]');
var dropzone = overlay.querySelector('[data-field-set-dropzone]');
var previewRoot = overlay.querySelector('[data-field-set-import-preview]');
var stateRoot = overlay.querySelector('[data-field-set-import-state]');
var applyButton = overlay.querySelector('[data-field-set-import-apply]');
var nameRoot = overlay.querySelector('[data-field-set-import-name]');
var descriptor = '';
var fingerprint = '';
var importMode = self.fieldSetMode;
var importHasConflicts = false;
var close = function () {
overlay.classList.remove('show');
setTimeout(function () { overlay.remove(); }, 160);
};
var showError = function (message) {
fingerprint = '';
importHasConflicts = true;
applyButton.disabled = true;
previewRoot.hidden = false;
previewRoot.innerHTML = '<div class=
></i>условие</span>' : '')
+ '<span class=
><b>' + conflicts.length + '</b><small>конфликтов</small></span></div>'
+ '<div class=
><header><div><b>' + esc(document.document_title) + '</b><small>#' + esc(document.Id) + ' · ' + esc(document.document_alias || 'без alias') + '</small></div><i class=
><span>'
+ esc(group.title || 'Теги') + '</span><b>' + items.length + '</b></button>');
var buttons = items.map(function (tag) {
var select = tag.select ? ' data-rubric-template-tag-select=
><span>' + esc(item.created_label) + '</span><span>' + esc(item.size_label) + '</span><span>' + item.docs_count + ' документов</span></div>'
+ '<div class=
><span><b>' + (result.field_count || 0) + '</b><small>всего полей</small></span><span><b>' + (result.create || 0) + '</b><small>будет создано</small></span><span><b>' + (result.reuse || 0) + '</b><small>уже существует</small></span><span class=
><span>После импорта</span><div class=
><table><thead><tr><th>Документ</th>'
+ this.adminViewState.items.map(function (item) { return '<th>' + esc(item.label) + '</th>'; }).join('')
+ '<th></th></tr></thead><tbody>' + this.adminViewPreview.map(function (document) {
return '<tr><td><b>' + esc(document.document_title) + '</b><small>#' + esc(document.Id) + '</small></td>'
+ self.adminViewState.items.map(function (item) { return '<td>' + self.adminViewValueHtml(document, item) + '</td>'; }).join('')
+ '<td><i class=
>Все · И</option><option value="or"
>Добавьте первое поле рубрики.</div>'; }
if (paletteRoot) { paletteRoot.innerHTML = palette || '<div class=
>Дополнительные шаблоны не созданы.</div>';
return;
}
root.innerHTML = templates.map(function (item) {
return '<article class=
>Запрещён</option></select></label>
>Импорт набора полей</h3><p class=
>Любое · ИЛИ</option></select>
>Не удалось загрузить настройки типа.</p>'; });
},
applyBuilderSettingsDraft: function (root, settings) {
Object.keys(settings || {}).forEach(function (key) {
var controls = root.querySelectorAll('[name=
>Независимая копия</button><button type=
>Основные поля</option>';
this.currentGroups.forEach(function (group) {
html += '<option value=
>Поля не найдены.</div>';
return;
}
root.innerHTML = fields.map(function (field) {
return '<button class=
>Проверка схемы перед добавлением в текущую рубрику.</p></div><button class=
>Разрешён</option>
>У этого типа нет дополнительных настроек.</p>';
if (draftSettings !== null) { self.applyBuilderSettingsDraft(root, draftSettings); }
self.hydrateSettingsMaps(root);
self.toggleBuilderDefaultField(type.admin_editor || {});
self.builderSettingsReady = true;
})
.catch(function () { root.innerHTML = '<p class=
]');
var width = row ? row.getAttribute('data-width') : (layout.width || this.builderAutoWidth(field));
var empty = document.querySelector('[data-builder-inspector-empty]');
if (empty) { empty.hidden = true; }
form.hidden = false;
this.builderHydrating = true;
var typeLabel = form.querySelector('[data-builder-type-label]');
var typeCode = form.querySelector('[data-builder-type-code]');
if (typeLabel) { typeLabel.textContent = field.type_label || field.rubric_field_type || 'Неизвестный тип'; }
if (typeCode) { typeCode.textContent = field.rubric_field_type || '—'; }
form.elements.title.value = Object.prototype.hasOwnProperty.call(draft, 'title') ? draft.title : (field.rubric_field_title || ('Поле
this.fillBuilderGroupSelect(row ? row.closest('[data-field-group-drop]').getAttribute('data-field-group-drop') : field.rubric_field_group);
var widthInput = form.querySelector('input[name=
API и структурированный preview получают:
API-контракты
data-document-value-empty>Нет добавленных строк.</div>
data-field-set-import-close>Закрыть</button><button class=
data-field-set-import-name>Файл не выбран</span><button class=
Email, телефон или URL с режимной валидацией и безопасной публичной ссылкой.
HEX-цвет с нативным picker и синхронным ручным вводом.
HTML/PHP-шаблон вывода значения поля на сайте.
ID документа
ID поля
}
$data[
ID тизера / ссылка
ID, название или алиас
key|Название
Native edit-render выполнен через FieldRegistry.
Native-тип не вернул HTML для режима edit
Native-тип поля не зарегистрирован
Preview: inline JS-обработчики удалены (
Preview: legacy asset-пути используют корень сайта.
Preview: legacy asset-пути приведены к корню сайта (
Preview: legacy script-теги отключены (
URL или относительная ссылка.
YouTube-видео с дополнительными параметрами.
· автодействие
· автодействий
· есть условие
· обязательно
· ограничено
» добавлен
» импортирован
» обновлён и синхронизирован
Алиас свободен
Без отдельного URL-алиаса
Большой текст, обложка, галерея и прикреплённые файлы.
Будут возвращены
Булево значение: включено или выключено.
В административном шаблоне запрещены PHP, JavaScript и исполняемые HTML-элементы
В одном условии допускается не более 32 правил
Варианты
Варианты товаров
варианты товаров
Вернётся полей
Вес,
Видео
Визуальный HTML-редактор с полным набором инструментов.
Визуальный HTML-редактор средней высоты.
вкл
Включено
включено
включены
Вложенная группа
вместо
Восстановить
Восстановить схему рубрики?
Восстановление
Восстановление заблокировано
Восстановление заблокировано:
Все поля набора уже есть в рубрике
Все поля снова будут доступны без условных правил.
Все точки восстановления этой рубрики будут удалены.
Выберите тип поля
Выбор из списка
Выбранная группа не принадлежит рубрике
Выбранные ключи по умолчанию
Выбрать документ
Выбрать файл
Выключено
выключены
Выпадающий список
Высота
Высота,
Выше
г
Галерея
Город / населённый пункт
Группа
Группа
}
protected static function settingLabel($key)
{
$known = array(
Группа изменена
Группа не найдена
Группа создана
Группа сохранена
Группа удалена
Группы
Да
да
Да / включено
Данные документов останутся на месте
Дата
Дата и время
Дата или дата со временем в одном типе с настраиваемым публичным форматом.
Дата или дата-время в документе.
Дата начала и окончания для событий, публикаций и временных блоков.
Дата по умолчанию
Два числа
Две числовые части, которые legacy хранит через вертикальную черту.
Длина
Длина,
длина|ширина|высота
длина|ширина|высота|вес
Для множественного режима перечислите ключи через запятую.
Для набора включите типы полей:
Для типа не зарегистрирован native admin-редактор.
Для типа поля не зарегистрирован admin-редактор:
Для типа поля не зарегистрирован native admin-редактор:
До
Добавлен набор «
Документ
$tokens .=
Документ не выбран
документов. Итоговые числа для всей рубрики могут быть больше.</p>
Документов:
Документы и другие файлы для скачивания.
Долгота
Должны совпасть все правила внутри
Дом / строение
Дополнительно
Дополнительные изображения материала.
Дополнительные материалы новости.
Дополнительный шаблон
array(
Дополняет анализ зависимостей перед восстановлением схемы рубрики
Достаточно любого правила внутри
доступных вариантов
Единое поле с выбором обычного текста, Tiptap или CodeMirror.
Зависимость
Заголовок
Загрузка...
Задан ·
Закрыть
Запись блога
заполнено
Запрос
array(
Запрос
$details
);
}
}
protected static function collectRubricTemplates($rubricId, array $fields, array &$report)
{
$rubric = DB::query(
Запрос
}
protected static function aliasMeta($alias)
{
$alias = trim((string) $alias);
return $alias !==
Запросы
запросы
знач.:
Значение
значение1|значение2
значений вариантов
из
изм.</span></header>
Изменено поле
} catch (\Throwable $e) {
return $this->error($e->getMessage(), array(), 422);
}
return $this->success(
Изменится полей
Изменён порядок групп
Изменён порядок полей
Иллюстрации и видео записи.
Иллюстрации и файлы статьи.
Импортирован набор «
Индекс
индекс|регион|город|улица|дом|помещение|широта|долгота
Используйте 1 для включенного состояния или 0 для выключенного.
История очищена
История пока пустая
Источник
Источник данных: эта рубрика
Источник связанного набора недоступен
Исходная схема
Каталог построен на этой рубрике
Квартира / офис
Ключ
Код до сохранения
Код набора уже занят ядром или установленным модулем:
Код после сохранения
Код публичного вывода
Колонка 1
Колонка 2
Колонка 3
Колонка1|Колонка2|Колонка3
Компактный визуальный HTML-редактор.
Компактный многострочный текст
Конструктор
Контакт
Контент
Латинская буква первой, далее буквы, цифры или подчёркивание, до 20 символов
м
Медиа
Медиа и источник
минимум|максимум
мм
Многострочный текст
Множественный выбор
Модули
Модуль «Каталог»
Модуль «Товары»
Можно использовать точку или запятую. В хранилище значение нормализуется автоматически.
Можно оставить пустым или указать число.
Можно оставить пустым. Значение будет подставлено при создании документа.
Мультивыбор
Набор «
Набор конфликтует с полями рубрики:
Набор не связан с этой рубрикой
Набор полей подготовлен
Набор полей принадлежит отключённому модулю
Набор проверен
нажмите, чтобы выбрать
Название
Назначения товаров:
Например /catalog или https://example.com.
Настройка
Настройки каталога
настройки каталога
Настройки полей:
Начало
Начните вводить название или ID
не входит в
Не задан
Не задано
не задано
не заполнено
не содержит
Не удалось восстановить схему
Не удалось загрузить документы
Не удалось загрузить ревизии
Не удалось очистить историю
Не удалось полностью проверить зависимости каталога.
Не удалось проверить запросы и API-контракты.
Не удалось проверить шаблоны рубрики.
Не удалось сериализовать набор полей
Не удалось удалить снимок
Недостаточно прав
Неизвестный стартовый набор полей
Некорректное условие группы
Некорректные данные конструктора
Некорректные настройки полей
Некорректный порядок групп
Некорректный порядок полей
Некорректный порядок рубрик
Несколько вариантов из списка, варианты задаются в настройке поля.
Несколько значений из заданного набора.
Несколько отмеченных вариантов.
Несколько флажков
Нет
Нет / выключено
Ниже
Ничего не найдено
Новость
Новые поля не удаляются: они перейдут в библиотеку конструктора. Значения документов не стираются.
Обложка
Обновлён набор «
Обычное текстовое поле для короткого значения.
обязательное
Один вариант из списка. Варианты задаются строками.
Один вариант на строку
Один вариант на строку.
Один вариант на строку. Для ключей используйте key|Название.
Одиночный или множественный выбор со стабильными ключами и JSON-настройками.
Одна запись на строку.
Одна запись на строку. Для нескольких колонок используйте разделитель |.
Одна строка на запись, части разделяются символом |.
Одна строка на значение.
Одна упаковка на строку: длина|ширина|высота|вес.
одно из
Одно числовое значение.
Одноколоночный список
Окончание
Описание
Основная группа
Основное изображение для страницы и карточки материала.
Основное содержимое документа с визуальным редактором.
Основное содержимое записи.
Основной материал новости.
Основной материал статьи.
Основной текст
Основные поля
Останутся без удаления
От
очистить значение
Ошибка сети
Ошибка сети при загрузке ревизий
Параметр
параметры товарных фидов
Перед восстановлением
Перед добавлением набора «
Перед изменением группы
Model::saveGroup($groupId, 0, Request::postAll());
$this->captureSchemaAfter((int) $group[
Перед изменением порядка групп
Перед изменением порядка полей
Перед импортом набора «
Перед синхронизацией набора «
Перед созданием поля
Перед сохранением конструктора
Перед удалением группы
if (!Model::deleteGroup($groupId)) {
return $this->error(
Переносимая схема формы рубрики «
Перетащить
Период
Период по умолчанию
Повторяемые ссылки с подписью.
Повторяемый список записей, legacy хранит значения сериализованным массивом.
Повторяемый список из одного значения в строке.
Повторяемый список из трёх частей, legacy использует разделитель |.
Поддерживаются YYYY-MM-DD, timestamp или пустое значение.
Подсказка редактору
Показать
Поле
Поле
}
if (!isset($validGroups[$groupId])) {
throw new \RuntimeException(
Поле
var preview = row.querySelector(
Поле изменено
Поле не найдено
Поле сохранено
Поле удалено
Полноценный визуальный HTML-редактор.
Поля
Поля без отдельной группы.
Поля и фильтры:
поля или фильтры разделов каталога
Поля, группы, раскладка и условия формы. Значения документов в снимок не входят.
Поля:
Порядок
Порядок групп сохранён
Порядок полей сохранён
Порядок рубрик сохранён
После восстановления проверьте клиентов, которые передают alias или ID этих полей.
После восстановления проверьте перечисленные места.
правил
правило
Предпросмотр условий устарел. Проверьте изменения ещё раз.
Предпросмотр условия устарел. Проверьте изменение ещё раз.
Представление документов сохранено
Прикреплённые файлы
Примените миграцию связанных наборов полей
Применить
Проверьте группу
Проверьте поле
Проверьте поля рубрики
Просмотр рубрик, групп и полей.
Простой многострочный текст
Прямых ссылок на изменяемые поля не найдено.
Публикация
Публичный шаблон вывода поля.
Раздел
Раздел использует эту рубрику
разделы каталога
Размещено на форме
Раскладка полей сохранена
Ревизии удалены
Ревизии:
Ревизия не найдена
Ревизия удалена
Регион
Редактирование группы
},
submitGroup: function (confirmed, fingerprint) {
var id = this.groupForm.elements.id.value;
var rubricId = this.groupForm.elements.rubric_id.value || this.currentRubricId;
var self = this;
this.clearErrors(this.groupForm);
var conditionRoot = this.groupForm.querySelector(
Редактирование поля
self.setHint(
Режим редактора и публичного вывода задаётся в настройках типа.
Рубрика
}
$docs = self::documentCount($id);
if ($docs > 0) {
throw new \RuntimeException(
Рубрика и стартовый набор полей созданы
Рубрика не найдена
Рубрика создана
Рубрика сохранена
Рубрика удалена
Рубрики и поля
Рубрики: просмотр
Рубрики: управление
С данными
Связанный набор синхронизирован
Связь с набором удалена. Поля рубрики сохранены.
симв.
Синхронизация требует ручного решения:
Синхронизирован набор «
Системное имя
Скрыть
см
Сначала выполните предварительный просмотр набора
Сначала проверьте изменения набора
снимков
Снимок перед восстановлением ревизии
$current,
(int) $revisionId
);
$result = Model::applySchemaSnapshot((int) $revision[
Снимок удалён
Содержание
Содержимое по умолчанию
содержит
Создание
Создание рубрики и начальной схемы
Создание, изменение, удаление, сортировка и импорт рубрик и полей.
Создано поле
} catch (\Throwable $e) {
return $this->error($e->getMessage(), array(), 422);
}
return $this->success(
Сортировка:
Сортируемый список коробок с габаритами и весом для расчёта доставки.
Состав рубрики изменился после проверки. Выполните предварительный просмотр ещё раз.
Сохранится новых
Сохраняется как HTML и редактируется через общий rich-text редактор.
Сохраняется как HTML, совместимый с legacy multi_line.
Сохранён конструктор формы
Список записей
Список ключ-значение
Список ссылок
Список, где слева хранится ключ, справа показывается подпись.
Ссылка
Ссылка или документ
Ссылка на первоисточник новости, если она требуется.
Ссылка по умолчанию
Ссылки по умолчанию
Стартовый набор недоступен
Статья
Строка
Строки по умолчанию
Схема восстановлена
Схема изменилась после предпросмотра. Проверьте ревизию ещё раз.
Схема или поля рубрики изменились после проверки. Повторите предварительный просмотр.
Схема рубрики восстановлена
Такой алиас уже есть в этой рубрике
Такой алиас уже используется
Тег вставлен
Текст или параметры поля
Текст по умолчанию
Текст, обложка, галерея и видео.
Текст, обложка, галерея и ссылка на первоисточник.
Текстовое значение
Текстовое содержимое
Текущая схема сначала сохранится отдельным снимком. Новые поля и значения документов не удаляются.
Тип не задан
Тип поля включён
Тип поля не зарегистрирован
Тип поля не зарегистрирован в системном FieldRegistry
Тип поля не найден
Тип поля отключён
товарное представление каталога
товарные фиды
Три числа
Три числовые части, которые legacy хранит через вертикальную черту.
Трёхколоночный список
Убрать
Убрать документ
Удалено поле
} catch (\Throwable $e) {
return $this->error($e->getMessage(), array(), 422);
}
return $this->success(
Удалить
Удалить все
Удалить всю историю схемы?
Удалить поле? Значения документов для этого поля тоже будут удалены.
Удалить снимок схемы?
Удалить строку
Укажите алиас
Укажите название
Укажите название группы
Укажите название поля
Укажите название шаблона
Улица
Упаковки по умолчанию
Упаковки товара
Условие формы
условия запросов
Условия формы останутся включены
Условия формы останутся выключены
Условия формы:
Условия:
установить значение
Фид
Фид построен на этой рубрике
Флажок
Форма и серверная проверка начнут учитывать правила.
Формат значения определяется настройкой типа контакта.
Формат строки: key|Название. Один вариант на строку.
Формат строки: URL|Название.
Формат строки: колонка1|колонка2|колонка3.
Формат: значение1|значение2.
Формат: значение1|значение2|значение3.
Формат: начало|окончание. Поддерживаются YYYY-MM-DD и дата со временем.
Форматированный текст
Хранится как Unix timestamp и редактируется нативным контролом браузера.
Цвет
Цвет по умолчанию
Числа по умолчанию
Число по умолчанию
Число с настраиваемым публичным форматом: сумма, процент, величина или рейтинг.
Чтение и запись используют схему:
Шаблон request
Шаблон в документе
Шаблон в запросе
Шаблон используется документами и не может быть удалён
Шаблон обработки request-значения, если тип поля его использует.
Шаблон результата:
Шаблон рубрики не найден
Шаблоны
Шаблоны запроса «
Ширина,
Широта
Этот набор уже связан с рубрикой. Используйте обновление в списке связанных наборов.
Этот тип поля отключён в реестре
Эту точку восстановления нельзя будет вернуть.