Renderizar dados no template

Tenho um controller chamado actionCidades, cujo objetivo é listar as cidades atendidas pela empresa.

O fato é que preciso listar essas cidades no template do site, para que as cidades sejam visualizadas em todas as páginas do site.

Tentei chamar a view cidades no template através do código abaixo:




<?php $this->beginContent('//cidades/lista_cidades'); ?>



Mas dá um erro na aplicação com a mensagem de que a variável $cidades não existe, mesmo ela estando setada com o objeto Cidades::model()->findAll(); no controller.

Comprei um livro sobre Yii e só encontrei o procedimento para renderizar as informações nas Views.

Sendo assim, é possível mostrar dados na template principal ?

Já resolvi.

Matei o coelho com uma só cajadada.

Para exibir os dados no template criei um Widget:




<?php

//Basta salvar o Widget. Eis o caminho protected/components/CidadeWidget.php


class CidadeWidget extends CWidget

{ 

    public function run()

    {

        $this->renderContent();

    }

 

    protected function renderContent()

    {

        $cidades = new Cidade;

        $this->render('listar_cidade',array('cidade'=>$cidades));

    }

}

?>


<?php

//Esse código vai no template, para chamar o Widget:


$this->widget('CidadeWidget');


?>



Genésio,

Antes de prosseguir para o segundo post eu ia responder isso pra você hehehe

Foi rápido!

No mais é isso mesmo, se deseja manter uma menu ou informações em várias partes do sistema, o widget cai bem.

Eu uso bastante widget no layout/main.php por que não tem Controller que renderiza os Model no Layout, ai eu uso o Widget.

Newerton,

Dá pra fazer a exibição no template sem fazer uso dos Widgets ?

Bom até onde eu sei todos templates, com excessão do layout padrão(layouts/main.php) dá pra exibir dados sem usar widgets.

Mais no seu caso o widgets cai bem, por que é feito 1 consulta só, ai você não precisa ficar adicionado a consulta em cada action, se quizer pode colocar essa consulta da cidades em cache.

Aproveitando o tópico do colega Genésio.

Eu poderia usar esse recurso para colocar várias consultas de models diferentes em um único arquivo?

Explicando:

No site o index usa o padrão do Yii, ou seja, controller/DefaultController.php que por sua vez chama o método actionIndex(), que chama views/site/index.php

Nesse arquivo teria todas as consultas que quero exibir no index.php

No total eu teria 7 Widgets e um + avançado que ñ sei se daria para usar o scope pois leria da msm tabela mas traria 3 resultados com parâmetros diferentes.

Ou existe oma forma mais aconselhável de fazer isso?

Alguém? rs

Guardar 7 consultas? Tem como explicar melhor? Pelo pouco que entendi, melhor fazer cada consulta em cada uma das suas 7 widgets.

Abraços

Não seria views/default/index.php?

Normalmente eu uso os widgets no views/layouts/main.php por que é o único que não tem um Controller para renderizar as consultas.

Como o views/default/index.php é a primeira view executada, eu costumo colocar todas as consultas no DefaultController => actionIndex().