CodeIgniter - Как вложить представление в представление, используя второй контроллер - PullRequest
0 голосов
/ 27 октября 2011

Итак, у меня есть эта часть в моем представлении:

 <body>
    <div id = "content">
       <?php echo $catalog ?>
    </div>
 </body>

В нем есть и другие переменные. Вот часть моего контроллера, куда я отправляю их на просмотр:

$this->load->view('layout',array(
        'categories'    =>  $categories,
        'home_menu'     =>  $home_menu,
        'information'   =>  $information,
        'favourite'     =>  $favourite,
        'new_products'  =>  $new_products,
        'bestsellers'   =>  $bestsellers,
        'login_info'    =>  $login_info,
        'catalog'       =>  ''
        ));

Я хочу создать второй контроллер, который при активации отправляет второй просмотр переменной $catalog.

Примерно так (похоже на Кохану):

$this->layout->catalog = $this->load->view('products/catalog', array(
                'name'          =>  $name,
                'description'   =>  $description));

Но это не работает.

У меня вопрос, как я могу показать это второе вложенное представление после нажатия на ссылку, которая активирует второй контроллер?


EDIT:

Но я хочу отправить представление каталога в $ catalog переменную после того, как пользователь нажал на ссылку, которая активирует второй контроллер, который выглядит примерно так:

 $products = $this->Product_model->list_products($category_id);
foreach ($products as $row)
        {
                     $name = $row->name;
                     $description = $row->description;
        }

.. после этого я хочу, чтобы $ name и $ description были переданы:

$this->load->view('products/catalog', array(
                    'name'          =>  $name,
                    'description'   =>  $description));

.. который сам должен быть передан $catalog в представлении , определенном в первом контроллере

Ответы [ 2 ]

3 голосов
/ 27 октября 2011

Вы можете вызвать $this->load->view в коде представления, но я бы не рекомендовал его.

Вместо этого передайте true в качестве 3-го параметра в функции просмотра нагрузки, и это вернет представление, а не отобразит его прямо. Затем вы можете присвоить этот код возврата вашему исходному виду.

0 голосов
/ 27 октября 2011

Я надеюсь, что полностью понимаю ваш вопрос, но если нет, то прошу прощения.

Я предполагаю, что вы загружаете страницу со всеми «дополнениями» и хотите иметь возможностьчтобы обновить «контентную» часть вашей страницы с помощью инициированного пользователем клика.

Если вы реализуете решение на основе JavaScript, то вам просто нужен контроллер, который будет выводить фрагмент html и вставлять его в текущийстраница с помощью вызова ajax.

Если вы не реализуете javascript, то это будет полное обновление страницы, поэтому вам просто нужно перестроить страницу и передать выбранный контент каталога в контроллер.

ОБНОВЛЕНИЕ

Чтобы сделать это без ajax или hmvc, вам нужно получить содержимое с другого контроллера в этот контроллер, чтобы вы могли просто сделать дополнительный запрос с помощью php:

$catalog_content = file_get_contents('/url_to_second_controller.html');
$this->load->view('layout',array(
    'categories'    =>  $categories,
    'home_menu'     =>  $home_menu,
    'information'   =>  $information,
    'favourite'     =>  $favourite,
    'new_products'  =>  $new_products,
    'bestsellers'   =>  $bestsellers,
    'login_info'    =>  $login_info,
    'catalog'       =>  $catalog_content
    ));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...