20.июл.2024

Создаем news.list с фильтром по тегам на Ajax

  1. Создаем свойство Теги тип Список: ATTR_TAG_FILTER, Внешний вид: Флажки, заполняем нужными фильтрами настройке инфоблока

  2. Заходим в шаблон news.list: /news/template_blog/bitrix/catalog.filter/ШАБЛОН, и создаем файл result_modifier.php с кодом

<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
/** @var array $arResult */
foreach ($arResult["ITEMS"] as $arItem) {
	foreach ($arItem["LIST"] as $key => $labelTags) {
		$name = array(
			"ID" => $key,
			"LABEL" => $labelTags,
			"TYPE" => $arItem["TYPE"],
			"INPUT_NAME" => $arItem["INPUT_NAME"]."[]"
		);
		$arResult["ITEMS"]["TAGS"][] = $name;
	}
}
  1. далее в шаблоне фильтра template.php после “$this->setFrameMode(true);” добавляем $request

  2. к Input добавить onclick="clickFilter()"

//arFilterBlog это важно, требуется указать тот что указан в параметрах комопнента
$request = \Bitrix\Main\Context::getCurrent()->getRequest();
	if($request["bxajaxid"]){
		$idBtnFilter = $request["arFilterBlog_pf"]["ATTR_TAG_FILTER"];
	}
  1. добавляем в шаблон фильтра template.php скрипт, по нажатию на кнопку input нажимается скрытая кнопка “Фильтровать”

<script>

		function clickFilter() {
			// Находим элемент с id "btn_filter_tag"
			const btnFilterTag = document.getElementById('btn_filter_tag');
			if (btnFilterTag) {
				// Триггерим событие click на элементе btnFilterTag
				btnFilterTag.click();
			} else {
				console.warn('Элемент с id "btn_filter_tag" не найден.');
			}
		}
</script>
← Назад к списку новостей