0

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

例子:

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

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

$this->load->view('comment');我可以为 CommentWall做一个内部视图吗?还是有其他方法可以在视图中包含可重用的视图?

4

3 回答 3

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));
}

如果你有这个,在你的Comment(子视图)中

echo $comment . '<br />';

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

Comment one

Comment two

更新:阿洛斯,检查这个答案

于 2013-07-23T14:04:38.937 回答
0

尝试

class Main extends CI_Controller {

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

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

在每一个视图中尝试

echo $comments;
于 2013-07-23T15:02:14.860 回答
0

只需将“评论”作为字符串加载到控制器中并将其传递给“评论墙”视图。

你可以这样做:

//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;
于 2013-07-26T13:59:44.363 回答