2015-05-26 79 views
1

對於搜索引擎優化的目的,我需要從URL中刪除第一個頁碼。即我有以下內容:從URL中刪除Yii2分頁中的第一頁數

example.com/pages/view/1example.com/pages/view這兩個URL指向視圖操作的相同內容。我想從網址中的1中免費分頁。即第一頁鏈接和第一頁應鏈接到pages/view

我試圖解決類似以下的$分頁對象:

$pages = new Pagination(['totalCount' => $books['booksCount'], 'pageParam' => 'start', 'defaultPageSize' => 10,]); 
     $pagingLinks = $pages->getLinks(); 
     $pagingLinks['first'] = '/'; 
     $pages->links = $pagingLinks; 

然而,最後一行造成錯誤:

Setting read-only property: yii\data\Pagination::links

所以我不得不修改鏈接屬性的問題。有沒有其他解決方案來完成這項任務?!

回答

6

According to docs你應該通過它在分頁構造

$pages = new Pagination([ 
    'totalCount' => $books['booksCount'], 
    'pageParam' => 'start', 
    'defaultPageSize' => 10, 
    'forcePageParam' => false, 
]); 
0

以上回答可以作品直接用Pagination但仍然是一個問題,如果它是從另一小窗口使用,如ListView控件設置yii\data\Pagination::forcePageParam爲false。

我發現從Yii2存儲庫comment on an issue report在GitHub上

解決方案中的解決方案只是在config/web.php確定合適的路由。假設我們有一個名爲Suras的控制器,我們在其動作視圖view上使用ListView小部件。因此,將規則數組與defaults的值設爲'page' => 1將會阻止將page參數添加到第一頁的鏈接的URL。還要注意,第一個規則'view/<id:\d+>/1' => 'Error404',是爲了防止任何訪問使用page=1參數的第一頁,例如試圖訪問mysite.com/view/20/1將調用404錯誤,因爲沒有控制器被稱爲Error404

'urlManager' => [ 
      'enablePrettyUrl' => true, 
      'showScriptName' => false, 
      'rules' => [     
       'view/<id:\d+>/1' => 'Error404', 
       ['pattern' => 'view/<id:\d+>/<page:\d+>', 'route' => 'suras/view', 'defaults' => ['page' => 1]], 
       'view/<id:\d+>/<page:\d+>' => 'suras/view', 
       'view/<id:\d+>' => 'suras/view', 
      ], 
     ], 


],