2010-07-10 20 views
10

Aprendí PHP pirateando en phpBB2, incluso enviando algunos mods a su base de datos, que otros descargaron y usaron. (No creo que phpBB2 ya sea compatible con phpBB3, así que la base de datos de mods v2 ya no existe).¿Forma preferida de combinar PHP y HTML?

Una de mis cosas favoritas sobre phpBB fue su sistema de plantillas, que permite que el editor se separe completamente el HTML y el PHP. Los archivos PHP contenían PHP: lógica, consultas de bases de datos y activación de las plantillas. Los archivos TPL contenían plantillas: HTML, variables de plantilla y comentarios HTML especializados para permitir bloques condicional o de repetición.

Sin embargo, cada vez que veo el código PHP de alguien en línea, es un pequeño fragmento que funciona con una sola función o tal, o el PHP está lleno de cadenas que contienen HTML (o peor, HTML con PHP intercalado). phpBB es el único PHP que he visto que realmente separa el lenguaje y el lenguaje de marcado, sugiriéndome que pocas, si las hay, otras bases de código PHP hacen tal cosa.

Estoy buscando comenzar a trabajar con PHP de nuevo, pero esta vez no será un foro phpBB, y estará en un equipo. Basado en mi experiencia, la separación de PHP y HTML es poco común (¡corríjanme si me equivoco al respecto!). Sin embargo, estoy tan acostumbrado a esa línea divisoria, odio leer PHP y HTML mezclados.

En el "mundo real" de programación PHP, lo que es el método preferido:

  • archivos PHP con cadenas de HTML
  • archivos HTML roto con bloques de PHP
  • PHP y HTML completamente separadas (Deseo?)
  • ¿Algo más?

Respuesta

7

