Меню

Настройка свойств элементов код



Кастомные свойства в CSS. Часть 1: что это такое и как работает

Рассказывает команда веб-факультета Яндекс.Практикума

Разработчики с нетерпением ждали появления в CSS кастомных свойств. Это мощная технология, которая уменьшает повторение кода, улучшает читаемость и делает код более гибким.

Мы подготовили для вас три статьи о кастомных свойствах в CSS. Из них вы узнаете, что такое кастомные свойства и зачем они нужны, чем они отличаются от свойств в Sass, и какие есть ограничения при работе с кастомными CSS-свойствами. Чтобы разобраться в этом, вам понадобится знание CSS и основ JavaScript. В статьях мы разбираем простые примеры, которые помогут вам понять основы работы с кастомными свойствами.

Кастомные свойства или CSS-переменные?

Многие называют их CSS-переменными. Говоря «переменная», возникает вопрос о типах данных, которые в ней хранятся. Подразумевают, что в переменных могут храниться те типы данных, которые существуют в конкретном языке программирования. Но в CSS всё не так. В CSS есть много разных типов данных: от текста до цветов и единиц измерения. В переменных можно записать код цвета или размер элемента, но сохранятся эти данные как строки. Это накладывает ряд ограничений на разработчика при использовании кастомных свойств там, где важен тип данных. Например, в медиа-запросах. Именно поэтому мы используем термин «пользовательские» или «кастомные» свойства, принятый в документации.

Синтаксис

Кастомные свойства позволяют сконфигурировать будущий макет ещё до начала разработки компонентов. Верстальщик получает от дизайнера вместе с макетом набор правил, по которым будет выстраиваться палитра сайта, типографика, сетка. До появления кастомных свойств верстальщики использовали препроцессоры, чтобы изначально задать подобную систему в коде и следовать принципу «DRY» (Don’t Repeat Yourself с англ. «не повторяйся»). Они сохраняли набор этих правил в отдельные Sass- или Less-переменные, писали миксины и в целом применяли комплекс мер по оптимизации своей работы и структурированию кода. Это круто и удобно, но требует последующей компиляции в CSS, ведь этот язык понимает браузер.

Теперь часть этих задач можно решать нативно, средствами платформы через кастомные свойства. Например, дизайнер определил цветовую палитру нашего будущего сайта. Для простоты пусть в нём будут два цвета — чёрный (ну, не совсем чёрный) и белый. Так выглядит глобальная конфигурация этих цветов на CSS:

В этом коде мы определили два кастомных свойства с именами —color-black и —color-white и присвоили им значения. Эти свойства определены для селектора :root — корневого элемента документа. Для HTML-документа :root — это элемент html, а для SVG — svg. Важно, что кастомные свойства работают и с HTML-документами, и с SVG.

iService, Москва, от 50 000 ₽

Определив кастомное свойство на уровне корневого элемента, можно обращаться к его значению по имени кастомного свойства внутри блоков CSS, атрибутов style в HTML или атрибутов SVG-документа.

Синтаксис, которым нужно пользоваться:

Можно даже вынести настройки палитры в отдельный файл, чтобы хранить там всю глобальную конфигурацию. В примере мы вынесли глобальные кастомные свойства в файл palette.css , а значения использовали в CSS- и SVG-элементах:

Эти принципы должны быть вам знакомы, если вы использовали переменные в препроцессорах. Но почувствуйте разницу: вы работаете нативно, можете использовать кастомные свойства внутри атрибутов HTML и SVG.

Зачем это всё нужно?

Кастомные свойства позволяют описывать и управлять конфигурацией блоков или всего сайта. Это упрощает поддержку проекта, ведь вместо поиска нужных значений внутри множества CSS-блоков, разработчики создают единый источник данных для всей дизайн-системы сайта.

Особенно удобно с помощью кастомных свойств задавать разные темы всему приложению или отдельным его блокам. Меняя значения кастомного свойства, все зоны в коде, которые хранят их, обновляются реактивно. В этой статье мы рассмотрим применение кастомных свойств на задачах, связанных с темизацией.

Поддержка браузерами

