0

我正在为希望能够更新修改其内容的客户开发一个网站。简介是允许他们编辑页面,但不能创建或删除它们。对于该站点,我决定使用 cakePHP,因为我听说了一些好消息。

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

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

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

对此的任何帮助将不胜感激,因为有两件事我似乎无法正确掌握。谢谢!

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

4

1 回答 1

0

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

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

于 2010-10-20T08:18:44.913 回答