如何在php中添加上一个和下一个按钮?

时间:2019-01-14 16:56:34

标签: php cakephp cakephp-3.0

第一次使用堆栈溢出的用户,所以如果我发帖不正确,请告诉我。所以我的网站是在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>

我觉得自己已经非常接近了,因为我在开发站点上不再遇到任何错误。但是链接只是将我发送到我网站的首页。

感谢您的帮助!

2 个答案:

答案 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>';
    }
    ?>