• Модуль: iblock
  • Путь к файлу: ~/bitrix/modules/iblock/classes/general/section_property.php
  • Класс: CIBlockSectionPropertyLink
  • Вызов: CIBlockSectionPropertyLink::Add
static function Add($SECTION_ID, $PROPERTY_ID, $arLink = array())
{
	global $DB;
	$SECTION_ID = (int)$SECTION_ID;
	$PROPERTY_ID = (int)$PROPERTY_ID;
	$rs = $DB->Query("
		SELECT *
		FROM b_iblock_section_property
		WHERE SECTION_ID = ".$SECTION_ID." AND PROPERTY_ID = ".$PROPERTY_ID."
	");

	if (!$rs->Fetch())
	{
		$ar = self::CheckProperty($SECTION_ID, $PROPERTY_ID);
		if (is_array($ar))
		{
			$ar["ID"] = 1;
			$DB->Add("b_iblock_section_property", $ar);

			$arUpdate = array();
			if (array_key_exists("SMART_FILTER", $arLink))
				$arUpdate["SMART_FILTER"] = $arLink["SMART_FILTER"];
			if (array_key_exists("DISPLAY_TYPE", $arLink))
				$arUpdate["DISPLAY_TYPE"] = $arLink["DISPLAY_TYPE"];
			if (array_key_exists("DISPLAY_EXPANDED", $arLink))
				$arUpdate["DISPLAY_EXPANDED"] = $arLink["DISPLAY_EXPANDED"];
			if (array_key_exists("FILTER_HINT", $arLink))
				$arUpdate["FILTER_HINT"] = self::cleanFilterHint($arLink["FILTER_HINT"]);
			if (array_key_exists("IBLOCK_ID", $arLink))
				$arUpdate["IBLOCK_ID"] = $arLink["IBLOCK_ID"];

			if (!empty($arUpdate))
				$strUpdate = $DB->PrepareUpdate("b_iblock_section_property", $arUpdate);
			else
				$strUpdate = "";

			if ($strUpdate <> '')
			{
				$DB->Query("
					UPDATE b_iblock_section_property
					SET ".$strUpdate."
					WHERE IBLOCK_ID = ".$ar["IBLOCK_ID"]."
					AND SECTION_ID = ".$ar["SECTION_ID"]."
					AND PROPERTY_ID = ".$ar["PROPERTY_ID"]."
				");

				if (
					isset($arUpdate["SMART_FILTER"])
					&& $arUpdate["SMART_FILTER"] === "Y"
					&& (!isset($arLink["INVALIDATE"]) || $arLink["INVALIDATE"] !== "N")
				)
				{
					BitrixIblockPropertyIndexManager::markAsInvalid(
						isset($arUpdate["IBLOCK_ID"]) && $arUpdate["IBLOCK_ID"]
							? $arUpdate["IBLOCK_ID"]
							: $ar["IBLOCK_ID"]
					);
				}
			}
		}
	}
}