На основе этого примера сделал взаимную привязку в 2х инфоблоках.
Есть люди, которые могут входить в сообщества. И есть сообщества, в которые входят люди. В текстовое поле вписывается роль человека в сообществе.
В обоих инфоблоках есть множественное свойство привязки. В человеке есть привязка к сообществу. В сообществе есть привязка к человеку.
При изменении человека, в событии OnIBlockElementUpdate, вношу изменения во всех сообществах - добавляю, обновляю, удаляю.
Кода получилось очень много. Захотелось прописать в классе служебные функции. Но первая же написанная вызвала ошибку:
В итоге код написан, а сейчас понял что надо было статические функции писать. попробовал, она сработала.
Еще обнаружил проблемы с удалением этих свойств. Когда очищаешь поле VALUE(id-элемента), то это поле так и висит с пустым значением. В итоге дописал на событие очистку данного поля. Хотя, наверно можно дописать сам класс, ConvertToDB.
код в событии
Есть люди, которые могут входить в сообщества. И есть сообщества, в которые входят люди. В текстовое поле вписывается роль человека в сообществе.
В обоих инфоблоках есть множественное свойство привязки. В человеке есть привязка к сообществу. В сообществе есть привязка к человеку.
При изменении человека, в событии OnIBlockElementUpdate, вношу изменения во всех сообществах - добавляю, обновляю, удаляю.
Кода получилось очень много. Захотелось прописать в классе служебные функции. Но первая же написанная вызвала ошибку:
| Код |
|---|
Using $this when not in object context (0) |
В итоге код написан, а сейчас понял что надо было статические функции писать. попробовал, она сработала.
| Код |
|---|
function eventHandler(){
self::servFunc();
}
static function servFunc(){
die();
}
|
Еще обнаружил проблемы с удалением этих свойств. Когда очищаешь поле VALUE(id-элемента), то это поле так и висит с пустым значением. В итоге дописал на событие очистку данного поля. Хотя, наверно можно дописать сам класс, ConvertToDB.
код в событии
| Код |
|---|
function eventHandler(&$arFields)
{
//.................................................................
$db_props = CIBlockElement::GetProperty(
$arFields["IBLOCK_ID"],
$arFields["ID"],
["sort" => "asc"],
["CODE"=>"PERSON"]
);
if($ar_prop = $db_props->Fetch()){
$PROP_ID = $ar_prop['ID']; // ид свойства
foreach ($arFields["PROPERTY_VALUES"][$PROP_ID] as $k => $prop) {
if ($prop['VALUE'] == '') {
// удаляем пустые значения
unset($arFields["PROPERTY_VALUES"][$PROP_ID][$k]);
}
}
}
//..............................................................
}
|