PHP – rientro del block di html

Diciamo che ho il seguente codice:

<?php echo "<div id=\"root\">"; echo "<div id=\"child_of_root\">"; echo "<img src=\"picture1.png\">"; echo "<img src=\"picture2.png\">"; echo "<img src=\"picture3.png\">"; echo "<img src=\"picture4.png\">"; echo "<img src=\"picture5.png\">"; echo "</div>"; echo "</div>"; ?> 

Se l'avessi eseguito, il seguente codice HTML sarebbe stato reso tutto in linea senza interruzioni di row:

 <div id="root"><div id="child_of_root"><img src="picture1.png"><img src="picture2.png"><img src="picture3.png"><img src="picture4.png"><img src="picture5.png"></div></div> 

Se ho eseguito il seguente codice:

 <?php echo "<div id=\"root\">\n"; echo "\t"."<div id=\"child_of_root\">\n"; echo "\t\t"."<img src=\"picture1.png\">"."\n"; echo "\t\t"."<img src=\"picture2.png\">"."\n"; echo "\t\t"."<img src=\"picture3.png\">"."\n"; echo "\t\t"."<img src=\"picture4.png\">"."\n"; echo "\t\t"."<img src=\"picture5.png\">"."\n"; echo "\t"."</div>"."\n"; echo "</div>"; ?> 

Ha ferito il rendering del seguente bellissimo codice HTML:

 <div id="root"> <div id="child_of_root"> <img src="picture1.png"> <img src="picture2.png"> <img src="picture3.png"> <img src="picture4.png"> <img src="picture5.png"> </div> </div> 

C'è un modo per get questi bellissimi trattini senza wherer mettere prima di each row che voglio far rientrare. Intendo in modo che possa indentare un block anziché una row.

Per prima cosa, è il codice HTML, quindi non import come è formattato, il browser lo rende lo stesso. Usare uno strumento come Firebug può darti un modo molto migliore di navigare in HTML nelle tue pagine web.

In un'altra nota, non è necessario utilizzare continuamente i comandi echo per l'output HTML. PHP è più o less un linguaggio di template di per sé, quindi puoi uscire da PHP, generare il tuo HTML nel tuo formato e quindi reinserire PHP.

Per esempio:

 <?php // ... your code before this ... ?> <div id="root"> <div id="child_of_root"> <img src="picture1.png"> <img src="picture2.png"> <img src="picture3.png"> <img src="picture4.png"> <img src="picture5.png"> </div> </div> <?php // ... your code after this ... ?> 

Se il tuo output ha bisogno di un certo livello di dinamismo, puoi sempre usare PHP per aggiungere loop e quant'altro.

 <?php // ... your code before this ... ?> <div id="root"> <div id="child_of_root"> <?php for ($x = 1; $x <= 5; $x++): ?> <img src="picture<?php echo $x; ?>.png"> <?php endfor; ?> </div> </div> <?php // ... your code after this ... ?> 

Se hai ancora bisogno di HTML formattato, magari per visualizzare esempi di codice o qualcosa del genere, dovrai continuare a utilizzare manualmente \n e \t , oppure puoi controllare l'estensione PHP Tidy , che è stata creata per la formattazione di HTML.

Prima di tutto usare:

 echo '<img src="picture1.png">'; 

invece di

 echo "<img src=\"picture1.png\">"; 

Il codice è molto più chiaro.

Se vuoi restituire il codice HTML in PHP, non c'è altro modo di fare i rientri.

Comunque perché vuoi printingre il codice HTML in PHP? Non puoi semplicemente uscire dal block PHP qui?

 <?php // do something and exit PHP block ?> <div id="root"> <div id="child_of_root"> <img src="picture1.png"> <img src="picture2.png"> <img src="picture3.png"> <img src="picture4.png"> <img src="picture5.png"> </div> </div> <?php // do again something in PHP ?> 

Suggerirei di usare HEREDOC per questo. È meglio tenere grandi blocchi di text e HTML che desideri mantenere la formattazione:

 //Note that I used spaces and not tabs, but that's only due to the post editor. echo <<<HTML <div id="root"> <div id="child_of_root"> <img src="picture1.png"> <img src="picture2.png"> <img src="picture3.png"> <img src="picture4.png"> <img src="picture5.png"> </div> </div> HTML; 

Puoi anche fare

 $variable = <<<OPENINGTAG text text text OPENINGTAG; echo $variable; 

Le variables verranno analizzate anche all'interno delle stringhe HEREDOC. Basta fare attenzione al tag finale, è molto caratteristico. Nessuno spazio prima o dopo sulla sua linea. Non so nemless se i commenti sono ammessi.

Qui sta usando l'esempio di Dominic Barnes con un ciclo:

 <?php echo <<<HTML <div id="root"> <div id="child_of_root"> HTML; for ($x = 1; $x <= 5; $x++) { echo <<<HTML <img src="picture$x.png"> HTML; } echo <<<HTML </div> </div> HTML; ?> 

potrebbe anche fare:

 <?php $output = <<<HTML <div id="root"> <div id="child_of_root"> HTML; for ($x = 1; $x <= 5; $x++) { $output .= <<<HTML <img src="picture$x.png"> HTML; } $output .= <<<HTML </div> </div> HTML; echo $output; ?> 

NOWDOC è disponibile anche in 5.3+ che agiscono come stringhe tra virgolette singole senza analisi delle variables.

Le stringhe HEREDOC e NOWDOC possono essere concatenate allo stesso modo delle stringhe normali.

Se si inseriscono gli ID image in una matrix, è ansible eseguire un ciclo foreach () che riecheggia ciascuna delle immagini con i nuovi caratteri di row e di tabulazione in primo piano senza whererli codificare a mano. Per esempio

 echo '<div id="root">\n'; echo '\t<div id="child_of_root">\n'; $images = arrays('picture1', 'picture2', 'picture3', 'picture4', 'picture5'); foreach ($images as $image) { echo '\t\t<img src="'.$image.'.png">\n'; } echo '\t</div>\n'; echo '</div>'; 

Ho provato Tidy, ma per qualche motivo, non import come lo configuro, non sembrerà rientrare. Tuttavia, qualcun altro ha scritto del codice che:

Funzione PHP per la pulizia del codice HTML e JavaSctipt

Esistono anche alcune linee guida intelligenti per evitare la necessità di tale codice:

Ottieni un codice HTML ben indentato con i tuoi templates PHP: due regole da seguire

Inoltre: fredsco.com/programming/indenting-html-output-in-php

Ecco un esempio che ha funzionato per me:

 <?php echo ' <div style="margin-left: 100px"> <div id="root"> <div id="child_of_root"> <img src="picture1.png" /><br /> <img src="picture2.png" /><br /> <img src="picture3.png" /><br /> <img src="picture4.png" /><br /> </div> </div> </div> '; ?>