Domanda

Sto creando un sito in cui pagine diverse possono apparire molto diverse a seconda di determinate condizioni (ad esempio, accesso o meno, modulo compilato o meno, ecc.). Ciò rende necessario l'output di diversi blocchi di html in momenti diversi.

In questo modo, tuttavia, il mio codice php sembra orribile ... rovina davvero la formattazione e la "forma". del codice. Come dovrei aggirare questo? Incluso dump html personalizzato " funzioni in fondo ai miei script? La stessa cosa, ma con include? Heredocs (non avere un bell'aspetto)?

Grazie!

È stato utile?

Soluzione

Non farti prendere dal panico, ogni nuovo programmatore Web affronta questo problema.

DEVI separare la logica del tuo programma dal tuo display. Innanzitutto, prova a creare la tua soluzione utilizzando due file per ogni pagina Web:

  • uno con solo codice PHP (senza HTML) che riempie le variabili
  • un altro con HTML e pochissimi PHP: questo è il design della tua pagina

Quindi includi dove / quando ne hai bisogno. Ad esempio:

myPageLogic.php

<?php

// pure PHP code, no HTML

$name = htmlspecialchars(

Non farti prendere dal panico, ogni nuovo programmatore Web affronta questo problema.

DEVI separare la logica del tuo programma dal tuo display. Innanzitutto, prova a creare la tua soluzione utilizzando due file per ogni pagina Web:

  • uno con solo codice PHP (senza HTML) che riempie le variabili
  • un altro con HTML e pochissimi PHP: questo è il design della tua pagina

Quindi includi dove / quando ne hai bisogno. Ad esempio:

myPageLogic.php

// very few php code
// just enought to print variables
// and some if / else, or foreach to manage the data stream

<h1>Hello, <?php $name ?> !</h1>

<p>So your are <?php $age?>, hu ?</p>

myPageView.php

<?php

require('myPageLogic.php');
require('myPageView.php');
?>

(Potresti voler usare la sintassi PHP alternativa per questo. Ma non sforzarti di renderlo perfetto la prima volta, davvero.)

myPage.php

<*>

Non preoccuparti dei problemi di prestazioni per ora . Questa non è la tua priorità come principiante. Questa soluzione è imperfetta, ma ti aiuterà a risolvere il problema con il tuo livello di programmazione e ti insegnerà le basi.

Quindi, una volta che hai familiarità con questo concetto, acquista un libro sul modello MVC (o cerca le voci di overflow dello stack su di esso). Quello che vuoi fare il PROSSIMO TEMPO . Quindi proverai alcuni sistemi e framework di template, ma LATER . Per ora, basta programmare e imparare dall'inizio. Puoi codificare perfettamente un progetto del genere, come un novellino, va bene.

GET['name']); $age = date('Y') - htmlspecialchars(

Non farti prendere dal panico, ogni nuovo programmatore Web affronta questo problema.

DEVI separare la logica del tuo programma dal tuo display. Innanzitutto, prova a creare la tua soluzione utilizzando due file per ogni pagina Web:

  • uno con solo codice PHP (senza HTML) che riempie le variabili
  • un altro con HTML e pochissimi PHP: questo è il design della tua pagina

Quindi includi dove / quando ne hai bisogno. Ad esempio:

myPageLogic.php

<*>

myPageView.php

<*>

(Potresti voler usare la sintassi PHP alternativa per questo. Ma non sforzarti di renderlo perfetto la prima volta, davvero.)

myPage.php

<*>

Non preoccuparti dei problemi di prestazioni per ora . Questa non è la tua priorità come principiante. Questa soluzione è imperfetta, ma ti aiuterà a risolvere il problema con il tuo livello di programmazione e ti insegnerà le basi.

Quindi, una volta che hai familiarità con questo concetto, acquista un libro sul modello MVC (o cerca le voci di overflow dello stack su di esso). Quello che vuoi fare il PROSSIMO TEMPO . Quindi proverai alcuni sistemi e framework di template, ma LATER . Per ora, basta programmare e imparare dall'inizio. Puoi codificare perfettamente un progetto del genere, come un novellino, va bene.

GET['age']); ?>

myPageView.php

<*>

(Potresti voler usare la sintassi PHP alternativa per questo. Ma non sforzarti di renderlo perfetto la prima volta, davvero.)

myPage.php

<*>

Non preoccuparti dei problemi di prestazioni per ora . Questa non è la tua priorità come principiante. Questa soluzione è imperfetta, ma ti aiuterà a risolvere il problema con il tuo livello di programmazione e ti insegnerà le basi.

