Frage

Ich bin die Schaffung einer Website, in dem verschiedene Seiten sehr unterschiedlich aussehen können bestimmte Bedingungen in Abhängigkeit von (dh angemeldet oder nicht, Formular ausgefüllt oder nicht, usw.). Dies macht es notwendig, die Ausgabe diferent Blöcke von HTML zu unterschiedlichen Zeiten.

, das zu tun, macht aber mein PHP-Code aussieht schrecklich ... es mit der Formatierung und „Form“ des Codes wirklich vermasselt. Wie soll ich dieses Problem umgehen? Einschließlich der benutzerdefinierten Funktionen am unteren Rand meiner Skripte „html-Dump“? Das Gleiche, aber mit einschließt? Heredocs (nicht zu gut aussehen)?

Danke!

War es hilfreich?

Lösung

Keine Panik, alle frisch Webprogrammierer Gesicht dieses Problem.

Sie müssen Ihre Programmlogik von Ihrer Anzeige trennen. Versuchen Sie zunächst, Ihre eigene Lösung mit zwei Dateien für jede Web-Seite zu machen:

  • eine mit nur PHP-Code (kein HTML), die Variablen
  • füllt
  • ein weiteres mit HTML und nur sehr wenige PHP: dies ist Ihre Seite Design

Dann sind wo / wann Sie es brauchen. Z. B:

myPageLogic.php

<?php

// pure PHP code, no HTML

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

?>

myPageView.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>

(können Sie möchten die für diese ein. Aber versuchen sie nicht zu schwer, um es zum ersten Mal zu machen perfektioniert, wirklich.)

myPage.php

<?php

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

nicht zu Leistungsproblemen für jetzt stören . Dies ist nicht Ihre Priorität als Neuling. Diese Lösung ist unvollkommen, aber wird Ihnen helfen, das Problem mit dem Programmierebene zu lösen und werden Ihnen die Grundlagen beibringen.

Dann, wenn Ihr mit diesem Konzept vertraut sind, ein Buch über das MVC-Muster kaufen (oder suchen sie Stack-Überlauf-Einträge über). Das, was Sie das Die nächste Mal tun mögen . Dann werden Sie einige Templating-Systeme und Frameworks versuchen, aber SPÄTER . Vorerst nur Code und lernen von Anfang an. Sie können perfekt ein solches Projekt, das Code, als Anfänger, es ist in Ordnung.

Andere Tipps

Verwenden Sie einen MVC-Ansatz.

http://www.phpmvc.net/

Das ist nicht etwas, das Sie in ein paar Stunden abholen. Sie müssen es wirklich üben. Hauptsache ist, die Steuerung Ihr Modell zugreifen (die db-Schicht), tun Sachen, um Ihre Daten und dann zur Ansicht schicken für das Rendern. Diese stark vereinfacht ist, aber Sie müssen nur lesen und üben, um es zu verstehen.

Dies ist etwas, das ich verwenden, um mich es zu helfen, zu lernen. http://www.onlamp.com/pub/a /php/2005/09/15/mvc_intro.html

Versuchen Sie, Ihren Inhalt und das Layout aus dem Code so weit wie möglich zu trennen. Jedes Mal, wenn Sie einen beliebigen HTML in einer Php-Datei schreiben, stoppen und denken: „Ist diese wirklich gehören hier?“

Eine Lösung ist Vorlagen. Schauen Sie sich die Smarty Templating-System für eine recht einfach zu bedienende Option.

  

, das zu tun, macht aber mein PHP-Code aussieht schrecklich ... es mit der Formatierung und „Form“ des Codes wirklich vermasselt. Wie soll ich dieses Problem umgehen?

Behandeln Sie Ihr PHP und HTML als eine einzige Hierarchie, mit einer einzigen, konsistenten Vertiefung Struktur. So eine PHP umschließenden-Struktur wie ein ‚wenn‘ oder ‚für‘ stellt eine neue Stufe der Vertiefung, und ihr Inhalt ist immer ein ausgeglichener Satz von Start- und End-Tags. Im Wesentlichen sind Sie Sie machen Ihre PHP ‚wohlgeformt‘ im XML Sinne des Wortes, auch wenn sie eigentlich XHTML.

Beispiel:

<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>

Seien Sie vorsichtig bei der religiösen Dogma hier wieder in den Antworten Logik und Markup-Aufzucht den Kopf zu trennen. Während sicherlich möchten Sie Ihre Geschäftslogik aus Ihrer Seite Ausgabecode zu halten, bedeutet dies nicht notwendigerweise eine Last von Overhead bedeuten verwenden separate Dateien, Klassen, Vorlagen und Frameworks ist wirklich notwendig, für das, was Sie tun. Für eine einfache Anwendung, ist es wahrscheinlich genug sein, nur das Aktion / Logik-Material am Anfang der Datei zu setzen und die Seitenausgabe unten.

(zum Beispiel von einem der obigen Ausführungen, htmlspecialchars tun () ist Seite-Ausgabe Funktionen, die Sie auf jeden Fall nicht wollen in der Action-Bit Ihrer PHP setzen, in allen gemischt Business-Logik. halten Sie Text als ebener, unescaped Strings bis zu dem Punkt, wo es Ihre Anwendungslogik verläßt. Wenn ‚echo (htmlspecialchars (...))‘ eingeben die ganze Zeit zu wortreich ist, können Sie immer eine Funktion mit einem kurzen machen Namen wie 'h', die die gleiche.)

