0
  • CodeIgniter 2.1.2

showoneこの質問との目的で、2つのメソッドを含むクラスがありviewます。後者は小さなデータベースのすべてのアイテムを返し、検索を実行することもできます。もう1つは、次のようなパーマリンク用です。domain.com/showone/firstname-lastname

<?php
class Pages extends CI_Controller {

public function view($page)
    {
    //this includes a mysql search
    }

public function showone($slug)
    {
    //abbreviated version:
    $query = "SELECT * FROM mytable WHERE slug = '" . $slug . "'";
    $result = $this->db->query($query);
    if ($result->num_rows() == 0)
        {
        //here is where I'd like to use the same search that I used in showall
        }
    else
        {
        //show the one item
        }
    }

} //class
?>

したがって、ユーザーがデータベースから何も返さないURLを直接入力することにした場合は、404を表示する代わりに、検索結果を表示するようにユーザーに指示したいと思います。

function searchdatabase($query)では、との両方で使用するようshowoneにを設定するにはどうすればよいviewですか?

4

2 に答える 2

0

モデルでその関数を定義し、モデルをロードしてから、model->methodを呼び出します。

<?php
//Your Model would look something like this.
class Search_Model extends CI_Model {

    public function __construct(){
      parent::__construct();
    }

    public function showone($slug)
    {
    //abbreviated version:
    //Its best to use active record for building your queries
    $this->db->where->('slug', $slug);
    $result = $this->db->get('mytable');
    if ($result->num_rows() == 0)
        {
        //here is where I'd like to use the same search that I used in showall
        }
    else
        {
        //show the one item
        }
    }

} //class

そして、コントローラーでこれを行います。

<?php
//Your Controllerwould look something like this.
class Index extends CI_Controller {
    public function __construct(){
      parent::__construct();
      //model will be loaded for each method.
      //if you're going to use this model across several controllers
      //its best to autoload it, set that in autoload.php under /app/config
      $this->load->model('search_model');
    }

    public function index(){
      $searchResults = $this->search_model->showone('slugone');
    }

アップデート

結果が返されない場合は、すべての結果を表示したいと思っていることに気づきました。その場合、モデルでもそのロジックを実行します。

条件文では、次のようにします。

    if ($result->num_rows() == 0)
        {
        return $this->showall();
        }
    else
        {
        return $this->view($slug);
        }
    }

あなたshowall()view()メソッドはreturn $result->result();

于 2012-07-24T13:04:03.117 に答える
0

コントローラ内でコントローラ機能を使用できます。

public function view($page)
    {
       $this->showone($slug);
    }
于 2012-07-24T17:48:40.357 に答える