Quindi, una volta che hai familiarità con questo concetto, acquista un libro sul modello MVC (o cerca le voci di overflow dello stack su di esso). Quello che vuoi fare il PROSSIMO TEMPO . Quindi proverai alcuni sistemi e framework di template, ma LATER . Per ora, basta programmare e imparare dall'inizio. Puoi codificare perfettamente un progetto del genere, come un novellino, va bene.

Altri suggerimenti

Usa un approccio mvc.

http://www.phpmvc.net/

Questo non è qualcosa che raccoglierai tra un paio d'ore. Hai davvero bisogno di praticarlo. La cosa principale è che il controller accederà al tuo modello (il livello db), farà cose ai tuoi dati e poi li invierà alla vista per il rendering. Questo è troppo semplificato, ma devi solo leggerlo e praticarlo per capirlo.

Questo è qualcosa che ho usato per aiutarmi a impararlo. http://www.onlamp.com/pub/a /php/2005/09/15/mvc_intro.html

Prova a separare il più possibile contenuto e layout dal tuo codice. Ogni volta che scrivi un codice HTML in un file .php, fermati e pensa " Questo davvero appartiene qui? & Quot;

Una soluzione è utilizzare i modelli. Guarda il Smarty sistema di template per un'opzione abbastanza facile da usare.

  

In questo modo, tuttavia, il mio codice php sembra orribile ... rovina davvero la formattazione e la "forma". del codice. Come dovrei aggirare questo?

Tratta PHP e HTML come una singola gerarchia, con un'unica struttura di rientro coerente. Quindi una struttura che racchiude PHP come 'if' o 'for' introduce un nuovo livello di rientro, e il suo contenuto è sempre un insieme equilibrato di tag di inizio e fine. In sostanza stai rendendo il tuo PHP "ben formato" nel senso XML del termine, indipendentemente dal fatto che tu stia effettivamente usando XHTML.

Esempio:

<div class="prettybox">
    Hello <?php echo(htmlspecialchars($name)) ?>!
    Your food:
    <?php foreach($foods as $food) { ?>
        <a href="/food.php?food=<?php echo(urlencode($food)) ?>">
            <?php echo(htmlspecialchars($food)) ?>
        </a>
    <?php } ?>
    <?php if (count($foods)==0) { ?>
        (no food today)
    <?php } ?>
</div>

Diffidare del dogma religioso attorno alla separazione della logica e al markup che alza di nuovo la testa nelle risposte qui. Anche se sicuramente vuoi mantenere la tua logica di business fuori dal codice di output della tua pagina, ciò non significa necessariamente che un carico di sovraccarico derivante dall'utilizzo di file, classi, modelli e framework separati sia davvero necessario per quello che stai facendo. Per un'applicazione semplice, è probabile che sia sufficiente solo per mettere le cose azione / logica nella parte superiore del file e l'output della pagina di seguito.