Поддержка браузерами очень хорошая. Правда, если вам нужно поддерживать Internet Explorer, от кастомных свойств, вероятно, придётся отказаться или для IE11 воспользоваться полифилом. Его работа основана на поддержке этим браузером специфического синтаксиса для кастомных свойств. В этой статье мы не будем рассматривать этот подход. Сфокусируемся на том, что является стандартом в работе с кастомными свойствами. В ваших проектах полифил может стать неплохим решением, но учитывайте, что он немало весит и гарантированно замедлит сайт, так как будет искать циклом на JavaScript все элементы, на которые воздействуют кастомные свойства.

Поддержка кастомных свойств браузерами. Источник: caniuse.com

Тем не менее, для браузеров, которые не поддерживают кастомные свойства, можно создавать фоллбэки:

Создание фоллбэков можно автоматизировать плагином postcss-custom-properties при постпроцессинге через POSTCSS. Этот плагин проставит фоллбэки за вас, если кастомные свойства заданы на уровне корневого элемента. Если же кастомные свойства заданы на уровне отдельных блоков, у POSTCSS возникают проблемы. Расскажем об этом в следующей статье.

Синтаксис кастомных свойств позволяет указывать альтернативное значение в случае, если доступ к кастомному свойству по имени невозможен:

В этом примере свойство color будет ожидать на вход значение от кастомного свойства —color-black , а если не получит его, применит альтернативное значение #1e1e1e. POSTCSS знает такой синтаксис и сможет создать на основе альтернативного значения фоллбэк для старых браузеров.

Так выглядит наш пример, если задать все необходимые фоллбэки. Обратите внимание, что свойство fill для svg-иконки мы вынесли из HTML-атрибута в CSS. Если раньше мы старались показать, как по-разному можно использовать кастомные свойства, то теперь организовали код так, чтобы создание фоллбэков можно было автоматизировать одним POSTCSS-плагином.

Реактивность и управление через JavaScript

Кастомные свойства — часть CSS и консистентная часть веб-платформы. Поэтому JavaScript имеет доступ к управлению кастомными свойствами напрямую. Это позволяет просто решать задачи темизации. Изменив значение кастомного свойства, весь созависимый с ним CSS реактивно изменит свои значения.

Читайте также:  Настройка dns для локального сайта

Получить значение кастомного свойства через JavaScript можно в три шага:

Задать значения кастомных свойств элементу можно в два шага:

Когда исполнится второй код, моментально поменяется цвет всех элементов, для которых указана связь с кастомным свойством —color-black . Тем не менее для практических задач темизации подобная мутация палитры не обоснована. Палитра представляется нам как единая и неизменная конфигурация, содержащая весь набор цветов, которые используются в приложении. Поэтому на практике для темизации удобнее создать отдельный «слой» кастомных свойств. Он будет отвечать за свойства элементов на странице, а не за цвета, используемые на сайте. Но каждое кастомное свойство в этом «слое» будет связано с определённым цветом палитры.

Такое разделение кастомных свойств на палитру и слой темизации решает две задачи:

  1. Сохраняет палитру единым конфиг-файлом для стилей сайта.
  2. Обеспечивает понятность написания кода в дальнейшем.

Второй пункт лучше проиллюстрировать. Рассмотрим два примера.

Вместо изменения палитры, мы преобразовываем кастомные свойства уровня темизации, меняем связь между свойствами элементов страницы и цветами палитры. Читая JavaScript-код, сразу понятно, что мы делаем фон светлым, а текст — чёрным. Если не вводить отдельный слой кастомных свойств для темизации, мы можем получить что-то подобное:

Это выглядит нелепо. Такой код точно смутит вашего коллегу, который придёт развивать ваш код после вас. Разделение на слои ограждает от подобных неурядиц. Это не единственный путь, но самый очевидный для первого знакомства с практикой использования кастомных свойств.

Доработаем наш пример про отсутствие вечеринок — добавим переключатель темы с тёмной на светлую. Задачу будем решать «в лоб», чтобы было понятно.

В примере мы разложили кастомные свойства на отдельные файлы — palette.css и theme-config.css , чтобы ещё сильнее разделить наши слои по смыслу. Скрипт theme-changer.js работает прямолинейно: создаёт две отдельные функции на каждую из тем страницы. Это не самое универсальное решение, но оно отлично демонстрирует основу работы с кастомными свойствами.

Заключение

