2009-06-04 15 views
8

Questo mi ha infastidito oggi dopo aver controllato la fonte su un sito. Io uso l'output PHP nei miei modelli per il contenuto dinamico. I modelli partono solo in html e sono chiaramente rientrati e formattati. Il contenuto PHP viene quindi aggiunto e rientrato per corrispondere alla formattazione html.Come mantenere pulito l'output html PHP 'Visualizza sorgente'

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

diventa:

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

Quando l'uscita in formato HTML, PHP linee incapsulate vengono eliminate ma lo spazio bianco utilizzato per formattare li sono lasciati dentro e butta la fonte vista la formattazione tutti fuori di colpo. Il sito che ho menzionato è formattato in modo chiaro sull'output della vista sorgente. Devo presumere che stiano usando un motore di template? Inoltre ci sarebbe un modo per ripulire il tipo di modelli che ho? senza la rimozione manuale degli spazi bianchi e sacrificando la leggibilità sul lato sviluppo?

+7

Sono davvero curioso del perché pensi che sia importante aver generato HTML che sia "leggibile". Perché per tutti i sistemi che contano davvero (browser, motori di ricerca, screen reader), quanto è ordinato lo spazio bianco del documento non significa assolutamente nulla. –

+13

Devo dire che non è importante che sia leggibile. Tuttavia, ho notato una correlazione tra HTML generato in modo pulito e codebase pulite. Certamente aiuta il debug dello sviluppatore quando l'output HTML è pulito. – Elijah

+2

Vorrei anche sottolineare che un codice lato client pulito e leggibile può aiutare una potenziale decisione del datore di lavoro quando si esamina la fonte dei propri siti Web e applicazioni. – Jimbo

risposta

13

Anche questo è qualcosa che mi infastidisce. Il meglio che puoi fare è usare in ordine per postelaborare il testo. Aggiungere questa riga all'inizio della pagina (ed essere pronti per output buffering il caos quando si verifica il tuo primo errore PHP con buffer di uscita sul):

ob_start('ob_tidyhandler'); 
6

Non è possibile ottenere risultati nitidi dall'integrazione di PHP. Suggerisco caldamente di utilizzare una sorta di motore di template come Smarty. Oltre all'output pulito, i template engine hanno il vantaggio di mantenere una certa separazione tra il codice e il design, aumentando la manutenibilità e la leggibilità di siti Web complessi.

+5

Smarty non è di grande aiuto in questo caso. Le strutture di controllo come '{if $ foo}' e '' Sono veramente le stesse. Per manipolare l'html che ha "ordinato" come correttamente indicato da @soulmerge. –

3

Voi paio di volte ho riordinato la mia uscita per il debug il mio codice HTML generato Ho usato tab e newline ... cioè;

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

che funziona, ma è un lavoro infernale. Non conosco un altro metodo però ... – Natrium

+1

Oh non ho detto che era efficiente. :) Solo che è il modo in cui l'ho fatto per il debug di tabelle multi-nested ecc. – Christian

+0

Questo trucco non funziona con 'echo' ... il' \ n' e '\ t' sono visualizzati sulla pagina come testo. – Sparky

4

ammetto, mi piace anche l'html pulito, ben rientrato. spesso non funziona nel modo in cui voglio, a causa delle stesse ragioni che stai vivendo. a volte il rientro manuale e le interruzioni di riga non vengono mantenuti, oppure non funziona a causa dei subtemplate in cui è stato ripristinato il rientro.

e le macchine davvero non mi interessa. non per gli spazi bianchi, non per i commenti, l'unica cosa di cui potrebbero preoccuparsi sono le cose miniate, quindi ulteriori spazi bianchi e commenti sono in realtà controproducenti. ma è così bello *sigh*

a volte, se firebugs non sono disponibili, mi piace solo per il debug. a causa di ciò, la maggior parte delle volte ho un'opzione per attivare manualmente html per la richiesta corrente. fai attenzione: tidy corregge automaticamente determinati errori (a seconda delle opzioni di configurazione), quindi potrebbe effettivamente causare nascondi errori da te.

4

L'output HTML "carino" è importante? Dovrai incollare l'HTML di output in un editor ogni volta che vuoi curiosare e l'editor avrà presumibilmente la possibilità di formattarlo correttamente (o devi cambiare editor!).

Trovo i suggerimenti per utilizzare un linguaggio di template aggiuntivo (perché è esattamente ciò che PHP è) aberrante. Dovresti rallentare ogni pagina per correggere lo spazio o la scheda dispari? Se mai, andrei nella direzione opposta e mi sposterò verso l'esecuzione di ogni pagina attraverso uno strumento a rimuovi lo spazio vuoto rimanente.

