Pass an array of one query to all Codeigniter pages

3

It has a view that repeats itself in all the others through a

$this->load->view('menu');

would I have a way to load the dynamic menu query in all other views with the above line? If I do this on all controllers, of course it's true:

$dados['menus'] = $this->Menu_model->menus();
$this->load->view('layout/menu', $dados);

... but I'd like to know if you have a way of not repeating this in controllers and use the above line in only one place, as if it were a constant.

Thanks!

    
asked by anonymous 31.05.2016 / 19:20

1 answer

2

You can create a% control_controller class that extends the CodeIgniter MY_Controller class and then make all your controllers extend to your custom class. The logic is to create a base file that has everything that will repeat on every page of your site, ie static content (eg headers, menus and footers), this base file I call CI_Controller . From then on, every time you call a new page, the v_base would be fired and within that file, it would be called its content.

In this custom class, you would have more or less the following configuration:

class MY_Controller extends CI_Controller {

    private $dadosPagina; // Informações (variáveis) que serão usados na página carregada
    private $v_base; // Arquivo base da interface (menus fixos, cabeçalho e rodapé da página)

    public function __construct() {
        parent::__construct();
        $this->dadosPagina = array();
        $this->v_base = array();
    }

    /**
     * Adiciona dados à página que será carregada, como variáveis
     * @param String $nome Identificador da variável
     * @param String $valor Valor a ser usado a partir da chamada de seu identificador
     */
    protected function addDadosPagina($nome, $valor) {
        $this->dadosPagina[$nome] = $valor;
    }

    /**
     * Adiciona um título à página que será carregada
     * @param String $valor Título para a página
     */
    protected function addTituloPagina($valor) {
        $this->dadosPagina['tituloPagina'] = $valor;
    }

    /**
     * Carrega uma página do site
     * @param String $pagina Caminho do arquivo da página (path) (sem a extensão)
     */
    protected function mostrarPagina($pagina) {            
        $this->v_base['conteudo'] = $this->load->view($pagina, $this->dadosPagina, true);
        $this->load->view('v_base', $this->v_base);
        $this->dadosPagina = array(); // zerar atributo dadosPagina
        $this->v_base = array(); // zerar atributo v_base
    }

}

Calling these functions would look like this:

class Paginas_Usuarios extends MY_Controller {

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

    /**
     * Carregar página de cadastro de usuário.
     */
    public function cadastrar_usuario() {
        $this->addTituloPagina('Cadastro de Usuário');
        $this->mostrarPagina('usuario/v_cadastrar');
    }
}
    
31.05.2016 / 21:05