Есть таблица tags с полями id, name.
Есть таблица articles c полем id_tag. В котором хранятся id-ки тегов,через запятую(1,2,3,4....).
Контроллер:
Код: Выделить всё
class ArticlesController extends Controller{
public function actionIndex()
{
//Статья
if(!empty($_GET['id'])){
$criteria=new CDbCriteria(array(
'condition'=>'status=2',
));
$articles = Articles::model()->with('author','tags')->findByPk($_GET['id']);
if(!empty($articles)){
$this->render('article', array(
'article'=>$articles,
));
}
else throw new CHttpException(404,'Запрашиваемая страница не существует.');
}
else if(!empty($_GET['cat'])){
// критерии выборки из таблицы
$criteria=new CDbCriteria(array(
'condition'=>'status='.Articles::STATUS_PUBLISHED,
'condition'=>'id_cat='.$_GET['cat'],
'order'=>'t.position',
));
// создаем пагинатор
$pagination = new CPagination(Articles::model()->count($criteria));
$pagination->pageSize = 3;
// добавляем в критерии выборки LIMIT и OFFSET
$pagination->applyLimit($criteria);
$articles = Articles::model()->with('author','categories')->findAll($criteria);
if(!empty($articles)){
$this->render('articles', array(
'articles'=>$articles,
'pagination'=>$pagination,
));
}
else throw new CHttpException(404,'Запрашиваемая страница не существует.');
}
//Статьи
else{
// критерии выборки из таблицы
$criteria=new CDbCriteria(array(
'condition'=>'status='.Articles::STATUS_PUBLISHED,
'order'=>'t.position',
));
// создаем пагинатор
$pagination = new CPagination(Articles::model()->count($criteria));
$pagination->pageSize = 4;
// добавляем в критерии выборки LIMIT и OFFSET
$pagination->applyLimit($criteria);
$articles = Articles::model()->with('author')->findAll($criteria);
$this->render('articles', array(
'articles'=>$articles,
'pagination'=>$pagination,
));
}
}
}