Smarty: sintassi generale per concatenare stringhe

Come funziona la sintassi di Smarty? il manuale è poco chiaro!

esempio:

{if ($map[$sub.id-$dati[$key].id].$keyCat ==1)}Funziona! {/if} è corretto????

spiego:

$map[$sub.id-$dati[$key].id].$keyCat

dovrebbe assumere la seguente forma:

$map[1-2].1

corrispondente all'array php:

$map['1-2'][1]

se dovessi scrivere la formula di sopra in php scriverei:

$tmpKey = $sub['id'] . "-" . $dati[$key]['id'];

come faccio ad indicare a smarty che deve valutare prima le variabili e che il '-' non è un meno ma un carattere?

insomma come si concatenano le stringhe?

inviato 10 anni fa
arjuna
X 0 X

Mi sono un pò avvicinato:

{assign var="keyMap" value=`$sub.id`-`$cat[$key2].id`}

{$keyMap}

quanto scritto sopra stampa 1-1, tutto bene.

Però pare che 1-1 non venga accettato come indice di array

se scrivo

{$array[$keyMap]}

non stampa nulla

risposto 10 anni fa
arjuna
X 0 X

Eccert  :) in PHP gli array multidimensionali si richiamano così $array[1][1] e non $array[1-1] e nemmeno come in ASP $array[1,1], quindi dovrai riscrivere la tua funzioncina.

risposto 10 anni fa
Marco Grazia
X 0 X

ma 1-1 è la chiave dell'array, non è una notazione di mia invenzione per accedere agli altri livelli dell'array.

esso è:

$array['1-1'][1]

$array['1-2'][1]

etc...

ua, e mica sono idiota fino a questo punto!!!

nota gli apici che uso, 1-1 è una stringa altrimenti varrebbe 0!!! azz forse è questo il punto!!! devo provare a vedere di farmelo considerare una stringa!!!

risposto 10 anni fa
arjuna
modificato 10 anni fa
X 0 X

non è da escludere che il problema sia l'interpretazione della chiava come se fosse un'operazione (uno meno uno).

solo che non sono riuscito a passarlo come stringa...

ho provato sia:

{assign var="keyMap" value="`$sub.id`-`$cat[$key2].id`"}

che

{$map[`$keyCat`].$keyMap}

o

{$map["$keyCat"].$keyMap}

la prima non cambia nulla e le altre due danno errore...

risposto 10 anni fa
arjuna
X 0 X

Fai una prova, richiama quell'array con $array[0][1] e ved se ciò che resta è ciò che cercavi.

risposto 10 anni fa
Marco Grazia
X 0 X

tramite php posso fare quello che dici, mi da come risultato il valore giusto.

se scrivo:

echo $map[11]['1-2'];

ottengo il valore giusto, ossia 1

tramite smarty il problema è che non so come fare

se scrivo:

{$map.11.1-2}

non compare nulla

se scrivo:

{$map[11].1-2}

non compare nulla

se scrivo:

{$map[11]['1-2']}

da errore: syntax error: unrecognized tag

se scrivo:

{"$map[11].1-2"}

ottengo: Array.1-2

risposto 10 anni fa
arjuna
X 0 X

Perdonami, ma perché vuoi usare smarty?

risposto 10 anni fa
Marco Grazia
X 0 X

L'errore era a monte, l'array che passavo a smarty non era corretto, la situazione era cmq ambigua.

Ecco la soluzione definitiva:

{assign var="keyMar" value=$dati[$key].id}
{assign var="keyCat" value="`$sub.id`-`$cat[$key2].id`"}

{$map.$keyMar.$keyCat}

Uso smarty perchè è molto comodo per le parti amministrative dei siti.

Scrivo tutto il codice che gestisce l'amministrazione (la parte CMS) in una classe che inserisco in un file.

Un altro file si occupa di switchare in base all'url tra una funzione e l'altra della classe.

E in fine i dati che la classe elabora vengono passati ai vari template di smarty che visualizza i dati richiesti.

Ecco l'esempio in questione:

<h1>{if ($sub.sub)}Sotto {/if}Categorie Marche: {$sub.nome}</h1><br />

<form name="modmulti" method="POST" action="index.php?action=addCat{if ($sub.sub)}&sub={$sub.id}{/if}">

<table id="mytable" cellspacing="0" summary="Le marche nel database">

      <caption>Le marche nel database</caption>

   <thead>

      <tr>

         <th scope="col" abbr="Nome">Nome</th>

      {foreach key=key item=item from=$cat}

         <th scope="col" abbr="{$cat[$key].nome}">{$cat[$key].nome}</th>

      {/foreach}

      </tr>

   </thead>

   <tbody>
{foreach name=dati key=key item=item from=$dati}

   <tr>

   {if ($smarty.foreach.dati.iteration %2 == 0)}
      {assign var="classSp" value='class="spec"'}
      {assign var="classTr" value='class="tright"'}
      {assign var="classTc" value='class="tcenter"'}
   {else}
      {assign var="classSp" value='class="specalt"'}
      {assign var="classTr" value='class="altright"'}
      {assign var="classTc" value='class="altcenter"'}
   {/if}

      <td {$classTr}>{$dati[$key].nome}</td>

   {foreach key=key2 item=item2 from=$cat}

      {assign var="keyMar" value=$dati[$key].id}
      {assign var="keyCat" value=$cat[$key2].id}

      {if ($sub.sub)}
         {assign var="keyCat" value="`$sub.id`-`$cat[$key2].id`"}
      {/if}

      <td {$classTc}><input class="normal" type="checkbox" name="{if ($sub.sub)}{$sub.id}-{/if}{$cat[$key2].id}-{$dati[$key].id}" value="1" {if ($map.$keyMar.$keyCat ==1)}checked {/if}/></td>

   {/foreach}

   </tr>

{/foreach}

   </tbody>

</table>

<h3>Applica i cambiamenti</h3>

      <br />
      <input type="submit" value="Applica"><br />

   </form>
risposto 10 anni fa
arjuna
modificato 10 anni fa
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda