2009-06-04 17 views
8

Esto me ha estado molestando hoy después de verificar la fuente en un sitio. Uso la salida PHP en mis plantillas para contenido dinámico. Las plantillas comienzan solo en html, están sangradas y formateadas. El contenido de PHP se agrega y se sangra para que coincida con el formato html.Cómo mantener la salida html PHP 'Ver código fuente' limpia

<ul> 
    <li>nav1</li> 
    <li>nav2</li> 
    <li>nav3</li> 
</ul> 

se convierte en:

<ul> 
    <?php foreach($navitems as $nav):?> 
    <li><?=$nav?></li> 
    <?php endforeach; ?> 
</ul> 

Cuando la salida en html, las líneas de PHP encapsulados se eliminan pero el espacio en blanco usado para dar formato a ellos se dejan en y lanza la fuente vista formatear todo fuera de control. El sitio que mencioné está formateado limpiamente en la salida de la fuente de visualización. ¿Debo asumir que están usando un motor de plantillas? ¿También habría alguna forma de limpiar el tipo de plantillas que tengo? sin eliminar manualmente los espacios en blanco y sacrificando la legibilidad en el lado dev.

+7

Tengo mucha curiosidad sobre por qué crees que es importante haber generado HTML que sea "legible". Porque para todos los sistemas que realmente importan (navegadores, motores de búsqueda, lectores de pantalla) cuán ordenado es el espacio en blanco del documento no significa absolutamente nada. –

+13

Tengo que aceptar que no es importante que sea legible. No obstante, he notado una correlación entre HTML limpiamente generado y bases de código limpias. Ciertamente, ayuda al desarrollador a depurar cuando el HTML generado está limpio. – Elijah

+2

También me gustaría señalar que un código del lado del cliente limpio y legible puede ayudar a la decisión de un posible empleador al buscar en el origen de sus sitios web y aplicaciones. – Jimbo

Respuesta

13

Eso es algo que me molesta también. Lo mejor que puedes hacer es usar el orden para posprocesar el texto. Añadir esta línea al inicio de la página (y estar preparados para output buffering estragos cuando se encuentra con su primer error PHP con búferes de salida):

ob_start('ob_tidyhandler'); 
6

Realmente no se puede obtener una salida limpia de la incorporación de PHP. Sugeriría usar algún tipo de motor de plantillas, como Smarty. Además de la salida limpia, los motores de plantilla tienen la ventaja de mantener cierta separación entre su código y su diseño, lo que aumenta la capacidad de mantenimiento y la legibilidad de los sitios web complejos.

+5

Smarty realmente no ayuda en este caso. Las estructuras de control como '{if $ foo}' y '' Son realmente iguales. Para manipular el html, tiene '' ordenado' como correctamente señalado por @soulmerge. –

3

You pocas veces que he arreglado mi salida para depurar el código HTML generado He usado pestañas y líneas nuevas ... es decir;

print "<table>\n"; 
print "\t<tr>\n"; 
print "\t\t<td>\n"; 
print "\t\t\tMy Content!\n"; 
print "\t\t</td>\n"; 
print "\t</tr>\n"; 
print "</table>\n"; 
+2

que funciona, pero es un gran trabajo. Aunque no conozco otro método ... – Natrium

+1

Oh, no dije que fuera eficiente. :) Solo que es la forma en que lo he hecho para depurar tablas multi-anidadas, etc. – Christian

+0

Este truco no funciona con 'echo' ... el' \ n' y '\ t' se representan en la página como texto. – Sparky

4

admito, me gusta limpiar, muy bien sangrado html también. a menudo no funciona como quiero, por las mismas razones que estás teniendo. a veces, la sangría manual y los saltos de línea no se conservan, o no funciona debido a subtemplates donde reinicia la sangría.

y las máquinas realmente no les importa. no se trata de espacios en blanco, no de comentarios, lo único que les puede importar son cosas minúsculas, por lo que el espacio en blanco y los comentarios adicionales son en realidad contraproducentes. pero es tan bonito *sigh*

a veces, si firebugs no están disponibles, me gusta para la depuración. debido a eso, la mayoría de las veces tengo la opción de activar html tidy manualmente para la solicitud actual. tenga cuidado: ordenado corrige automáticamente ciertos errores (dependiendo de las opciones de configuración), por lo que en realidad puede ocultar errores de usted.

4

¿Importa la salida HTML "bonita"? Pegará el HTML de salida en un editor cada vez que quiera hojearlo, y el editor presumiblemente tendrá la opción de formatearlo correctamente (¡o deberá cambiar de editor!).

Encuentro las sugerencias para usar un lenguaje de plantillas adicional (porque eso es exactamente lo que PHP es) aborrecible. ¿Disminuiría la velocidad de cada página para corregir el espacio o la pestaña impar? En todo caso, iría en la otra dirección y me inclinaría hacia ejecutar cada página a través de una herramienta a eliminar el espacio en blanco restante.

+0

Bastante buscando HTML es casi un efecto secundario de un sistema de plantillas. Todavía tendría mucho sentido usar uno junto con el removedor de espacios en blanco .. – dbr

2

Si es REAL importante en su caso específico, podría hacer esto ...

<ul><?php foreach($navitems as $nav):?> 
    <li><?=$nav?></li><?php endforeach; ?> 
