Возникла ситуация, когда на страницу сайта нужно подгрузить связанные страницы сайта.
Вопрос о связе решился в сторону тегов. Т.к. делать через "Пользовательские поля" (как происходит подтяжка дополнительного материала в компонентах) не получается из-за не возможности (или моего незнания способа) создать удобную связь между категориями (разделами инфоблока) и страницы. Посмотреть топик на форуме можно по этой ссылке посмотреть [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-му)
вконце режем количество найденных страниц
И как развитие темы. Можно теги брать из текущего инфоблока и подставлять в скрипт, но это на домашнее задание
существуют ли инструменты, позволяющие хоть как-то автоматизировать эту работу? Нечто, позволяющего делать те или иные выборки, замены и т.д. К примеру:
- Выборка статей, в которых не прописаны ключевые слова; - Выборка статей, в которых не прописано описание; - Выборка статей, в которых не прописаны теги; - Выборка статей (по обычному поиску), релевантных поисковому запросу (строке), но в которых данная строка не прописана в ключевых словах или в тегах; - Пакетно заменить во всех статьях один тег на другой; и т.д.
Предел мечтаний (это сделало бы меня счастливым), если бы итогом работы инструмента являлся не просто набор ссылок на статьи, а некая веб-форма, генерируемая по итогам запроса (выборки), отображающая состояние нужных мне полей, и прямо в которой можно было бы эти поля менять
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».