How to display static pages

How can I display static pages. Some static pages are in "views/site/pages" folder and some are in "views/site" folder.

URL Manager settings are :




'urlManager'=>array(

			'urlFormat'=> 'path',

                        'showScriptName'=> false,

			'rules'=>array(

				'<controller:\w+>/<id:\d+>'=>'<controller>/view',

				'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',

				'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',

                                '<view:\w+>'=>'site/page',

			),

		),



Lets suppose I want to open "contact.php" web page by typing following url in address bar.

http://localhost/main/yii/wf/contact

When I try to open it, following error is shown.

"The requested view "contact" was not found."

My default controller "SiteController.php" code is as follows:




class SiteController extends Controller

{

	/**

	 * Declares class-based actions.

	 */

	public function actions()

	{

		return array(

			// captcha action renders the CAPTCHA image displayed on the contact page

			'captcha'=>array(

				'class'=>'CCaptchaAction',

				'backColor'=>0xFFFFFF,

			),

			// page action renders "static" pages stored under 'protected/views/site/pages'

			// They can be accessed via: index.php?r=site/page&view=FileName

			'page'=>array(

				'class'=>'CViewAction',

			),

		);

	}


	/**

	 * This is the default 'index' action that is invoked

	 * when an action is not explicitly requested by users.

	 */

	public function actionIndex()

	{

		// renders the view file 'protected/views/site/index.php'

		// using the default layout 'protected/views/layouts/main.php'

		$this->render('index');

	}


	/**

	 * This is the action to handle external exceptions.

	 */

	public function actionError()

	{

	    if($error=Yii::app()->errorHandler->error)

	    {

	    	if(Yii::app()->request->isAjaxRequest)

	    		echo $error['message'];

	    	else

	        	$this->render('error', $error);

	    }

	}


	/**

	 * Displays the contact page

	 */

	public function actionContact()

	{

		$model=new ContactForm;

		if(isset($_POST['ContactForm']))

		{

			$model->attributes=$_POST['ContactForm'];

			if($model->validate())

			{

				$headers="From: {$model->email}\r\nReply-To: {$model->email}";

				mail(Yii::app()->params['adminEmail'],$model->subject,$model->body,$headers);

				Yii::app()->user->setFlash('contact','Thank you for contacting us. We will respond to you as soon as possible.');

				$this->refresh();

			}

		}

		$this->render('contact',array('model'=>$model));

	}


	/**

	 * Displays the login page

	 */

	public function actionLogin()

	{

		$model=new LoginForm;


		// if it is ajax validation request

		if(isset($_POST['ajax']) && $_POST['ajax']==='login-form')

		{

			echo CActiveForm::validate($model);

			Yii::app()->end();

		}


		// collect user input data

		if(isset($_POST['LoginForm']))

		{

			$model->attributes=$_POST['LoginForm'];

			// validate user input and redirect to the previous page if valid

			if($model->validate() && $model->login())

				$this->redirect(Yii::app()->user->returnUrl);

		}

		// display the login form

		$this->render('login',array('model'=>$model));

	}


	/**

	 * Logs out the current user and redirect to homepage.

	 */

	public function actionLogout()

	{

		Yii::app()->user->logout();

		$this->redirect(Yii::app()->homeUrl);

	}


        /*

         * Privacy Policy static web page

         */

        public function actionPrivacy(){

           	$this->render('privacy');

        }


}



Can some one guide me in this regards

Thanks in advance

Contact is not a static page… it has a form and it needs the siteController for validation so it’s page by default should be in protected/views/site/contact.php

views/site/pages - is for static pages like "about us"

CViewAction cannot load static pages from 2 different locations. Should you want to maintain the 2 location strategy you need to create your own version of CViewAction and then redesign the resolveView(…) method.




class MyViewAction extends CViewAction

{

  protected function resolveView($viewPath)

  {

    ...  // create your implementation here like:

    $viewPath = parent::resolveView($viewPath)

    if(!$viewPath)

    {

      // look elsewhere

    }

  }

}



see manual:

http://www.yiiframework.com/doc/api/CViewAction#resolveView-detail

Then how Contact page would be displayed (if it is in views/site/ folder)

Thanks in advance

In your SiteController there is a actionContact which renders and processes the contact form.

The fields on the form are managed by the model ContactForm (it’s in the models directory) and it is displayed by the command $this->render(…);