2011-07-28 18 views
1

Symfonyのページネーションはかなり簡単でかなり良いです。しかし、私はテーブルに並べ替えで追加するための最善の方向を探しています。Symfony:ページ番号+ソート?

私の考えは、このように、並べ替え列、方向、現在のページ番号をURIで定義されていることです:各ページの

http://www.mysite.com/backend_dev.php/articles/author/asc/3/ 

そして、symfonyは、現在のソート列を決定するためのURIを使用していますページやページを変更したり、別の列で並べ替えるためにリンクをクリックすると、適切な場所に移動するように、これらのことを考慮に入れてすべてのページネーションリンクを操作します。

誰も私にこれと一緒に行くことができる他の指示がありますか?私はjQueryのtablesorterプラグインのシンプルさについては知っていますが、プラグインが動作するようにすべてを一度にロードしなければならないため、1000以上のレコードがあるときにはうんざりです。

+0

doctrineを使用している場合、これはあなたに興味があるかもしれません:http://www.doctrine-project.org/documentation/manual/1_2/zh/utilities:pagination – greg0ire

+0

ありがとう、ページネーションが処理されますが、そのページdoesnソートの提案はありません。 –

+0

Doctrine_Queryは、ルートから取得するパラメータに応じて変更できます。これは '/ articles /:sorting_column /:sorting_direction /:limit'のようにする必要があります – greg0ire

答えて

0

発電機管理者には興味深いアプローチがあります。下のようにURIからもソートされます。

これらのパラメータをリンク全体に持たないようにするには(リンクするのが苦労します)、ユーザーセッションに格納します。例を見てみましょう。あなたが持っているアクションで

public function executeIndex(sfWebRequest $request) 
    { 
    // sorting 
    if ($request->getParameter('sort') && $this->isValidSortColumn($request->getParameter('sort'))) 
    { 
     $this->setSort(array($request->getParameter('sort'), $request->getParameter('sort_type'))); 
    } 

    // pager 
    if ($request->getParameter('page')) 
    { 
     $this->setPage($request->getParameter('page')); 
    } 

    $this->pager = $this->getPager(); 
    $this->sort = $this->getSort(); 
    }  

//// more code 


    protected function setPage($page) 
    { 
    $this->getUser()->setAttribute('ef3Pedido.page', $page, 'admin_module'); 
    } 

    protected function getPage() 
    { 
    return $this->getUser()->getAttribute('ef3Pedido.page', 1, 'admin_module'); 
    } 

    protected function getSort() 
    { 
    if (null !== $sort = $this->getUser()->getAttribute('ef3Pedido.sort', null, 'admin_module')) 
    { 
     return $sort; 
    } 

    $this->setSort($this->configuration->getDefaultSort()); 

    return $this->getUser()->getAttribute('ef3Pedido.sort', null, 'admin_module'); 
    } 

    protected function setSort(array $sort) 
    { 
    if (null !== $sort[0] && null === $sort[1]) 
    { 
     $sort[1] = 'asc'; 
    } 

    $this->getUser()->setAttribute('ef3Pedido.sort', $sort, 'admin_module'); 
    } 

    protected function isValidSortColumn($column) 
    { 
    return Doctrine::getTable('Pedido')->hasColumn($column); 
    } 

これはエンドユーザーと開発者にとって素晴らしいアプローチです。

+0

これは面白いアプローチのように聞こえるが、すべてのリンクを通じてgetパラメータを持たずにこれをどのように達成するのだろうか?ページにアクセスすると、リンクに追加されていないgetパラメータはどのようにURIに入りますか? –

+0

あなたのコードを見ると、それはURIからソート&方向パラメータからパラメータを取得し、それをセッションに設定するようです。しかし、あなたはそのセッション値で何をしていますか?どのように彼らはあなたがリンクにすべてのパラメータを運ぶ必要がないのに役立ちますか? –

+0

ページャのクエリを設定する前に、関数getPage()とgetSort()を使用して、格納された値をセッションから取得します。その後、ページャで設定します。 –