• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

_JR_

[Resolvido] SMARTY - Variavel como um index array

13 mensagens neste tópico

Boas,

Utilizando o SMARTY o que eu queria fazer era algo deste género:

{$imagens[$z]} ou {$imagens[{$z}]}  [estes não funcionam, mas é apenas para perceberem o que eu quero fazer]

Em que imagens é uma array do género:

1 => img1.png

2 => img2.png

3 => img3.png

...

E em que $z é simplesmente um número definido no .tpl.

Como é que eu posso usar isso?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
echo $imagens[$z];
//ou se quiseres só embeber numa string:
echo "<img src='{$imagens[$z]}' alt='lol' />";

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

echo $imagens[$z];
//ou se quiseres só embeber numa string:
echo "<img src='{$imagens[$z]}' alt='lol' />";

Mas o SMARTY não é como uma página php.

Muito resumidamente, tens o código php a fazer tudo o que precisas, e depois envias as variáveis que precisas para uma template.

O meu problema é conjugar as duas variáveis.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

$variavel = $var.$imagens[$z]; <- ?

Tipo, dá um exemplo, nnc mexi em SMARTY.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

file.php

// cá para cima é adicionar as classes

$a = 1;
$b = 1;

if($a = $b)
$variavel = "Manuel"

$smarty->assign('nome',$variavel);

//etc etc

$smarty->display('file2.tpl');

file2.tpl

<html>
<head>
</head>
<body>
Chamo-me {$nome}
</body>
</html>

Penso que já deu para entender como funciona.

Depois, o .tpl "suporta" variadas funções, como if, foreach, e podes fazer um assign a qualquer variavel dentro do .tpl.

Ora, eu tenho isto:

										
{assign var="i" value="0"}
{foreach from=$imagens item=imagem}
{if $i lt $quantidade}
{assign var="z" value="`$i+$pagina2`"}
{assign var="i" value="`$i+1`"}
<a href="http://site.com/{$imagem[$z]}"><img src="http://site.com/{$imagem[$z]}" width="150" height="150" border="0"></a><br/><br/>
{/if}	
{/foreach}														
</td>
</tr>
<tr>
<td>
{assign var="i" value="0"}
{foreach from=$imagens item=imagem}
{if $i lt $nPaginas}
{assign var="z" value="`$i+1`"}
{assign var="i" value="`$i+1`"}
{if $i neq $pagina}
<a href="gestao_galeria.php?page_action=novas&pagina={$i}">{$z}</a>
{else}
{$z}
{/if}															
{/if}
{/foreach}

Ou seja, o que eu quero fazer é uma galeria de imagens com páginas. Sendo que de trás já vem a array $imagens com todas as imgens, o $pagina2 (pagina*quantidade de imagens), o $pagina e $nPaginas (nº de imagens/quantidade)

O problema está mesmo no tal {$imagem[$z]}

PS: Convém salientar que quando faço [$imagem[$z]} saí algo assim (A pasta das imagens é .../uploads/uploads/ ):

<a href="http://site.com/d"><img'>http://site.com/d"><img src="http://site.com/d" width="150" height="150" border="0"></a><br/><br/>

<a href="http://site.com/s"><img'>http://site.com/s"><img src="http://site.com/s" width="150" height="150" border="0"></a><br/><br/>

<a href="http://site.com//"><img'>http://site.com//"><img src="http://site.com//" width="150" height="150" border="0"></a><br/><br/>

<a href="http://site.com/u"><img'>http://site.com/u"><img src="http://site.com/u" width="150" height="150" border="0"></a><br/><br/>

<a href="http://site.com/p"><img'>http://site.com/p"><img src="http://site.com/p" width="150" height="150" border="0"></a><br/><br/>

Reparem nos endereços. Sai a letra correspondente ao $z + 4.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Experimenta:

$smarty->assign('imagem',array("d" => "lol.gif", "s" => "lolz.jpg"));

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

$smarty->assign('imagem',array("d" => "lol.gif", "s" => "lolz.jpg", "/" => "lolz.png"));

<a href="http://site.com/l"><img'>http://site.com/l"><img src="http://site.com/l" width="150" height="150" border="0"></a><br/><br/>

<a href="http://site.com/o"><img'>http://site.com/o"><img src="http://site.com/o" width="150" height="150" border="0"></a><br/><br/>

<a href="http://site.com/l"><img'>http://site.com/l"><img src="http://site.com/l" width="150" height="150" border="0"></a><br/><br/>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Depois de uns testes, vi que o problema não está no smarty.

Se tiver:

[ 0] => ola

[1] => ola1

[2] => ola2

Ao fazer:

echo $array[0];

É suposto fazer 'ola'?

Isto foi uma dúvida que entretanto me surgiu por pensar que estava errado, mas estou certo.

O problema é que ao fazer o tal {$imagem[$z]} (sim, sempre é assim), ou mesmo, por exemplo, {$imagem[1]} devolve-me o caracter respectivo (tal como disse em cima, $z+4).

Continuo à espera de soluções.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Peço desculpa pelo "triple" post, mas finalmente consegui resolver!

Não sei como não me lembrei antes, mas o smarty suporta a inserção de código php na template.

Para os interessados:

{php}
global $i, $quantidade, $z, $imagens, $pagina2;
for($i = 0; $i < $quantidade; $i++) {
	$z = $i + $pagina2;
	echo "<a href=\"http://page.com/".$imagens[$z]."\"><img src=\"http://page.com/".$imagens[$z]."\" width=\"150\" height=\"150\" border=\"0\"></a><br/><br/>";
}															
{/php}	

No entanto, se alguém souber a solução ao problema apresentado anteriormente, que diga, pois fiquei com curiosidade :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

No entanto, se alguém souber a solução ao problema apresentado anteriormente, que diga, pois fiquei com curiosidade :)

Penso que seja: {$array.key}. No teu caso {$imagens.$z} não resolve o assunto?

The previous advices is courtesy of Smarty Manual ™  :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ah, pensei que a variável $z fosse passada ao template, afinal estavas-te a referir a um loop... De qualquer forma, graças ao teu post decidi experimentar o smarty, e aquilo é... simplesmente... lindo! Simples, poderoso... como diz o outro, por mim 'tá convocado. :cheesygrin:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu não experimentei por gostar, foi quase que como por obrigação :P

Mas também estou a gostar muito. Baste começares a perceber como funciona que gostas logo daquilo :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora