Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

andersonpda

Zend Layout

Recommended Posts

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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...???

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.