0

PHP と Codeigniter(v2.0) フレームワークの両方が初めてです。私の最初の webapp を使用する方法を見つけるのを手伝ってくれることを願っています。詳細は以下をご覧ください。よろしくお願いします。

目標/問題の概要: 特定の blog_Post に添付されているすべての blog_Comments をビュー内に表示したいと考えています。

詳細:私の blog_Posts テーブルには、すべての元のブログ投稿 [id(int)、タイトル、エントリ、作成者 (すべての varchar)、および日付 (タイムスタンプ)] が含まれています。私の blog_Comments テーブル [id(int), entry_id(int), author, comment(varchar)] にはすべてのコメントが含まれています。*entry_id* 属性を介して元の blog_Post に関連付けられます。

コントローラ:

$query1 = $this->blog_model->get_posts();
$query2 = $this->blog_model->get_comments();
$data = array();
$data['posts'] = $query1;
$data['comments'] = $query2;

モデル:

function get_posts() {
$query = this->db->get('blog_Posts');
return $query->result;
}

function get_comments() {
$query = this->db->get('blog_Comments');
return $query->result;}

意見:

<?php if(isset($posts)) : foreach($posts as $posts=>$row) : ?>
     <?php $row->title; ?>
     <?php $row->author; ?>
     <?php $row->entry; ?>

<?php foreach($comments as $comments=>$com) : ?>
    <?php if($com->entry_id == $row->id) : ?>
        <p>author: <?php echo $com->author; ?></p>
        <p>comment: <?php echo $com->comment; ?></p>
    <?php endif; ?>
<?php endforeach; ?>

<?php endforeach; ?>
<?php else : ?> <p>no blog_Posts found</p>
<?php endif; ?>

編集/更新:

コメントを表示しようとする試みは、上記のビュー コード ブロックに貼り付けられています。また、それが私に与えている 2 つの問題もリストしました。現在、2 つのオリジナルのブログ投稿のサンプルと、それぞれに関連付けられたコメントがあります。

問題:

  1. 最初のブログ エントリ (初めてループを通過) では、他の entry_id に関連付けられたコメントを含むすべてのコメントが表示されます。
  2. 2 番目のブログ エントリ (2 回目のループ) では、「無効な引数が foreach() に指定されました」というエラーがスローされ、$comments の foreach を含むビュー内の行を指します。

つまり、元の投稿の「id」と一致する entry_id を持つコメントのみを調べようとしています。

ご協力と時間をありがとうございました。

-AJ

4

2 に答える 2

2

一度にすべてのコメントを表示する必要はないので、以下のように get_comments 関数を変更して、各投稿のコメントを返し、もちろん作成日順、最後のエントリなどで表示することができます。

モデル部分の場合:

function get_comments($post_id){
$query = $this->db->query("select * from `blog_Comments` where `entry_id` = $post_id ORDER BY `created_on` DESC");

  if($query->num_rows() != 0){
   return $query->result();
 }else{
   return false;
 }
}

そして、あなたのビューファイルで:

foreach($posts as $row){
 echo 'Title: ' . $row->title .
 'Author: ' . $row->author .
 'Entry:' . $row->entry;
 $comments = $this->blog_model->get_comments($row->id);
 if(!$comments){ 
  echo 'No comments'; 
 }else{
  foreach($comments as $com){
    echo $com->comments . '<br/>' . $com->user . '<br/>' . etc etc
  }
 }
}
于 2012-12-31T22:33:35.233 に答える
0

私はテストするのが面倒ですが、$row を使用しようとしていると思いますが、定義されている foreach の外にいます。ここで $row を紹介します

 <?php if(isset($posts)) : foreach($posts as $posts=>$row) : ?>

次に、foreach を閉じます。そのため、ここでは $row を使用できなくなります。

   <?php if($com->entry_id == $row->id); ?>

そうそう。しかし実際には、コントローラーとモデルでできる限り多くのロジックとチェックを行う必要があります。Posts などのデータ オブジェクトを確認すると、コントローラーが正しいビューを決定します。したがって、表示する投稿がない場合-ビューに「投稿がない場合はどうなるか」という面倒な条件はありません。投稿なしビューファイルを呼び出すだけです。

于 2012-12-31T20:06:21.113 に答える