Sto avendo problemi con la formattazione delle variables in smarty. Mi stavo chiedendo qual è il modo migliore per farlo. Fondamentalmente ho una string "ABC | DEFGH" voglio smarty per get la sottostring di "DEFGH" Come potrei fare per fare questo?
{$var|substr:strpos:"|":strlen}
non funziona
Ho appena risolto questo problema senza impostare var in PHP e usando i wrapper di function incorporati.
Supponendo che: $ var = "ABC | DEFGH";
{assign var="bar_at" value=$var|strpos:"|"} <li>{$var}</li> <li>{$var|substr:0:$bar_at}</li> <li>{$var|substr:$bar_at+1}</li>
Questo stamperà:
Quelle funzioni non esistono in smarty. Dovrai dividerlo in PHP prima di inviarlo al model. O potresti scrivere il tuo plugin smarty con function split. Oppure utilizzare i tag {php} nel model, ma eviterei tale soluzione in quanto è contraria allo "spirito" e allo scopo di utilizzare smarty, separazione della presentazione e della logica, ecc. Ecc.
Alcune informazioni su Smarty 3 nel caso in cui qualcuno volesse get lo stesso risultato in Smarty 3 e non in Smarty 2:
La prima cosa è che devi aggiungere parentesi per farlo funzionare. substr:$bar_at+1
non functionrà ma substr:($bar_at+1)
functionrà.
Ma in effetti puoi usare la syntax più semplice:
{assign var="var" value="ABC | DEFGH"} {$var|substr:($var|strpos:"|"+1)}
Questo ti darà DEFGH
con spazio all'inizio (prima e |
sono spazi dentro var nella tua domanda e nel mio esempio) e come vuoi get una string senza spazio dovresti usare in questo caso +2
invece di +1
:
{$var|substr:($var|strpos:"|"+2)}
Quelli sopra sono stati testati in Smarty 3.1.19
.
Dovresti anche sapere che nelle versioni precedenti (prima di Smarty 3.1) se nella tua string sono presenti caratteri UTF-8, dovresti usare mb_
funzioni mb_
.
A partire da Smarty 3.1 nel caso in cui sia installata l'estensione mbstring
Smarty utilizza automaticamente le funzioni mb_
in questo caso, quindi non ci saranno problemi con i caratteri utf-8.
Puoi leggere di più sulla codifica di Smarty utf-8
Quando si utilizza come Jimby:
{$var|substr:$bar_at+1}
Aggiungo parentesi o parentesi tonda per farlo funzionare.
{$var|substr:($bar_at+1)}