Ir para conteúdo

POWERED BY:

Arquivado

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

zenfra

[Resolvido] element

Recommended Posts

Boa tarde,

 

 

Eu estou criando um element para poder utilizar chamando nos layouts que eu precisar de um menu superior em minha aplicação, porém, quando o chamo no layout ele apresenta um erro no foreach que não estou conseguindo resolver.

 

 

Meu element esta criado da seguinte forma:

 

<?php

   $Estruturas = $this->requestAction('/estruturas/pai');
   
   foreach( $Estruturas as $estrutura ):
    
	print $estrutura['Estrutura']['ds_descricao'];
	
   endforeach;

  ?>

Os dados são chamados através de uma requestAction para o model estrutura e método pai, que retorna os registros,

segue método no controller da estrutura:

 

<?php

  class EstruturasController extends AppController {
  
    var $name      = 'Estruturas';
    var $helpers   = array( 'Html' , 'Form' , 'Javascript' , 'Ajax' );
	
	function index(){

      $this->set( 'Estruturas' , $this->Estrutura->find( 'all' )) ;	
	
	}
	
	function pai(){
	
	   $Estrutura = $this->Estrutura->find( 'all' , array( 'fields' => array( 'Estrutura.id' , 'Estrutura.ds_descricao' )));

       $this->set( 'Estruturas' , $Estrutura );									
	
	}
	
  }

?>

 

Então tenho meu layout:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
 <head><title>opa</title>
 <?php print $html->charset(); ?>
 <?php print $html->css( array( 'estrutura' ) ); ?>
 <?php echo $scripts_for_layout ?>
 </head>
 <body>
   
    <div id="DivGeral">
	  <div id="DivTopo">
	   <div id="DivTopoTopo">
	     <ul>
		   <li>[ Modo 800 x 600 ]</li>
		   <li>[ Aumentar fonte A+ | A- ]</li>
		   <li>[ Efetuar logon ] </li>
		 </ul>
	   </div>
	   <div id="DivTopoCentro">
	    <div id="DivTopoCentroTopo">
		 
		   <?php print 'São Paulo, 20 de Novembro de 2009'; ?>

		</div>
	      <?php print $html->image('logo.jpg', array( 'alt' => 'Franze Sobre Tecnolofia' )); ?>
	   </div>
	   <div id="DivTopoBase">
	     <?php print $this->element('menu_administrativo_superior'); ?>
	   </div>
	  </div>
	  <div id="DivCentro">
	    <div id="DivCentroTopo">
		 <div id="DivCentroTopoEsquerda"></div>
		  <div id="DivCentroTopoDireita">
		      <p><strong>Você esta em: </strong><a href="javascript:void(0)"> Principal</a> > <a href="javascript:void(0)">Usuario</a> </p>
			</div>
		</div>
		<div id="DivCentroEsquerda"></div>
		<div id="DivCentroDireita">
		  <div id="DivCentroDireitaTopo">
		      <div id="DivCentroDireitaTopoEsquerda">
			    <ul>
				 <li><img src="../img/add.png"/> <strong>Novo Cadastro</strong></li>
				</ul>
			  </div>
		      <div id="DivCentroDireitaTopoDireita">
			    <ul>
				  <li> <img src="../img/info_info.png" /> Exibe informações do usuário </li>
				  <li> <img src="../img/ativo_info.png"/> Inativa usuário</li>
				  <li> <img src="../img/delete_info.png"/> Excluí usuário</li>
				</ul>
			  </div>
		  </div>
		  <div id="DivCentroDireitaCentro">
		     <?php print $content_for_layout; ?> 
		  </div>
		</div>
	  </div>
	  <div id="DivFooter">
	  </div>
	</div>
   
   </div>
      <?php $session->flash();  ?>
   </div><!-- É aqui que eu quero que minhas views apareçam -->
 
   <!-- Adicione um rodapé para cada página mostrada -->
   <div id="footer">...</div>
   </body>
 </html>

 

E chamo o element dentro do layout na seguintes linhas e da seguinte forma:

 

<div id="DivTopoBase">
	     <?php print $this->element('menu_administrativo_superior'); ?>
	   </div>

 

Mas é apresentado o seguinte erro:

 

Warning (2): Invalid argument supplied for foreach() [APP\views\elements\menu_administrativo_superior.ctp, line 5]

Que na linha 5 do element é a seguinte linha:

 

foreach( $Estruturas as $estrutura ):

 

Alguém saberia me dizer o que pode ser, já que estou acompanhando a documentação do cakePHP sobre elements no link cakePHP elements e aparamentemenre esta correto?

 

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

No método "pai" dentro de EstruturasController você não tem que usar o $this->set e sim o return... Assim:

 

function pai() {
	$Estrutura = $this->Estrutura->find( 'all' , array( 'fields' => array( 'Estrutura.id' , 'Estrutura.ds_descricao' )));
	return $Estrutura;
}
Isso acontece pois quando você usou o:

 

$Estruturas = $this->requestAction('/estruturas/pai');
Significa que $Estruturas vai receber O RETORNO de $this->requestAction(...);

 

Entendeu? :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa...

 

Valeu cara fucionou ... Então meu controller fica assim:

  <?php

  class EstruturasController extends AppController {
  
    var $name      = 'Estruturas';
    var $helpers   = array( 'Html' , 'Form' , 'Javascript' , 'Ajax' );
	
	function index(){

      $this->set( 'Estruturas' , $this->Estrutura->find( 'all' )) ;	
	
	}
	
	function pai(){
	
	   $Estrutura = $this->Estrutura->find( 'all' , array( 'fields' => array( 'Estrutura.id' , 'Estrutura.ds_descricao' )));

       return $Estrutura;							
	
	}
	
  }

?>

 

Onde a linha que antes era assim:

 

$this->set( 'Estruturas' , $Estrutura );

Deve ficar na realidade assim:

 

return $Estrutura;

Não havia prestado atenção nesse detalhe no documento, mas esta lá, acompanhando o item 3.10.3.1 Passando Variáveis para um Elemento

 

 

 

Beleza, Obrigado!

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.