Lo primero a tener en cuenta
Solo se analizan las siguiente etiquetas:
- BEGIN
- BEGINELSE
- END
- IF
- ELSE
- ELSEIF
- ENDIF
- DEFINE
- UNDEFINE
- INCLUDE
- INCLUDEPHP
- PHP
- ENDPHP
Los operadores que se permiten en las comparaciones son:
- == [eq]
- != [neq, ne, <>]
- !== (no idéntico en valor y tipo)
- === (idéntico en valor y tipo)
- > [gt]
- < [lt]
- >= [gte]
- <= [lte]
- && [and]
- || [or]
- % [mod]
- ! [not]
- +
- -
- *
- /
- is (para usar junto a los siguientes operadores)
- even (par)
- odd (impar)
- div
- Operadores a nivel de de bit
- << (desplazar a la izquierda)
- >> (desplazar a la derecha)
- | (or)
- ^ (xor)
- & (and)
- ~ (not)
Características específicas para un correcto funcionamiento
- Debe haber solo un espacio de separación entre los distintos elementos ya que en algunos casos los espacios pueden propiciar errores o comportamientos inesperados:
MalBienCódigo: Seleccionar todo
<!--IF xxx == 1 --> <!--IF xxx==1-->
Código: Seleccionar todo
<!-- IF xxx == 1 -->
- El espacio más importante es el que se encuentra entre el inicio del comentario HTML y el nombre de la etiqueta, si el espacio no se encuentra la etiqueta pierde su valor y produce errores:
Mal<!--END xxx -->Código: Seleccionar todo
<!--IF xxx --> <!--ELSE --> <!--ENDIF --> <!--BEGIN xxx -->
BienCódigo: Seleccionar todo
<!-- IF xxx --> <!-- ELSE --> <!-- ENDIF --> <!-- BEGIN xxx --> <!-- END xxx -->
- A cada etiqueta BEGIN le corresponde una END y viceversa
- A cada etiqueta BEGINELSE le corresponde una BEGIN y por consiguiente también una END
- El orden para esta construcción es BEGIN - END o BEGIN - BEGINELSE - END
- A cada etiqueta IF le corresponde una ENDIF y viceversa
- A cada etiqueta ELSE o ELSEIF le corresponde una IF y por consiguiente también una ENDIF
- El orden para esta construcción es IF - ENDIF o IF - ELSE - ENDIF o IF - ELSEIF - ENDIF o IF - ELSEIF - ELSE - ENDIF
- Pueden haber varias etiquetas ELSEIF (con su respectiva condición) en una construcción pero solo una ELSE, la ELSE siempre debe ser la última
- Las nombres para las variables definidas con DEFINE se rigen por las mismas limitantes que los nombres de las variables en PHP (lenguaje de programación)
- Para asignarles valor se utiliza solo un signo igual (=) y las cadenas se deben encerrar entre comillas simples
- Las etiquetas INCLUDEPHP y PHP solo funcionan si está habilitada la opción Permitir PHP en plantillas que se encuentra en ACP >> Pestaña General >> Configuración de seguridad
- Las etiquetas INCLUDE e INCLUDEPHP funcionan de manera similar
- A la etiqueta PHP le corresponde la etiqueta ENDPHP para el cierre:
Código: Seleccionar todo
<!-- PHP --> echo 'algo'; <!-- ENDPHP -->
- Todas deben escribirse en mayúsculas
- Deben ir encerradas entre las etiquetas de comentario de HTML:
Código: Seleccionar todo
<!-- INCLUDE xxxx.html -->
- Cuando hayan construcciones anidadas la primera que abre es la última que cierra:
BienMalCódigo: Seleccionar todo
<!-- IF variable == 1 --> <!-- BEGIN algo --> <!-- END algo --> <!-- ENDIF -->
Código: Seleccionar todo
<!-- IF variable == 1 --> <!-- BEGIN algo --> <!-- ENDIF --> <!-- END algo -->
Código: Seleccionar todo
<!-- IF condición == 1 -->
La condición es igual a 1
<!-- ELSEIF condición == 2 -->
La condición es igual a 2
<!-- ELSE -->
La condición no es igual a 1 ó 2
<!-- ENDIF -->
Código: Seleccionar todo
<!-- INCLUDE archivo.html -->
Código: Seleccionar todo
<!-- BEGIN ejemplo -->
{ejemplo.NAME}
<!-- BEGINELSE -->
No hay ejemplo
<!-- END ejemplo -->
Código: Seleccionar todo
<!-- DEFINE $variable = 'algo' -->
{$variable}
<!-- UNDEFINE $variable -->
Código: Seleccionar todo
<!-- INCLUDEPHP archivo.php -->
<!-- PHP -->
echo 'php';
<!-- ENDPHP -->
Estos son algunos de los errores que más comúnmente se muestran por un incorrecto uso de las etiquetas en las plantillas. Pueden existir otros o pueden ocurrir por otros motivos... estos son solo los que yo encontré.
Código: Seleccionar todo
template->_tpl_load_file(): File ./styles/prosilver/template/xxxx.html does not exist or is empty
Código: Seleccionar todo
Parse error: parse error, unexpected '}' in C:\xampp\htdocs\quick\boards\test\includes\template.php(230) : eval()'d code on line 3
Código: Seleccionar todo
Parse error: parse error, unexpected $ in C:\xampp\htdocs\quick\boards\test\cache\tpl_prosilver_index_body.html.php on line 23
Código: Seleccionar todo
Parse error: parse error, unexpected T_SR in C:\xampp\htdocs\quick\boards\test\includes\template.php(230) : eval()'d code on line 4
Código: Seleccionar todo
Parse error: parse error, unexpected '(' in C:\xampp\htdocs\quick\boards\test\includes\template.php(230) : eval()'d code on line 5
Código: Seleccionar todo
template->_php_include(): File ./xxxx.php does not exist or is empty
Código: Seleccionar todo
Parse error: parse error, unexpected T_ELSE in C:\xampp\htdocs\quick\boards\test\includes\template.php(230) : eval()'d code on line 11
Si falta el PHP o el ENDPHP se muestra directamente el contenido entre ellos sin evaluarlo.
Aprende a usar los IF STATEMENT leyendo esta guía.