2016-11-08 2 views
0

나는 현재보고있는 BlogPost 다음 (이전) 및 이전 (이전) BlogPost를 반환하려고합니다.silverstripe 3 blog 다음 및 이전 게시물

나는 확장에이 설정 한 :

<?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 %> 

그러나 모두는, 다음 (이상) 블로그 게시물을 같은 결과를 반환 - 내가 ' m 확실히 나는 .... 내려다 보이는거야 바보는 무엇인가! :)

(silverstripe 3.1.4/블로그 모듈 ~ 2.4)

답변

1

Another (better) solution, found by munomono


당신은 블로그 게시물을 BlogPost_Controller를 확장하지 않도록해야합니다. 템플릿 물론

<% 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 %> 

에서 다음과 같은 기능

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; 
    } 
    } 

를 추가하는 것보다 하나에 이러한 기능을 결합 할 수 있습니다.

+1

단일 정렬 번호를 사용하면 안정적으로 작동하지 않습니다. 쿼리중인 '정렬'번호가있는 게시되지 않은 게시물이 있다고 가정 해보십시오. 나는> $ sort' 또는'$ sort'을 검색하여 그 결과를 반환해야한다고 생각합니다. – bummzack

+0

Sort를 정렬하는 것만으로 블로그 게시물의 실제 순서가 고려되지 않습니다. 블로그 게시물의 순서는 PublishDate , Sort가 아닙니다. – galilee

+0

그러나 @galilee는 사이트 트리를 표시 할 때 순서를 설정하므로 정렬 순서가이 용도로 사용되어야합니다. –