Часто возникает необходимость привязывать пользовательские свойства к комментариям блогов, форумов или любым другим объектам, которые по умолчанию не поддерживают пользовательские свойства. В таких случаях может помочь использование недокументированных возможностей системы.
Поясним на примере комментариев блога. Создаем с помощью админки пользовательское свойство нужного типа (Настройки->Настройки продукта->Пользовательские поля). Заполняем все, как обычно, но в поле "Объект" указываем "BLOG_COMMENT" (или любое другое придуманное имя объекта, лишь бы оно было уникально).
Для считывания и записи значений пользовательских свойств можно использовать следующие функции:
Код |
---|
function GetUserField ($entity_id, $value_id, $property_id)
{
$arUF = $GLOBALS["USER_FIELD_MANAGER"]->GetUserFields ($entity_id, $value_id);
return $arUF[$property_id]["VALUE"];
}
function SetUserField ($entity_id, $value_id, $uf_id, $uf_value)
{
return $GLOBALS["USER_FIELD_MANAGER"]->Update ($entity_id, $value_id,
Array ($uf_id => $uf_value));
} |
Пример использования:
Код |
---|
SetUserField ("BLOG_COMMENT", $CommentID, "UF_RATING", $Rating);
|
Код |
---|
echo "Рейтинг комментария: ".GetUserField ("BLOG_COMMENT", $CommentID, "UF_RATING");
|
Данный подход, конечно, не так удобен, как использование функций GetList для объектов с "врожденной" поддержкой кастомных свойств. Однако, он позволяет максимально быстро и просто использовать в самописных компонентах и модулях пользовательские свойства для произвольных объектов.