Smarty ottiene la sottostring di una var con le stringhe come inizio e strlen come fine

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à:

  • ABC | DEFGH
  • ABC
  • DEFGH
  • 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)}