В этой статье вы познакомились с основами использования кастомных свойств. Этой базы достаточно, чтобы начать экспериментировать. Уже после прочтения статьи вы могли заметить сильные стороны кастомных свойств: реактивность, доступ из JS и нативную реализацию необходимой функциональности. Но это далеко не все преимущества.

В первой статье мы умышленно опустили особенности работы с кастомными свойствами. Сейчас вы знаете синтаксис и имплементацию стандарта, а в следующих статьях мы подробнее остановимся на сравнении кастомных свойств и переменных из препроцессоров, расскажем про ограничения работы с кастомными свойствами. Этих знаний хватит, чтобы начать применять кастомные CSS-свойства в своей работе.

Источник

Стандартные и пользовательские свойства в Битриксе

Есть они почти везде:
И в публичке и в ядре,
На странице и в товаре,
Даже в склады натыкали

О свойствах Битрикса

В 1С-Битрикс: Управление сайтом (как и в Битрикс24) десятки, если не сотни настраиваемых типов данных (или сущностей): инфоблоки, пользователи, заказы, склады, форумы, блоги и т.д. Структура большинства сущностей расширяема за счет служебной сущности «Свойства».

В этой статье мы собрали воедино всю информацию о свойствах в Битриксе. Где их создавать в панели управления, как ими управлять через API, какими событиями можно изменить их поведение и как создавать свои собственные типы свойств.

Справочник свойств в Битрикс

Что является свойством

Рабочий стол > Магазин > Настройки > Свойства заказа > Список свойств

Рабочий стол > Контент > Инфоблоки > Типы инфоблоков > [Название инфоблока] > Свойства

Свойства элементов инфоблока

Товары в корзине

Свойства товара, добавленного в корзину

Товары в заказе

Параметры шаблонов компонентов

Свойства умного фильтра

Рабочий стол > Магазин > Каталоги товаров > [Название инфоблока] > Настройки каталога > Свойства элементов

Свойства элементов инфоблока

Страницы и разделы сайта

Рабочий стол > Настройки > Настройки продукта > Настройки модулей > Управление структурой

Интеграция с 1С

Рабочий стол > Магазин > Настройки > Интеграция с 1С > Профили обмена

Внешние сервисы местоположений

Рабочий стол > Магазин > Настройки > Местоположения > Внешние сервисы

Рабочий стол > Контент > Highload-блоки > [Название HL-блока] > Добавление/редактирование записи

Рабочий стол > Настройки > Пользователи > Список пользователей > [Пользователь] > Доп. поля

Рабочий стол > Магазин > Складской учет > Склады > Добавление/редактирование записи

Рабочий стол > Магазин > Настройки > Компании > Добавление/редактирование компании > Пользовательские поля

Рабочий стол > Сервисы > Техподдержка > Обращения > Добавление/редактирование обращения

Рабочий стол > Сервисы > Блоги > Блоги > Добавление/редактирование блога > Доп. поля

Рабочий стол > Сервисы > Обучение > Курсы > Добавление/редактирование > Доп. поля

Рабочий стол > Сервисы > Обучение > Учебные группы > Учебные группы > Добавление/редактирование > Доп. поля

Рассмотрим для каждой сущности свойства поподробнее: как можно ими управлять, как создать кастомный тип свойства, какие события связаны с изменением свойств и какие возможности оставили нам разработчики Битрикс.

Заказы интернет-магазина

Как создать новое свойство

Свойства заказов располагаются по пути: Рабочий стол > Магазин > Настройки > Свойства заказов > Список свойств

Доступные типы

В системе «из коробки» есть типы:

Как добавить свой тип

Типы свойств заказа расширяемы. О том, как создавать кастомные типы свойства заказа рассказывается в курсе Разработчик Bitrix Framework .

API для работы со значениями

Рассмотрим на примере использование API ядра D7 для работы со значениями свойств заказа:

* получить коллекцию свойств заказа

* @var Bitrix\Sale\PropertyValue $propertyCollection

// получить свойства в виде массива

// получить свойство по ID

* получить значение свойства

* @var Bitrix\Sale\PropertyValue $value

// установить значение свойства

// чтобы сохранить изменения
$order->save();

Для работы со значениями свойств заказа также можно использовать устаревший класс CSaleOrderPropsValue со следующим набором функций:

