Difference between #12 and #15 of How to display static pages in Yii with database content?

unchanged
Title
How to display static pages in Yii with database content?
unchanged
Category
Tutorials
unchanged
Tags
static pages, database
changed
Content
To extend further static pages as shown by Qiang
[http://www.yiiframework.com/wiki/22/how-to-display-static-pages-in-yii/](http://www.yiiframework.com/wiki/22/how-to-display-static-pages-in-yii/
"http://www.yiiframework.com/wiki/22/how-to-display-static-pages-in-yii/")
here're the steps to take:

1. Create a table `spage` (static page) in the databse with fields (id, url,
title, content)
2. Create model and CRUD for it via Gii
3. Add method in the model Spage.php

~~~
[php]
public function findByUrl($url)getSpageByUrl($url) {
	return $this->find('url=:url',array(':url'=>$url));
}
~~~

4.. In protected/components/SiteController.php add

~~~
[php]
public function actionPage() {
	if(empty($_GET['view']))
		$this->actionIndex();
	$model = Spage::model()->findByUrl($_GET['view']);
// if page is not found, then run a
controllerSpage::model()->getSpageByUrl($_GET['view']);
	if ($model === NULL)
		Yii::app()->runController($controller);		$this->actionIndex();
	else
		$this->render('pages/spage', array('model'=>$model));
}
~~~

5.. Create a view file: protected/views/site/spages/spage.php with content

~~~
[php]
<h1><?php echo $model->title?></h1>
<?php echo $model->content?>
~~~

6.. Create a page via the admin, e.g. with a `url` = "test" and sample
data for `title` and `content` and navigate to it http://example.com/page/test -
assuming that friendly URLs are turned on and index.php is hidden with config
urlManager(array('urlFormat'=>'path','showScriptName'=>false,))

Hint: To remove "page" from the URL a line could be added at the start
of the URL rules array: 
~~~
[php]
'<view:\w+>' => 'site/page', 
~~~
so the address could simply be http://example.com/test

'<view:[\w\-]+>'=>'site/page', now have priority over
'<controller:[\w\-]+>'=>'<controller>/index' and the other rules
with controller so if the static page is not found in the database, we will run
a controller with that name Yii::app()->runController($controller);

7.. Now if you use the CMenu widget, you will notice that the static pages do
not get highlighted on select. Here's a fix for that too. Create Menu.php file
in /protected/components/ with:
~~~
[php]
class Menu extends CMenu{
	protected function isItemActive($item,$route)
	{
		$pos=strpos(ltrim(Yii::app()->getRequest()->pathInfo,'/'),'/');
		$route = $pos===false ? $pathInfo : substr($pathInfo,0,$pos);
		return parent::isItemActive($item, $route);
	}
}
~~~
Replace widgets.CMenu with widgets.Menu in your layout file/s.

That's about it. Hope it's clear enough. Will update the article further to make
it better. Happy coding.

Update: Added controller execution on missing static page. Extended CMenu widget
to highlight active static pages in the menu.