分页菜单列表

时间:2015-10-14 16:38:54

标签: php silverstripe

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

$list = Menu::get();

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

$list = Page::get(); 

但它甚至不显示任何页面?

1 个答案:

答案 0 :(得分:2)

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

然后我们可以使用PaginatedList将该菜单转换为分页列表。有关如何创建分页列表的一些很好的资源,例如:

  1. How to Create a Paginated List
  2. Lesson - Lists and Pagination
  3. 我们可以使用它们创建一个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">&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 %>