2010-12-08 11 views
8

Tengo variables de formato de problema en smarty. Me preguntaba cuál es la mejor manera de hacerlo. Básicamente tengo una cadena de caracteres "ABC | DEFGH". Quiero que Smarty obtenga la subcadena de "DEFGH". ¿Cómo voy a hacer esto?Smarty obteniendo subcadena de var con strpos como inicio y strlen como final

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

no funciona

+0

¿Qué se obtiene como salida? – BoltClock

+0

posible duplicado: http://stackoverflow.com/questions/4325283/smarty-substr-a-variable –

+0

Ver [esto] (http://www.smarty.net/forums/viewtopic.php?p=48137) Smarty tema. –

Respuesta

25

Solo resuelto esto sin establecer var de vuelta en PHP, y usando las envolturas de función incorporadas.

Suponiendo 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
  • +0

    ¡Sí! ¡Sabía que hay gota! Thaks hermano! – kjy112

    4

    Esas funciones no existen en Smarty. Tendrá que dividirlo en PHP antes de enviarlo a la plantilla. O puede escribir su propio plugin smarty de función dividida. O use etiquetas {php} en la plantilla, pero evitaría esa solución ya que está en contra del 'espíritu' y el propósito de usar smarty, separación de presentación y lógica, etc. etc.

    +3

    conclusión - no use smarty – ajreal

    +1

    La publicación del foro a la que se hace referencia anteriormente se refiere a un complemento, que no viene con smarty de forma predeterminada. Y truncar no hace lo que pidió, simplemente corta la cuerda a cierta longitud. – profitphp

    +1

    * nunca * use etiquetas {php} en una plantilla inteligente, use las funciones de complemento en su lugar – Kris

    0

    Cuando se utiliza como Jimby:

    {$var|substr:$bar_at+1} 
    

    añado entre paréntesis o soporte de ronda para hacerlo trabajo.

    {$var|substr:($bar_at+1)} 
    
    5

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

    El primero es que es necesario agregar paréntesis para hacer funciona. substr:$bar_at+1 no funcionará, pero substr:($bar_at+1) 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 quiera para conseguir cadena sin espacio que puedes usar en este caso en lugar de +2+1:

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

    Los de arriba se ensayaron en Smarty 3.1.19.

    También debe saber que en versiones anteriores (antes de Smarty 3.1) si tiene en su cadena los caracteres UTF-8, debería usar las funciones mb_.

    A partir de Smarty 3.1 en caso de que se instale la extensión mbstring Smarty automáticamente usa las funciones mb_ en ese caso para que no haya ningún problema con los caracteres utf-8.

    Puede leer más sobre Smarty utf-8 encoding

    Cuestiones relacionadas