Матвей Земсков

Заметки веб-мастера

Суббота, 06 октября 2012 09:58

Закрепление новости вверху списка новостей на сайте под управлением «1С-Битрикс»

Оцените материал
(3 голосов)

Как известно компонент “bitrix:news.list”, выводящий список новостей на странице сайта замещает старые новости более «свежими». Но может возникнуть ситуация, когда какая-то новость должна находиться вверху списка определенное время, так чтобы более «свежие» не смещали ее вниз по списку.

Это можно реализовать путем правки шаблона компонента “bitrix:news.list”.

Сначала скопируем шаблон компонента в папку нашего шаблона сайта. Затем создадим внутри скопированной папки шаблона компонента файл .parameters.php, содержащим следующий код:

PHP

<?
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
$arTemplateParameters = array(
	"CONS_NEWS_ID" => Array(
		"NAME" => GetMessage("T_IBLOCK_DESC_NEWS_CONS"),
		"TYPE" => "TEXT",			
	),
	"NEWS_TILL_DATE" => Array(
		"NAME" => GetMessage("T_IBLOCK_DESC_NEWS_TILL_DATE"),
		"TYPE" => "TEXT",			
	),
);
?>

В файл .parameters.php находящийся в папке lang/ru/ добавляем строку кода:

PHP

$MESS ['T_IBLOCK_DESC_NEWS_CONS'] = "Идентификатор закрепленной новости";
$MESS ['T_IBLOCK_DESC_NEWS_TILL_DATE'] = "Дата окончания закрепления новости (ДД.ММ.ГГГГ)";

После этого в настройках компонента появятся следующие пункты:

Настроки компонента bitrix:news.list

При заполнении этих полей необходимо ввести ID новости, которую нужно «закрепить» и дату в указанном формате, затем сохранить настройки.

Код, который делает всю основную работу размещается в файле шаблона компонента template.php.

PHP

<!--Код для закрепления новости-->
<?
$cur_date = date('d.m.Y');
if(isset($arParams['CONS_NEWS_ID']) && $arParams['CONS_NEWS_ID'] != '' && $cur_date < $arParams['NEWS_TILL_DATE']){
  $fx_nitem = intval($arParams['CONS_NEWS_ID']);
  $newsItemFix = array(); 
  foreach($arResult["ITEMS"] as $arKey=>$arItem){
	   if($arItem["ID"] == $fx_nitem){
			$newsItemFix = $arResult["ITEMS"][$arKey];
			unset($arResult["ITEMS"][$arKey]);
			array_unshift($arResult["ITEMS"],$newsItemFix);
	   }
  }
 
 }
?>
<!--/Код для закрепления новости-->

Чтобы визуально отделить «закрепленную» новость от остальных можно провести под ней линию толщиной 1px. Для этого в шаблоне template.php после вывода анонса новости делаем проверку: закреплена ли она? Если новость закреплена, отделяем ее полоской от остальных элементов списка.

PHP

<?if($arItem["ID"] == $fx_nitem):?>
     <tr><td colspan="2" style="height:10px; border-bottom:1px solid #7c8999;"></td></tr>
<?endif;?> 

Вот таким простым способом решается задача по «закреплению» новости вверху списка.

Однако тут есть один неприятный момент: предположим у вас много новостей и компонент их выводит постранично. Вам понадобилось «закрепить», какую-нибудь новость, которая находится на странице 3. И здесь нас поджидает сюрприз: новость «закрепится» вверху третьей страницы. Вывести ее в самом начале списка, то есть на первой странице, описанным способом не удастся.

Для решения этой задачи нужно менять код самого компонента "news.list", предварительно скопировав его в папку «своего» пространства имен, например /bitrix/components/mycomponents/.

Прочитано 4512 раз
Добавить комментарий

Комментарии   

 
0 # Андрей 07.09.2016 09:10
Хорошая статья!
Подскажите как проще сделать вывод последней новости (news-list) другим стилем. Т.е. Последняя новость будет большая с большой картинкой и тектом например сбоку...
Ответить | Ответить с цитатой | Цитировать
 
 
+1 # Матвей 08.09.2016 10:06
Последняя новость обычно является первым элементом массива $arResult["ITEMS"]. Этот элемент можно извлечь оттуда (в файле result_modifier.php) и поместить например в $arResult["LAST_NEWSITEM"].
В шаблоне компонента этот элемент обрабатывать перед циклом по остальным новостям. Таким образом его можно будет стилизовать как вам необходимо.
Ответить | Ответить с цитатой | Цитировать
 
Мои услуги

Предлагаю следующие услуги:

  • Верстка шаблона сайта из дизайн-макета для CMS «1С-Битрикс Управление сайтом» и CMS “Joomla”
  • Создание форм различной сложности (обратная связь, анкеты и тп) для указанных CMS
  • Настройка и кастомизация компонентов и модулей для указанных CMS
  • Доработка модулей и компонентов для указанных CMS, добавление нестандартного функционала
  • Разработка лендингов (landing-pages)

По все вопросам обращайтесь через форму обратной связи

Скачать

Предлагаю вашему вниманию: