如何创建子节点的分页菜单列表(即Menu(2)
)。我试过了
$list = Menu::get();
但类菜单不存在。是否最好迭代Menu(2)并将其分配给DataArray?我也试过
$list = Page::get();
但它甚至不显示任何页面?
答案 0 :(得分:2)
在SilverStripe 3.1中,我们可以在控制器中调用$this->getMenu(2)
来获取给定级别的导航菜单(在这种情况下为2级)。
然后我们可以使用PaginatedList
将该菜单转换为分页列表。有关如何创建分页列表的一些很好的资源,例如:
我们可以使用它们创建一个PaginatedMenu函数,它将返回菜单项的分页列表:
class Page_Controller extends ContentController {
public function PaginatedMenu($level = 1) {
$paginatedMenu = PaginatedList::create(
$this->getMenu($level),
$this->request
);
$paginatedMenu->setPageLength(5);
$paginatedMenu->setPaginationGetVar('menu-start');
return $paginatedMenu;
}
}
setPageLength
允许我们设置每页显示的项目数。
以下是如何在我们的模板中使用它的示例:
<% if $PaginatedMenu(2) %>
<ul class="paginatedMenu">
<% loop $PaginatedMenu(2) %>
<li class="$LinkingMode"><a href="$Link">$MenuTitle</a></li>
<% end_loop %>
</ul>
<% if $PaginatedMenu(2).MoreThanOnePage %>
<div class="pagination">
<% if $PaginatedMenu(2).NotFirstPage %>
<a href="$PaginatedMenu(2).PrevLink" class="prev" aria-label="View the previous page">←</a>
<% end_if %>
<span>
<% loop $PaginatedMenu(2).PaginationSummary %>
<% if $CurrentBool %>
$PageNum
<% else_if $PageNum %>
<a href="$Link" class="pageLink" aria-label="View page number $PageNum">$PageNum</a>
<% end_if %>
<% end_loop %>
</span>
<% if $PaginatedMenu(2).NotLastPage %>
<a href="$PaginatedMenu(2).NextLink" class="next" aria-label="View the next page">→</a>
<% end_if %>
</div>
<p>Page $PaginatedMenu(2).CurrentPage of $PaginatedMenu(2).TotalPages</p>
<% end_if %>
<% end_if %>