Цитата |
---|
Forumedia написал:
Цитата |
---|
Forumedia пишет: Или есть возможность фильтровать по XML_ID значения свойства список? |
нет - если я сейчас зашью в запрос ID значения свойства, то в случае удаления этого значения из списка восстановить функционал запроса без изменения исходного кода будет нельзя
- также, если я сейчас зашью в запрос VALUE свойства, то при изменении текста значения опять же придется править код
непонятна функциональная нагрузка поля XML_ID
ИМХО что-то вы тут не додумали |
Можно, но уникальность символьных кодов, так понимаю, всегда под сомнением:
Код |
---|
/**
* Возвращает ID значения свойства типа список по его xml_id.
* Остаётся под вопросом уникальность указанного xml_id,
* поэтому введено уточнение символьного кода свойства и кода инфоблока
*
* @author Евгений Бородкин
* @param string $enumCode xml_id значения свойства типа список
* @param string $propertyCode Код свойства инфоблока
* @param string $IBlockCode Код инфоблока
* @return integer
* @throws Exception
*/
function GetEnumValueIDByCode($enumCode, $propertyCode = null, $IBlockCode = null)
{
if (!CModule::IncludeModule("iblock")) {
throw new Exception('Не удаётся подключить модуль "Информационные блоки"');
}
$arPropertyEnumFilter = array("EXTERNAL_ID" => "$enumCode");
if (isset($IBlockCode)) {
$res = CIBlock::GetList(Array(), Array('ACTIVE' => 'Y', "CODE" => $IBlockCode), true);
$ar = $res->Fetch();
$arPropertyEnumFilter['IBLOCK_ID'] = $ar['ID'];
}
if (isset($propertyCode)) {
$arPropertyEnumFilter['CODE'] = "$propertyCode";
}
$property_enums = CIBlockPropertyEnum::GetList(Array(), $arPropertyEnumFilter);
$enum_field = $property_enums->GetNext();
return $enum_field['ID'];
}
try {
$arrFilterMale = array("PROPERTY" => array('gender' => GetEnumValueIDByCode('male', 'gender', 'scam_list')));
$arrFilterFemale = array("PROPERTY" => array('gender' => GetEnumValueIDByCode('female', 'gender', 'scam_list')));
} catch (Exception $e) {
echo "Произошла ошибка:" . $e->getMessage();
}
|
Здесь $arrFilterMale и $arrFilterFemale переменные для фильтрации.