将数据传递给两个视图

时间:2012-09-01 13:30:42

标签: php codeigniter

我想将一个变量从控制器传递给两个视图文件。

    public function post($id) {
    $data['query'] = $this->blog_model->get_post($id);
    $data['comments'] = $this->blog_model->get_post_comment($id);
    $data['post_id'] = $id;
    $data['total_comments'] = $this->blog_model->total_comments($id);

我想将[total_comments]变量传递给index.php和post.php视图。我怎么做?我可以将数据传递给视图而不加载它们:

     $this->load->view('post',$data);

1 个答案:

答案 0 :(得分:4)

有这样的话吗?

$data['post'] = $this->load->view('post',$data, TRUE);

'TRUE'参数告诉CI调用您的视图并将其放在$data['post']变量中。稍后您可以在另一个视图中使用该变量并将其打印出来。

编辑:

我不确定你是如何组织你的控制器和视图但是让我们这样说。这只是一个例子:

控制器

 public function comments() {
        $data['comments'] = $this->comments_model->get_all_comments();
        $data['someVariable'] = 123;
        $this->load->view('header', $data);          //load header view
        $data['sidebar'] = $this->load->view('sidebar', $data, TRUE);   //put sidebar view in a variable, but don't show it immediately 
        $this->load->view('comments', $data);        //load comments view

        $this->load->view('footer'. $data);          //load footer view
    }

每当您将$data传递给控制器​​时,您将整个$data数组传递给该视图,以便您可以访问视图中的所有元素。

例如,在您的comments.php视图中,您将拥有$comments$someVariable$sidebar个变量,因此您可以随意使用它们。

在comments.php中你可能有这样的东西:

<强>的comments.php

<div id="comments"> 
<?php 
   foreach($comments as $c){       //print out all found comments
?>
   <div class="comment">
      <?= $c['commentauthor'] ?> <br />
      <?= $c['commenttext'] ?>
   </div>
<?php } ?>
</div>

<div id="sidebar">
  <?= $sidebar ?>       //print out sidebar
</div>

<p> This is some variable: <?= $someVariable ?> </p>

页脚视图中提供了相同的变量,因为您已将$ data传递给该视图

$this->load->view('footer'. $data);

我希望这会让你的事情变得更清楚。