Я пытаюсь вернуть следующий (более новый) и предыдущий (более старый) BlogPost из того, что я сейчас просматриваю.silverstripe 3 blog next and previous post
Я поставил это на расширение:
<?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 %>
Но оба возвращают один и тот же результат, следующий (новая) BlogPost - Я м уверен, что его что-то глупо я с видом ....! :)
(SilverStripe 3.1.4/модуль блога ~ 2,4)
Просто использование одного номера сортировки не будет надежно работать. Представьте, что у вас есть неопубликованные сообщения с номером 'Sort', который вы запрашиваете? Я думаю, вам следует искать '> $ sort' или' <$ sort' и вернуть первый результат из этого ... – bummzack
Просто сортировка по сортировке не учитывает истинный порядок сообщений в блогах, поскольку они находятся в порядке публикации PublishDate , а не сортировка. – galilee
Но @galilee идея состоит в том, что вы задали порядок в SiteTree, как вы хотите, чтобы они отображались, поэтому для этого нужно использовать порядок сортировки. –