Yii: Добавляем ссылки на предыдущую и следующую статьи в подробный вид статьи

Yii: Добавляем ссылки на предыдущую и следующую статьи в подробный вид статьи Для удобной навигации после текста статьи добавляем ссылки на предыдущую и следующую статьи.  Это даст читающему возможность перейти к следующей статье, не возвращаясь к разделу

В Yii  это можно реализовать следующим образом. В модель (например Material.php) добавим две дополнительные функции:

public function getUrlPrev()
	{
		$modelPrev = Material::model()->findBySql("Select * from tbl_material where create_time < '".$this->create_time."' Order By create_time desc");


		if($modelPrev!=null)
		echo '&laquo; Предыдущая статья<br />'.
        CHtml::link('&larr;&nbsp;'.CHtml::encode($modelPrev->title),'/materials/'.$modelPrev->id.'-'.$modelPrev->alias, $linkOptions=array('class'=>'prevmaterial'));
	}




	public function getUrlNext()
	{
		$modelNext = Material::model()->findBySql("Select * from tbl_material where create_time > '".$this->create_time."' Order By create_time");
		
		if($modelNext!=null)
		echo 'Следующая статья &raquo;<br />'.
        CHtml::link(CHtml::encode($modelNext->title).'&nbsp;&rarr;','/materials/'.$modelNext->id.'-'.$modelNext->alias, $linkOptions=array('class'=>'nextmaterial'));
		
	}

Запросы к базе необходимы с целью выбрать запись непосредственно перед или после текущей, мы также ориентируемся не на id,  а на поле create_time (ведь сортируем всё по дате, а кроме того в базе данных id устанавливается автоинкременто и при удалении какого-то материала будет несуществующий id, мы же избегаем ошибки при обращении к несуществующему id).

CHtml::encode($modelNext->title) - необходим, если в заголовке используются html-сущности, например вы пишете статью по html с использованием h1: Joomla 1.5 SEO: Добавляем тег <h1> в название статьи.

Далее в виде views/material/view обращаемся к этим функциям:

<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td width="49%" class="right" valign="top" align="right">
	<?php echo $model->urlPrev; ?>
</td>
<td width="2%"/>
<td width="49%" valign="top">
	<?php echo $model->urlNext; ?>
</td>
</tr>
</tbody>
</table>

Вот как это выглядит на нашем сайте:

 

 

 

Источник: loco.ru

almix
Разработчик Loco, автор статей по веб-разработке на Yii, CodeIgniter, MODx и прочих инструментах. Создатель Team Sense.

Вы можете почитать все статьи от almix'а.



Другие статьи по этой теме:

Комментарии (3)     Подпишитесь на RSS комментариев к этой статье.

3 комментариев

#274
Porcelanosa говорит:
January 28, 2012 at 12:54 am
А если у меня нет даты создания? По id способ универсальнее. Возможно надо сделать так select * from article where id<5 limit 1 И тогда и получим одно значение.
#275
Саша говорит:
January 29, 2012 at 11:15 am
Почему id<5, что значит 5?
#1398
richi говорит:
July 22, 2015 at 02:06 pm
if ($currentPage > 1) {
    Yii::app()->clientScript->registerLinkTag('prev', NULL,$this->createAbsoluteUrl(NULL, array_replace($_POST, array('page' => $currentPage - 1))));
}
if ($currentPage < $dataProvider->getPagination()->getPageCount()) {
    Yii::app()->clientScript->registerLinkTag('next', NULL,$this->createAbsoluteUrl(NULL, array_replace($_POST, array('page' => $currentPage + 1))));
}