Vom Klang des Problems, es scheint, dass Sie nicht viel Trennung zwischen Logik und Präsentation in Ihrem Code haben könnten. Bei der Entwicklung neuer Anwendungen ist dies eine sehr wichtige Überlegung, aus Gründen genau die Situation gezeigt, Ihre zur Zeit gegenüber.

Wenn Sie nicht bereits haben würde ich einen Blick auf einige PHP Templating Engines nehmen wie Smarty .

In solchen Fällen, dass ich alles schrittweise in eine Variable schreiben oder manchmal ein Array und Echo dann die Variable / Array. Es hat den zusätzlichen Vorteil, dass die Seite immer auf einmal macht, anstatt schrittweise.

Was ich in dieser Situation tat am Ende baut ‚template‘ Dateien von HTML-Daten, die ich einschließen, und dann mit regulären Ausdrücken analysieren durch. Es hält den Code sauber, und macht es einfacher, Stücke zu einem Designer oder anderer HTML Person zu übergeben.

Überprüfen Sie die Ideale hinter MVC Programmierpraktiken aus unter Wikipedia

Sie brauchen einen Rahmen. Dies wird nicht nur den Code recht machen (wegen des bereits erwähnten Model-View-Controller-Musters, MVC) - es wird Ihnen Zeit sparen, weil der Komponenten, die für sie bereits geschrieben sind.

Ich empfehle QCodo, es ist erstaunlich; es gibt andere, -. CakePHP, Symfony

Wenn es ein großes Projekt ist ein Rahmen, um sein könnte. Wenn nicht, erstellen Sie einige Template-Dateien und im oberen Bereich der Seite entscheiden, welche Vorlagendatei aufzunehmen.

zum Beispiel

if ($_SESSION['logged_in'])
     include(TPL_DIR . 'main_logged_in.tpl'); 
else
     include(tPL_DIR . 'main.tpl');

nur ein einfaches Beispiel

, wie oben erwähnt .. Sie das Symptom sind Befestigungs, nicht das Problem ..

Was Sie brauchen, ist die Trennung von Logik und Präsentation. Welche kann mit irgendeiner Art von MVC-Framework erfolgen. Auch wenn Sie nicht wollen, den ganzen Weg mit einem MVC-Framework gehen .. Ein Template-Engine ist ein Muss, zumindest, wenn Sie Ihre Logik kompliziert genug ist, dass Sie Schwierigkeiten haben, mit dem, was Sie erklären

ich stark darauf hin, Savant statt Smarty,

  • Sie müssen keine neue Templat „Sprache“ lernen, um Vorlagen zu erstellen, werden Savant-Vorlagen in PHP geschrieben
  • Wenn Sie PHP nicht verwenden möchten, können Sie Ihre eigene Vorlage „Sprache“ mit einem Compiler
  • definieren
  • es ist leicht erweiterbar, indem Sie Ihre eigenen PHP-Objekte

Die Trennung Logik von der Präsentation bedeutet nicht, dass alles, was Sie Business-Logik sonst in PHP und Ihre Präsentationslogik in etwas zu sein hat, ist die Trennung eine konzeptionelle Sache, hae Sie die Logik zu trennen, die Daten bilden die man bereitet, die es zeigt, . Offensichtlich ist die Business-Logik muss nicht Präsentationselemente enthalten.

Anstelle von Templating-Systemen auf einem Template-System (PHP selbst) Implementierung, Erstellung von Overhead pro Standard, den Sie für eine robuste Lösung gehen kann wie XSL Transformations , die auch mit dem MVC princples (vorausgesetzt, Sie Ihre Daten-Retrieval trennen; plus, ich teilten uns persönlich die Logik von Anzeigen der XML mit verschiedenen Dateien).

Stellen Sie sich die folgenden Informationen in einem Array mit, die Sie in einer Tabelle angezeigt werden sollen.

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

Sie einfach ein Skript erstellen, das diese Informationen ausgibt, die 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";

in der folgenden XML Resultierende:

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

Jetzt ist das alles sehr gut, aber das wird in einem praktischen Format nicht angezeigt werden soll. Dies ist, wo XSLT kommt mit einigen einfachen Code, können Sie diese in eine Tabelle umwandeln.

<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 voila, Sie haben:

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

Jetzt für dieses einfache Beispiel, das ist ein wenig übertrieben; aber für komplexe Strukturen in großen Projekten, ist dies eine absolute Möglichkeit, Ihre Skriptlogik zu halten weg von Ihrem Markup.

Überprüfen Sie diese Frage über Trennung PHP und HTML, gibt es verschiedene Möglichkeiten, es zu tun, einschließlich selbst geschrieben Templating-Systemen, Templating-Systeme wie Smarty, PHP als Template-System auf seine eigenen, etc etc etc ...

Ich glaube, Sie haben zwei Möglichkeiten, entweder einen MVC-Framework oder die faule Templating Weise benutzen, die auf Ihrem Code erheblichen Aufwand setzen würden. Natürlich bin ich mit dem ehemaligen, ich glaube, das Lernen MVC ist eine der besten Web-Entwicklung Tricks im Buch ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top