Возникла ситуация, когда на страницу сайта нужно подгрузить связанные страницы сайта.
Вопрос о связе решился в сторону тегов. Т.к. делать через "Пользовательские поля" (как происходит подтяжка дополнительного материала в компонентах) не получается из-за не возможности (или моего незнания способа) создать удобную связь между категориями (разделами инфоблока) и страницы. Посмотреть топик на форуме можно по этой ссылке
[spoiler]
Поэтому приняв волевое решение делаю через теги.
Вот код.
Пояснения:
И как развитие темы. Можно теги брать из текущего инфоблока и подставлять в скрипт, но это на домашнее задание
Вопрос о связе решился в сторону тегов. Т.к. делать через "Пользовательские поля" (как происходит подтяжка дополнительного материала в компонентах) не получается из-за не возможности (или моего незнания способа) создать удобную связь между категориями (разделами инфоблока) и страницы. Посмотреть топик на форуме можно по этой ссылке
[spoiler]
Поэтому приняв волевое решение делаю через теги.
Вот код.
<?
if(!CModule::IncludeModule('search')){
$this->AbortResultCache();
ShowError(GetMessage('BSF_C_MODULE_NOT_INSTALLED'));
return;
}
$exFILTER['LIMIT'] = 2;
$exFILTER[]=array(
'MODULE_ID' => 'main',
'URL' => array("/%"),
);
$arParams['TAGS'] = $APPLICATION->GetPageProperty("tags");
$arParams["SEARCH"] = '';
$arTags = explode(",", $arParams['TAGS']);
foreach($arTags as $tag){
$arResult["REQUEST"]["~arrTAGS"][] = trim($tag);
}
$arFilter = array(
'SITE_ID' => SITE_ID,
'QUERY' => $arParams["SEARCH"],
"TAGS" => $arResult["REQUEST"]["~arrTAGS"][0], //только 1 тег берем
"CHECK_DATES" => "Y",
);
$obSearch = new CSearch();
$obSearch->Search($arFilter, array('CNT' => 'DESC'), $exFILTER, false);
$arResult['ERROR_CODE'] = $obSearch->errorno;
$arResult['ERROR_TEXT'] = $obSearch->error;
$arResult['SEARCH'] = array();
if($obSearch->errorno==0){
$res = $obSearch->GetNext();
if(!$res && !empty($arResult["REQUEST"]["~arrTAGS"][1])){
//берем, если есть конечно, 2 тег и ищем по нему в случае если ничего не нашли по 1
$arFilter["TAGS"] = $arResult["REQUEST"]["~arrTAGS"][1];
$obSearch = new CSearch();
$obSearch->Search($arFilter, array("CNT" => "DESC"), $exFILTER, false);
$arResult["ERROR_CODE"] = $obSearch->errorno;
$arResult["ERROR_TEXT"] = $obSearch->error;
if($obSearch->errorno == 0){
$res = $obSearch->GetNext();
}
}
if($res){
do{
$arResult['SEARCH'][] = $res;
} while ($res = $obSearch->getNext());
@array_splice($arResult['SEARCH'], $exFILTER['LIMIT']);
}
}
?><h3>Страницы сайта</h3>
<ul><?foreach($arResult['SEARCH'] as $arItem):?>
<li>
<a href="<?=$arItem['URL']?>"><?=$arItem['TITLE']?></a>
</li>
<?endforeach;?>
</ul> |
Пояснения:
- ищим с помощью функции Search (CSearch)
- теги берем по очереди (вначале 1 если не нашли то ищем по 2-му)
- вконце режем количество найденных страниц
И как развитие темы. Можно теги брать из текущего инфоблока и подставлять в скрипт, но это на домашнее задание
