第一次使用堆栈溢出的用户,所以如果我发帖不正确,请告诉我。所以我的网站是在cakePHP 3.0中开发的。我目前在网站上有文章,希望用户可以在文章之间切换。我应该提到我使用了get()方法,但是由于我的控制器的编写方式,我需要使用带有条件的选择查询。我可以创建一篇文章,直到以后再发布。因此,该代码应该忽略所有尚未发布给用户的文章,以使用户看不到那些文章。
一般来说,使用PHP的超级新手更不用说CakePHP MVC框架了,所以请耐心:)
在公开视图功能中的控制器中,我有以下内容:
//get story id for next and previous buttons
$todays_date = date('Y-m-d H:i:s');
$this->loadModel('Story');
$storyID = $story->id;
$storyNextID = $storyID + 1;
$storyPreviousID = $storyID - 1;
$storyNext = $this->Story->find()->select('Story.id')->where(['Story.pub_date <' => $todays_date])->first();
$this->set('storyNext', $storyNext);
$storyPrevious = $this->Story->find()->select('Story.id')->where(['Story.pub_date <' => $todays_date])->first();
$this->set('storyPrevious', $storyPrevious);
在我的view.ctp文件中,我有以下内容:
<div class="next row" align="center">
<?php
if(!empty($storyPrevious)) {
echo '<a class="btn btn-secondary" style="width:50%" href="' .BASE_URL. '/' .$storyPrevious->slug. '" role="button">Previous Story</a>';
}
if(!empty($storyNext)) {
echo '<a class="btn btn-secondary" style="width:50%" href="' .BASE_URL. '/' .$storyNext->slug. '" role="button">Next Story</a>';
}
?>
</div>
我觉得自己已经非常接近了,因为我在开发站点上不再遇到任何错误。但是链接只是将我发送到我网站的首页。
感谢您的帮助!
答案 0 :(得分:1)
您可能需要在代码中进行很多改进**。但是,将您重定向到主页的主要原因是,您只是选择Story的ID,但是在您看来,您需要回显此提示。
因此,当您回显$storyPrevious->slug
时,PHP返回一个空字符串
所以在控制器中也选择了弹头
$this->Story->find()
->select(['id', 'slug')
->where(['Story.pub_date <' => $todays_date])
->first();
**,例如在您的视图中使用助手和使用Cakephp命名约定
答案 1 :(得分:0)
感谢大家的投入。真的很有帮助。直到现在,我还没有人能真正得到反馈。我接受了上述输入,并对逻辑进行了重新编码。我不确定为什么要尝试使用这么多的变量。我还通过挖掘发现,有人写了类似的东西,他们称它为邻居表。我结合了您,我的以及他们的创造。看起来它现在可以在我的开发人员网站上正常工作,并且如果我将其发布时发生变化,病情也会更新我的答案。
在我的StoryController中:
$todays_date = date('Y-m-d H:i:s');
$this->loadModel('Story');
$id = $story->id;
$storyNext = $this->Story->find()
->select(['id', 'slug'])
->order(['id' => 'ASC'])
->where(['id >' => $id, 'Story.pub_date <' => $todays_date])
->first();
$this->set('storyNext', $storyNext);
$storyPrevious = $this->Story->find()
->select(['id', 'slug'])
->order(['id' => 'DESC'])
->where(['id <' => $id, 'Story.pub_date <' => $todays_date])
->first();
$this->set('storyPrevious', $storyPrevious);
在我看来。ctp:
<?php
if(!empty($storyPrevious)) {
echo '<a href="' .BASE_URL. '/' .$storyPrevious->slug.'">Previous Story</a>';
}
if(!empty($storyNext)) {
echo '<a href="' .BASE_URL. '/' .$storyNext->slug.'">Next Story</a>';
}
?>