Autor Zpráva
maks
Profil
Ahoj,
mám vytvoření konfigurační textový soubor, config.conf, kde mám definované překlady pro různé jazykové mutace.

V templatě procházím pole foreachem:
{foreach from=$data item=item key=key}
	<label for={$key}>{#$key#}</label>
	<input type="checkbox" class="checkbox" name={$key} id={$key} {if $item == 1}checked="checked" {/if}/>
{/foreach}
ale chyba nastává v té proměnné. Zkoušel jsem ji uzavřít do kulatých i chlupatých závorek, ale vždy jsem skončil na unrecognized tag. V configuračním souboru mám pochopitelně seznam všech možných klíčů pole proměnné.

Otázka je tedy prostá: Jak dostat proměnnou mezi dva "#", abych podle ní mohl přiřazovat texty? Jde o to, že těch proměnných tam bude střídavě a bude jich tam dost (cca 30), proto je nemohu vypsat po jedné (a bylo by to asi i nesystémové :-))

Děkuji.
AM_
Profil
zkusil bych alternativní zápis $smarty.config.$key, nejsem si ale 100% jistý, jestli to funguje.
lingvik
Profil
maks:
Ahoj, já jsem tohle dělal pomocí smarty funkce eval. V PHP jsem do Smarty nacpal proměnnou, jejímž obsahem nebyl klíč do konfiguračního souboru, ale rovnou celý smarty tag pro vypsaní hodnoty. Asi takhle:

PHP:
$a = '{#klic#}';
$smarty->assign('a', $a);


Template:
{eval($a)}


Píšu to z hlavy a už to je nějaká doba, co jsem to naposled dělal, tak to snad mám správně. Principiálně to ale funguje. Jenom je potřeba dát bacha na to, co se do evalu dostane, protože eval je obecně nebezpečný.

Je ovšem pravda, že přístup pomocí
$smarty.config.$key
je lepší (pokud to zafunguje, podle dokumentace by mělo). Já tu eval fintu potřeboval v docela jiné situaci, kde jsem neměl jinou možnost.
maks
Profil
lingvik:
{eval($a)}
evalu bych se rád vyhnul, nebude-li nezbytně nutný.

Je ovšem pravda, že přístup pomocí $smarty.config.$key
bohužel, hází tutéž chybu jako se samotnou proměnnou $key.
lingvik
Profil
maks:
Co jsi použil?
{#$smarty.config.$key#}
nebo
{$smarty.config.$key}
Správně je druhá možnost.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: