Smarty ottenere sottostringa di una var con strpos come inizio e come fine strlen

StackOverflow https://stackoverflow.com/questions/4389978

  •  10-10-2019
  •  | 
  •  

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

È stato utile?

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

  • ABC | DEFGH
  • ABC
  • DEFGH
  • 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)}
    
    Autorizzato sotto: CC-BY-SA insieme a attribuzione
    Non affiliato a StackOverflow
    scroll top