Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php silverstripe 3博客下一篇和上一篇文章_Php_Silverstripe - Fatal编程技术网

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排序,因此我也需要此项。。。。