Пример работы со значениями свойств заказа функциями устаревшего класса:

Читайте также:  Настройка вай фай vista

События изменения значений

События, связанные с изменением свойств заказов:

OnSalePropertyValueSetField (непосредственно перед изменением поля)

Есть и другие события заказа , на которых можно работать со свойствами.

Интеграция с 1С

Для обмена данными с 1С на сайте используются профили обмена, в которых настраивается соответствие полей.

Как добавить реквизит

На странице настройки интеграции 1С по пути Рабочий стол > Магазин > Настройки > Интеграция с 1С > Профили обмена есть возможность настроить параметры для выгрузки данных из 1С на сайт.

Если появилась необходимость помимо стандартных параметров добавить собственные, на этой же странице, ниже расположен раздел «1С: Дополнительные параметры», где задаются дополнительные параметры.

Доступные типы

При помощи типов параметров можно определить какие данные ожидается получить и в какое свойство.

Доступны следующие типы:

Как добавить свой тип

Нет возможности расширения.

API для работы со значениями

Так как все значения прилетают из 1C, то API для работы с этими параметрами не предусмотрено.

События изменения значений

Событий изменения значений не предусмотрено.

Элементы инфоблоков

Инфоблоки — основная сущность для хранения произвольной информации в Битриксе. Именно инфоблоки используются для создания каталогов интернет-магазина. Таким образом, всё сказанное про свойства элементов в этом разделе справедливо и для свойств товаров.

Как создать новое свойство

Свойства элементов инфоблока добавляются в настройках инфоблока: Рабочий стол > Контент > Инфоблоки > Типы инфоблоков > [Название типа] > [Название инфоблока] > вкладка «Свойства». Можно добавить неограниченное количество свойств (только для Инфоблоков 1.0).

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

Доступные типы

При добавлении свойств доступен список базовых и пользовательских типов данных:

Привязка к элементам ИБ

Привязка к разделам ИБ

Привязка к Яндекс.Карте

Привязка к карте Google Maps

Привязка к пользователю

Привязка к разделам с автозаполнением

Привязка к теме форума

Привязка к товарам (SKU)

Привязка к файлу (на сервере)

Привязка к элементам в виде списка

Привязка к элементам по XML_ID

Привязка к элементам с автозаполнением

Если вам потребуется создать boolean-свойство, например, «Да/Нет», то для этого нужно создать кастомное свойство в виде checkbox (флажок), унаследованное от свойства number (число). И задать логику, например, если флажок установлен возвращает число «1», соответственно, если не задано — вернет пустое значение.

Как добавить свой тип

Стандартных свойств довольно много, но если мощности Битрикса не хватает, можно создать собственное свойство с произвольным поведением.

Например, можно создать свойство «Видео», которое позволяет хранить видеофайлы или ссылку на youtube-видео, предварительно загружая обложку.

Создается кастомный тип свойства на обработчике события OnIBlockPropertyBuildList модуля iblock.

Пример создания кастомного свойства:

AddEventHandler(«iblock», «OnIBlockPropertyBuildList», array(«IblockCustom», «GetUserTypeDescription»));

public static function GetUserTypeDescription()

«DESCRIPTION» => «Дата (custom)»,

Также существует возможность изменить отображение созданного типа свойства. Указанный параметр «PROPERTY_TYPE» => «S» говорит о том, что новый тип свойства будет унаследован от строки, то есть отображаться он будет как строка. При желании изменить отображение, например, в панели администратора, понадобится переопределить в созданном классе следующие функции:

// Отображение в списке элементов

function GetPublicViewHTML($arProperty, $value, $strHTMLControlName)

return Loc::GetMessage($value[‘VALUE’] ? ‘IBLOCK_PROP_CHECKBOX_YES’ : ‘IBLOCK_PROP_CHECKBOX_NO’);

// Отображение при редактировании элемента

function GetPropertyFieldHtml($arProperty, $value, $strHTMLControlName)

Как создать кастомный тип свойства подробно можно узнать в курсе Разработчик Bitrix Framework .

Важнее всего здесь объявить метод GetUserTypeDescription .

API для работы со значениями

При необходимости изменения и получения значений свойств используются следующие функции класса CIBlockElement :

