Smarty ottenere sottostringa di una var con strpos come inizio e come fine strlen
Domanda
Sto avendo problema di formattazione In Smarty le variabili. Mi chiedevo che cosa è il modo migliore per farlo. Fondamentalmente ho una stringa? "ABC | DEFGH" voglio smarty per ottenere la stringa di "DEFGH" Come potrei fare per fare questo
{$var|substr:strpos:"|":strlen}
non lavoro
Soluzione
Proprio risolto questo senza impostare var torna in PHP, e utilizzando il built-in involucri di funzione.
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à:
Altri suggerimenti
Qualche informazione su Smarty 3 nel caso in cui se qualcuno vuole raggiungere lo stesso in Smarty 3 e non in Smarty 2:
La prima cosa è che è necessario aggiungere le parentesi per farlo funzionare. substr:$bar_at+1
non lavoro, ma substr:($bar_at+1)
funzionerà.
Ma in realtà si può usare la sintassi più semplice:
{assign var="var" value="ABC | DEFGH"}
{$var|substr:($var|strpos:"|"+1)}
Questo vi darà DEFGH
con lo spazio all'inizio (prima e |
sono spazi all'interno var nella tua domanda e nel mio esempio) e come si desidera ottenere stringa senza spazio che si dovrebbe usare in questo caso +2
invece di +1
:
{$var|substr:($var|strpos:"|"+2)}
Quelli sopra sono stati testati in Smarty 3.1.19
.
Si dovrebbe anche sapere che nelle versioni precedenti (prima Smarty 3.1) se si dispone nella stringa di caratteri UTF-8 si dovrebbe piuttosto utilizzare le funzioni mb_
.
Smarty partire da Smarty 3.1 nel caso se è installato estensione mbstring
utilizza automaticamente funzioni mb_
in questo caso quindi non ci sarà alcun problema con utf-8 caratteri.
Si può leggere di più su Smarty codifica UTF-8
Queste funzioni non esistono in Smarty. Dovrai dividerlo in PHP prima di inviarlo al modello. Oppure si potrebbe scrivere il proprio plugin di Smarty funzione split. O utilizzare {php} tag nel modello, ma eviterei questa soluzione in quanto è contro la 'spirito' e scopo di utilizzare Smarty, separazione della presentazione e la logica, ecc ecc.
Quando si utilizza come Jimby:
{$var|substr:$bar_at+1}
aggiungo parentesi o parentesi tonda per farlo funzionare.
{$var|substr:($bar_at+1)}