How to create Static pages in cakephp?
Well its quite simple to create static pages in cakephp but what's the better approach? Ya sure there are two possible ways, as I think. The one is Just static content to a static page and other way is creating a simple ctp file and serving all contents with database(may be also used static with if else type) . The second approach is better because its has only one ctp file and serving to all contents. So we go here.
Step1: Change pagesController
class PagesController extends AppController {
function beforeFilter() {
$this->Auth->allow('content');//to allow to be visible for non-logged in users, if you are using login system
parent::beforeFilter();
}
public function content($id = null, $layout = null, $theme=null) {
if ($layout) $this->layout = $layout;//if you are using mulitple layouts and themes and want to change it dynamicaly
if ($theme) $this->theme = $theme;
$this->set('content', $this->Page->find('first', array('conditions' => array('Page.id' => $id))));
$this->Page->id= $id;
$this->set('title_for_layout', $this->Page->field('title'));
}
}
Step 2: Add a table `pages` with fields you need like id, title, content, image, theme,layout etc.
Step 3: In View/Pages add content.ctp
<div class="row innerPage">
<div class="col-lg-12 col-md-12 col-sm-12">
<div class="row userInfo">
<div class="col-xs-12 col-sm-12">
<h1 class=" text-left border-title"> <?php echo $content['Page']['title'];?> </h1>
<div class="w100 clearfix">
<?php echo $content['Page']['content'];?>
</div>
</div>
</div>
</div>
</div>
However you can change html according to your need, I prefer bootstrap framework.
Then you can use it in your view file as
<?php echo $this->html->link("Terms of Services", array("controller" => "pages", "action" => "content", 5), array("class" => 'themeprimary','target'=>'_blank')) ?>
This will generate a link yoursite/pages/content/5. 5 is the id of row you want to show the details of.
If you want your link like yoursite/terms then you need one more step to go. In routes.php add this line
Router::connect('/terms', array('controller' => 'pages', 'action' => 'content',5));
In case you want to change your theme/layout dynamically for different pages like contact us, about us etc pass layout and theme name in connect
Router::connect('/terms', array('controller' => 'pages', 'action' => 'content',5, 'your_layout_name','your_theme_name'));
Now change your link code
<?php echo $this->html->link("Terms of Services", array("controller" => "", "action" => "terms"), array("class" => 'themeprimary','target'=>'_blank')) ?>
Here routes.php will automatically manages the requests to correct controller and action.
Method 2: You simply need to display content without any database
Step1 : Just create a about.ctp under View/Pages and put the content you want to display
Step 2: Change your pagesController. add a method about
public function about($layout = null) {
$this->set('title_for_layout', 'About');
}
Thats it.
No comments:
Post a Comment