Интересные статьи

После решения задачи, хочется рассказать об этом

Простой компонент bitrix:news.list


$APPLICATION->IncludeComponent(
	"bitrix:news.list",
	"",
	Array(
        "DISPLAY_DATE" => "Y",
        "DISPLAY_NAME" => "Y",
        "DISPLAY_PICTURE" => "Y",
        "DISPLAY_PREVIEW_TEXT" => "Y",
        "AJAX_MODE" => "Y",
        "IBLOCK_TYPE" => "news",
        "IBLOCK_ID" => "3",
        "NEWS_COUNT" => "20",
        "SORT_BY1" => "ACTIVE_FROM",
        "SORT_ORDER1" => "DESC",
        "SORT_BY2" => "SORT",
        "SORT_ORDER2" => "ASC",
        "FILTER_NAME" => "arrFilter",
        "FIELD_CODE" => Array("ID"),
        "PROPERTY_CODE" => Array("DESCRIPTION"),
        "CHECK_DATES" => "Y",
        "DETAIL_URL" => "",
        "PREVIEW_TRUNCATE_LEN" => "",
        "ACTIVE_DATE_FORMAT" => "d.m.Y",
        "SET_TITLE" => "Y",
        "SET_BROWSER_TITLE" => "Y",
        "SET_META_KEYWORDS" => "Y",
        "SET_META_DESCRIPTION" => "Y",
        "SET_LAST_MODIFIED" => "Y",
        "INCLUDE_IBLOCK_INTO_CHAIN" => "Y",
        "ADD_SECTIONS_CHAIN" => "Y",
        "HIDE_LINK_WHEN_NO_DETAIL" => "Y",
        "PARENT_SECTION" => "",
        "PARENT_SECTION_CODE" => "",
        "INCLUDE_SUBSECTIONS" => "Y",
        "CACHE_TYPE" => "A",
        "CACHE_TIME" => "3600",
        "CACHE_FILTER" => "Y",
        "CACHE_GROUPS" => "Y",
        "DISPLAY_TOP_PAGER" => "Y",
        "DISPLAY_BOTTOM_PAGER" => "Y",
        "PAGER_TITLE" => "Новости",
        "PAGER_SHOW_ALWAYS" => "Y",
        "PAGER_TEMPLATE" => "",
        "PAGER_DESC_NUMBERING" => "Y",
        "PAGER_DESC_NUMBERING_CACHE_TIME" => "36000",
        "PAGER_SHOW_ALL" => "Y",
        "PAGER_BASE_LINK_ENABLE" => "Y",
        "SET_STATUS_404" => "Y",
        "SHOW_404" => "Y",
        "MESSAGE_404" => "",
        "PAGER_BASE_LINK" => "",
        "PAGER_PARAMS_NAME" => "arrPager",
        "AJAX_OPTION_JUMP" => "N",
        "AJAX_OPTION_STYLE" => "Y",
        "AJAX_OPTION_HISTORY" => "N",
        "AJAX_OPTION_ADDITIONAL" => ""
    )
);

Если необходима фильтрация элементов по определенному признаку, необходимо в настройки параметров компонента добавить "FILTER_NAME" => "arrFilter", и собрать этот самый фильтр


global $arrFilter;

//фильтрация по значению свойства
$arrFilter["PROPERTY_ON_MAIN_VALUE"] = "y"; 

//фильтрация по дате
if($_GET["ARCHIVE"]) 
{
	$arDate = explode('.', $_GET["ARCHIVE"]);
	$timestemp = mktime(0,0,0, $arDate[0], 1, $arDate[1]);
	$counDay = date('t', $timestemp);
	$arrFilter["<=DATE_ACTIVE_FROM"] = "01.".$arDate[0].".".$arDate[1]." 0:00:00"; 
	$arrFilter["<=DATE_ACTIVE_FROM"] = $counDay.".".$arDate[0].".".$arDate[1]." 23:59:59";
	
	//Если свойство PROPERTY_DATE arrFilter["<PROPERTY_START_DATE"] = date("Y-m-d", time());
}

//фильтрация по тегам
if($_GET["TAGS"])
$arrFilter["TAGS"] = "%".$_GET["TAGS"]."%"; 

//фильтрация по множественному значению
$properties = CIBlockProperty::GetList(Array(), Array("MULTIPLE"=>"Y", "ACTIVE"=>"Y", "IBLOCK_ID"=>$_GET["ID"]));
while ($prop_fields = $properties->GetNext())
{
  $arMultiple[] = '=PROPERTY_'.$prop_fields['ID'];
}

foreach($arrFilter as $property=>$arValue){
	if(in_array($property, $arMultiple))
	{
		unset($arrFilter[$property]);
		foreach($arValue as $value){
			$arrFilter[] = array("ID" => CIBlockElement::SubQuery("ID", array("IBLOCK_ID" => $_GET["ID"], $property => $value)));
		}
	}
}