Php silverstripe 3博客下一篇和上一篇文章
我正在尝试从当前查看的博客中返回下一篇(更新的)和上一篇(旧的) 我已在扩展上设置了此选项:Php silverstripe 3博客下一篇和上一篇文章,php,silverstripe,Php,Silverstripe,我正在尝试从当前查看的博客中返回下一篇(更新的)和上一篇(旧的) 我已在扩展上设置了此选项: <?php class BlogPost_Extension extends DataExtension { public function getBlogSibling($Mode = 'next') { if($Mode == 'next'){ $pages = BlogPost::get()->filter(array( 'ParentID'
<?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;
}
}
您需要扩展BlogPost_控制器,而不是BlogPost。然后添加以下函数
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 %>
当然,您可以将这些函数合并为一个。
您需要扩展BlogPost_控制器,而不是BlogPost。然后添加以下函数
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 %>
当然,您可以将这些函数合并为一个。仅使用一个排序号是不可靠的。想象一下,你有一些未发布的帖子,上面有你正在查询的编号?我认为你应该搜索>$sort
或<$sort
,然后返回第一个结果……仅仅按排序并不考虑博客文章的真实顺序,因为它们是按发布日期排序的,而不是按排序的。但是@galilee的想法是,你可以在站点树中按照你想要的顺序来设置它们的显示顺序,因此,排序顺序应该用于此目的,但对于一个博客,排序通常不是按排序-而是按文章发表的日期-博客中的所有其他内容(如最近的文章等)按PublishDate排序,所以我也需要这样做…仅使用一个排序编号是不可靠的。想象一下,你有一些未发布的帖子,上面有你正在查询的编号?我认为你应该搜索>$sort
或<$sort
,然后返回第一个结果……仅仅按排序并不考虑博客文章的真实顺序,因为它们是按发布日期排序的,而不是按排序的。但是@galilee的想法是,你可以在站点树中按照你想要的顺序来设置它们的显示顺序,因此,排序顺序应用于此目的,但对于博客,排序通常不是按排序-而是按文章发表日期-博客中的所有其他内容(如最近的帖子等)按PublishDate排序,因此我也需要此项。。。。