Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
estou tentano fazer o seguinte, criei uma estrutura com zend layout, e todos meus views usam este layout, a dúvida é, esse layout contem um include de categorias que vem de banco, como fazer esse include no layout e ser dinamico, tipo é possivel usar um controller pra isso?
>
Fala Anderson,
Simplesmente crie seu model que traz os dados do db, e instancie o model no seu layout...
Por exemplo, digamos que você tenha a seguinte estrutura no seu Layout.
-Application
--layouts
---scripts
---footer.phtml // O rodapé da sua página
---header.phtml // O cabeçalho
---layout.phtml // A página do layout em si, nela renderizaremos as outras páginas referentes ao layout...
---side_lft.phtml // A coluna da esquerda, mostrarei como renderizar um menu de categorias dinâmico.
Seu model.
<?php
class Model_Categorias extends Zend_Db_Table_Abstract
{
protected $_name = 'categorias';
public function getCategories()
{
$result = $this->fetchAll();
return $result;
}
}
Agora, é simples, como queremos mostrar o resultado das categorias no nosso side_lft.phtml, fazemos assim.
side_lft.phtml
// Cria a instancia do Model na view
<?php $model = new Model_Categorias();
$cats = $model->getCategories();
?>
// Fazemos um loop utilizando Foreach para exibir cada resultado
<?php foreach ($this->cats as $cate):?>
<?php echo $this->escape($cate->categoria); . "\n"?>
<?php endforeach;?>
Agora no seu layout.phtml, renderizamos tudo...
layout.phtml
... // resto do seu codigo.
<body>
<div id="header"><?php echo $this->render('header.phtml') . "\n";?></div>
<div id="side_lft"><?php echo $this->render('side_lft.phtml') . "\n";?></div>
<div id="content"><?php echo $this->layout()->content . "\n";?></div>
<div id="clearer"></div>
<div id="footer"><?php echo $this->render('footer.phtml') . "\n";?></div>
</body>
Acho que é isso, espero ter te ajudado, qualquer duvida posta ae flw, tenho estado muito ocupado com trabalho e não tenho estado tão presente aqui como gostaria, mas tendo ajudar sempre que posso..
Abraço
intendi, mas tipo, é possivel por ex, eu fazer isso como um controlador, instanciar esse model no controlador enviar a lista para view e a view por sua vez somente iterar essa lista, assim nao tenho que instanciar nenhum modelo na view, somente iterar minhas listas e colocar onde deve ser colocada...???
Sim claro que você pode, mas achei que sua dúvida fosse de como instanciar o model para seu layout.
Simplesmente faça o seguinte.
IndexController.php
<?php
class IndexController extends Zend_Controller_Action
{
public function init()
{
}
public function indexAction()
{
$model = new Model_Categorias();
$result = $model->getCategories();
$this->view->result = $result;
}
}
Agora na sua view index.phtml
<?php foreach ($this->cats as $cate):?>
<?php echo $this->escape($cate->categoria); . "\n"?>
<?php endforeach;?>
Mas denovo a sua dúvida, dessa forma você devera instanciar o model em cada view, se quiser que seu menu categorias seja exibido em cada uma de suas views sem precisar instanciar o model e fazer tudo denovo em cada uma delas, a maneira que te mostrei é a mais correta e sem falar muito mais fácil de manter.
Abração
Fiz isso que voce disse, criei o model e instaciei ele no layout, mas diz que não encontra meu model
Fatal error: Class 'MainMarcas' not found in /media/backup/www/matrizveiculos/application/layouts/scripts/layout.phtml on line 47
meu application/layouts/layout.phtml
<!-- menuSite -->
<div id="menuSite">
<?php
$model = new MainMarcas();
$marcas = $model->getMarcas();
foreach ($marcas as $marca)
{
echo "<li>" . $this->escape($marca->descricao) . "</li>";
}
?>
</div>
meu application/models/MainMarcas.php
<?php
class MainMarcas extends Zend_Db_Table_Abstract
{
protected $_name = "marcas";
public function getMarcas()
{
$result = $this->fetchAll();
return $result;
}
}
Segundo a documentação, Zend_Db_Table_Abstract devem ser instanciadas apartir de application/models/DbTable, então tb ja coloquei minha classe la, testei e não funcionou.
Tem alguma dica pra me dar ai?
Valeu!
Fala Anderson,
Simplesmente crie seu model que traz os dados do db, e instancie o model no seu layout...
Por exemplo, digamos que você tenha a seguinte estrutura no seu Layout.
-Application
--layouts
---scripts
---footer.phtml // O rodapé da sua página
---header.phtml // O cabeçalho
---layout.phtml // A página do layout em si, nela renderizaremos as outras páginas referentes ao layout...
---side_lft.phtml // A coluna da esquerda, mostrarei como renderizar um menu de categorias dinâmico.
Seu model.
<?php
class Model_Categorias extends Zend_Db_Table_Abstract
{ Agora, é simples, como queremos mostrar o resultado das categorias no nosso side_lft.phtml, fazemos assim.{
side_lft.phtml
// Cria a instancia do Model na view
// Fazemos um loop utilizando Foreach para exibir cada resultado
Agora no seu layout.phtml, renderizamos tudo...
layout.phtml
... // resto do seu codigo.
Acho que é isso, espero ter te ajudado, qualquer duvida posta ae flw, tenho estado muito ocupado com trabalho e não tenho estado tão presente aqui como gostaria, mas tendo ajudar sempre que posso..
Abraço