Codeigniter:将变量传递给View

时间:2016-04-13 09:17:52

标签: php codeigniter

我必须表格和表评论。在主页中,我想看看有多少关于earch文章的评论。

模型

function show_latest_article($start,$display,$cate)
{
    $query=  $this->db->get_where('news_news', array('News_Cate_ID'=>$cate),$start,$display);
    if($cate==0)
    {
         $query=  $this->db->get_where('news_news',$start,$display);
    }

    return $query->result();
}
     function count_comment($id)
    {
        $query = $this->db->get_where('comment',array('comment_article_id'=>$id) );

         return $query->num_rows();   

    }

控制器

 function index() {
        $this->load->model('article');
        $data=array('article'=>$this->article->show_latest_article(0,8,1),
                    'sidebar'=>$this->article->side_bar(9),
                    'count_comment'=> $this->article->count_comment($id),

            ); 

        $this->load->view('page/index',$data);

    }

在视图中我有这个

    foreach($article as $art)
{
    echo $art->title."<br>";
    $id= $art->id;
    // I want to echo number of comment here.
   // Or I want to call function count_comment($id) 
}

6 个答案:

答案 0 :(得分:1)

    $this->load->model('article');
    $data['article'] = $this->article->show_latest_article(0, 8, 1);
    $data['sidebar'] => $this->article->side_bar(9);
    $data['count_comment'] => $this->article->count_comment($id);
    $this->load->view('page/index', $data);

它应该有用。

答案 1 :(得分:0)

控制器:

 function index() {
    $this->load->model('article');
    $articles =  $this->article->show_latest_article(0,8,1);
    $count_comments = Array();
    for($i=0;$i<count($articles);$i++){
        $count_comments[$i] = $this->article->count_comment($articles->$id);
    } 
    $count_comments = 
    $data=array('article'=>$articles,
                'sidebar'=>$this->article->side_bar(9),
                'count_comment'=> $count_comments); 

    $this->load->view('page/index',$data);

 }

在视图中:

$i=0;
foreach($article as $art)
{

    echo $art->title."<br>";
    $id= $art->id;
    echo $count_comment[$i]; 
    $i++;
}

答案 2 :(得分:0)

首先,在您的控制器中,您只能获取特定文章ID的count_comment,而不是所有文章,因此您无法预先显示每篇文章的评论数。

您需要更好地设置模型,并在模型函数show_latest_article中使用JOIN注释表并在查询中计算注释。

如果您向我提供有关数据库表格和评论的更多信息,我会帮您查询。

SELECT 
    article.*,
    COUNT(comment.id),0) AS numberOfCommments

FROM article
LEFT JOIN comment
ON comment.article_id = article.id

GROUP BY article.id

答案 3 :(得分:0)

我在提供代码时正在写这个答案。如果您提供更多数据库详细信息,可能会更简单。请尝试下面的代码

function index() {
    $this->load->model('article');
    $articles = $this->article->show_latest_article(0,8,1);

    foreach($articles as $article)
    {
        $article->comment_count = $this->article->count_comment($article->id);
        $all_article[] = $article;
     }

     $data=array('article'=>$all_article,
                'sidebar'=>$this->article->side_bar(9)
        ); 

    $this->load->view('page/index',$data);

}

在视图

foreach($article as $art)
{
    echo $art->title."<br>";
    $id= $art->id;
    echo $art->comment_count;

}

答案 4 :(得分:0)

$id变量来自哪里不太清楚,但我建议将评论表加入到您的文章中。在循环中进行查询不是最佳做法。

在你的模特中:

public function show_latest_article($ids = array())
{
    return $this->db
        ->select('articles.*, COUNT(comments.id) as comment_count')
        ->where_in('articles.id', $ids) // You can skip this
        ->join('comments', 'comments.article_id = articles.id', 'left') 
        ->group_by('articles.id')
        ->get('articles')
        ->result();
}

在您的控制器中:

public function index()
{
    $data['articles'] = $this->article->show_latest_article(array(0, 8, 1));
    $this->load->view('page/index', $data);
}

只需根据数据库列更改字段名称即可。您也可以跳过where_in条件。 (我不确定三个数字代表什么)。

然后在您的视图中,您只需访问该字段: $art->comment_count

编辑:根据您的评论:

$this->db
    ->select('a.*, (SELECT COUNT(*) FROM comment c WHERE c.comment_article_id = a.News_News_ID ) as counta')
    ->get('news_news')
    ->result();

答案 5 :(得分:0)

数据通过视图加载函数的第二个参数中的数组或对象从控制器传递到视图。以下是使用数组的示例:

$data = array(
           'title' => 'My Title',
           'heading' => 'My Heading',
           'message' => 'My Message'
      );
$this->load->view('blogview', $data);

以下是对象

的示例
$data = new Someclass();
$this->load->view('blogview', $data);

请注意:注意:如果使用对象,则类变量将转换为数组元素。 您可以从以下参考URL

中找到更多信息

参考:https://ellislab.com/codeigniter/user-guide/general/views.html