0

コメント モジュールを作成し、アクティブなレコードをビューに表示しようとしています。シンプルに見えますが、私は多くのことを行っており、別のモデルとコントローラーを使用してから、ビューが生成されています。

だから私はプロフィールページを持っています(結果を表示しようとしているところです)

コントローラ:

public function profile() 
      {
            $this->load->helper('url'); //Include this line
            $this->load->helper('date');
            $this->load->library('session');
            $this->load->library('form_validation');
            $session_id = $this->session->userdata('id'); //Ensure that this session is valid


            //TRYING TO MAKE A VARIABLE WITHT THE $_GET VALUE
            $user_get = $this->uri->segment(3); // Modify this line


            // LOAD THE CORRECT USER
            $this->load->model('account_model');
            $user = $this->account_model->user($user_get); //(suggestion) you want to pass the id here to filter your record

            $data['user'] = $user;
            $data['session_id'] = $session_id;




            if($user_get != $user['id'] || !$user_get)
            {
                $data['main_content'] = 'account/notfound';
                $this->load->view('includes/templates/profile_template', $data);
            }
            else
            {

            if($user_get == $session_id) //Modify this line also
            {
                $data['profile_icon'] = 'edit';
            }
            else
            {
                $data['profile_icon'] = 'profile';
            }
            $sharpie = $this->sharpie($user);
            $data['sharpie'] = $sharpie;
            $data['main_content'] = 'account/profile';
            $this->load->view('includes/templates/profile_template', $data);
            }

        }

これで、表示しようとしているコメント用の新しいコントローラーができました。

public function airwave() {
        $this->load->helper('date');
        $this->load->library('session');
        $airwave_get = $this->uri->segment(3); 
        $this->load->model('community_model');
        $airwave = $this->coummunity_model->airwave($airwave_get); 
        $data['airwave'] = $airwave;
        $data['main_content'] = 'account/profile';
        $this->load->view('includes/templates/main_page_template', $data);
    }

このモデルで:

public function airwave($id=null) 
        {
            if(is_null($id)) {
                $session = $this->session->userdata('is_logged_in');
                $commenter_id = $this->session->userdata('id');
            }else{
                $commenter_id = intval($id);
            }

            $query = $this->db->query("SELECT * FROM airwaves_comments WHERE from_id=$commenter_id");
            if($query->num_rows()==1)
            {
               $data = $query->result_array();
               return $data[0];
            //above returns the single row you need to the controller as an array.
            //to the $data['user'] variable.

            }

        }

このビュー(プロファイル機能によって生成されます)に表示しようとしています

<div class="profile_airwave_comment_text">
    <?php echo $airwave['comment'];?>
</div>

作成した配列変数をそのビューに適切に渡すことができないようです。

前もって感謝します。

4

2 に答える 2

0

HMVC を使用している場合は、プロファイル ビュー内からモジュールを呼び出すだけです。

echo Modules::run('comments/profileComments', $user->id);

それ以外の場合: ローダー クラスに新しいメソッドを作成して、ルーティングとは別にコントローラーにロードする必要があります。

より良い代替手段を思いつくまで本当に簡単な修正を行った後、(両方のコントローラーが同じディレクトリにある場合に応じて) 「プロファイル」コントローラーに「コメント」コントローラーを含めて、次のようなことを試すことができます。

{短所: CI ページネーションが機能しない!}

アプリケーション/コントローラー/profile.php

include 'Comments' . EXT;

class Profile extends CI_Controller{

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

    }

    public function index( $user_id ){

        $commentsPartialView = call_user_func_array(array(new Comments(), "getProfileComments"), array($user_id));

        return $this->load->view($this->template, array(
               'view' => 'profiles/_index',
               'comments' => $commentsPartialView
        ));
    }


}

-

アプリケーション/コントローラー/Comments.php

class Comments extends CI_Controller{

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

    }

    public function getProfileComments( $user_id ){

        $user_comments = ''; //pull from DB

        //set third param to TRUE for partial view, without main template
        return $this->load->view('comments/show', array(
               'user_comments' => $user_comments
        ), TRUE);
    }


}
于 2013-04-13T06:13:09.923 に答える