Smarty conseguir subcadena de un var con strpos como inicio y final como strlen
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
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á:
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)}