2013-07-23 4 views
0

Я использую CodeIgniter. Я хочу загружать представления внутри других представлений. Как я могу это сделать?CodeIngiter: Загрузите представление внутри другого вида

Пример:

Допустим, у меня есть "вид" под названием "CommentWall". В CommentWall я хочу кучу «комментариев». Я использую представление для комментариев на своем сайте!

Как я могу это сделать? Кажется, CodeIgniter позволяет мне загружать просмотры последовательно, что довольно странно, учитывая, что я использую многоразовые представления INSIDE других видов!

Могу ли я сделать внутри моего представления для комментариевWall? Или есть какой-то другой способ иметь reusuable просмотренных мест внутри вид?

+0

Вы можете сделать это, то, что проблема у вас возникли? – Matthew

+1

Лучше делать это в контроллерах, может это поможет: http://stackoverflow.com/questions/17317115/is-it-ok-to-put-conditional-logic-on-codeigniter-views/17317621#17317621 –

ответ

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 

Обновление: Alos, check this answer.

0

Попробуйте

class Main extends CI_Controller { 

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

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

И в каждом виде попробовать

echo $comments; 
0

Просто загрузите «комментарий» соперничает как строка в контроллере и передать его в «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); 
} 

// В комментарии стенного View, добавьте следующую строку

echo $comments;