CodeIgniter:在另一个视图中加载视图

时间:2013-07-23 13:16:00

标签: codeigniter codeigniter-2

我正在使用CodeIgniter。我想在其他视图中加载视图。我怎么能这样做?

示例:

假设我有一个名为“CommentWall”的“视图”。在CommentWall中,我想要一堆“评论”视图。我在我的网站上使用“评论”视图!

我该怎么做?似乎CodeIgniter只允许我按顺序加载视图,考虑到我在其他视图中使用可重用的视图,这有点奇怪!

我可以在CommentWall的视图中进行$this->load->view('comment');吗?或者是否有其他方法可以将可重用视图包含在内部视图中?

3 个答案:

答案 0 :(得分:1)

您可以轻松完成,只需加载主视图,例如来自控制器的CommentWall

$this->load->view('CommentWall');

要在CommentWall视图中添加子视图,您可以在CommentWall视图中添加以下行

$this->view('Comment');

例如,如果您从控制器加载CommentWall视图,就像这样

$data['comments'][] = 'Comment one';
$data['comments'][] = 'Comment two';

// load the parrent view
$this->load->view('CommentWall', $data);

现在在CommentWall(父视图),如果你把这个

foreach ($comments as $comment) {
    $this->view('Comment', array('comment' => $comment));
}

如果你有这个<{p>,请在你的Comment(子视图)中

echo $comment . '<br />';

然后你应该得到像这样的输出

Comment one

Comment two

更新: Alos,check this answer

答案 1 :(得分:0)

尝试

class Main extends CI_Controller {

    function __construct()
    {
        parent::__construct();

        $data->comments =$this->load->view('comment');
            $this->load->vars($data);
    }

在每个视图中尝试

echo $comments;

答案 2 :(得分:0)

只需在控制器中加载“Comment”vies作为字符串,并将其传递给“CommentWall”视图。

你可以这样做:

//Controller:

public function load_comment_wall($param) {

       $comments_view = ""; //String that holds comment views

      //here load the comments for this wall as follows:
      //assuming $comment_ids is array of id's of comment to be put in this wall...
      foreach($comment_ids as $comment_id) {
          $temp = $this->load->view("comment",array('comment_id'=>$comment_id),TRUE);     //Setting last parameter to TRUE will returns the view as String
          $comments_view = $comment_views.$temp;
      }

      $data['comments'] = $comments_view;

      //load comment wall
      $this->load->view('comment_wall',$data);
}

//在评论墙视图中,添加以下行

echo $comments;