19 Stimmen

PHP-Vorlagen - mit PHP

Was ist die eleganteste Template-Lösung (vorzugsweise in reinem PHP!), die du gesehen hast?

Insbesondere interessiere ich mich für die Bearbeitung von:

  1. Erfassung in einem sich wiederholenden Block, ob es sich um das erste oder letzte Element handelt
  2. Einfache Behandlung von ungeraden/geraden Fällen, wie bei einer Zebra-gestreiften Tabelle oder Ähnlichem
  3. Andere Modulo-Logik, bei der du etwas jede n-te Zeit machst.

Ich suche nach etwas, das dies weniger schmerzhaft macht:

Muss man wirklich den obigen Code-Wirrwarr schreiben, um etwas wie das Untenstehende zu erstellen?

    John
    Jack
    Jill
    Jason

Bin nur ich es, der obiges als fast abscheulich empfindet?

All diese Öffnen und Schließen von PHP-Tags lassen mich erschaudern.

2 Stimmen

Diese hier wurde meiner Meinung nach zu Tode geschlagen.

1 Stimmen

Ja, etwas über das Sehnen nach Fjorden hinaus ist es :)

5 Stimmen

Dieser Code ist weniger kompliziert als der im akzeptierten Antwort ;)

11voto

Randy Punkte 3912

Sie müssen die Tags nicht mehrmals öffnen. Sie können auch eine Funktion daraus machen, wenn Sie dieselbe Sache mehrmals tun:

 0) {
    $out = "\n";
    foreach ($items as $item) {
      $out .= "\t$item\n";
    }
    $out .= "\n";
  }
  return $out;
}
?>

anderer Seiteninhalt

Wenn Sie nichts dagegen haben, Javascript zu verwenden, macht Jquery Dinge modulo 2 recht einfach (z.B. für das Zebrastreifen einer Tabelle):

$("tr:odd").addClass("odd");
$("tr:even").addClass("even");

0 Stimmen

Vollkommen einverstanden mit Ihnen hier - es ist nicht notwendig, die Lösung zu überkomplizieren, wenn PHP sich bereits als Vorlagen-Sprache anbietet. Sie können das 'classes'-Argument fallen lassen (zumindest im Standardfall), da die Klassen normalerweise 'ungerade' + 'gerade' sein werden.

0 Stimmen

Nun, die Funktion ist allgemeiner geschrieben, damit Sie auch mehr als zwei Alternativen für Klassen übergeben können. Wie Sie sehen können, wird der Modulo gemäß count($classes) genommen.

1 Stimmen

99%: "\"" . htmlspecialchars($classes[$i++%$c] . "\">" . htmlspecialchars($item) / "\n";

7voto

Cruachan Punkte 15597

Winzig aber stark

www.tinybutstrong.com

Es vermeidet den Smarty-Fehler, eine andere Makrosprache in die Seite einzubetten, ermöglicht es Ihnen jedoch, jedes praktische Webanzeigeproblem zu bewältigen, das ich je darauf geworfen habe. Insbesondere sind die oben genannten ungeraden/geraden Konstruktionen ein Kinderspiel. Für etwas wie Ihren Code, der aus einer Datenbanktabelle auswählt

In der PHP-Datei

$TBS->MergeBlock('blk1',$sqlconnect, "SELECT name from people ");

Und in der HTML-Datei

    [blk.name;block=ul]
    [blk.name;block=ul]

Und das war's. Beachten Sie, dass das HTML vollständig Dreamweaver-kompatibel ist. Außerdem müsste ich, wenn ich das abwechseln lassen will über drei Zeilenstile, nur die zusätzliche Zeile hinzufügen, vielleicht mit unterschiedlichen Klassen, also

    [blk.name;block=ul]
    [blk.name;block=ul]
    [blk.name;block=ul]

1 Stimmen

+1 Tiny But Strong ist absolut unglaublich. Sobald Sie lernen, wie man Magnetvorlagen verwendet, wird die Erstellung von Vorlagen um Größenordnungen einfacher.

2 Stimmen

+1 Auf jeden Fall. Unglaublich leicht!

5voto

gahooa Punkte 121696

Ein kleiner Hinweis zur Schleifen:

Indem Sie $b=!$b sagen, wechselt es automatisch zwischen true und false. Da false als "" gedruckt wird und true als "1", können Sie durch Definieren von css-Klassen row und row1 Ihre sich abwechselnden Zeilen ohne Probleme erhalten.

Denken Sie daran, :first-child css zu verwenden, um den ersten anders zu gestalten.

4voto

fijter Punkte 17127

Es ist kein reines PHP (die Templating-Syntax dann), aber es funktioniert wirklich gut; Smarty.

Für Schleifen können Sie Folgendes tun:

{foreach from=$var name=loop item=test}
  {if $smarty.foreach.loop.first}Dies ist der erste Artikel{/if}
  {$var.name}
  {if $smarty.foreach.loop.last}Dies war der letzte Artikel{/if}
{/foreach}

10 Stimmen

Ich weiß, dass es beliebt ist, aber ich denke, dass Smarty eine der schlechtesten öffentlichen Bibliotheken überhaupt ist.

3 Stimmen

Und warum ist es eine der schlechtesten öffentlichen Bibliotheken?

7 Stimmen

Ich habe nicht genug Platz in diesen Kommentaren, um eine richtige Antwort zu schreiben, aber im Grunde liegt es daran, dass es sich um eine ganz andere Sprache handelt und es viele Probleme damit gibt. Wartbarkeit, Leistung, Übertragbarkeit, usw. Es ist einfach kein Entwicklungszugang, dem ich zustimme.

3voto

Robert K Punkte 29416

Ich benutze PHPTAL für die Template-Erstellung, weil es zu 100% in echtem HTML mit Platzhalterdaten geschrieben ist, sodass es sogar in einem WYSIWYG-Editor für Webdesigner funktioniert. Außerdem ist es einfach zu verstehen.

So würde es für mich aussehen. Bitte entschuldigen Sie die Formatierung, ich bin neu hier und der Block mit den vier Leerzeichen hat bei mir nicht richtig funktioniert (die Liste war eine Liste, nicht die Formatierung).

PHP-Code:

  $tal = new PHPTAL;
  $tal->setTemplate('people.htm')
      ->set('people', array('John', 'Jack', 'Jill', 'Jason'));
  echo $tal->execute();

Template:

    *   John Doe

Output:

  • John
  • Jack
  • Jill
  • Jason

Offensichtlich würde ich für so etwas Kleines kein eigenes Template erstellen, aber ich könnte dafür ein Makro verwenden oder eine ganze Seite erstellen und diese Variable einbinden. Aber Sie verstehen sicher, worum es geht. Die Verwendung von PHPTAL hat meine Geschwindigkeit bei der Template-Erstellung und Programmierung fast verdreifacht, einfach aufgrund der Einfachheit (kein neuer Syntax zu lernen wie z.B. bei Smarty).

1 Stimmen

Wie würdest du Zebra-Streifen mit PHPTAL machen? Ich habe folgendes gemacht, aber es sieht zu umständlich aus: item-Wert item-Wert

1 Stimmen

Hast du die Anleitung nicht sorgfältig genug gelesen? ;) phptal.org/manual/de/split/tal-attributes.html* ist der Trick.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X