0

我是 PHP 和 Codeigniter(v2.0) 框架的新手。希望你能帮助我通过我的第一个 webapp 找到我的方式。详情如下,在此先感谢您!

目标/问题摘要: 我想在我的视图中显示附加到每个特定 blog_Post 的所有 blog_Comments。

详细信息:我的 blog_Posts 表包含所有原始博客文章 [id(int)、title、entry、author (all varchar) 和 date(timestamp)]。我的 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 个示例原始博客文章,以及与每个相关的评论。

问题:

  1. 第一个博客条目(第一次通过循环)显示所有评论,包括与其他 entry_id 相关的评论。
  2. 第二个博客条目(第二次通过循环),它抛出以下错误:“为 foreach() 提供的参数无效”,并指向我视图中包含 foreach for $comments 的行。

简而言之,我试图只浏览那些 entry_id 与原始帖子“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); ?>

是的。但实际上你应该在控制器和模型中做尽可能多的逻辑和检查。验证您的数据对象 - 如帖子 - 然后控制器确定正确的视图。因此,如果没有任何帖子可显示 - 您认为您没有混乱的“如果没有帖子怎么办”条件。您只需调用无帖子视图文件。

于 2012-12-31T20:06:21.113 回答