• Модуль: wiki
  • Путь к файлу: ~/bitrix/modules/wiki/classes/general/wiki.php
  • Класс: CWiki
  • Вызов: CWiki::GetElementByName
static function GetElementByName($NAME, $arFilter, $arComponentParams = array())
{
	global $CACHE_MANAGER;

	$iCatId = "";

	if (CWikiSocnet::IsSocNet())
	{
		$arFilter['SUBSECTION'] = CWikiSocnet::$iCatId;
		$iCatId = $arFilter['SUBSECTION'];
	}

	$cacheByNameID = self::GetIdForCacheByName($arFilter['IBLOCK_ID'], $iCatId, $NAME);

	$cacheTime = isset($arComponentParams['CACHE_TIME']) ? intval($arComponentParams['CACHE_TIME']) : CWiki::CWIKI_CACHE_TTL;

	if($CACHE_MANAGER->Read($cacheTime, $cacheByNameID))
	{
		$cachedElement = $CACHE_MANAGER->Get($cacheByNameID);

		if($cachedElement)
		{
			//if cached element satisfied to filter's conditions
			$sameFilter = true;
			foreach ($arFilter as $key => $value)
			{
				if(isset($cachedElement[$key]) && $value != "" && $cachedElement[$key] != $value)
				{
					$sameFilter = false;
					break;
				}
			}

			if($sameFilter)
				return $cachedElement;
		}
	}

	$NAME = CWikiUtils::UnlocalizeCategoryName($NAME);
	$NAME = CWikiUtils::htmlspecialcharsback($NAME);
	$arFilter['=XML_ID'] = $NAME;

	$rsElement = CIBlockElement::GetList(array(), $arFilter);
	$obElement = $rsElement->GetNextElement();
	$arResult = false;
	if ($obElement !== false)
	{
		$arResult = $obElement->GetFields();
		if (isset($arResult['NAME']))
			$arResult['NAME'] = htmlspecialcharsbx($arResult['NAME']);
		$rsProperties = $obElement->GetProperties(array(), array('CODE' => 'IMAGES'));

		foreach ($rsProperties as $arProperty)
			$arResult[$arProperty['CODE']] = $arProperty['VALUE'];

		$rsProperties = $obElement->GetProperties(array(), array('CODE' => 'FORUM_TOPIC_ID'));

		foreach ($rsProperties as $arProperty)
			$arResult[$arProperty['CODE']] = $arProperty['VALUE'];

		$arResult['SECTIONS'] = self::GetCategory($arResult['XML_ID'], $arFilter['IBLOCK_ID']);
		if (!empty($arResult['TAGS']))
		{
			$_arTAGS = explode(',', $arResult['TAGS']);
			$arResult['_TAGS'] = array();
			foreach ($_arTAGS as $sTag)
			{
				$sTag = trim($sTag);
				$arTag = array('NAME' => $sTag);
				if (
					!empty($arComponentParams)
					&& (
						isset($arComponentParams['PATH_TO_SEARCH'])
						|| isset($arComponentParams['~PATH_TO_TAG'])
					)
				)
				{
					if (isset($arComponentParams['PATH_TO_TAG']))
					{
						$arTag['LINK'] = CComponentEngine::MakePathFromTemplate($arComponentParams['~PATH_TO_TAG'],
							[
								'group_id' => CWikiSocnet::$iSocNetId,
								'tag' => rawurlencode($sTag)
							]
						);
					}
					else
					{
						$arP = $arComponentParams['IN_COMPLEX'] == 'Y' && $arComponentParams['SEF_MODE'] == 'N' ? array($arComponentParams['OPER_VAR'] => 'search') : array();
						$arP['tags'] = rawurlencode($sTag);
						$arTag['LINK'] = CHTTP::urlAddParams(
							CComponentEngine::MakePathFromTemplate($arComponentParams['PATH_TO_SEARCH'],
								array(
									'wiki_name' => $arComponentParams['ELEMENT_NAME'],
									'group_id' => CWikiSocnet::$iSocNetId
								)
							),
							$arP
						);
					}
				}
				$arResult['_TAGS'][] = $arTag;
			}
		}
	}

	if(!empty($arComponentParams)) //Let's store only full page data with tag links
		$CACHE_MANAGER->Set($cacheByNameID, $arResult);

	return $arResult;
}