分页菜单列表

Paginated Menu List

如何创建子项的分页菜单列表(即 Menu(2))。我试过了

$list = Menu::get();

但 class 菜单不存在。最好是迭代 Menu(2) 并将其分配给 DataArray 吗?我也试过

$list = Page::get(); 

但它甚至没有显示任何页面?

在 SilverStripe 3.1 中,我们可以在我们的控制器中调用 $this->getMenu(2) 来获取给定级别(在本例中为级别 2)的导航菜单。

然后我们可以使用 PaginatedList 将该菜单变成分页列表。有一些关于如何创建分页列表的重要资源,例如:

  1. How to Create a Paginated List
  2. Lesson - Lists and Pagination

我们可以使用这些来创建一个 PaginatedMenu 函数,它将 return 我们的菜单项的分页列表:

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">&larr;</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">&rarr;</a>
            <% end_if %>
        </div>

        <p>Page $PaginatedMenu(2).CurrentPage of $PaginatedMenu(2).TotalPages</p>
    <% end_if %>
<% end_if %>