Si desea separar el PHP del HTML, puede utilizar un motor de plantillas (como smarty http://www.smarty.net/).

+0

Creo que este es exactamente el tipo de cosas que estoy buscando desarrollar en PHP sin piggybacking fuera de phpBB. –

3

En mi experiencia, una gran cantidad de desarrollo PHP, ya sea para bien o para mal, termina siendo archivos php conectados entre sí a través de incluye imprimir fragmentos de HTML según sea necesario.

cuenta, sin embargo, la mayor parte de mi experiencia en PHP es por más de una solución "sólo necesitamos algo que funciona" que un "necesitamos la solución más elegante y eficaz"

+0

Esto tiene mucho sentido, y explica todo el código que miro y que odio ver. –

2

Yo prefiero usar un sistema de plantillas de minimizar la cantidad de código PHP contenido en los archivos HTML. Realmente no veo ninguna manera de separar por completo PHP de HTML, pero creo que es suficiente separar la lógica de negocios (base de datos) de la lógica de presentación.

Mi sistema de plantillas es casero, pero estoy seguro de que puede encontrar una variedad que funcione al realizar una búsqueda en Google.

4

Usamos una base de encendedor de código personalizado para MVC y simplemente tenemos la lógica y el diseño separados. eso no necesariamente significa que no hay php en nuestro html, solo que no se usa para lógica. Es perfectamente correcto recorrer un conjunto de registros con el código php en una plantilla, no intente hablar con objetos comerciales y haga cosas en las plantillas de diseño. Por supuesto, también puedes buscar algo como tal o un millón más para las plantillas si realmente quieres deshacerte de todos los códigos php.Estoy un poco pensando que es sobre todo una exageración, sin embargo, a menos que "insertar circunstancia especial aquí"

edición error tipográfico fijo

2

Basado en mi experiencia, la separación de PHP y HTML es raro

Cierto. Pero gran parte del código PHP está escrito por desarrolladores sin experiencia. Además, PHP no fomenta, sino que desalienta la escritura de buenos códigos, y la capacidad de mezclar HTML con código de programación es uno de los ejemplos de esto.

Si espera hacer un código de alta calidad, para poder mantenerlo y ampliarlo fácilmente, le recomiendo utilizar un motor de plantillas o algo similar. La combinación de ambos tiene un gran impacto en la legibilidad de su código, y provocará que algo empeore y empeore con el tiempo. Refactorizar será doloroso, si no imposible.

Ahora, usted tiene una gran elección de la forma de separar HTML de PHP

  • La más obvia es utilizar un motor de diseño existente. Hay muchos de ellos, algunos muy bien hechos y con un impacto de rendimiento muy bajo.

  • También puede escribir su propio motor. Puede que no sea una buena idea en un proyecto grande (¿por qué reinventar la rueda?), Pero puede ser una solución en un proyecto pequeño o cuando se necesita algo muy específico.

  • La última forma que utilizo en la mayoría de los proyectos es construir XML desde la capa empresarial (la serialización XML es bastante fácil en PHP), luego usar XSLT para transformar esto a la página HTML. Permite hacer sitios web que son mucho más fáciles de mantener y más fáciles de entender, y, por cierto, permite acceder a los datos del sitio web mediante programación (cargando XML en lugar de página HTML) cuando es necesario. Por otro lado, disminuye enormemente el rendimiento, por lo que no está destinado a sitios web grandes con miles de consultas por segundo.

3

cada vez que veo el código PHP de alguien en línea, o es un pequeño fragmento de trabajar con una sola función o tal, o el PHP está lleno de cadenas que contienen HTML (o peor, HTML con PHP intercalado).

Sí, la calidad general del código es embarazosa.

Si bien puede recurrir a un motor de creación de plantillas completamente desarrollado, eso puede ser excesivo y en muchos casos los lenguajes específicos de dominio limitados que proporcionan se interpondrán en su camino, cuando podría estar escribiendo lógica de presentación en PHP.

Si desea todavía estar escribiendo PHP normal, pero sin los espaguetis:

  1. mantener el código de acción en la parte superior del archivo o en un archivo diferente. Pon aquí solo la lógica de la aplicación, no cualquier tipo de HTML o plantilla. Cualquier información generada en esta etapa que necesita mostrarse en la plantilla debe ir en una variable que se pasará a la parte de plantilla, noprint ed out en medio de una carga de lógica empresarial.

  2. Tome su conocimiento de plantillas basadas en etiquetas y aplicarlo a PHP.Tener una jerarquía de código única, con sangría correcta para la lógica de presentación HTML y PHP, como si estuvieras escribiendo un XML "bien formado" (ya sea que estés usando XHTML o no). Evite poner HTML en cadenas a toda costa.

  3. Definir una forma más fácil de llamar htmlspecialchars(), porque de otra forma de escribir que todo el tiempo va a ser un verdadero dolor, y si no está escribiendo todo el tiempo que va a tener errores de seguridad potencialmente sensibles .

En resumen, por ejemplo .:

<?php 
    // active code here 
    // do things 
    // put any errors in a $errors array 

    // this trivial function would presumably be in an include 
    // 
    function h($s) { 
     echo htmlspecialchars($s, ENT_QUOTES); 
    } 
?> 

<body> 
    <?php if (count($errors)!=0) { ?> 
     <ul id="errors"> 
      <?php foreach ($errors as $error) { ?> 
       <?php h($error); ?> 
      <?php } ?> 
     </ul> 
    <?php } ?> 
    ... 
</body> 

En el "mundo real" de programación PHP, lo que es el método preferido:

Oh, en el mundo real de programación de PHP, el proyecto promedio tiene una mezcolanza de enfoques juntos sin pensarlo. En el mundo real, el código no se puede mantener, está lleno de errores y es inseguro. No quiere mirar el estándar de la industria, porque el estándar de la industria debe romperse en todos los sentidos.

+0

¿Puede indicarme el código fuente de un proyecto no trivial formateado de esta manera? Me gusta el concepto, pero me gustaría ver qué tan legible es a mayor escala y cómo se manejan muchas circunstancias específicas. – Robert

+3

No, no puedo. Todavía tengo que conocer un proyecto PHP públicamente disponible cuya creación de plantillas no es un laberinto de pequeños eco-HTML retorcidos, todos por igual. – bobince

4

Personalmente, no veo ninguna razón para agregar una plantilla de sistema/lenguaje a la mezcla, cuando PHP ya es una solución muy buena.

Mi enfoque preferido es separar la pantalla de la lógica de la aplicación. Esto podría tomar la forma de un marco MVC completo. Sin embargo, también podría ser una simple cuestión de cómo escribir el código.

Expansión:

Desde que cometer el error de mi HTML intercalando con cantidades copiosas de código ASP, he tratado de lógica página separada de la pantalla. Dentro de una sola página, esto significa colocar toda la lógica de la página en la parte superior, almacenar la información que se mostrará en las variables y luego repetirlas dentro del HTML en la parte inferior del archivo PHP. La única lógica que aparece en la porción HTML es la lógica de visualización. En otras palabras, manejo simple de errores, ifs, loops, etc. Básicamente, lo mismo que encontrará en la mayoría de los lenguajes de plantillas.

Mi razón para evitar el lenguaje de plantillas es que es otra forma de sintaxis de la que tengo que preocuparme. ¿Cuál es el punto de? PHP proporciona más de lo que necesito para este propósito.

Mientras tanto, se puede tomar un enfoque simple MVC por las cosas que separan:

controller.php

<?php 
// some application logic 
$data['message'] = 'Hello, World.'; 

include 'view.php'; 

exit; 
?> 

view.php:

<html> 
<head> 
<title> 
A simple 'MVC' view 
</title> 
</head> 
<body> 
<p> 
<?php 

echo $data['message']; 

?> 
</p> 
</body> 
</html> 

Esto no deja de tener sus inconvenientes y cuestiones. Sin embargo, si crees que puedes tener una separación completa y limpia entre la lógica de la aplicación y la pantalla, estás equivocado.

+1

¿Podría ampliar esto? ¿Cómo es exactamente PHP una solución para separar PHP y HTML? ¿Y un ejemplo de su enfoque de MVC? Entiendo el concepto de MVC, pero mi cerebro de fin de semana (¡solo enciende a la mitad!) No tiene un concepto de PHP MVC para separar la lógica y la presentación. –

+0

Gracias por la respuesta expandida. Parece que su recomendación es similar a la recomendación de [bobince] (http://stackoverflow.com/questions/3220655/preferred-way-to-combine-php-and-html/3220993#3220993)? –

+0

@bobince Sí, casi. La motivación de mi respuesta fue advertir contra el uso de un sistema de plantillas. Hay situaciones en las que pueden ser útiles. Digamos, si tiene un equipo separado dedicado al front-end. Sin embargo, si conoces PHP y eres responsable del HTML (o los desarrolladores back-end tienen que tocarlo mucho), creo que los sistemas de plantillas generalmente son exagerados. Buenas prácticas de codificación pueden lograr lo mismo sin una capa adicional de procesamiento. –

0

La mayoría del código comienza con cadenas PHP y HTML, luego evoluciona a un sistema de plantillas durante una gran reescritura. Separar el contenido de la lógica por adelantado requiere diseño, planificación y comunicación entre el equipo. Usar XML o JSON en lugar de matrices PHP ya que el formato de datos lo hace más fácil.

Cuestiones relacionadas