2010-12-16 7 views
0

でページネーションを使用して検索を実装する方法Google検索でどこでも検索されていますが、この問題について明確な答えが見つかりませんでした。Kohana 2.3.x

私はウェブページの検索を行い、結果に改ページを行い、ヘッダーでソートしようとしています。

私があれば、ユーザは、検索基準「A」として「」示している含まれているすべての名前を指定することを希望プロトタイプhttp://i55.tinypic.com/2dlrqbs.png

を参照してください。私の問題は、どのように私はナビゲーションのリンク文字列を置くことができます:?name = a。

検索条件を返信しない場合は、次のページをクリックするとすべてのレコードが表示されます。私はそれを作るために管理し、それ

コントローラコード(案)

function listall() 
{ 
$limit = 2 ; 
$orderby = 'u.id'; 
$direction = 'asc'; 
$name = ''; 

if ($_POST) 
{ 
$name = $this->input->post('name'); 
} 

if ($_GET) 
{ 
$name = $this->input->post('name'); 
if ($this->input->get('orderby')) 
list($orderby, $direction) = explode(':', $this->input->get('orderby')); 
} 


$view = new view('character/listall'); 
$db = Database::instance(); 

$sql = "select c.id id, c.lastactiontime, c.name character_name, k.name kingdom_name, k.image kingdom_image, from_unixtime(u.last_login, '%d-%m-%y') last_login, u.nationality 
from characters c, kingdoms k, users u 
where 1=1 and 
c.kingdom_id = k.id and 
c.user_id = u.id 
" ; 
if ($name != '') 
$sql .= "and c.name like '%" . $name . "%'" ; 

$characters = $db->query($sql); 

//$characters = ORM::factory("character")->orderby($orderby, $direction)->find_all(); 

$this->pagination = new Pagination(array(
'base_url'=>'character/listall', 
'uri_segment'=>'listall', 
'style'=>'digg', 
'query_string' => 'page', 
'total_items'=>$characters->count(), 
'items_per_page'=>$limit)); 

//$characters = ORM::factory("character")->orderby($orderby, $direction)->find_all($limit, $this->pagination->sql_offset); 

$sql .= " order by $orderby $direction "; 
$sql .= " limit $limit offset " . $this->pagination->sql_offset ; 

kohana::log('debug', $sql); 

$characters = $db->query($sql); 

$playersinfo = Character_Model::getplayersinfo(); 

$view->playersinfo = $playersinfo; 
$view->pagination = $this->pagination; 
$view->characters = $characters; 
$this->template->content = $view; 

} 

おかげ

+0

。 AFAIR、ページネーションは現在のクエリ文字列を自動的に追加します。 – biakaveron

答えて

0

は、私は、件名に記事をたくさん読んで、私はまだ行う方法を理解していません作業。 Kohana PAgination Libsを見ると、関数http_build_queryを使ってGETパラメータのみを展開します。フォームメソッドをGETに変更しました。

の作業コード:

コントローラー:?あなたのコードは動作するはずです

function listall() 
{ 
    $limit = 25 ; 
    $orderby = 'u.id'; 
    $direction = 'asc'; 
    $name = ''; 
    $query_string= ''; 


    if ($_GET) 
    { 
     $name = $this->input->get('name'); 
     $online = $this->input->get('online'); 

     if ($this->input->get('orderby')) 
      list($orderby, $direction) = explode(':', $this->input->get('orderby')); 
    } 

    kohana::log('debug', kohana::debug($_GET)); 

    $view = new view('character/listall'); 
    $db = Database::instance(); 

    $sql = "select c.id id, c.lastactiontime, c.name character_name, k.name kingdom_name, 
     k.image kingdom_image, from_unixtime(u.last_login, '%d-%m-%y') last_login, u.nationality 
    from characters c, kingdoms k, users u 
    where 1=1 and 
    c.kingdom_id = k.id and 
    c.user_id = u.id 
    " ; 

    $criteria = kohana::lang('global.criteria'); 

    if ($name != '') 
    { 
     $sql .= " and c.name like '%" . $name . "%' " ; 
     $criteria .= kohana::lang('global.name') . ' ' . kohana::lang('global.contains') . ' ' . $name . ' ' ; 
    } 
    if ($online) 
    { 
     $sql .= " and c.lastactiontime > (unix_timestamp() - 15 * 60) " ; 
     $criteria .= kohana::lang('global.online') . ' = true' ; 
    } 

    if (!$online and $name == '') 
     $criteria .= kohana::lang('global.allrecords') ; 

    $characters = $db->query($sql); 

    //$characters = ORM::factory("character")->orderby($orderby, $direction)->find_all(); 

    $this->pagination = new Pagination(array(
     'base_url'=>'character/listall', 
     'uri_segment'=>'listall', 
     'style'=>'digg', 
     'query_string' => 'page', 
     'total_items'=>$characters->count(), 
     'items_per_page'=>$limit));    

    //$characters = ORM::factory("character")->orderby($orderby, $direction)->find_all($limit, $this->pagination->sql_offset);   

    $sql .= " order by $orderby $direction "; 
    $sql .= " limit $limit offset " . $this->pagination->sql_offset ; 

    kohana::log('debug', $sql); 

    $characters = $db->query($sql); 

    $playersinfo = Character_Model::getplayersinfo(); 

    $view->playersinfo = $playersinfo;  
    $view->pagination = $this->pagination; 
    $view->characters = $characters; 
    $view->criteria = $criteria ; 
    $this->template->content = $view; 

} 

ビュー

[cut] 

<?php 
echo form::open('/character/listall', array('method' => 'get')); 
echo form::label(kohana::lang('global.name')) . '&nbsp;' . form::input(array('id' => 'name', 'name' => 'name', 'style' => 'width:200px')); 
echo '&nbsp;&nbsp;'; 
echo form::label(kohana::lang('global.online')) . '&nbsp;' . form::checkbox('online', true); 
echo "<div style='float:right'>"; 
echo form::submit(array('id' => 'submit', 'class' => 'submit', 'value' => kohana::lang('global.search'))); 
echo form::submit(array('id' => 'reset', 'class' => 'submit', 'value' => kohana::lang ('global.reset'))); 
echo "</div>"; 
echo form::close(); 
echo '<br/>'; 
echo '<b>' . $criteria .'</b>'; 

>

関連する問題