さて、私は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);
}
私は初心者だけど、私のコードがある場合は、私を許し悪い。私は常に私のコードを改善することを楽しみにしています。 :)
?あなたが投稿を渡すとビューにそれらを渡し、問題は表示されません。問題が明確であることを明確にしてください。 –
ごめんなさい。私はそれをより明確にするために編集しました。 –
あなたの見出しの質問に答える。 CIのビューからコントローラを呼び出すことは不可能です。それはちょうどそのように働くように作られていません。 @DamienPirsyのように、コントローラにコメントを読み込んでビューに渡します。 – danneth