2011-11-09 9 views
0

さて、私はCodeIgniterで作業しています。 posts.phpすべての投稿を表示する私のビューです、各投稿は対応するコメントを表示する必要があります、これは私が達成しようとしているものです。私はビューからコントローラメソッドを呼び出さなければならないのですが、私のコードをどのようにリファクタリングしますか?

コントローラメソッドを使用してモデルメソッドを呼び出さない限り、postidid($postid)を取得し、対応するコメント($comment)を返すメソッドがあります。これをどのように組み込むのですか?

これが私の見解です:

<body> 
    <?php foreach ($post as $key):?> 
    <div class="container"> 
     <div class="span10"> 

     <div id="box" class="alert-message block-message info"> 
      <div id="post" class="post"> 
       <?php echo $key->content;?><br /> 
      </div> 
      <div> 
      <p><?php //echo $comment;?></p> <!--HERE THE COMMENTS OF THE CORRESPONDNING POST MUST BE ECHOED--> 
      </div> 
      <div> 
      <a href="#" id="commentnow<?php echo $key->postid;?>"><p><em>Comment</em></p></a> 
      </div> 
      <div id="commentarea<?php echo $key->postid;?>"> 
      <?php $name=array('name'=>"form$key->postid"); 
        echo form_open("/welcome/comments/$key->postid",$name); 
        $data=array(
           'id' => 'input', 
           'name'=> 'content', 
           'rows' => '2', 
           'placeholder' => "Write a comment...", 
           'autofocus' => 'TRUE'    
        ); 
        echo form_textarea($data);  

      ?> 
      <a href="JAVASCRIPT:form<?=$key->postid;?>.submit()" id="cbtn" class="btn primary small">Comment</a> 
      <?=form_close();?> 
      </div> 
     </div> 
    </div> 

    </div> 
    </div> 
    <script type="text/javascript"> 
    $(function(){ 
    $("div#commentarea<?=$key->postid;?>").hide(); 
    $('a#commentnow<?=$key->postid;?>').click(function(){ 

     $("div#commentarea<?=$key->postid;?>").slideToggle(250); 
     }); 
    }); 

    </script> 
    <?php endforeach;?> 
    </body> 

これはpostidに対応して、コメントを返す私のコントローラのメソッドです:

public function comments($postid) 
{ 

    //Post Comment 
    $comment=$this->input->post('content'); 
    $data=array('content'=>$comment,'comment_postid'=>$postid); 
    $this->comments->postcomment($data); 

    //Retrieve 
    $comments['comment']=$this->comments->retrieve($postid); 
    $this->load->view('posts',$comments); 

} 

私は初心者だけど、私のコードがある場合は、私を許し悪い。私は常に私のコードを改善することを楽しみにしています。 :)

+4

?あなたが投稿を渡すとビューにそれらを渡し、問題は表示されません。問題が明確であることを明確にしてください。 –

+0

ごめんなさい。私はそれをより明確にするために編集しました。 –

+0

あなたの見出しの質問に答える。 CIのビューからコントローラを呼び出すことは不可能です。それはちょうどそのように働くように作られていません。 @DamienPirsyのように、コントローラにコメントを読み込んでビューに渡します。 – danneth

答えて

0

あなたのコードを見ると、あなたはMVCの使い方を完全には理解できていないようです。

まず、お使いのコントローラメソッドコメントはポストへのコメントの追加コメントの抽出が含まれています。これは、ビューファイルを見ていると論理的ではないようです。

代わりに、これらの2つを分離する必要があります。お使いのコントローラで

、* * post_commentと呼ばれる別のmetodを追加し、そのメソッドに追加コメント機能を移動し、その後、リダイレクトを追加します。今すぐ

public function post_comment($postid) 
{ 

    //Post Comment 
    $comment=$this->input->post('content'); 
    $data=array('content'=>$comment,'comment_postid'=>$postid); 
    $this->comments->postcomment($data); 

    redirect('welcome/comments'); //redirect back to comments 
} 

を、あなたのコメントからのコメントの追加を削除コントローラのメソッド、あなたがコメントだけを取り出すように:

public function comments($postid) 
{ 

    //Retrieve 
    $comments['comment']=$this->comments->retrieve($postid); 
    $this->load->view('posts',$comments); 
} 

そして最後に、あなたのビューファイルを変更する - あなたは新しいURLにコメントを投稿する必要があります。

 <?php $name=array('name'=>"form$key->postid"); 
       echo form_open("/welcome/post_comment/$key->postid",$name); 

これはトリックを行う必要があります。

+0

ありがとうございました。それは明らかだった! :) –

関連する問題