Списки выбора (Select)
Доступно 7 разных виджетов для выбора (select). За исключением виджетов Multiselect, все они представлены полем ввода с выпадающим списком опций. В базе данных тип колонки для всех select‑дататипов — VARCHAR, для всех multiselect‑типов — TEXT. В базу сохраняется сконфигурированное значение (value), а не отображаемое значение (display value). В случае multiselect выбранные значения хранятся в виде строки, где значения разделены запятыми.

Для полей select и multiselect опции можно определить в конфигурации класса:

Также опции можно получать из разных источников.
Поля Country (страна) и Language (язык) имеют фиксированные наборы опций. Для поля языка опции можно ограничить существующими в системе языками. Поля Country и Language также доступны как мультивыбор (multiselect). Поле User (пользователь) также имеет фиксированный набор значений: позволяет выбрать пользователя из всех доступных пользователей системы Pimcore. Это позволяет ассоциировать системного пользователя с объектом.
Для типов multiselect доступна дополнительная настройка render type — способ отображения: list или tags (список или метки).

Вид в редакторе объекта для типа отображения list:
Вид в редакторе объекта для типа отображения tags:
Работа с select‑типами через API
Чтобы программно установить значение select‑поля, его значение передаётся в сеттер как строка. Чтобы установить значения multiselect‑поля, в сеттер передаётся массив значений.
$object->setSelect("1");
$object->setMultiselect(["1","2"]);
$object->setLanguage("en");
$object->setCountry("AU");
$object->setUser(1);
$object->save();
Если нужно узнать, какие опции доступны для поля select, можно получить определение поля у класса и затем получить опции:
$fd = $object->getClass()->getFieldDefinition("multiselect");
$options = $fd->getOptions();
Если вам нужно узнать, какие опции доступны для поля выбора внутри ObjectBrick, это также можно сделать, получив определение поля для brick следующим образом:
$fd = $brick->getDefinition()->getFieldDefinition("multiselect");
$options = $fd->getOptions();
Отображаемые названия (display names) опций могут быть получены следующим образом:
use Pimcore\Model\DataObject;
...
$o = DataObject::getById(49);
// для одиночного select-поля
$valuesSingle = DataObject\Service::getOptionsForSelectField($o, "select");
$selectedValueSingle = $valuesSingle[$o->getSelect()];
// для multiselect-поля
$multiSelectFieldValues = DataObject\Service::getOptionsForMultiSelectField($o, "multiSelectField");
$selectedValues = array_map(
static fn($value) => $multiSelectFieldValues[$value],
$o->getMultiSelectField()
); // Для PHP >= 7.4
$selectedValues = array_map(
static function($value) use ($multiSelectFieldValues) {
return $multiSelectFieldValues[$value];
}, $o->getMultiSelectField()
); // Для PHP <= 7.3
Чтобы в Twig‑шаблоне вывести отображаемую метку выбранного значения, сначала передайте в шаблон массив опций как переменную представления из экшена контроллера:
use Pimcore\Model\DataObject;
...
$product = DataObject::getById(49);
// для select-поля
$colorOptions = DataObject\Service::getOptionsForSelectField($product, "color");
return $this->render('foo/bar.html.twig', ['colorOptions' => $colorOptions]);
Затем вы можете использовать его в Twig‑шаблоне:
{{ colorOptions[product.color] }}
Вы можете предложить улучшение документации или задать вопрос в комментариях.
Если вам нужна полноценная консультация — вы можете заказать её на нашем сайте.