• Модуль: iblock
  • Путь к файлу: ~/bitrix/modules/iblock/classes/general/cml2.php
  • Класс: CIBlockCMLExport
  • Вызов: CIBlockCMLExport::ExportProperties
function ExportProperties(&$PROPERTY_MAP)
{
	$PROPERTY_MAP = array();

	fwrite($this->fp, "tt<".GetMessage("IBLOCK_XML2_PROPERTIES").">n");

	if($this->bExtended)
	{
		$arElementFields = array(
			"CML2_ACTIVE" => GetMessage("IBLOCK_XML2_BX_ACTIVE"),
			"CML2_CODE" => GetMessage("IBLOCK_XML2_SYMBOL_CODE"),
			"CML2_SORT" => GetMessage("IBLOCK_XML2_SORT"),
			"CML2_ACTIVE_FROM" => GetMessage("IBLOCK_XML2_START_TIME"),
			"CML2_ACTIVE_TO" => GetMessage("IBLOCK_XML2_END_TIME"),
			"CML2_PREVIEW_TEXT" => GetMessage("IBLOCK_XML2_ANONS"),
			"CML2_DETAIL_TEXT" => GetMessage("IBLOCK_XML2_DETAIL"),
			"CML2_PREVIEW_PICTURE" => GetMessage("IBLOCK_XML2_PREVIEW_PICTURE"),
		);

		foreach($arElementFields as $key => $value)
		{
			fwrite($this->fp, $this->formatXMLNode(3, GetMessage("IBLOCK_XML2_PROPERTY"), array(
				GetMessage("IBLOCK_XML2_ID") => $key,
				GetMessage("IBLOCK_XML2_NAME") => $value,
				GetMessage("IBLOCK_XML2_MULTIPLE") => "false",
			)));
		}
	}

	$featureList = [];
	$iterator = IblockPropertyFeatureTable::getList([
		'select' => ['PROPERTY_ID', 'MODULE_ID', 'FEATURE_ID', 'IS_ENABLED'],
		'filter' => [
			'=PROPERTY.IBLOCK_ID' => $this->arIBlock['ID'],
			'=PROPERTY.ACTIVE' => 'Y'
		],
		'order' => ['PROPERTY_ID' => 'ASC']
	]);
	while ($row = $iterator->fetch())
	{
		$id = (int)$row['PROPERTY_ID'];
		if (!isset($featureList[$id]))
			$featureList[$id] = [];
		$featureList[$id][] = [
			'MODULE_ID' => $row['MODULE_ID'],
			'FEATURE_ID' => $row['FEATURE_ID'],
			'IS_ENABLED' => $row['IS_ENABLED']
		];
		unset($id);
	}
	unset($row, $iterator);

	$arFilter = array(
		"IBLOCK_ID" => $this->arIBlock["ID"],
		"ACTIVE" => "Y",
	);
	$arSort = array(
		"sort" => "asc",
	);

	$obProp = new CIBlockProperty();
	$rsProp = $obProp->GetList($arSort, $arFilter);
	while($arProp = $rsProp->Fetch())
	{
		$id = (int)$arProp["ID"];
		fwrite($this->fp, "ttt<".GetMessage("IBLOCK_XML2_PROPERTY").">n");

		$xml_id = $this->GetPropertyXML_ID($this->arIBlock["ID"], $arProp["NAME"], $arProp["ID"], $arProp["XML_ID"]);
		$PROPERTY_MAP[$arProp["ID"]] = $xml_id;
		$PROPERTY_MAP["~".$arProp["ID"]] = $arProp["NAME"];
		fwrite($this->fp, $this->formatXMLNode(4, GetMessage("IBLOCK_XML2_ID"), $xml_id));

		fwrite($this->fp, $this->formatXMLNode(4, GetMessage("IBLOCK_XML2_NAME"), $arProp["NAME"]));
		fwrite($this->fp, $this->formatXMLNode(4, GetMessage("IBLOCK_XML2_MULTIPLE"), ($arProp["MULTIPLE"]=="Y"? "true": "false")));
		if($arProp["PROPERTY_TYPE"]=="L")
		{
			fwrite($this->fp, "tttt<".GetMessage("IBLOCK_XML2_CHOICE_VALUES").">n");
			$rsEnum = CIBlockProperty::GetPropertyEnum($arProp["ID"]);
			while($arEnum = $rsEnum->Fetch())
			{
				fwrite($this->fp, $this->formatXMLNode(5, GetMessage("IBLOCK_XML2_VALUE"), $arEnum["VALUE"]));
				if($this->bExtended)
				{
					fwrite($this->fp,
						"ttttt<".GetMessage("IBLOCK_XML2_CHOICE").">n"
						.$this->formatXMLNode(6, GetMessage("IBLOCK_XML2_ID"), $arEnum["XML_ID"])
						.$this->formatXMLNode(6, GetMessage("IBLOCK_XML2_VALUE"), $arEnum["VALUE"])
						.$this->formatXMLNode(6, GetMessage("IBLOCK_XML2_BY_DEFAULT"), ($arEnum["DEF"]=="Y"? "true": "false"))
						.$this->formatXMLNode(6, GetMessage("IBLOCK_XML2_SORT"), intval($arEnum["SORT"]))
						."tttttn"
					);
				}
			}
			fwrite($this->fp, "ttttn");
		}

		if($this->bExtended)
		{
			$strUserSettings = '';
			if ('' != $arProp["USER_TYPE"])
			{
				if (!empty($arProp['USER_TYPE_SETTINGS']) && is_array($arProp['USER_TYPE_SETTINGS']))
				{
					$strUserSettings = $this->formatXMLNode(4, GetMessage("IBLOCK_XML2_BX_USER_TYPE_SETTINGS"), serialize($arProp['USER_TYPE_SETTINGS']));
				}
			}
			$propertyFeatures = '';
			if (isset($featureList[$id]))
			{
				$propertyFeatures = $this->formatXMLNode(
					4,
					GetMessage('IBLOCK_XML2_BX_PROPERTY_FEATURE_LIST'),
					serialize($featureList[$id])
				);
			}

			fwrite($this->fp,
				$this->formatXMLNode(4, GetMessage("IBLOCK_XML2_BX_SORT"), intval($arProp["SORT"]))
				.$this->formatXMLNode(4, GetMessage("IBLOCK_XML2_BX_CODE"), $arProp["CODE"])
				.$this->formatXMLNode(4, GetMessage("IBLOCK_XML2_BX_PROPERTY_TYPE"), $arProp["PROPERTY_TYPE"])
				.$this->formatXMLNode(4, GetMessage("IBLOCK_XML2_BX_ROWS"), $arProp["ROW_COUNT"])
				.$this->formatXMLNode(4, GetMessage("IBLOCK_XML2_BX_COLUMNS"), $arProp["COL_COUNT"])
				.$this->formatXMLNode(4, GetMessage("IBLOCK_XML2_BX_LIST_TYPE"), $arProp["LIST_TYPE"])
				.$this->formatXMLNode(4, GetMessage("IBLOCK_XML2_BX_FILE_EXT"), $arProp["FILE_TYPE"])
				.$this->formatXMLNode(4, GetMessage("IBLOCK_XML2_BX_FIELDS_COUNT"), $arProp["MULTIPLE_CNT"])
				.$this->formatXMLNode(4, GetMessage("IBLOCK_XML2_BX_LINKED_IBLOCK"), $this->GetIBlockXML_ID($arProp["LINK_IBLOCK_ID"]))
				.$this->formatXMLNode(4, GetMessage("IBLOCK_XML2_BX_WITH_DESCRIPTION"), ($arProp["WITH_DESCRIPTION"]=="Y"? "true": "false"))
				.$this->formatXMLNode(4, GetMessage("IBLOCK_XML2_BX_SEARCH"), ($arProp["SEARCHABLE"]=="Y"? "true": "false"))
				.$this->formatXMLNode(4, GetMessage("IBLOCK_XML2_BX_FILTER"), ($arProp["FILTRABLE"]=="Y"? "true": "false"))
				.$this->formatXMLNode(4, GetMessage("IBLOCK_XML2_BX_USER_TYPE"), $arProp["USER_TYPE"])
				.$this->formatXMLNode(4, GetMessage("IBLOCK_XML2_BX_IS_REQUIRED"), ($arProp["IS_REQUIRED"]=="Y"? "true": "false"))
				.$this->formatXMLNode(4, GetMessage("IBLOCK_XML2_BX_DEFAULT_VALUE"), serialize($arProp["DEFAULT_VALUE"]))
				.$this->formatXMLNode(4, GetMessage("IBLOCK_XML2_SERIALIZED"), 1)
				.$strUserSettings
				.$propertyFeatures
			);
		}
		fwrite($this->fp, "tttn");
	}
	fwrite($this->fp, "ttn");

	if($this->bExtended)
	{
		$catalog = false;
		if (Loader::includeModule("catalog"))
		{
			$catalog = CCatalogSKU::getInfoByOfferIBlock($this->arIBlock["ID"]);
		}

		if (!empty($catalog) && is_array($catalog))
		{
			$this->ExportSmartFilter(2, $this->arIBlock["ID"], false, $PROPERTY_MAP, $catalog["PRODUCT_IBLOCK_ID"]);
		}
		else
		{
			$this->ExportSmartFilter(2, $this->arIBlock["ID"], 0, $PROPERTY_MAP);
		}
	}
}