SetPropertyValuesEx и SetPropertyValues легко перепутать. Хороший программист знает в чём разница. Оба метода обновляют свойства, которые им передали. Но пропущенные свойства SetPropertyValues обнуляет, а SetPropertyValuesEx не трогает.

Методы SetProperty* не сбрасывают кеш инфоблока, в отличие от Add и Update. Если необходимо, кэш нужно сбросить вручную:

\CIBlockElement::SetPropertyValuesEx($arElement[«ID»], $arElement[«IBLOCK_ID»], array(«NEWS_ID» => $propValue));

События изменения значений

При использовании этих функций запускаются следующие обработчики события, на которых можно изменить значение:

Остальные обработчики события модуля iblock представлены в документации Bitrix .

Товары в корзине и заказе

Как создать новое свойство

При добавлении товара в корзину есть возможность передавать его свойства: размер, цвет, производитель, длина, ширина и т.п. Свойства можно взять как из самого товара или SKU, так и создать «на лету».

Если используется стандартный шаблон каталога, такие свойства передаются при настройке параметров компонента.

Характеристики товара, добавляемые в корзину — это свойства товара, которые попадут в корзину вместе с товаром. Свойства предложений, добавляемые в корзину — это свойства торговых предложений, которые попадут в корзину при добавлении торгового предложения.

Типы свойств

Все значения свойств хранятся в типе данных «строка».

Как добавить свой тип

Возможности создать свой тип свойств нет. Но, так как данные хранятся в виде строки, обычно это не является проблемой.

API для работы со значениями

Значения задаются при добавлении товара в корзину — \Bitrix\Catalog\Product\Basket::addProduct ( Add2BasketByProductID в старом ядре).

\Bitrix\Catalog\Product\Basket::addProduct и Add2BasketByProductID качестве третьего аргумента принимают массив, содержащий перечень свойств товара, добавленного в корзину. Для каждого свойства задается код, название и значение.

// новый метод ядра D7

Тогда в административном интерфейсе Магазин > Покупатели > Корзины можно посмотреть какие товары и с какими свойствами были добавлены.

В документации Bitrix дана более подробная инструкция по использованию функций Add2BasketByProductID и \Bitrix\Catalog\Product\Basket::addProduct .

Получить или изменить свойства и их значения можно с помощью следующих функций класса CSaleBasket :

Пример использования функции Update:

«NAME» => «Новый товар»,

События изменения значений

Для изменения значений свойств можно воспользоваться следующими обработчиками событий

Читайте также:  Шаблон для настройки прямого тонарма

В документации Bitrix также можно найти другие обработчики события , которые вам помогут в реализации решений.

Компоненты

Как добавить параметр

Для добавления параметров в окно настройки компонента используется файл .parameters.php. В нём разработчик компонента/шаблона компонента должен описать массив параметров.

В курсе Разработчик Bitrix Framework дается инструкция как нужно добавлять параметры.

Доступные типы параметров

В настройках параметров компонентов для отображения параметров доступны следующие типы:

Параметр компонента типа COLORPICKER

Как добавить свой тип

Для создания собственных типов указывается TYPE=CUSTOM и три параметра JS_FILE, JS_EVENT и JS_DATA.

‘NAME’ => ‘Путь до файла’,

JS_FILE — указывается путь до JS файла, который отвечает за отображение параметра

JS_EVENT — указывается callback-функция, которая будет вызвана после подключения JS_FILE

JS_DATA — указываются параметры, которые будут переданы в callback-функцию

Пример собственного типа параметра компонента:

Подробная инструкция по созданию параметра с кастомизированным типов указана в курсе Разработчик Bitrix Framework .

API для работы со значениями

API для работы со значениями не предусмотрено.

События изменения значений

Событий изменения значений не предусмотрено.

Умный фильтр

Как добавить новое свойство

Настройка свойств, которые отображаются в умном фильтре производится в настройках свойств инфоблока или в свойствах товаров (Рабочий стол > Магазин > [Название инфоблока] > Свойства товаров). О них мы говорили выше .

В параметрах конкретного свойства можно включить свойство в умный фильтр и настроить в каком виде он будет отображаться.

Если свойств в инфоблоке каталога много, то проще это сделать на странице административного интерфейса Рабочий стол > Магазин > [Название инфоблока] > Настройки каталога

