- Модуль: 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;
}