CodeIgniter - як гніздувати представлення зору за допомогою другого контролера

Отже, у мене є ця частина у моєму представленні:

 <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 .

Щось подібне (подібно до Kohana):

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

Але це не працює.

Моє питання полягає в тому, як я можу показати цей другий вкладене представлення після натискання посилання, яка активує другий контролер?


РЕДАГУВАТИ:

Але я хочу відправити каталог перегляду до змінної $ каталог після того, як користувач натиснув на посилання, яке активує другий контролер, який виглядає приблизно так:

 $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 у вигляді макета , визначеного в першому контролері

0

2 Відповіді

You can call a $this->load->view within the view's code but I would not recommend it.

Замість цього передайте true як 3-й параметр у функцію перегляду завантаження, і це поверне вигляд, а не відлучатимете його прямо. Тоді ви можете призначити цей повернений код у вихідний вигляд.

3
додано
Дякую, але я хочу надіслати його, використовуючи другий контролер. Я додав деталі до мого повідомлення.
додано Автор Ziik, джерело

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

Я думаю, що ви завантажуєте сторінку з усіма "додатками" і хочете, щоб ви могли оновлювати частину вашої сторінки вмісту за допомогою кліку, ініційованого користувачем.

Якщо ви реалізуєте рішення на основі JavaScript, то вам просто потрібен контролер, який виведе фрагмент html та вкаже його на поточну сторінку за допомогою виклику ajax.

Якщо ви не реалізуєте JavaScript, то це буде повністю оновлення сторінки, тому ви просто перебудуєте сторінку та передаєте вибраний каталог контенту контролеру.

UPDATE

Щоб зробити це без 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
    ));
0
додано
Ну, звичайно, є, але це залежить від вашого контролера та структури. Якщо ви використовуєте HMVC , ви можете зателефонувати цим контролерам з-поміж контролерів. Якщо ви будете робити багато цього, то я б рекомендував це. Проте, для просто чогось такого просто, я просто зробив виклик file_get_contents() на другий контролер і помістив це у вигляд. Див. Оновлення в моїй відповіді.
додано Автор swatkins, джерело
Я хочу зробити це без ajax, тому оновлення сторінки не є проблемою. Таким чином, немає ніякого способу, щоб зробити код менше (що робить другий контролер дає тільки значення <�б> $ змісту )? Єдиний спосіб визначити всі змінні (<�б> $ категорія , <�б> $ home_menu , <�б> $ інформації , і т.д ..), Включаючи <�б> $ змісту та завантажте представлення макету ?
додано Автор Ziik, джерело
Ukrainian PHP comunity
Ukrainian PHP comunity
885 учасників

dev-ua/php