На основе этого примера сделал взаимную привязку в 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]); } } } //.............................................................. } |