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

Вывод элементов

00 голосов
6
Добрый день!

Есть еженедельный выпуск новостей по категориям с подкатегориями.
Он обновляется каждую неделю.

Задача стоит вот в чем:
Нужно чтоб выводились элементы только актуальной недели, а остальные, после окончания срока, отправлялись в архив, или просто не выводились, но при этом были доступны для просмотра в публичной части (но не выводились на главной странице инфо блока). Категории должны оставаться.

В плане вывода элементов мне подходит срок активности, но после его окончание элемент становится недоступен для просмотра в публичной части. Так что я пошел дальше.

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

Это тоже не подошло, вот почему:
Во-первых, при редактировании или добавлении элементов в первый инфоблок я выбираю свойство недели из списка, но когда я сделал фильтр по этому свойству, это свосйство отображается как поле ввода текста, а не как селект в админке.
Во-вторых:даже если и настроить фильтр с селектом по свойству привязки к элементам инфо блока, если не ошибаюсь, оно ведь просто выведет все элементы подряд без категорий, что, собственно, тоже не подходит.

Прошу исправить если в чем-то ошибаюсь и подсказать решение.
Спасибо.
спросил 13 Май, 13 от Xepo6ouTc (260 баллов)

6 Ответы

00 голосов
не проще ли в вызове компонента задать фильтр по дате публикации не старше недели ? если нужно за текущую неделю, то просто в параметрах на пхп задаете дату прошлого понедельника
ответил 13 Май, 13 от Niola (360 баллов)
00 голосов
То есть, на сколько я понял, мне нужно поставить фильтр по дате создания, а в параметрах на php поставить дату прошлого понедельника, верно?
Извините за неграммотность, но, где именно на php надо задавать дату прошлого понедельника?
ответил 14 Май, 13 от Xepo6ouTc (260 баллов)
00 голосов
Добрый день!

Поставил перед вызовом компонента каталога код
Код
<? $GLOBALS['arrFilter'] = array(">PROPERTY_PERIOD" => "340"); ?>
 
, все работает.
"340" - это айпи элемента (недели) второго инфоблока.

Вопрос в следующем:

Как я писал выше, мне нужна фильтрация по неделям.
Я так подозреваю, что нужно:
1) взять текущую дату,
2) выщитать из нее дату предыдущего воскресенья/понедельника, и
3) сделать запрос, который возвращает айди элемента что отвечает за предыдущую неделю..

С 1,2 вроде понятно:
Код
<?php 
   $date = date('Y/m/d', strtotime('last sunday'));
   echo $date;
?> 
 
Что касается 3), как должен выглядеть такой запрос??

Если есть другие варианты, напишите, пожалуйста, и опишите как этого добиться.

Спасибо.
ответил 22 Июль, 13 от Xepo6ouTc (260 баллов)
00 голосов
Все никак не решу задачу.
Как связать
Код
<?php 
   $date = date('Y/m/d', strtotime('last sunday'));
   echo $date;
?> 
и свойство типа привязка к элементам в виде списка, а точнее с элементами второго инфоблока по их айди, чтоб фильтр выглядел примерно так:
Код
<? $GLOBALS['arrFilter'] = array(">PROPERTY_PERIOD" => "340"); ?> 
, но айди элементов второго инфоблока выбиралось само в зависимости от текущей даты.. то есть отображались элементы только текущей недели..

Буду очень признателен за любую помощь!
ответил 26 Окт, 13 от Xepo6ouTc (260 баллов)
00 голосов
Добрался до этого этапа, дальше проблема в дате. Если задаю дату так:
Код
$start_date = date('d.m.Y', strtotime('last monday'));  
$end_date = date('d.m.Y'); X 
$arSelect = Array("ID");
$arFilter = Array("IBLOCK_ID"=>"16", ">=PROPERTY_DATE_FROM"=>ConvertDateTime($start_date, "YYYY-MM-DD")." 00:00:00", 
"<PROPERTY_DATE_TO"=>ConvertDateTime($end_date, "YYYY-MM-DD")." 23:59:59", "ACTIVE"=>"Y");
$res = CIBlockElement::GetList(Array(), $arFilter, false, Array("nPageSize"=>20), $arSelect);
while($ob = $res->GetNextElement())
{
$arFields = $ob->GetFields();
/*print_r($arFields);*/
}
$GLOBALS['arrFilter'] = array("IBLOCK_ID"=>"14", "PROPERTY_PERIOD" => $arFields);
 
, то отображаются все элементы.
если же старт дейт и енд дейт задавать так:
Код
$start_date = "21.08.2011";
$end_date = "25.08.2011";
то фильтр работает.

Как мне задать дату на пхп в нужном для битрикса формате?
ответил 30 Янв, 14 от Xepo6ouTc (260 баллов)
00 голосов
исправил уже. косяк был в свойствах.
ответил 19 Май, 14 от Xepo6ouTc (260 баллов)

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

0 голосов
1 ответ
спросил 26 Апр, 16 от nwcpadme (120 баллов)
0 голосов
1 ответ
+1 голос
2 ответов
спросил 20 Июль, 14 от beatsspam (440 баллов)
0 голосов
1 ответ
спросил 06 Апр, 14 от Genifer (100 баллов)
0 голосов
3 ответов