• Модуль: iblock
  • Путь к файлу: ~/bitrix/modules/iblock/classes/general/section_property.php
  • Класс: CIBlockSectionPropertyLink
  • Вызов: CIBlockSectionPropertyLink::Set
static function Set($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."
	");

	$sectionProperty = $rs->Fetch();
	if ($sectionProperty)
	{
		$ar = self::CheckProperty($SECTION_ID, $PROPERTY_ID);
		if (is_array($ar))
		{
			$arUpdate = array();

			if (
				array_key_exists("SMART_FILTER", $arLink)
				&& $arLink["SMART_FILTER"] !== $sectionProperty["SMART_FILTER"]
			)
			{
				$arUpdate["SMART_FILTER"] = $arLink["SMART_FILTER"] === "Y"? "Y": false;
			}

			if (
				array_key_exists("DISPLAY_TYPE", $arLink)
				&& $arLink["DISPLAY_TYPE"] !== $sectionProperty["DISPLAY_TYPE"]
			)
			{
				$arUpdate["DISPLAY_TYPE"] = $arLink["DISPLAY_TYPE"];
			}

			if (
				array_key_exists("DISPLAY_EXPANDED", $arLink)
				&& $arLink["DISPLAY_EXPANDED"] !== $sectionProperty["DISPLAY_EXPANDED"]
			)
			{
				$arUpdate["DISPLAY_EXPANDED"] = $arLink["DISPLAY_EXPANDED"] === "Y"? "Y": false;
			}

			if (array_key_exists("FILTER_HINT", $arLink))
			{
				$filterHint = self::cleanFilterHint($arLink["FILTER_HINT"]);
				if ($filterHint !== $sectionProperty["FILTER_HINT"])
				{
					$arUpdate["FILTER_HINT"] = $filterHint;
				}
			}

			if (
				array_key_exists("IBLOCK_ID", $arLink)
				&& $arLink["IBLOCK_ID"] !== $sectionProperty["IBLOCK_ID"]
			)
			{
				$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 SECTION_ID = ".$ar["SECTION_ID"]."
					AND PROPERTY_ID = ".$ar["PROPERTY_ID"]."
				");

				if (
					isset($arUpdate["SMART_FILTER"])
					&& $arUpdate["SMART_FILTER"] === "Y"
				)
				{
					BitrixIblockPropertyIndexManager::markAsInvalid(
						isset($arUpdate["IBLOCK_ID"]) && $arUpdate["IBLOCK_ID"]
							? $arUpdate["IBLOCK_ID"]
							: $ar["IBLOCK_ID"]
					);
				}
			}
		}
	}
	else
	{
		self::Add($SECTION_ID, $PROPERTY_ID, $arLink);
	}
}