Как я могу добавить предыдущие и следующие кнопки в php? - PullRequest
0 голосов
/ 14 января 2019

При первом переполнении стека, поэтому, если я пишу неправильно, пожалуйста, дайте мне знать. Так что мой сайт разработан в cakePHP 3.0. В настоящее время у меня есть статьи на сайте, и я хотел бы, чтобы пользователи могли переходить от статьи к статье. Я должен упомянуть, что у меня это работало с методом get (), но из-за того, как написан мой контроллер, мне нужно использовать запрос select с условием. Я могу создать статью и не публиковать ее до будущей даты. Так что этот код должен игнорировать все, что еще не было опубликовано, чтобы пользователи не видели эти статьи.

Супер новичок с 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);

И, на мой взгляд, у меня есть:

<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 голосов
/ 15 января 2019

Спасибо за вклад всем. Это было действительно полезно. До сих пор мне не с кем по-настоящему получить обратную связь. Я взял приведенные выше данные и немного переписал мою логику. Я не уверен, почему я пытался использовать так много переменных. Я также нашел в некоторых раскопках кого-то, кто написал что-то подобное, они назвали это соседней таблицей. Я объединил твои, мои и их, чтобы создать это. Похоже, на данный момент он работает на моем сайте разработчика, и я обновлю свой ответ, если он изменится, когда я его добавлю в эфир.

В моем 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>';
    }
    ?>
0 голосов
/ 15 января 2019

есть много вещей, которые вы можете улучшить в своем коде **. Но основная причина, по которой вы перенаправлены на свою главную страницу, заключается в том, что вы просто выбираете идентификатор своей истории, но затем, по вашему мнению, вам нужно повторить слаг.

Так, когда вы повторяете $storyPrevious->slug PHP возвращает пустую строку

Таким образом, в контроллере выберите слаг тоже

$this->Story->find()
    ->select(['id', 'slug')
    ->where(['Story.pub_date <' => $todays_date])
    ->first();

**, таких как использование помощников в вашем представлении и использование соглашений об именах Cakephp

...