2016-11-08 85 views
0

我想從我目前正在查看的一個返回下一個(較新)和以前(較舊)的BlogPost。silverstripe 3博客的下一個和以前的帖子

我已經擴展此設置:

<?php 
class BlogPost_Extension extends DataExtension { 

public function getBlogSibling($Mode = 'next') { 
    if($Mode == 'next'){ 
     $pages = BlogPost::get()->filter(array(
     'ParentID' => $this->owner->ParentID, 
     'PublishDate:GreaterThan' => $this->owner->PublishDate 
     ))->Sort('PublishDate ASC')->limit(1); 
    } elseif($Mode == 'prev'){ 
     $pages = BlogPost::get()->filter(array(
     'ParentID' => $this->owner->ParentID, 
     'PublishDate:LessThan' => $this->owner->PublishDate 
     ))->Sort('PublishDate DESC')->limit(1); 
    } 

    if ($pages->count()) { 
     return $pages->First(); 
    } 
    return false; 
} 

} 

,並在模板中使用此:

<% if $BlogSibling('next') %><a href="$BlogSibling('next').Link">newer story</a><% end_if %> 
<% if $BlogSibling('prev') %><a href="$BlogSibling('prev').Link">older story</a><% end_if %> 

但都返回相同的結果,下一個(新)的博文 - 我嗯,肯定它的東西愚蠢我俯瞰....!:)

(silverstripe 3.1.4 /博客模塊〜2.4)

回答

1

Another (better) solution, found by munomono


您需要延長BlogPost_Controller,而不是博客帖子。不是增加了以下功能

public function PrevBlogPost() { 
    $sort = $this->owner->Sort; 
    $prevSort = $sort - 1; 

    if($prev = $this->owner->Parent()->getBlogPosts()->find('Sort', $prevSort)) { 
     return $prev; 
    } 
    } 

    public function NextBlogPost() { 
    $sort = $this->owner->Sort; 
    $nextSort = $sort + 1; 

    if($next = $this->owner->Parent()->getBlogPosts()->find('Sort', $nextSort)) { 
     return $next; 
    } 
    } 

在模板

<% if $PrevBlogPost %> 
    <a href="$PrevBlogPost.Link" title="$PrevBlogPost.Title"> 
     <i class="fa fa-angle-left"></i>vorheriger Beitrag 
    </a> 
    <% end_if %> 
    <% if $NextBlogPost %> 
    <a href="$NextBlogPost.Link" title="$NextBlogPost.Title"> 
     nächster Beitrag<i class="fa fa-angle-right"></i> 
    </a> 
    <% end_if %> 

你當然可以這些功能合二爲一。

+1

只使用一個排序號碼不會可靠地工作。想象一下,你有一些未發表的帖子有你正在查詢的「排序」號碼?我想你應該搜索'> $ sort'或'<$ sort'並返回第一個結果... – bummzack

+0

只需對Sort進行排序並不考慮博客文章的真實順序,因爲它們按照PublishDate ,而不是排序。 – galilee

+0

但@galilee的想法是,你在SiteTree中設置訂單,因爲你希望它們顯示,所以排序順序應該用於此目的 –

相關問題