存根,cakePHP中的动态主页

时间:2010-10-19 23:20:40

标签: php cakephp cakephp-1.3 slug

我正在为希望能够更新修改其内容的客户的网站工作。简介是允许他们编辑页面,但不创建或删除它们。对于网站,我决定使用cakePHP,因为我听说过好东西。

首先,快速解释一下我的设置。我有一个名为“内容”的表,我在其中存储每个页面的内容。该表有一个pid,一个varchar'title',一个varchar'slug'和一个longtext'body'。它们都是非常自我解释的,每个页面都有自己的行,而body将是一个简单的HTML转储。

我有两种情况,我遇到了麻烦。首先是设置主页。 Cake的默认值是基于home.ctp的页面,但这是静态的。目前我作为主页的页面位于localhost / alc / contents / view / 2。我知道这与路由有关,但是当我需要每个细节时,大多数示例都提供了一半的解决方案:P

第二个问题是页面的slu ..每个页面当前都在/ contents / view / id 下,我希望这是数据库中的slug。每次我尝试更改它(即修改我的索引中的视图链接),我得到一个错误而不是页面的内容。

任何有关这方面的帮助都会受到赞赏,因为有两件事我似乎无法正确掌握。谢谢!

顺便说一句,您可以在http://www.roberttilt.name/web-dev/ALC_proto/

查看该网站

1 个答案:

答案 0 :(得分:0)

对于第一个问题,您需要打开/app/config/routes.php并更改主页的行。即:

Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));

需要成为

Router::connect('/*', array('controller' => 'contents', 'action' => 'view'));

在您的控制器文件/app/controllers/contents_controller.php中,转到操作视图并将其更改为接受空ID,即

function view($id = null){
   if($id == null){ //Load the default home page
      $this->find('first', array('conditions'=>array('default'=>1)));
   } else {
      //load the 
      $this->find('first', array('conditions'=>array('OR'=>array('slug'=>$id, 'id'=>$id))));
   }
   .....
}

这样,如果未提供id或slug,则表示您正在加载主页。如果其中一个已加载,只需使用它来加载所需网页的内容。

您的链接如下:

$this->Html->link('About', array('controller'=>'contents', 'action'=>'view', $slug_var));

该链接将转换为

<a href="/your-nice-slug">About</a>

您可能需要查看Cookbook