2014-01-30 49 views
0

正如標題所示,我需要使用輸入表單從數據庫中搜索數據並將查詢返回到同一頁面。CakePHP輸入表單搜索產品ID並在同一頁上顯示結果

我已經嘗試了許多不同類型的解決方案,來自Google和這裏。到目前爲止,他們中沒有人與我合作過。另外我對CakePHP很新,所以它很明顯我缺少一些東西。

我的數據的表名是「posts」。

所以,我想這個搜索結果是觀點是(search.ctp),我有形式有這樣的:

<?php 
    echo $this->Form->create('Search'); 
    echo $this->Form->input('search', array('label' => 'Search with ID')); 
    echo $this->Form->end('Search'); 
?> 

從我發現我很困惑,如果我應該使用我的PostsController.php作爲搜索功能,或者爲此創建新的控制器作爲SearchController.php,這同樣適用於模型。

在這一點上我與SearchController.php和代碼試圖就如下:

class SearchController extends AppController { 


    public function search(){ 

     $keyword=$this->params->query['keyword']; 

     $cond=array('OR'=>array("Post.id LIKE '%$keyword%'","Post.title LIKE %$keyword%'") ); 

     $list = $this->Post->find('all',array('conditions')=>$cond); 

    } 
} 

而且部分地方我嘗試顯示在頁面search.ctp代碼我查詢結果如下:

<?php 
     foreach($list as $post): ?> 

    <tr> 
    <td> <?php echo $post ["Search"]["id"]; ?> </td> 
    <td> 
     <?php echo $this->Html->link($post["Search"]["title"], array("controller" => "posts", "action" => "search", $post["Search"]["id"])); ?> 
    </td> 

    <td><?php echo $post["Search"]["created"]; ?></td> 
    </tr> 
<?php endforeach; ?> 
<?php unset ($post); ?> 

我敢打賭,代碼是有點弱智,我一直這麼用,現在的代碼是完全搞砸了我quess試圖爲這個這麼多不同的解決方案..

反正感謝喲如果有人善意幫助有需要的人,

+0

cakephp版本? – yossi

回答

-1

在搜索操作中,您必須驗證帖子是否已發送。 因此 if($ _POST) { $ keyword = $ this-> params-> query ['keyword'];

$cond=array('OR'=>array("Post.id LIKE '%$keyword%'","Post.title LIKE %$keyword%'") ); 

    $list = $this->Post->find('all',array('conditions')=>$cond); 
    $this->set("list",$MyData); 

}

0

這是完全錯誤的,你試試用POST(Post.search)來搜索,但是從URL中使用的查詢參數(/職位/指數/?關鍵字=東西)。你認爲它應該如何實現?順便說一句,爲什麼你也搜索ID?

有沒有必要創建一個搜索控制器,我不明白爲什麼人們喜歡這樣做,但肯定沒有必要這樣做。你可以有你的帖子,甚至分頁的列表,在同一頁上的搜索:

public function index() { 
    if ($this->request->is('post') && !empty($this->request->data['Post']['search'])) { 
     $searchTerm = '%' . $this->request->data['Post']['search'] . '%'; 
     $this->Paginator->settings['conditions']['OR'] = array(
      'Post.id LIKE' => $searchTerm, 
      'Post.title LIKE' => $searchTerm, 
     ); 
    } 
    $this->set('posts', $this->Paginate->paginate()); 
} 

如果你想獲得搜索詞的網址在這裏使用了正確的模式是the PRG pattern。 CakePHP的CakeDC search plugin實現得非常好,並且可以很容易地實現它。

相關問題