我正在为希望能够更新修改其内容的客户的网站工作。简介是允许他们编辑页面,但不创建或删除它们。对于网站,我决定使用cakePHP,因为我听说过好东西。
首先,快速解释一下我的设置。我有一个名为“内容”的表,我在其中存储每个页面的内容。该表有一个pid,一个varchar'title',一个varchar'slug'和一个longtext'body'。它们都是非常自我解释的,每个页面都有自己的行,而body将是一个简单的HTML转储。
我有两种情况,我遇到了麻烦。首先是设置主页。 Cake的默认值是基于home.ctp的页面,但这是静态的。目前我作为主页的页面位于localhost / alc / contents / view / 2。我知道这与路由有关,但是当我需要每个细节时,大多数示例都提供了一半的解决方案:P
第二个问题是页面的slu ..每个页面当前都在/ contents / view / id 下,我希望这是数据库中的slug。每次我尝试更改它(即修改我的索引中的视图链接),我得到一个错误而不是页面的内容。
任何有关这方面的帮助都会受到赞赏,因为有两件事我似乎无法正确掌握。谢谢!
查看该网站答案 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。