Codeigniter - если еще вид изнутри - PullRequest
2 голосов
/ 01 марта 2012

Я разрабатываю макет темы для своего веб-приложения.

Допустим, если у меня есть два контроллера, A и B. Я хочу, чтобы представление A отображало div A, а представление B отображало div B.

Я знаю, как установить это внутри контроллера, используя if($this->router->fetch_class() == 'A') { //display div A }

Но как этого добиться?

Ответы [ 2 ]

3 голосов
/ 02 марта 2012

Noooo. Не делай так. ;) Жесткое кодирование строк для такого рода вещей - почти всегда плохой подход. Ваши взгляды станут беспорядочными, и удачи, когда вы переименуете классы вашего контроллера.

Во-первых, если этот код находится в вашем контроллере, разве вы не знаете, какой это контроллер?

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

  1. Переопределите его для каждого ребенка , сообщая методу parent::some_action(), какой div вы хотите отобразить. (Правильное делегирование «власти» здесь избавит вас от головной боли, которая развязывается позже ...)

  2. Вместо использования fetch_class(), используйте instanceof (так что ваша IDE сделает за вас тяжелую работу, если вы когда-нибудь переименуете класс).

  3. Рассмотрим разбиение этого материала на подпредставления (т.е. частичные). действительно делает беспорядочным сравнение строк в представлении. Доверять. Me.

Вот что я бы порекомендовал:

<?php
// Overridden core class
class MY_Controller extends CI_Controller {

    public function some_action()
    {
        //...
        if ($this instanceof Controller_class_that_uses_div_a)
        {
            $this->load->view('view_for_div_A');
        }
        else
        {
            $this->load->view('view_for_div_B');
        }
        //...
    }
}
3 голосов
/ 01 марта 2012

Вы можете иметь ту же логику в вашем контроллере и просто передать значение на ваш взгляд:

$class = $this->router->fetch_class();

$this->load->view('myView', 
                  array('class' => $class));

Тогда просто используйте эту переменную в вашем представлении:

if ($class == 'A') ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...