Yii: Добавляем архив статей по месяцам
Добавляем в шаблон вызов виджета MonthlyArchives с архивом материалов (/protected/views/layouts/column3.php)
<?php $this->widget('MonthlyArchives', array( 'maxItems'=>Yii::app()->params['monthlyArchivesCount'], )); ?>
В компонентах создаем этот виджет /protected/components/MonthlyArchives.php
<?php class MonthlyArchives extends CWidget { public $title='Архив статей'; public $maxItems=10; public function findAllMaterialDate() { $yearmonth = array(); $materials = Material::model()->findRecentMaterials($this->maxItems); $count = 0; foreach ($materials as $material) { $ym = date('F Y', strtotime($material->create_time)); // December 2011 if (!isset($yearmonth[$ym])) { if (++$count > $this->maxItems) break; $yearmonth[$ym] = 1; } else { $yearmonth[$ym]++; // 2, 3, 4 } } return $yearmonth; } public function run() { $this->render('monthlyArchives'); } }
Добавляем вид компонента - /protected/components/views/monthlyArchives.php
<div id="materialsHeader"> <div id="materials" class="portlet-materials"> <h3>Архив статей</h3> <ul> <?php foreach ($this->findAllMaterialDate() as $month=>$val): ?> <li> <?php echo CHtml::link("$month ($val)", array('material/PostedInMonth', 'time'=>strtotime($month), 'pnc'=>'c')); ?> </li> <?php endforeach; ?> </ul> </div> <div id="materialsFooter"></div> </div>
Также необходимо добавить в контроллер материалов (статей) функцию
/** * Collect posts issued in specific month */ public function actionPostedInMonth() { $month = date('n', $_GET['time']); // 1 through 12 $year = date('Y', $_GET['time']); // 2011 if ($_GET['pnc'] == 'n') $month++; if ($_GET['pnc'] == 'p') $month--; $criteria = new CDbCriteria(array( 'condition' => 'status='.Material::STATUS_PUBLISHED.' AND create_time > :time1 AND create_time < :time2', 'order' => 'update_time DESC', 'params' => array( ':time1' => ($firstDay = date("Y-m-d", mktime(0,0,0,$month,1,$year))), ':time2' => date("Y-m-d", mktime(0,0,0,$month+1,1,$year))), )); $pages = new CPagination(Material::model()->count($criteria)); $pages->pageSize = Yii::app()->params['materialsPerPage']; $pages->applyLimit($criteria); $materials = Material::model()->findAll($criteria); $this->render('month',array( 'materials' => $materials, 'pages' => $pages, 'firstDay' => $firstDay, )); }
и в /protected/config/params.php количество статей отбираемых при составлении блока Архив статей по месяцам (отбираем пока все статьи, поэтому просто укажем число побольше; вы же можете убрать ограничение на выборку записей в функции findRecentMaterials в моделе, нам же это ограничение нужно, потому что эта же функция используется для списка статей в выводе на главной странице)
'monthlyArchivesCount'=>100000,
almix
Разработчик Loco, автор статей по веб-разработке на Yii, CodeIgniter, MODx и прочих инструментах. Создатель Team Sense.
Вы можете почитать все статьи от almix'а.
- 14 Разработка приложения на Yii. Урок 14: Выводим список категорий как новый виджет на сайте (29.04.2015)
- 13 Разработка приложения на Yii. Урок 13: Внедряем категории для статей. (29.04.2015)
- 12 Разработка приложения на Yii. Урок 12: Профилирование приложения, включаем кеширование. (20.01.2015)
- 11 Yiico. Видеокурс по разработке сайта на Yii. Урок 11: Отладка приложения, включаем журналирование. (20.01.2015)
- 10 Yiico. Видеокурс по разработке сайта на Yii. Урок 10: Если ваше приложение находится не в корневой папке, а во вложенной. (19.10.2014)
- 9 Разработка сайта на Yii с нуля. Урок 9. Выборка статей определённого автора. (13.08.2014)
- 8 Разработка сайта на Yii с нуля. Урок 8. Вызов в моделях функции, общей для них. Как избегать дублирования кода? (25.07.2014)
- 7 Разработка сайта на Yii с нуля. Урок 7. Изменение количества выводимых записей на странице в CGridView. Включаем сессии Yii. (04.09.2013)
- 6 Разработка сайта на Yii с нуля. Урок 6. Автоматич. отправка оповещений об одобренных комментариях на email автора комментария (11.08.2013)
- 5 Разработка сайта на Yii с нуля. Урок 5. Переименовываем blog в yiico. Изменяем "Home" в breadcrumbs. Включаем Gzip-сжатие. (09.08.2013)
- 4 Курс по Yii с нуля. Урок 4. Дорабатываем простую работу с пользователями: хранение пароля при редактировании пользователя. (13.04.2013)
- 3 Курс по Yii с нуля. Урок 3. Создаём новых пользователей. Организуем простую систему авторизации. Аутентификация, пароли, соли. (20.07.2014)
- 2 Yii + Git (github) на Mac. (24.03.2013)
- 2 Курс по Yii с нуля. Урок 2. Переносим и настраиваем Yii и проект нашего сайта на рабочем сервере. Избавляемся от index.php в url (09.07.2014)
- 1 Курс по Yii с нуля. Урок 1. Устанавливаем Yii на локальном компьютере. Заводим проект будущего сайта. (10.03.2013)
- 0 Composer – пакетный менеджер PHP. Что и как? (22.07.2014)
- 0 MySQL: проверить содержится ли значение в поле столбца (в столбце хранится строка значений через запятую) (22.05.2014)
- 0 Yii: Статичные страницы (создание, редактирование, удаление) (28.04.2014)
- 0 Yii: Расширение ECKEditor = Связка ckeditor + kcfinder (визуальный редактор с бесплатным файловым менеджером) (28.04.2014)
- 0 Yii: Bootstrap tabs, делаем активной вкладку на которую выполняется переход по ссылке (20.03.2014)
- 0 Yii: Доступ к атрибуту модели из файла шаблона (Вызов в шаблоне какого-либо атрибута модели). (17.02.2014)
- 0 Yii: Множественный автокомплит с помощью CJuiAutoComplete (автокомплит нескольких значений в одно поле) (07.02.2014)
- 0 Yii: Фотогалерея через поведение (доработка расширения imagesgallerymanager) (08.03.2016)
- 0 Yii: Установка и настройка Yii-app заготовки приложения от Crisu83 (09.03.2014)
- 0 Twitter Bootstrap Carousel Crossfade (09.09.2013)