Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal estou com uma duvida na utilização do Smarty:
Tenho o seguinte script:
<div class="section" name="demo1" style="position:relative;">
<div class="clearfix demo">
<div class="clearfix" style="position:relative;">
<ul>
<li><a href="uploads/galeriaProm/14.jpg" rel='gal1' id="demo1" title="Demostração" >
<img src="uploads/galeriaProm/14.jpg" title="Demostração" style="border: 1px solid #666;" width="562" height="435">
</a></li>
</ul>
</div>
<br/>
<ul id="thumblist" class="clearfix" >
{foreach from=$thumb item=row}
{literal}
<li><a class="zoomThumbActive" href='javascript:void(0);' rel="{gallery: 'gal1', smallimage: 'uploads/galeriaProm/{$row.thumb}',largeimage: 'uploads/galeriaProm/'}"><img src='uploads/galeriaProm/' width="171" height="136"></a></li>
{/literal}
{/foreach}
</ul>
</div>
</div>
Esse script faz parte de uma galeria jquery, o problema e, o Smarty não compila esse script por que contem os “{ }” do Smarty, para resolver isso temo o {literal} {/literal}, beleza ai a galeria funciona normal, o problema e, essa galeria tem que ser dinâmica tenho que inserir uma variável php.
Então não sei como inserir essa variável dentro do {literal} ou se tem outro modo de fazer isso.
Esta solução pode dar certo, mais curiosamente o Smarty não ta compilando, ta retornando um Fatal error, na linha que esta a tag {php}.
Alguma sugestão?
Talvez seja proibido colocar um bloco PHP dentro de um foreach.
Outras sugestões:
Tente usar {ldelim} e {rdelim} no lugar de '{' e '}' ou {$smarty.ldelim} e {$smarty.rdelim}.
Ref: http://www.smarty.net/docsv2/en/language.escaping.tpl
Tente modificar os delimitadores nas configurações do Smarty. Mas isso fará com que você tenha que editar todos os seus tempaltes. :-/
Eu não usei a tag {php} fiz assim no controller:
$arr = array("gallery" => 'gal1', "smallimage" => 'uploads/celula Jovem.jpg', "largeimage" => 'uploads/celula Jovem.jpg');
$sm->assign('arr',$arr);
Ai na view.tpl usei o {$arr|@json_encode}
Mais ai a galeria não ta funcionando, ta retornando o seguinte json:
{"gallery":"gal1","smallimage":"uploads\celula Jovem.jpg","largeimage":"uploads\celula Jovem.jpg"}
Será que por causa das aspas?
A barra ficou invertida. "uploads/" virou "uploads\". Tenta escapar, assim: \/.
Se eu coloca \/, o retorno fica assim:
{"gallery":"gal1","smallimage":"uploads\\\celula Jovem.jpg","largeimage":"uploads\\\celula Jovem.jpg"}
Não é problema no Smarty, é a função json_encode que já faz isso. E não tem como alterar esse comportamento.
Todas as imagens dessa galeria vem da pasta "uploads"? Se sim, não seria melhor editar essa parte no javascript, incluindo já esse diretório?
Cheguei em uma solução só não sei se é a mais adequada, fiz o seguinte:
A causa de todo o problema erra a compilação do Smarty, o script da galeria não funcionava com as tags que o Smarty gera, então fiz o seguinte.
Abri o arquivo compilado que o Smarty gera, apaguei a parte do script que o Smarty gero e coloquei o seguinte:
{gallery: 'gal1', smallimage: 'uploads/galeriaProm/<?php echo $_smarty_tpl->tpl_vars['row']->value['thumb'];?>', largeimage: 'uploads/galeriaProm/<?php echo $_smarty_tpl->tpl_vars['row']->value['thumb'];?>'}
Ai funciona legal!
Legal, pelo menos agora você pode prosseguir com o desenvolvimento... eu sei como é chato ficar empacado. Mas parece não ser a solução ideal, portanto é bom você documentar isso (com comentários, exemplo um "@todo: buscar um solução melhor para imprimir JSON usando Smarty") e voltar a esse problema em outra oportunidade.
Isso mesmo que irei fazer, brigado pela ajuda!
Cara, faz tempo que não uso Smarty e nem testei esse códgio (nem boto a mão no fogo pela correção da sintaxe), portanto não sei se via dar certo. Só estou dando uma ideia então.
O problema está nesse JSON, certo?
{gallery: 'gal1', smallimage: 'uploads/galeriaProm/{$row.thumb}
A minha ideia é transformar esse JSON em um array em um bloco PHP dentro do foreach:
{php}
{/php}
E tentar encodar esse array usando o smarty
{$arr|@json_encode}