検索クエリーをかけたものをなおsortする(paginatorで)

前準備

ジャっとprojectつくっときます。

% cake bake project querysort 

テーブルも適当に

DROP TABLE IF EXISTS items;
CREATE TABLE items (
          id INT auto_increment PRIMARY KEY
        , item VARCHAR(255)
) ENGINE=InnoDB DEFAULT CHARSET utf8;

焼きます

cake bakeとかして適当にdbのコネクションつくります。

その後

% cake bake all

などなど

とりあえずアクセスしてなんかデータほうりこんでおきます。

http://server/project/items/

こんなんで

クエリフォームをつくる

ここはgetで書いていく。

 total, starting on record %start%, ending on %end%', true)
));
?></p>
 
-------------> この辺から追記
<div>
<?php echo $form->create(array(
    'url' => array('action' => 'index'),
    'type' => 'get',
    ))?>
<?php
  echo $form->input('query');
  echo $form->end(__('Search', true));
?>
</div>

クエリを受け、検索する

現状

items_controller.php

  function index() {
    $this->Item->recursive = 0;
    $this->set('items', $this->paginate());
  }

こんなんなので、ここに処理を書き足していきます。

ガシガシ書いたらこんなんになりました

  function index() {
    // conditionsの初期化
    $conditions = array();
    // クエリの取得
    if ($query = @$this->params['url']['query']) {
      // クエリがあった場合は検索処理
      $conditions = array('item LIKE' => "%$query%");
    }
    // 検索条件を渡す
    $this->paginate = compact('conditions');
    $this->Item->recursive = 0;
    $this->set('items', $this->paginate());
    // 検索クエリをフォームに引き渡す
    $this->data['Item']['query'] = $query;
    $this->set(compact('query'));
  }

さて、これで無事検索できました。

本題

ここからが本題というか、検索した結果でIDとか押すとソートされそうですが、実際には検索結果が飛んでしまいます。これはgetの値がうまくpaginaterに渡っていないからです。

で、普通にparamがキてないじゃーんというのであれば簡単なんだけども、query stringの場合はcake2.0からじゃないと駄目?うーん、、

http://cakephp.lighthouseapp.com/projects/42648/20-pagination

こんな方法で(view)

<table cellpadding="0" cellspacing="0">
<tr>
  <th>
  <?php
  if ($query = $this->data['Item']['query']) {
    $query = rawurlencode($query);
  }
  $link = $paginator->sort('id');
  $link = preg_replace("|(<a.*?)(\">)|", "$1?query=$query$2", $link);
  echo $link;
  ?>
  </th>

やったんですが、美しくない結果になりました。

cakephp/queryandsort.txt · 最終更新: 2012/04/07 10:32 (外部編集)
www.chimeric.de Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0