Pregunta

Estoy teniendo problema de formato variables de Smarty. Me preguntaba cuál es la mejor manera de hacerlo. Básicamente tengo una cadena? "ABC | DEFGH" Quiero Smarty para obtener la subcadena de "DEFGH" ¿Cómo voy a ir haciendo esto

{$var|substr:strpos:"|":strlen}

Por qué no funciona

¿Fue útil?

Solución

Sólo resuelto esto sin retrasando var en PHP, y mediante el uso de la incorporada en las envolturas de función.

Si se asume que: $ 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>

Esto imprimirá:

  • ABC | DEFGH
  • ABC
  • DEFGH
  • Otros consejos

    Algunos información sobre Smarty 3 en caso de que si alguien quiere lograr lo mismo en Smarty 3 y no en Smarty 2:

    Lo primero es que es necesario agregar paréntesis para que funcione. substr:$bar_at+1 no funcionará pero substr:($bar_at+1) va a funcionar.

    Pero, de hecho, puede utilizar la sintaxis más simple:

    {assign var="var" value="ABC | DEFGH"}
    
    {$var|substr:($var|strpos:"|"+1)}
    

    Esto le dará DEFGH con espacio al principio (antes y | son espacios dentro var en su pregunta y en mi ejemplo) y como usted desea conseguir cadena sin espacio que puedes usar en este caso +2 en lugar de +1:

    {$var|substr:($var|strpos:"|"+2)}
    

    Los anteriores se probaron en Smarty 3.1.19.

    También debería saber que en las versiones anteriores (antes de Smarty 3.1) si usted tiene en la cadena de caracteres UTF-8 en lugar usted debe utilizar las funciones mb_.

    A partir de Smarty Smarty 3.1 en el caso si la extensión mbstring se instala automáticamente utiliza funciones mb_ en ese caso, por lo que no habrá ningún problema con UTF-8.

    Puede leer más sobre Smarty codificación UTF-8

    Estas funciones no existen en Smarty. Vas a tener que dividirlo en PHP antes de enviarlo a la plantilla. O usted podría escribir su propia función de división Smarty plugin. O el uso de etiquetas {php} en la plantilla, pero yo evitaría que la solución, ya que está en contra del 'espíritu' y el propósito de la utilización de Smarty, la separación de presentación y la lógica, etc, etc.

    Cuando se utiliza como Jimby:

    {$var|substr:$bar_at+1}
    

    añado entre paréntesis o soporte de vuelta para hacer que funcione.

    {$var|substr:($bar_at+1)}
    
    Licenciado bajo: CC-BY-SA con atribución
    No afiliado a StackOverflow
    scroll top