+0

L'HTML grazioso è quasi un effetto collaterale di un sistema di template. Avrebbe comunque senso usare uno accanto al dispositivo di rimozione dello spazio bianco. – dbr

2

Se è REALE importante nel tuo caso specifico, puoi farlo ...

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

Anche se questo è peggio, a mio parere, perché il codice è meno leggibile, anche se l'HTML è come volete.

2

Non mi interessa quanto sia pulito l'output - è il codice sorgente originale che lo ha prodotto che deve essere facile da analizzare - per me come sviluppatore.

Se stavo esaminando l'output, lo eseguirò in ordine per ripulirlo, se fosse necessario dare una buona occhiata a esso - ma i validatori non si preoccupano nemmeno di spazi o tabulazioni aggiuntivi.

In effetti, è più probabile che rimuovo gli spazi bianchi dall'output dell'HTML piuttosto che inserire meno byte sul filo = download più veloci. non di molto, ma a volte sarebbe d'aiuto in uno scenario ad alto traffico (anche se, ovviamente, l'output aiuta di più).

1

Visualizza sorgente non formattato è molto fastidioso con più div annidati e tanti dischi contenenti ciascuno di questi div ..

mi sono imbattuto in questo addon per Firefox chiamato Phoenix Editor. Puoi vedere la tua fonte nel suo editor e quindi fare clic su "format" e funziona come un incantesimo!

Link Here

1

I Agree, una fonte pulita è molto importante, la sua ben commentato, ben strutturato e maintence su quelle fonti, script, o il codice è molto semplice e veloce. Dovresti cercare di frammentare il tuo main, usando require (prior.php, header.php, title.php, content.php, post.php) nei posti corrispondenti, quindi scrivi una nuova funzione in previous.php che analizzerà e layout tag html utilizzando il metodo esplodere e uno splitter stringa, hanno un numero intero per l'indice scheda, e quando è </ nella stringa funzioni poi integer-- ogniqualvolta < e > ma non /> e </ sono in numero intero stringa ++ e tutto ha da posizionare correttamente ...., utilizzare un ciclo for per ricostruire un altro tabindex di stringhe per visualizzare i tempi interi dei contenuti.

4

Il modo in cui lo faccio è:

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

Fondamentalmente tutti i miei condizionali e blocchi di loop sono a filo sinistra all'interno i punti di vista. Se sono annidati, mi trattino all'interno del tag iniziale di PHP, in questo modo:

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

In questo modo, vedo la logica di presentazione chiaramente quando ho scremare il codice, e lo fa per l'output HTML pulito pure. L'output all'interno dei blocchi è esattamente dove li metto.

Un avvertimento, PHP mangia nuove righe dopo il tag di chiusura ?>. Questo diventa un problema quando si esegue qualcosa come l'output all'interno di un blocco <pre>.

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

Questo stamperà:

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

Si tratta di una specie di hack, ma l'aggiunta di uno spazio dopo la <?=$var?> rende pulito.

Ci scusiamo per i blocchi di codice eccessivo, ma questo mi ha infastidito anche a lungo. Spero che aiuti, dopo circa 7 mesi.

+0

Grazie ... la tua risposta mi ha davvero aiutato! – yathrakaaran

1

Prova xtemplate http://www.phpxtemplate.org/HomePage la sua non è così documentato come id come, ma ive utilizzato con grande efficacia

si dovrebbe avere qualcosa di simile

<?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 in merito caduto sopra quando ho letto "I' Sono davvero curioso di sapere perché è importante aver generato HTML che sia "leggibile". Sfortunatamente, ci sono state molte persone su questa pagina (e altrove) che la pensano così ... che il browser la legge allo stesso modo, quindi perché preoccuparsi il modo in cui appare il codice.

Innanzitutto, mantenere il "codice" leggibile rende il debugging (o il lavoro in generale da parte tua o di uno sviluppatore in futuro) molto più facile in quasi tutti i casi.

Inoltre, E MOLTO IMPORTANTE, è indicato come qualità di lavorazione. È la differenza tra un Yugo e una Mercedes. Sì, sono entrambi auto e entrambi vi porteranno dal punto "A" al punto "B". Ma la differenza sta nella qualità del prodotto, soprattutto con quello che è non visto. Non c'è niente di peggio che saltare in un progetto e prima dover pulire il codice di qualcun altro solo per essere in grado di dare un senso alle cose, tutto perché hanno capito che funziona ancora allo stesso modo e non hanno orgoglio per quello che fanno. Il codice Cleaner sarà SEMPRE utile per te e chiunque altro debba occuparsene, per non parlare del livello di orgoglio e competenza in quello che fai.