</ul> 

pesar de que es peor en mi opinión, porque su código es menos legible, a pesar de que el HTML es como se desee.

2

No me importa lo limpia que esté la salida, es el código fuente original que la produjo y que tiene que ser fácil de analizar, para mí como desarrollador.

Si estaba examinando la salida, la ejecutaré ordenadamente para limpiarla, si fuera necesario para echarle un buen vistazo, pero a los validadores tampoco les importan los espacios extra o las pestañas.

De hecho, es más probable que elimine el espacio en blanco del HTML de salida que poner cualquier in - menos bytes en el cable = descargas más rápidas. no por mucho, pero a veces ayudaría en un escenario de alto tráfico (aunque, por supuesto, el gzip de la salida ayuda más).

1

fuente de visionado sin formato es muy molesto con múltiples divs anidados y muchos registros que contienen cada uno de estos divs ..

me encontré con este complemento de Firefox llamado Phoenix Editor. ¡Puedes ver tu fuente en su editor y luego hacer clic en "formatear" y funciona como un amuleto!

Link Here

1

Estoy de acuerdo, una fuente limpia es muy importante, Su bien documentado, bien estructurado y dejáramos entrar en esas fuentes, guiones, o el código es muy rápido y sencillo. Deberías buscar fragmentar tu main, usando require (prior.php, header.php, title.php, content.php, post.php) en los lugares correspondientes, luego escribir una nueva función bajo prior.php que analizará y maquetará Las etiquetas html que usan el método de explosión y un divisor de cadenas tienen un entero para el índice de pestañas, y cada vez que </ está en la cadena de funciones, entonces entero - siempre que < y > pero no /> y </ están en la cadena entero ++ y todo tiene para colocarlo correctamente ..., use un ciclo for para reconstruir otro string tabindex para tabular el contenido entero varias veces.

4

La manera de hacerlo es:

<ul> 
<?php foreach($navitems as $nav):?> 
     <li><?=$nav?></li> 
<?php endforeach; ?> 
    </ul> 

Básicamente todos mis condicionales y bloques de bucle son alineadas a la izquierda dentro de los puntos de vista. Si ellos están anidados, Dejé sangría dentro de la etiqueta de inicio de PHP, así:

<ul> 
<?php foreach($navitems as $nav):?> 
<?php  if($nav!== null) : ?> 
     <li><?=$nav?></li> 
<?php  endif; ?> 
<?php endforeach; ?> 
    </ul> 

De esta manera, no veo la lógica de presentación con claridad cuando el código descremada, y hace que para la salida HTML limpio también. La salida dentro de los bloques está exactamente donde los puse.

Una advertencia, PHP come nuevas líneas después de la etiqueta de cierre ?>. Esto se convierte en un problema cuando haces algo como la salida dentro de un bloque <pre>.

<pre> 
<?php foreach($vars as $var) ?> 
    <?=$var?> 
<?php endforeach; ?> 
</pre> 

Esta es la salida:

<pre> 
      0   1   2   3   4   5  </pre> 

Esta es una especie de truco, pero añadiendo un espacio después del <?=$var?> hace que sea limpio.

Disculpe por los excesivos bloques de código, pero esto también me ha estado molestando durante mucho tiempo. Espero que ayude, después de aproximadamente 7 meses.

+0

Gracias ... ¡su respuesta realmente me ayudó! – yathrakaaran

1

Try xtemplate http://www.phpxtemplate.org/HomePage no es tan bien documentada como ID, como una, pero he utilizado con gran efecto

que tendría algo como esto

<?php 
$response = new xtemplate('template.htm'); 

foreach($navitems as $item) 
{ 

$response->assign('stuff',$item); 

$response->parse('main.thelist'); 

} 
$response->parse('main'); 
$response.out('main'); 
?> 
And the html file would contain 

    <! -- BEGIN: main --> 
<html> 
<head></head> 
<body> 
    <ul> 
<! -- BEGIN: thelist --> 
     <li>{stuff}</li> 
<!-- END: thelist --> 
</ul> 
</body> 
</html> 
2

I sobre desmayo cuando leí "I' Es realmente curioso por qué crees que es importante haber generado HTML que sea "legible". Desafortunadamente, hubo bastantes personas en esta página (y en otras partes) que piensan de esta manera ... que el navegador lo lee igual, ¿por qué preocuparse? la forma en que se ve el código.

En primer lugar, mantener el "código" legible hace que la depuración (o trabajar en ella en general por usted o un desarrollador en el futuro) sea mucho más fácil en casi todos los casos.

Además, Y MÁS IMPORTANTE, se conoce como calidad de mano de obra. Es la diferencia entre un Yugo y un Mercedes. Sí, ambos son autos y ambos lo llevarán del punto "A" al punto "B". Pero, la diferencia está en la calidad del producto con lo que en su mayoría es no visto. No hay nada peor que saltar a un proyecto y primero tener que limpiar el código de otra persona solo para poder darle sentido a las cosas, todo porque pensaron que todavía funciona igual y no se enorgullecen de lo que hacen. El código más limpio SIEMPRE lo beneficiará a usted y a cualquier otra persona que tenga que lidiar con eso, sin mencionar que refleja un nivel de orgullo y experiencia en lo que hace.

Cuestiones relacionadas