Как отобразить следующий и предыдущий элемент в CMS за октябрь

Я сделал пользовательский и простой модуль блога.

Я пытаюсь отобразить на одной странице статьи следующую и предыдущую статью.

Затем я попытался, с помощью я попал сюда, в модель

    public function onRun (){

     $this->articles = $this->getNextArticleAttribute();

     $this->articles = $this->getPreviousArticleAttribute();


   }

    public function getNextArticleAttribute() {

    return self::where('id','<', $this->id)->orderBy('id', 'ASC')->first();

}

    public function getPreviousArticleAttribute() {

    return self::where('id','>', $this->id)->orderBy('id', 'ASC')->first();

И на одной странице

            {% set previous = __SELF__.previousArticle() %}

            <div class="wrapper-small">
              <div id="single-pagination" class="blog-pagination fixed">
                <ul class="pagination clearfix">
                  <li class="prev"><a href="/news/{{previous.slug}}" class="pseudo-ajax">
                    <span class="text">Précédent</span>
                    <span class="page-image"><span><img src="{{previous.newsimage.path}}" alt="SEO Name" /></span></span>
                  </a>

              {% set next = __SELF__.nextArticle() %}

                  </li>
                  <li class="next "><a href="/news/{{next.slug}}" class="pseudo-ajax">
                    <span class="text">Suivant</span>
                    <span class="page-image"><span><img src="{{next.newsimage.path}}" alt="SEO Name" /></span></span>
                  </a></li>
                </ul>
              </div> <!-- END .single-pagination -->
            </div> <!-- END .wrapper-small -->

Так что я действительно не знаю, что мне не хватает...

1 ответ

Сначала вы должны объявить предыдущую статью и следующую статью как аксессоры в модели:

public function getNextArticleAttribute() {а такжеpublic function getPreviousArticleAttribute() {

И затем, из вашего экземпляра модели, вы можете получить следующую или предыдущую статью так:

$model = Article::find($id); // instantiate an article model
$model->nextArticle; // return a model article
$model->previousArticle; // both without parentesis

С другой стороны, я думаю, что вам не нужно звонить $post = Article::where('slug',$slug)->first(); в обеих функциях, потому что $this на самом деле является текущей статьей, поэтому следующая статья может выглядеть так:

public function getNextArticleAttribute() {
    return self::where('id','>', $this->id)->orderBy('id', 'ASC')->first();
}
Другие вопросы по тегам