CodeIgniter - Een weergave in beeld genazen met behulp van de tweede controller

Dus ik heb dit deel in mijn weergave:

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

Er zitten ook nog andere variabelen in. Hier is het gedeelte van mijn controller waar ik ze naar de weergave stuur:

$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'       =>  ''
        ));

Ik wil een tweede controller maken, die bij activering een tweede weergave naar de variabele $ catalogus stuurt.

Iets als dit (vergelijkbaar met Kohana):

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

Maar het werkt niet.

Mijn vraag is, hoe kan ik deze tweede geneste weergave weergeven nadat ik op een koppeling heb geklikt die de tweede controller activeert?


EDIT:

Maar ik wil de catalogusweergave verzenden naar $ catalogus variabele nadat de gebruiker op een koppeling heeft geklikt die de tweede controller activeert, die er ongeveer zo uitziet:

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

.. daarna wil ik $ naam en $ beschrijving doorgeven aan:

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

..die zelf moet worden doorgegeven aan $ catalogus in de weergave layout die is gedefinieerd in de eerste controller

0

2 antwoord

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

In plaats daarvan geeft u true door als de 3e parameter in de weergavefunctie voor laden en dit zal de weergave retourneren in plaats van deze rechtstreeks uit echoën. Vervolgens kunt u die geretourneerde code aan uw oorspronkelijke weergave toewijzen.

3
toegevoegd
Bedankt, maar ik wil het beeld verzenden met een tweede controller. Ik heb details aan mijn bericht toegevoegd.
toegevoegd de auteur Ziik, de bron

Ik hoop dat ik je vraag volledig begrijp, maar als dat niet zo is, verontschuldig ik me.

Mijn gok is dat je de pagina laadt met alle 'extra's' en het 'content'-gedeelte van je pagina wilt bijwerken via een door de gebruiker geïnitieerde klik.

Als u een op JavaScript gebaseerde oplossing implementeert, hebt u alleen een controller nodig die het html-fragment uitvoert en die via een ajax-oproep in de huidige pagina injecteert.

Als u JavaScript niet implementeert, zou het een volledige paginavernieuwing zijn, dus u zou de pagina opnieuw moeten opbouwen en de geselecteerde catalogusinhoud aan de controller doorgeven.

UPDATE

Om dit zonder ajax of hmvc te doen, moet je de inhoud van een andere controller in deze controller krijgen, dus je zou gewoon een extra verzoek kunnen doen met 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
toegevoegd
Nou ja, natuurlijk wel, maar het hangt af van je controller en structuur. Als u HMVC gebruikt, kunt u die controllers aanroepen van binnen controllers. Als je hier veel van gaat doen, dan zou ik het aanraden. Echter, voor zoiets eenvoudigs, zou ik gewoon een file_get_contents() aanroepen naar de tweede controller en die in de weergave plaatsen. Zie update in mijn antwoord.
toegevoegd de auteur swatkins, de bron
Ik wil het zonder ajax maken, dus het vernieuwen van de pagina is geen probleem. Dus er is geen manier om de code kleiner te maken (waardoor de tweede controller alleen waarde geeft aan $ inhoud )? De enige manier is om alle variabelen te definiëren ( $ categorieën , $ home_menu , $ informatie , etc.) inclusief $ inhoud en laad de weergave layout ?
toegevoegd de auteur Ziik, de bron