(Ad esempio da uno dei commenti sopra, fare htmlspecialchars () è una funzionalità di output di pagina che sicuramente non vuoi inserire nel bit di azione del tuo PHP, mescolato in tutti i logica aziendale. Mantieni sempre il testo come stringhe semplici e senza caratteri di escape fino al punto in cui lascia la logica dell'applicazione. Se si digita 'echo (htmlspecialchars (...))' tutto il tempo è troppo prolisso, è sempre possibile eseguire una funzione con un breve nome come 'h' che fa lo stesso.)

Dal suono del tuo problema, sembra che potresti non avere molta separazione tra logica e presentazione nel tuo codice. Quando si progetta un'applicazione, questa è una considerazione molto importante, per ragioni esattamente dimostrate dalla situazione attuale.

Se non lo hai già fatto darei un'occhiata ad alcuni motori di template PHP come Smarty .

In casi del genere scrivo tutto in modo incrementale in una variabile o talvolta in un array e quindi faccio eco alla variabile / array. Ha l'ulteriore vantaggio che la pagina viene sempre visualizzata in una volta, piuttosto che progressivamente.

Quello che finisco per fare in questa situazione è la creazione di file "modello" di dati HTML che includo, e quindi analizzare con espressioni regolari. Mantiene il codice pulito e semplifica la consegna dei pezzi a un designer o ad un'altra persona HTML.

Scopri gli ideali alla base delle pratiche di programmazione MVC su Wikipedia

Hai bisogno di un framework. Questo non solo renderà grazioso il tuo codice (a causa del già citato modello di controller di vista modello, MVC), ma ti farà risparmiare tempo a causa dei componenti che sono già stati scritti per esso.

Raccomando QCodo, è incredibile; ce ne sono altri: CakePHP, Symfony.

Se si tratta di un grande progetto, un framework potrebbe essere in ordine. In caso contrario, crea alcuni file modello e nella parte superiore della pagina decidi quale file modello includere.

ad esempio

if (

Se si tratta di un grande progetto, un framework potrebbe essere in ordine. In caso contrario, crea alcuni file modello e nella parte superiore della pagina decidi quale file modello includere.

ad esempio

<*>

solo un semplice esempio

SESSION['logged_in']) include(TPL_DIR . 'main_logged_in.tpl'); else include(tPL_DIR . 'main.tpl');

solo un semplice esempio

come menzionato sopra .. stai risolvendo il sintomo, non il problema ..

Ciò di cui hai bisogno è la separazione di logica e presentazione. Che può essere fatto con una sorta di framework mvc. Anche se non vuoi andare fino in fondo con un framework mvc .. Un motore di template è un must almeno se la tua logica è abbastanza complicata da avere problemi con ciò che stai spiegando

Consiglio vivamente savant invece di smarty,

  • non devi imparare una nuova lingua "quoting" per il template per creare modelli, i modelli savant sono scritti in php
  • se non vuoi usare php puoi definire il tuo modello " lingua " con un compilatore
  • è facilmente estendibile dai tuoi oggetti php

Separare la logica dalla presentazione non significa che tutta la tua logica aziendale deve essere in php e la tua logica di presentazione in qualcos'altro, la separazione è una cosa concettuale, devi separare la logica che prepara i dati da quella che lo mostra . Ovviamente la logica aziendale non deve contenere elementi di presentazione.

Invece di implementare sistemi di template su un sistema di template (PHP stesso), creando overhead per impostazione predefinita, puoi scegliere una soluzione più solida come Trasformazioni XSL , che è anche conforme ai Principi MVC (a condizione di separare il recupero dei dati; inoltre, ho diviso personalmente la logica dalla visualizzazione dell'XML con file diversi).

Immagina di avere le seguenti informazioni in un array, che desideri visualizzare in una tabella.

Array
{
  [car] => green
  [bike] => red
}

Crea facilmente uno script che genera queste informazioni in XML:

echo "<VEHICLES>\n";
foreach(array_keys($aVehicles) as $sVehicle)
  echo "\t<VEHICLE>".$sVehicle."</NAME><COLOR>".$aVehicles[$sVehicle]."</COLOR></VEHICLE>\n";
echo "</VEHICLES>\n";

Risultato nel seguente XML:

<VEHICLES>
  <VEHICLE>
    <NAME>car</NAME>
    <COLOR>green</COLOR>
  </VEHICLE>
  <VEHICLE>
    <NAME>bike</NAME>
    <COLOR>red</COLOR>
  </VEHICLE>
</VEHICLES>

Ora è tutto eccellente, ma non verrà visualizzato in un formato piacevole. È qui che entra in gioco XSLT. Con un po 'di codice semplice, puoi trasformarlo in una tabella:

<xsl:template match="VEHICLES">
  <TABLE>
    <xsl:apply-templates select="VEHICLE">
  </TABLE>
</xsl:template>

<xsl:template match="VEHICLE">
  <TR>
    <TD><xsl:value-of select="NAME"></TD>
    <TD><xsl:value-of select="COLOR"></TD>
  </TR>
</xsl:template>

Et voilà, hai:

<TABLE>
  <TR>
    <TD>car</TD>
    <TD>green</TD>
  </TR>
  <TR>
    <TD>bike</TD>
    <TD>red</TD>
  </TR>
</TABLE>

Ora per questo semplice esempio, questo è un po 'eccessivo; ma per strutture complesse in grandi progetti, questo è un modo assoluto per mantenere la logica di scripting lontana dal markup.

Controlla questa domanda sulla separazione PHP e HTML, ci sono vari modi per farlo, inclusi sistemi di templating scritti da sé, sistemi di template come Smarty, PHP come sistema di template da solo, ecc ecc ecc ...

Penso che tu abbia due opzioni qui, o usa un framework MVC o usa il modo di modellamento pigro che metterebbe un sovraccarico significativo sul tuo codice. Ovviamente sono con il primo, penso che imparare MVC sia uno dei migliori trucchi di sviluppo web nel libro.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top