Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Как сделать видимыми неактуальные новости?

00 голосов
6
Привет.

Не обходимо отображать пользователям неактуальные новости вместе с актуальными.

Как это можно сделать? Есть такой параметр при вызове модуля "Список новостей"?

В файле /bitrix/components/bitrix/news.list/component.php
нашел строку:
Код
$rsIBlock = CIBlock::GetList(array(), array("ACTIVE" => "Y", "ID" => $arParams["IBLOCK_ID"]));


которую хорошо бы заменить на:
Код
$rsIBlock = CIBlock::GetList(array(), array("ID" => $arParams["IBLOCK_ID"]));


т.е. убрать условие: "ACTIVE" => "Y"

Тогда, думаю, будет все нормально, но не хочется менять ядро системы. Посмотрел в коде, этот файл инклюдится жестко, т.е. копирование его в папку текущего шаблона не помогает :(

Может можно это как-нибудь сделать?
спросил 31 Июль, 13 от Nemesida (240 баллов)

6 Ответы

00 голосов
ответил 31 Июль, 13 от sickmind (4,660 баллов)
00 голосов
Цитата
Виктор Водовозов пишет:
Не обходимо отображать пользователям неактуальные новости вместе с актуальными.

А неактуальные новости - это какие? Они (новости, элементы) находятся в другом инфоблоке, который неактивен?
У них дата активности закончилась? Или у них не стоит признак активности?

Код
$rsIBlock = CIBlock::GetList(array(), array("ACTIVE" => "Y", "ID" => $arParams["IBLOCK_ID"]));

- просто эта строчка относится к самому инфоблоку, а не к элементам.

Если нужно выбирать ВСЕ подряд новости из АКТИВНОГО инфоблока, то для этого компонента можно обойтись без кастомизации.

Или в шаблоне, или в /bitrix/php_interface/init.php, или непосредственно перед вызовом компонента добавьте:
Код
global $SelectAllElements;
$SelectAllElements = array(
  'ACTIVE' => false, // убрать эту строчку, если нужно учитывать активность элемента
  'ACTIVE_DATE' => false, // убрать эту строчку, если нужно учитывать дату активности
);


В параметрах подключения компонента для параметра "Фильтр" (FILTER_NAME) задайте: SelectAllElements // без "$" !!!
ответил 28 Сен, 13 от Delp (7,220 баллов)
00 голосов
Задача заключается в том, чтобы отображать в списке элементов инфоблока (в данном случае Новости) те элементы, у которых свойство активен равняется FALSE.

Александр Черкасов,

Спасибо, прочитал в FAQ "Как кастомизировать стандартный компонент?"

Создал свое пространство имен: /bitrix/component/525/
В него поместил нужный компонент: /bitrix/component/525/news.list/

Затем в файле /bitrix/component/525/news.list/component.php
внес следующие изменения:
Код
   if(is_numeric($arParams["IBLOCK_ID"]))
   {
//      $rsIBlock = CIBlock::GetList(array(), array("ACTIVE" => "Y", "ID" => $arParams["IBLOCK_ID"]));
      $rsIBlock = CIBlock::GetList(array(), array("ID" => $arParams["IBLOCK_ID"]));
   }
   else
   {
//      $rsIBlock = CIBlock::GetList(array(), array("ACTIVE" => "Y", "CODE" => $arParams["IBLOCK_ID"]));
      $rsIBlock = CIBlock::GetList(array(), array("CODE" => $arParams["IBLOCK_ID"]));
   }


В вызове компонента изменил пространство имен:

Код
$APPLICATION->IncludeComponent(
      "525:news.list",
      "",
      Array(
         "DISPLAY_DATE" => "Y", 
         "DISPLAY_NAME" => "Y", 
         "DISPLAY_PICTURE" => "Y", 
         "DISPLAY_PREVIEW_TEXT" => "Y", 
         "IBLOCK_TYPE" => "news", 
         "IBLOCK_ID" => "43", 
         "NEWS_COUNT" => "10", 
         "SORT_BY1" => "ACTIVE_FROM", 
         "SORT_ORDER1" => "DESC", 
         "SORT_BY2" => "SORT", 
         "SORT_ORDER2" => "ASC", 
         "FILTER_NAME" => "", 
         "FIELD_CODE" => Array("",""), 
         "PROPERTY_CODE" => Array("",""), 
         "DETAIL_URL" => "detail.php?ID=#ELEMENT_ID#", 
         "PREVIEW_TRUNCATE_LEN" => "", 
         "ACTIVE_DATE_FORMAT" => "j F Y", 
         "DISPLAY_PANEL" => "N", 
         "SET_TITLE" => "Y", 
         "INCLUDE_IBLOCK_INTO_CHAIN" => "Y", 
         "ADD_SECTIONS_CHAIN" => "Y", 
         "HIDE_LINK_WHEN_NO_DETAIL" => "N", 
         "PARENT_SECTION" => "", 
         "CACHE_TYPE" => "A", 
         "CACHE_TIME" => "3600", 
         "CACHE_FILTER" => "N", 
         "DISPLAY_TOP_PAGER" => "N", 
         "DISPLAY_BOTTOM_PAGER" => "Y", 
         "PAGER_TITLE" => "", 
         "PAGER_SHOW_ALWAYS" => "Y", 
         "PAGER_TEMPLATE" => ".default", 
         "PAGER_DESC_NUMBERING" => "N", 
         "PAGER_DESC_NUMBERING_CACHE_TIME" => "36000" 
         )
)


Не помогло :(

#EBEBEB,

Перед вызозом компонента прописал следующее:
Код
global $SelectAllElements;
$SelectAllElements = array(
  'ACTIVE' => false, // убрать эту строчку, если нужно учитывать активность элемента
); 


Тоже не принесло результата :(
ответил 29 Дек, 13 от Nemesida (240 баллов)
00 голосов
Виктор Водовозов, осталось ещё немного почитать и всё получится :)
Цитата
CIBlock::GetList
Выбирает инфоблоки, а не элементы. Для выборки элементов используется CIBlockElement::GetList
Фильтр этой выборки задаётся в строчке около 144
Цитата
//WHERE
$arFilter = array (
"IBLOCK_ID" => $arResult["ID"],
"IBLOCK_LID" => SITE_ID,
"ACTIVE" => "Y",
"ACTIVE_DATE" => "Y",
"CHECK_PERMISSIONS" => "Y",
);
Вот именно в этом фильтре попробуйте убрать проверку на активность....
ответил 14 Апр, 14 от sickmind (4,660 баллов)
00 голосов
Цитата
Александр Черкасов пишет:
Виктор Водовозов, осталось ещё немного почитать и всё получится :) Цитата CIBlock::GetList Выбирает инфоблоки, а не элементы. Для выборки элементов используется CIBlockElement::GetList

Фильтр этой выборки задаётся в строчке около 144 Цитата //WHERE

$arFilter = array (

"IBLOCK_ID" => $arResult["ID"],

"IBLOCK_LID" => SITE_ID,

"ACTIVE" => "Y",

"ACTIVE_DATE" => "Y",

"CHECK_PERMISSIONS" => "Y",

); Вот именно в этом фильтре попробуйте убрать проверку на активность....


Спасибо, самое оно :)
ответил 08 Авг, 14 от Nemesida (240 баллов)
00 голосов
Цитата
Виктор Водовозов пишет:
Перед вызозом компонента прописал следующее:
Код

global $SelectAllElements;
$SelectAllElements = array(
'ACTIVE' => false, // убрать эту строчку, если нужно учитывать активность элемента
);


Тоже не принесло результата


Упс, нужно не false, а пустое значение:
Код
global $SelectAllElements; 
$SelectAllElements = array( 
  'ACTIVE' => '', 
); 

ну и в параметр компонента "Фильтр" (FILTER_NAME) передать: SelectAllElements
ответил 12 Дек, 14 от Delp (7,220 баллов)

Похожие вопросы

0 голосов
0 ответов
0 голосов
0 ответов
0 голосов
1 ответ
0 голосов
5 ответов
0 голосов
5 ответов
спросил 18 Ноя, 13 от Arvendel (100 баллов)