SilverStripe 3-下一个使用祖父母的兄弟姐妹
我有一个网站,我希望能够从我当前所在的SilverStripe 3-下一个使用祖父母的兄弟姐妹,silverstripe,Silverstripe,我有一个网站,我希望能够从我当前所在的ProductPage链接到下一个ProductPage。我可以为直系兄弟姐妹这样做,但一旦我到达该集合的末尾,我想链接到下一个ProductRange第一个产品。结构如下: ProductArea ProductCategory - ProductRange - ProductPage - ProductPage - ProductRange - ProductPa
ProductPage
链接到下一个ProductPage
。我可以为直系兄弟姐妹这样做,但一旦我到达该集合的末尾,我想链接到下一个ProductRange
第一个产品。结构如下:
ProductArea
ProductCategory
- ProductRange
- ProductPage
- ProductPage
- ProductRange
- ProductPage
- ProductPage
ProductCategory
- ProductRange
- ProductPage
- ProductPage
- ProductRange
- ProductPage
- ProductPage
因此,如果没有直接的兄弟姐妹,我需要按顺序返回下一个产品页面
我将此用于直接兄弟姐妹:
function NextProduct() {
$pages = ProductPage::get()->filter(array(
'ParentID' => $this->ParentID,
'Sort:GreaterThan' => $this->Sort
))->Sort('Sort');
if ($pages) {
return $pages->First();
}
}
如何让它在下一个级别工作?这里有一种方法。首先,我们试图找到下一个兄弟姐妹。如果下一个兄弟不存在,我们将获得下一个父页面并获得他们的第一个子页面
function NextProduct() {
$pages = ProductPage::get()->filter(array(
'ParentID' => $this->ParentID,
'Sort:GreaterThan' => $this->Sort
))->Sort('Sort')->limit(1);
if ($pages->count()) {
return $pages->First();
}
$parent = $this->parent();
$parentSiblings = ProductRange::get()->filter(array(
'ParentID' => $parent->ParentID,
'Sort:GreaterThan' => $parent->Sort
))->Sort('Sort');
foreach ($parentSiblings as $parentSibling) {
$pages = ProductPage::get()->filter(array(
'ParentID' => $parentSibling->ID
))->Sort('Sort')->limit(1);
if ($pages->count()) {
return $pages->First();
}
}
return false;
}
这是一个以前的产品
功能:
function PreviousProduct() {
$pages = ProductPage::get()->filter(array(
'ParentID' => $this->ParentID,
'Sort:LessThan' => $this->Sort
))->Sort('Sort')->reverse()->limit(1);
if ($pages->count()) {
return $pages->First();
}
$parent = $this->parent();
$parentSiblings = ProductRange::get()->filter(array(
'ParentID' => $parent->ParentID,
'Sort:LessThan' => $parent->Sort
))->Sort('Sort')->reverse();
foreach ($parentSiblings as $parentSibling) {
$pages = ProductPage::get()->filter(array(
'ParentID' => $parentSibling->ID
))->Sort('Sort')->reverse()->limit(1);
if ($pages->count()) {
return $pages->First();
}
}
return false;
}