2015-10-14 32 views
0

我如何创建儿童分页菜单列表(即Menu(2))。我试过分页菜单列表

$list = Menu::get(); 

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

$list = Page::get(); 

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

+0

在哪里silverstripe大师,需要利用这样的服务。 – SIlverstripeNewbie

+0

@ 3dgoo非常感谢,感谢您的帮助, – SIlverstripeNewbie

回答

2

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

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

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

我们可以利用这些来创建一个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 %> 
+0

您是最好的或至少是最好的银条纹大师之一。非常感谢你! – SIlverstripeNewbie