Página 1 de 1

Errores más comunes en las plantillas  Tema Solucionado

Publicado: 14 Oct 2014, 19:21
por towen
En esta guía se muestran los errores más comunes producidos por un mal uso de las etiquetas especiales de phpBB en las plantillas y algunos consejos sobre como deben escribirse correctamente.

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
Cualquier otra es tomada como un simple comentario HTML y carece de valor para el intérprete de los códigos de las plantillas de phpBB

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)
Los paréntesis pueden ser utilizados para cambiar la prioridad de las operaciones.

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

    Código: Seleccionar todo

    <!--IF xxx == 1 -->
    <!--IF xxx==1-->
    Bien

    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

    Código: Seleccionar todo

    <!--IF xxx -->
    <!--ELSE -->
    <!--ENDIF -->
    
    <!--BEGIN xxx -->
    <!--END xxx -->
    Bien

    Có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:
    Bien

    Código: Seleccionar todo

    <!-- IF variable == 1 -->
    	<!-- BEGIN algo -->
    	<!-- END algo -->
    <!-- ENDIF -->
    Mal

    Código: Seleccionar todo

    <!-- IF variable == 1 -->
    	<!-- BEGIN algo -->
    <!-- ENDIF -->
    	<!-- END algo -->
El uso de las etiquetas es el siguiente:

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 -->
Errores más comunes

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
Ocurre cuando el archivo que se desea incluir con la etiqueta INCLUDE no se encuentra o está vacío.

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
Cuando falta un IF o BEGIN, o cuando falta el espacio entre el inicio de la etiqueta del comentario y el nombre.

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
Cuando falta un ENDIF o END, o cuando falta el espacio entre el inicio de la etiqueta del comentario y el nombre.

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
Problemas en las condiciones de los IF o ELSEIF (posiblemente mal escritas o mal empleadas)

Código: Seleccionar todo

template->_php_include(): File ./xxxx.php does not exist or is empty
No existe el archivo a incluir con INCLUDEPHP (el error se muestra pero sigue la carga de la página)

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
Orden incorrecto de los ELSE y ELSEIF

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.