Ir para conteúdo

POWERED BY:

Arquivado

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

Bruno Augusto

[Resolvido] concatenar variável num loop

Recommended Posts

Às vezes, um branco como esses pode atormentar com um tema tão banal quanto o proposto aqui.

 

Preciso adaptar esse trecho:

 

		foreach( $this -> result -> toArray() as $data ) {

		$output  = "<option value='". $data['cat_id'] ."'>";
		$output .= $_indent . $data['name'];
		$output .= "</option>\n";

		// Exibindo a categoria

		echo $output;

		// Gerando Subcategorias

		$this -> buildCategories( $data['cat_id'], $depth + 1, $indent );
	}

Para que ao invés de exibir em tela, retorne a variável, pois preciso criar uma variável de template Smarty e, com echo não dá certo :P

 

Só para constar, $_indent é uma string simples, que determina qual o caractere antecederá o texto, como por exemplo --. E, obviamente, $this-> result -> toArray() é uma matriz de resultados vinda do banco de dados. Aqui, no caso, através de Zend_Db

 

Pior é que eu tentei ocultar o echo e concatenar à própria $output a recursividade das função. Funcionar até funcionou, a não ser pelo fato de que todas as categorias-pai anteriores a última são ignoradas.

 

Ex: As categorias de ID 1, 6 e 11 são categorias-pai. Ecoando o código, o menu dropdown é construído perfeita e inteiramente. Mas, ao tentar retornar, apenas a categoria de ID 11 e suas filhas são exibidas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

a não ser pelo fato de que todas as categorias-pai anteriores a última são ignoradas.

Por que na primeira linha do foreach você seta a $output. Olha...

 

$output  = "<option value='". $data['cat_id'] ."'>";
$output .= $_indent . $data['name'];
$output .= "</option>\n";

 

Tenta setar ela antes e só concatenar dentro do foreach.

 

Outra coisa... pra que usar aspa dupla ali? Não seria melhor assim?

$output .= '<option value="'. $data['cat_id'] .'">';
$output .= $_indent . $data['name'];
$output .= '</option>\n';

Melhora o desempenho

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

@João

 

De fato está faltando informação, mas por experiência própria decidi suprimir, por exemplo, o array retornado por Zend_Db para que post ficar menor. As vezes posts grandes assustam as pessoas e elas não respondem :P

 

@matias

 

Não falei que era um probleminha banal? Fiquei tão preocupado em montar a estrutura do BD e fazer o loop recursivo que nemme toquei que, a partir da segunda iteração, a ausência dooperador de concatenação resetaria a variável.

 

Era exatamente esse o problema. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

Mas quanto sua colocação sobre as aspas, na terceira concatenação (que tem a quebra de linha), entre aspas simples, literaliza o efeito de \n. Assim no código fonte fica tudo numa única linha.

 

É o único caso em que uso aspas duplas. O fato de ter usado na primeira também concatebação também, foi puramente por frescura estética. :P

 

P.S.: Seu nome é "Carlos Eduardo", "Matias Rezende" ou tudo junto :lol:

 

Abraços pros dois.

Compartilhar este post


Link para o post
Compartilhar em outros sites

P.S.: Seu nome é "Carlos Eduardo", "Matias Rezende" ou tudo junto

Tudo junto.. http://forum.imasters.com.br/public/style_emoticons/default/grin.gif

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tudo bem, embora não concorde que este título condiza (conjuguei certo?) com a dúvida.

 

Acredito que penas adicionar em loop no título anterior ficasse melhor.

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.