День добрый. Поскажите как можно добиться примерно следующего вида страницы с архивом новостей http://grtov.ru/ru/news/ Т.е. необходимо реализовать возможность вывода новостей помесячно. Как это правильно делается?
1) Создать у инфоблока новостей свойства "Год" и "Месяц". 2) При добавлении/редактировании элемента заполнять эти поля автоматически в файле, позволяющем модифицировать поля перед сохранением (пример такого файла есть здесь, но там использован довольно сложный подход, можно проще). 3) Для построения рубрикатора (списка годов и месяцей) использовать, скажем, CIBlockElement::GetList() с группировкой по свойствам "Год" и "Месяц" (смотрите описание параметра $arGroupBy).
Можно также сделать группами (группы первого уровня -- годы, второго уровня -- месяцы). Это наглядней, и рубрикатор строить проще, но автозаполнение будет несколько сложнее.
Dmitry Ban пишет: Можно также сделать группами (группы первого уровня -- годы, второго уровня -- месяцы). Это наглядней, и рубрикатор строить проще, но автозаполнение будет несколько сложнее.
Мм, а вот как выводить элементы из одного типа инфоблоков, но из разных групп вместе?
Борис Бритва пишет: День добрый. ... Т.е. необходимо реализовать возможность вывода новостей помесячно. Как это правильно делается?
Для одного инфоблока при условии что дата создания новости будет формат 11.02.2009 реализовал таким куском кода:
Код
$arrNews = CIBlockElement::GetList(array('ACTIVE_FROM'=>'DESC'),array('IBLOCK_TYPE'=>'news', 'IBLOCK_ID'=>19, 'ACTIVE'=>'Y', 'ACTIVE_DATE'=>'Y'));
while ($prodtype = $arrNews->GetNext()):
// записываем в масив года и месяцы в формате "год-месяц"
$arrYear[] = substr($prodtype['ACTIVE_FROM'],6,4).'-'.substr($prodtype['ACTIVE_FROM'],3,2);
endwhile;
//Убираем из масива повторяющиеся елементы
$resultYear = array_keys(array_count_values($arrYear));
// Выводим года а в нутри те месяцы за которые есть новости
for($i = 0; $i < sizeof($resultYear); $i++):
$cYear = substr($resultYear[$i],0,4);// Выделяем год
$cMon = substr($resultYear[$i],5,2); // Выделяем месяц
$cirMon = Array( // Кирилизируем месяцы
'01'=>'Январь',
'02'=>'Февраль',
'03'=>'Март',
'04'=>'Апрель',
'05'=>'Май',
'06'=>'Июнь',
'07'=>'Июль',
'08'=>'Август',
'09'=>'Сентябрь',
'10'=>'Октябрь',
'11'=>'Ноябрь',
'12'=>'Декабрь'
);
if ($cc != $cYear): // Если год ещё не повторялся то выводим его
$linkYear = $cYear; // Переприсваеваем для того что бы формировать ссылки
if ($i != 0) echo '</div>'; // Это мы закрываем по цыклу див с месяцами
echo '<b';
//Текущий год выделен другим цветом
if ($cYear != date("Y")) echo ' class="arch-year-link"';
echo '>'.$cYear.'</b><br /><div class="month-box">';
endif;
//Выводим месяцы со ссылками
echo '<a href="'.SITE_DIR.'news/archive/'.$linkYear.'/'.$cMon.'/">'.$cirMon[$cMon].'</a><br />';
$cc = $cYear; // Переприсваеваем для контроля повторения года
endfor;
echo '</div>'; // Закрывающий див месяцев (последний)