На этой странице отображаются все свойства, которые имеются в инфоблоке каталога и в инфоблоке SKU, соответственно здесь можно произвести их настройку.

Есть возможность настроить разные свойства в разных разделах каталога (Рабочий стол > Магазин > [Название инфоблока] > Разделы)

Доступные типы

Умный фильтр предлагает разные варианты отображения в зависимости от типа свойства товара:

«Справочник» может отображаться как флажки, радио кнопки и выпадающий список (интересный вариант — список с картинками):

«Число» отображается в виде двух полей «от-до»:

Остальные типы отображаются как флажки, радио кнопки и выпадающий список:

Как добавить свой тип

Добавить свой вариант отображения в настройки умного фильтра нельзя. Если какое-то поле требует особого отображения, то дорабатывается шаблон компонента «Умный фильтр».

API для работы со свойствами в умном фильтре

Настроить вывод свойства в умном фильтре (во всех разделах или в каком-то конкретном) позволяет класс \Bitrix\Iblock\SectionPropertyTable :

Пример использования функций:

// вывод свойств раздела инфоблока

// включение свойства в умный фильтр раздела

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

События изменения значений

Страницы и разделы сайта

Свойства есть даже на обычных страницах и разделах сайта. Два из них созданы по умолчанию и используются для поисковиков: description и keywords. Свойства страниц и разделов расширяемы, но их значения хранятся в виде строки.

Как создать новое свойство

Если свойство должно работать на всех страницах сайта и разделах сайта, добавить его можно в настройках Рабочий стол > Настройки > Настройки продукта > Настройки модулей > Управление структурой

Свойство для раздела или страницы можно задать с публичной части сайта:

Типы свойств

Все свойства имеют тип данных «строка».

Как добавить свой тип

Такой возможности нет.

API для работы со значениями

Для работы со свойствами страниц/разделов используется класс CMain . Вот некоторые из часто применяемых функции:

CMain::ShowProperty (отображение свойств с помощью технологии отложенных функций)

CMain::GetProperty (возвращает значение свойства)

CMain::SetPageProperty (устанавливает свойство страницы)

CMain::SetDirProperty (устанавливает свойство раздела)

Пример использования функций GetProperty и SetPageProperty:

// установить значение свойства страницы

$APPLICATION->SetPageProperty(«keywords», «свойства, bitrix»);

// получить значение свойства страницы

// вывести значение свойства страницы

При использовании функции GetProperty программисту важно понимать как работают отложенные функции.

Как работать со свойствами страницы/разделов и какие функции применяются, описано в курсе Разработчик Bitrix Framework .

События изменения значений

Событий изменения значений не предусмотрено.

Пункты меню

Если в меню сайта какие-то пункты должны отличаться от остальных, в этом помогут параметры пунктов меню. Например, если понадобится, чтобы один из пунктов меню был другого цвета.

Как добавить и изменить параметр

Параметры меню можно задать через административный интерфейс. Для этого по пути Рабочий стол > Контент > Структура сайта > Файлы и папки нужно отыскать файл меню и перейти в режим редактирования меню в расширенном режиме.

Доступные типы

Все свойства имеют тип данных «строка».

Как добавить свой тип

Такой возможности нет.

Как получить значение

Получить значение параметра можно через массив PARAMS шаблона компонента «меню».

Подробный обзор полей меню описан в документации Bitrix .

События изменения значений

Событий изменения значений не предусмотрено.

Универсальное решение — пользовательские поля (UF)

Расширение полей в Битриксе помимо стандартных свойств делается также с помощью UF полей.

Как создать новое свойство

Все UF свойства в Битриксе отображаются на странице «Пользовательские поля» административного интерфейса по пути Рабочий стол > Настройки > Настройки продукта > Пользовательские поля.

Пользовательские поля можно создать для любой записи в Битрикс, если у неё есть числовой ID. Визуальный интерфейс же есть лишь для немногих сущностей: пользователи, разделы ИБ, склады, блоги, форумы.

Для управления порядком отображения UF-свойств при редактировании конкретного свойства есть возможность установить порядок сортировки. Величина сортировки влияет на порядок вывода свойств в различных административных и публичных формах сайта.

Доступные типы

При добавлении UF свойства на выбор доступны следующие типы:

Источник

Adblock
detector