Zend Framework Tutorial Teil 5:
Ansichtssache: Zend_View und Zend_Layout

ACHTUNG:
Dieses Tutorial wird nicht mehr weitergeführt, da es auf ältere Versionen des Zend Frameworks aufbaut. Das neue Projekt ist hier:
Zend Framework Tutorial - Wir bauen ein Content Management System (CMS)

Im vierten Teil meines Zend Framework Tutorials haben wir die benötigten Controller und Aktionen anhand unserer Anforderungsliste ermittelt. Wir haben den ArtikelController erstellt, Aktionsmethoden angelegt und die grundlegende Interaktion zwischen Controller und View kennengelernt. Zudem haben wir uns mit Zend_Tool beschäftigt und es intensiv eingesetzt. Wenn du die ersten vier Teile noch nicht gelesen hast, hole dies bitte schnell nach.

In diesem fünften Teil des Tutorials werden wir uns um die View und Layout Komponenten unseres Projektes kümmern. Nach einer kurzen Einführung in Zend_View werden wir die Templates für die erstellten Aktionsmethoden für die Ausgabe erstellen. Dabei werden wir auch einige Hilfsmethoden für die Ausgabe kennen lernen. Das alles wird dann noch mit Zend_Layout verfeinert.

Wenn du über neue Tutorial Teile informiert werden möchtest, abonniere am besten den Feed dieses Blogs. Dann verpasst du garantiert keinen Teil des Tutorials. Es gibt auch Übersicht mit den bisher erschienen Teilen des Tutorials.

Inhaltsverzeichnis

Zend_View

Du hast ja bereits im vierten Kapitel den Einsatz von Zend_View kennengelernt. Trotzdem empfehle ich dir (nochmals) einen kurzen Blick in das Zend_View Kapitel im Manual zu werfen. Dort erfährst du schon ein wenig über die Funktionsweise von Zend_View.

Die Zend_View Komponente ist keine klassische Template Engine und verwendet keine eigene Template Syntax wie dies z.B. bei Smarty, patTemplate oder PEAR::HTML_Template_IT der Fall ist. Stattdessen verwendet Zend_View einfach PHP als Templatesprache, d.h. in unseren Templates verwenden wir eine Mischung aus HTML und PHP Code.

Zend_View ist jedoch so konzeptioniert, dass du auch jede beliebige Template Engine für die Ausgabe verwenden kannst. Im weiteren Verlauf des Tutorials werde ich einige Beispiele aufzeigen, wie du auch andere Template Engines in das Zend Framework integrieren kannst. Zudem wird das Thema auch immer mal wieder in der Zend Framework Mailingliste diskutiert und es wurde bereits angedacht, eine Komponente zu entwickeln, welche Templates mit Smarty ähnlicher Syntax in PHP Skripte übersetzt, die dann einfach von Zend_View verwendet werden können.

Haupttemplate einrichten

Wenn du deine Hausaufgaben gemacht hast (das hast du doch, oder?) ist dir sicherlich unangenehm aufgefallen, dass du bei jedem View-Skript immer wieder das Gleiche schreiben musstest:
Den Header, Titel, Meta-Tags, Links, HTML-Tags usw.
Unabhängig davon, dass sowas nervt, es wird auch aufwendig, wenn was geändert werden soll.

Da weite Teile unserer bisherigen Templates nahezu identisch sind, macht es Sinn, ein Haupttemplate einzurichten, welches dann die individuellen Templates an der richtigen Stelle einbindet.

Dafür gibt es zwei Möglichkeiten:
Wir können ein Haupttemplate in unserem Skript-Verzeichnis erstellen und die einzelnen 'Unterskripte' wie show.phtml, change.phtml usw. dort dann einbinden (includen).
Die zweite Möglichkeit ist über Zend_Layout und das ist Methode, mit die wir anwenden werden.

Haupttemplate einrichten mit Zend_Layout

Zend_Layout wurde erstmal so ab Version 1.1 (so genau weiß ich das nicht mehr) des Zend Frameworks vorgestellt. Zend_Layout bietet die Möglichkeit ein 'Gerüst' zu erstellen in das dann verschiedene Views eingebunden werden können. Diese 'Gerüst' wird Layout genannt und - ordentlich aufgeräumt wie das Zend Framework nunmal ist - gibt es auch ein eigenes Verzeichnis für die Dateien, die mit dem Layout zu tun haben: "/layouts".

Lege bitte in diesem Verzeichnis ("travelloblog/application/layouts/") eine neue Datei mit Namen main.phtml und folgendem Inhalt an:

HTML:
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2.  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <title>Zend Framework Tutorial</title>
  4. </head>
  5. <?php echo $this->layout()->content; ?>
  6. </body>
  7. </html>

Als nächstes öffne bitte die Datei /views/scripts/index/index.phtml und lösche dort alles und schreib statt dessen rein:

HTML:
  1. <h1>Hallo Welt, erzeugt per layout</h1>

Wenn du jetzt "http://localhost/travelloblog/public/" aufrufst, siehst du die Ausgabe
Hallo Welt, erzeugt per layout, also alles in Ordnung, oder?

Schaut so aus, aber laß dir mal über deinen Browser den Quellcode anzeigen. Da wirst du sehen, dass nur noch "Hallo Welt, erzeugt per layout" angezeigt wird, jegliche HTML-Tags usw. fehlen jedoch komplett. Die stecken in unserer Layout main.phtml Datei und müssen noch aktiviert werden.

Gehe dazu zunächst in das Verzeichnis "application/configs" und öffne die Datei application.ini
und ergänze dort die Einträge zum Layout:

HTML:
  1. [production]
  2. phpSettings.display_startup_errors = 0
  3. phpSettings.display_errors = 0
  4.  
  5. includePaths.library = APPLICATION_PATH "/../library"
  6.  
  7. bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
  8. bootstrap.class = "Bootstrap"
  9.  
  10. resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
  11.  
  12. ; Pfad zum Layout Script und dessen Name
  13. resources.layout.layoutPath = APPLICATION_PATH "/layouts"
  14. resources.layout.layout = "main"

ok, was haben wir gemacht? Wir übergeben zunächst den Pfad, wo unsere Layout-Dateien zu finden sind und dann den Namen unserer Haupt-Layoutdatei.
Standardmäig wird nach der Layoutdatei layout.phtml gesucht. Da wir unsere jedoch main.phtml genannt haben, müssen wir es auch entsprechend 'mitteilen'.

Wenn du jetzt "http://localhost/travelloblog/public/" aufrufst, hat sich rein optisch nichts verändert. Schau dir aber nochmals den Quellcode der Ausgabe über deinen Browser an. Siehst du, jetzt schaut es wieder so aus, wie es sein soll: Alle erforderlichen HTML Einträge sind (wieder) vorhanden.

So, jetzt ist alles wieder so, wie es sein soll. Allerdings haben wir uns das Leben mit einem zentralen Template wesentlich leichter gemacht.
Wir können aber noch mehr tun:

Zend_Views kleine Helferlein

Zend_View bietet eine ganze Reihe sehr nützlicher Helfer. Schau sie dir ruhig mal im Manual an. Einige dieser Helfer werden wir auch in unser Projekt einbauen.
Gehe dazu bitte in das "/layouts" Verzeichnis und öffne die Datei main.phtml. Dann ändere dort die Einträge wie folgt:

PHP:
  1. <?php echo $this->doctype(); ?>
  2.  
  3. <html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">
  4. <head>
  5.  
  6. <?php
  7. echo $this->headTitle();
  8. echo $this->headMeta();
  9. echo $this->headStyle();
  10. echo $this->headLink();
  11. echo $this->headScript();
  12. ?>
  13.  
  14. </head>
  15. <body>
  16.  
  17. //-- Hauptseite einbinden
  18. <?php echo $this->layout()->content; ?>
  19.  
  20. </body></html>

Kurz, knackig, kompakt. Hier bereiten wir die Ausgabe vom Dokumenten-Typ und die verschiedenen Header-Einträge vor.
Um dieser Ausgabe auch Leben einzuhauchen, brauchen wir die Bootstrap Datei. Öffne diese bitte und trage dort bitte ein:

PHP:
  1. <?php
  2.  
  3. class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
  4. {
  5.     function _initViewHelpers()
  6.     {
  7.         $this->bootstrap('layout');
  8.         $layout = $this->getResource('layout');
  9.         $view = $layout->getView();
  10.        
  11.         $view->doctype('XHTML1_STRICT');
  12.         $view->headMeta()->appendHttpEquiv('Content-Type', 'text/html;charset=utf-8');
  13.         $view->headMeta()->appendName('keywords', 'Zend Framework PHP Tutorial');
  14.         $view->headLink()->appendStylesheet('http://localhost/travelloblog/public/_files/css/styles.css');
  15.         $view->headTitle()->setSeparator(' - ');
  16.         $view->headTitle('Zend Framework Tutorial');
  17.     }
  18.  
  19. }

Schaun wir uns mal an, was wir da so gemacht haben:
Zunächst einmal haben wir den Dokumenten-Typ festgelegt.

Dann haben wir die Meta-Schlüsselwörter aufgelistet. Schau dir ruhig nochmal im Manual die verschiedenen Möglichkeiten an.

Beim Einbinden der css-Datei, störe dich nicht daran, dass wir momentan noch den absoluten Pfad angeben. Wir werden das im nächsten Kapitel ändern.

Und als letztes haben wir uns für einen Dokumententitel entschieden. Dabei gibt es aber eine Besonderheit. Ich möchte, dass Zend Framework Tutorial immer gleich bleiben soll, dann allerdings, je nach aufgerufener Seite, ein Zusatz angehängt werden soll.
Das funktioniert so:
Der Teil des Titels, der bei ->prepend() steht, wird immer angezeigt. Wir trennen den Zusatz durch einen Separator (->setSeparator()), der aber immer nur dann angezeigt wird, wenn im Laufe des Skripts ein Zusatz via append() eingebunden wird. In unserem Fall steht der angehängte (append) Teil des Titels bei den jeweiligen Controller-Methoden.

Warum, wirst du jetzt fragen, machen wir das alles so kompliziert? Wir könnten ja die einzelnen Angaben (wie wir es ja im vorherigen Kapitel gemacht haben), direkt eintragen.
Der Vorteil ist, dass wir auf diese Weise Angaben ändern bzw. anfügen können.
Das kannst du ja bereits beim Titel sehen.
Versuche das mal mit 'normalen' Dateien zu machen.
Eine weitere Option ist verschiedene Stylesheets zu verwenden, je nachdem welche Seite aufgerufen wird.
Oder Meta-Tags anzupassen, usw. usw. ... Es gibt eine Vielzahl nützlicher und sinnvoller Anwendungen.

Du siehst: Auch wenn es zunächst aufwändiger erscheint, sind wir letztendlich wesentlich flexibler, wenn wir es so machen.

Ein klein wenig Design

Damit unser Blog nicht ganz so langweilig aussieht, bringen wir nun zuerst mehr Struktur in den HTML Code rein und verschönern dann die Ausgabe mit CSS. Da wir nur ein einziges Haupttemplate haben, haben wir uns die Arbeit damit deutlich erleichtert.

Wir gestalten den Seitenaufbau nun mit Hilfe mehrerer div-Blöcke in ein dreispaltiges Layout mit einem Seitenkopf und einem Seitenfuß um. In der linken Spalte platzieren wir später die Navigation und in der rechten Spalte einige Infoboxen, die wir später noch mit externen Inhalten befüllen werden.

Das geänderte Template main.phtml sieht nach den Umbauarbeiten dann wie folgt aus:

PHP:
  1. <?php echo $this->doctype(); ?>
  2.  
  3. <html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">
  4. <head>
  5.  
  6. <?php
  7. echo $this->headTitle();
  8. echo $this->headMeta();
  9. echo $this->headStyle();
  10. echo $this->headLink();
  11. echo $this->headScript();
  12. ?>
  13.  
  14. </head>
  15. <body>
  16.  
  17. <div id="page">
  18.  
  19. <div id="header">
  20. <h1>TravelloBlog</h1>
  21. </div>
  22.  
  23. <div id="main">
  24.  
  25. <div id="navi">
  26. <ul>
  27. <li><a href="#">a</a></li>
  28. <li><a href="#">b</a></li>
  29. <li><a href="#">c</a></li>
  30. <li><a href="#">d</a></li>
  31. </ul>
  32. </div>
  33.  
  34. <div id="extra">
  35. <div class="extrabox">Box 1</div>
  36. <div class="extrabox">Box 2</div>
  37. <div class="extrabox">Box 3</div>
  38. </div>
  39.  
  40. <div id="content">
  41. <?php
  42. //-- Hauptseite einbinden
  43. echo $this->layout()->content;
  44. ?>
  45. </div>
  46.  
  47. </div>
  48.  
  49. <div id="footer">
  50. TravelloBlog 2009
  51. </div>
  52.  
  53. </div>
  54. </body>
  55. </html>

Jetzt lege bitte im Verzeichnis "/travelloblog/public/_files/css" die Datei "styles.css" an und füge dort folgenden Code ein:

CSS:
  1. html,input,textarea {
  2.   font-family: Arial, Helvetica, sans-serif; font-size: 100.01%;
  3. }
  4.  
  5. hr {
  6.   border: none; border-top: 1px dotted; border-color: rgb(159, 202, 135);
  7. }
  8.  
  9. h1 {
  10.   font-size: 1.3em; margin: 0em; padding: 0em;
  11. }
  12.  
  13. h2 {
  14.   font-size: 1.1em; margin: 0em; padding: 0.2em;
  15.   background-color: rgb(223, 237, 215);
  16. }
  17.  
  18. legend {
  19.   font-weight: bold; border: 1px solid; padding: 0.2em 0.4em;
  20.   background-color: rgb(223, 237, 215);
  21. }
  22.  
  23. table {
  24.   width: 100%;
  25. }
  26.  
  27. input,textarea {
  28.   width: 100%;
  29. }
  30.  
  31. th,td {
  32.   vertical-align: top;
  33. }
  34.  
  35. #page {
  36.   width: 95%; margin: auto;
  37. }
  38.  
  39. #header {
  40.   margin-bottom: 1em; border: 1px solid; padding: 1em;
  41.   background-color: rgb(159, 202, 135);
  42.   text-align: center;
  43. }
  44.  
  45. #main {
  46.   border-right: 1px solid; border-left: 1px solid; padding-left: 1em;
  47.   padding-right: 1em;
  48. }
  49.  
  50. #navi {
  51.   width: 10em; float: left;
  52. }
  53.  
  54. #extra {
  55.   width: 10em; float: right;
  56. }
  57.  
  58. #content {
  59.   border-left: 1px dotted rgb(159, 202, 135);; padding-left: 1em;
  60.   border-right: 1px dotted rgb(159, 202, 135); padding-right: 1em;
  61.   margin-left: 11em; margin-right: 11em;
  62. }
  63.  
  64. #footer {
  65.   clear: both; font-size: 0.8em; text-align: center; font-style: italic;
  66.   margin-top: 1em; padding: 0.4em; border: 1px solid; font-size: 0.8em;
  67.   background-color: rgb(223, 237, 215); margin-top: 1em;
  68. }
  69.  
  70. #navi ul {
  71.   margin: 0; padding: 0;
  72. }
  73.  
  74. #navi li {
  75.   list-style: none; margin: 0; padding: 0.2em; display: block;
  76.   margin-bottom: 0.4em; background-color: rgb(223, 237, 215);
  77.   border: 1px solid rgb(159, 202, 135);
  78. }
  79.  
  80. #navi li a {
  81.   text-decoration: none; color: #000000;
  82. }
  83.  
  84. .extrabox {
  85.   font-size: 0.8em; margin-bottom: 1em; border: 1px dotted;
  86. }
  87.  
  88. .button {
  89.   width: auto;
  90. }
  91.  
  92. .error {
  93.   background-color: rgb(244, 225, 225); border: 1px solid rgb(204, 0, 0);
  94.   padding: 0.2em; color: rgb(204, 0, 0);
  95. }

Wenn du nun wieder die Adresse "http://localhost/travelloblog/public/" in deinem Browser aufrufst, sieht das Ganze nach der Schönheitskur schon ein wenig besser aus (ok, bei uns schaut es ein klein wenig anders aus, da dieses hier das Bild vom Original-Tutorial ist):

Neues 3-Spalten Layout

Neues 3-Spalten Layout

Um die Navigationsspalte links und die Boxen rechts kümmern wir uns dann in den weiteren Teilen dieses Tutorials.

Linktipp
Wenn du dich ein wenig intensiver mit mehrspaltigem CSS Design auseinander setzen möchtest, empfehle ich dir das sehr gute YAML Tutorial!

Download

Der aktuelle Stand des Tutorials nach diesem vierten Teil kann auch herunter geladen werden.
So lange das Tutorial noch nicht komplett auf die Version ab 1.8 umgeschrieben ist, werden die Sourcen für beide Versionen angeboten:

Die Zip Datei enthält nicht die Bibliotheken (libraries) der aktuellen Version des Zend Frameworks. Die musst du bitte selber in das entsprechende Verzeichnis kopieren.

Zusammenfassung

In diesem fünften Teil des Zend Framework Tutorials haben wir die View Komponente unseres TravelloBlogs mit Hilfe der Zend_View und Zend_Layout Komponenten des Zend Frameworks realisiert. Wir haben mit Zend_Layout ein zentrales Template für die Anzeige der im nächsten Kapitel kommenden Artikelliste und die Ausgabe eines Artikels erstellt und dieses Template mit Hilfe von Zend_View ausgegeben. Zudem haben wir dem Projekt mit Hilfe von CSS ein wenig Design verpasst.

Im nächsten Teil dieses Tutorials kümmern wir uns um den Model Part unserer Anwendung. Dabei lernen wir die Zend_Db Komponente mit ihren diversen Teilkomponenten kennen und werden diese in unserem TravelloBlog auch einbinden.

Fragen, Probleme und Anregungen bitte nicht per E-Mail senden, sondern hier in die Kommentare stellen. Dann haben alle etwas davon.

Changelog

  • 01.11.2009 - Anpassung an Version 1.8 und höher

Navigation

Autor:
Datum: Samstag, 24. Januar 2009 13:04
Trackback: Trackback-URL Themengebiet: Zend Framework Tutorial für Anfänger

Feed zum Beitrag: RSS 2.0 Diesen Artikel kommentieren

33 Kommentare

  1. 1

    Um das CSS relativ einzubinden würde es reichen anstelle von

    echo $this->headLink()->appendStylesheet(‘http://localhost/travelloblog/public/_files/css/styles.css‘);

    das hier zu schreiben
    echo $this->headLink()->appendStylesheet(‘/_files/css/styles.css’);
    sofern eine Domain dafür angelegt wurde.

    Der Vorteil liegt klar auf der Hand: Es muss nichts mehr geändert werden, wenn es auf den Produktiv-Server geschoben wird.

  2. 2

    Daran hatte ich auch schon gedacht, funktioniert aber nicht, wenn du z.B. “http://localhost/travelloblog/public/article/show” aufrufst.

    Die Verwendung von “baseUrl()” sollte eine Option sein.

  3. 3

    Oben steht:
    “Das geänderte Temple “main.php” sieht…”
    Müsste eigentlich main.phtml heißen.

    Ansonsten, danke für dieses super Tutorial!

  4. 4

    danke für den Hinweis, hab’s geändert.

  5. 5

    Gut!

  6. 6

    In Zeile 58 der CSS-Date hat sich ein Fehler (doppeltes ;-Zeichen hintereinander) eingeschlichen. Insgesamt ist dieses Tutorial allerdings nahezu perfekt und ein unheimliche Hilfe. Vielen Dank.

  7. 7

    danke, ich ändere das

  8. 8

    Wie schaffe ich es, am besten, nicht nur so ein Haupttemplate zu kreieren, sondern das das Haupttemplate auch Modular ist. So mit Navigation und Header und Footer, aber das diese jweils in einer eigenen .phtml-Dateien geschrieben sind?

    Also sowas wie:

    layout()->content;
    ?>

    echo $this->layout()->footer; //<—wie geht das?

  9. 9

    Lege im Verzeichnis /layouts z.B. eine Header Datei an (header.phtml), eine Footer Datei (footer.phtml) und eine Haupt-Layout Datei (z.B. main.phtml) und in die main.phtml schreibst du rein:

    echo $this->render(‘header.phtml’);
    echo $this->layout()->content;
    echo $this->render(‘footer.phtml’);

  10. 10

    Auch hier mal meine Erfahrungen was man mit 1.8.2 anders machen muss:

    Da ich Funktionen als Kommentar nicht angeben kann mal wieder ein Verweis auf das Tutorial http://akrabat.com/wp-content/uploads/getting-started-with-zend-framework-162.pdf . Da wird ab S. 9 erklärt, wie man Views einrichtet. Wichtig für unseren Blog ist, dass man in applications.ini die im pdf genannte Zeile hinzufügt. Außerdem muss man Bootstrap.php um die auf S. 10 genannte Funktion erweitern.

    Die in unserem Blog-Tutorial angegebene Datei main.phtml können wir als Layout verwenden, müssen aber darauf achten, dass wir entweder main.phtml in layout.phtml umbenennen oder die eben in Bootstrap.php eingebaute Funktion entsprechend anpassen.

    Die Dateien show.phtml usw enthalten eh schon nur den Body-Teil, müssen also nicht reduziert werden.

    Die angepasste main.phtml (oder in der neuen Version evtl layout.phtml) mit all den Helferlein übernehmen wir genau so wie hier von Uwe angegeben. Initialisiert wurden diese Helfer durch die aus dem pdf in Bootstrap.php übernommene Funktion _initViewHelpers. Allerdings habe ich dann bei mir doch eine kleine Änderung durchgeführt: Uwe gibt de Pfad zur CSS-Datei komplett an – ich habe lieber den BaseUrl-Helper aus der pdf, S. 11, übernommen und bei mir heißt es dann:

    echo …appendStylesheet($this->baseUrl() . ‘/_files/css/styles.css’);

    Ansonsten kann man auch die CSS-Datei und die damit verbundenen Änderungen im main.phtml bzw. layout.phtml 1:1 übernehmen.

  11. 11

    Danke für das Tutorial.
    ideal für alle Einsteiger in das Thema.

    Hat sofort funktioniert.

    Selbst wenn man die Controllerdir nicht in der bootstrap setzt.

  12. 12

    ich bekomm immer die folgende Fehlermeldung für die CSS-Datei:

    Invalid controller specified (_files)
    Stack trace:
    F:\XP_ZEND\exchange\xampp\htdocs\Zend\library\Zend\Controller\Front.php(945): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
    F:\XP_ZEND\exchange\xampp\htdocs\Zend\library\Zend\Application\Bootstrap\Bootstrap.php(77): Zend_Controller_Front->dispatch()
    F:\XP_ZEND\exchange\xampp\htdocs\Zend\library\Zend\Application.php(328): Zend_Application_Bootstrap_Bootstrap->run()
    F:\XP_ZEND\exchange\xampp\htdocs\reachtool\application\run_app.php(33): Zend_Application->run()
    F:\XP_ZEND\exchange\xampp\htdocs\reachtool\public\index.php(2): require(‘F:\XP_ZEND\exch…’)
    {main}

    Woran kann es liegen?

    Gruß

  13. 13

    Hallo Peter,

    das klingt so, als würden die Rewrite Rules nicht korrekt greifen. Ich hatte das Problem auch. Verweise auf existierende Dateien sollen ja nicht nach index.php umgeleitet werden.
    Doch genau das passiert in dem Fall: Das Pfadende _files/xyz.css wird an index.php geschickt, und dort wird “_files” als Name des Controllers und xyz.css als Name der auszuführenden Aktion interpretiert. Der Controller “_files” extistiert aber nicht, daher die Meldung:
    Invalid controller specified (_files)

    Falls du einen Virtual Host für das Zend-projekt definiert hast, schau mal, ob du einen RewriteBase setzen musst. Ich hatte diesen Hinweis hier gefunden:
    http://devzone.zend.com/article/70 (suche dort nach “RewriteBase”). Das habe ich für meine Bedürfnisse umgesetzt, danach hat es funktioniert.

  14. 14

    Hallo! Ich nutze derzeit die aktuelle Zend Version 1.9.2 Dort habe das Layout in der configs/application.ini mithilfe der Zeile

    resources.layout.layoutPath = APPLICATION_PATH “/layouts”

    gestartet, da die Bootstrap dafür soweit ich das mitbekommen habe nicht mehr benutzt wird. Ich musste dann auch die main.phtlm in layout.phtml umbenennen. Dann hat alles super funktioniert. Danke für das Tutorial Gruß Martin

  15. 15

    Hey!
    Ich benutze die Version 1.9.1.
    Die folgende Seite ist ne gute Hilfe (Punkt 4.2.2):
    http://framework.zend.com/manual/de/zend.application.quick-start.html

  16. 16

    Hier handelt es sich um einen Tipfehler

    http://localhost/travelloblog/public/artikel/show

    sollte heissen:
    http://localhost/travelloblog/public/article/show
    Gruss

  17. 17

    Danke für die Info, hab’s ausgebessert.

  18. 18

    <>

    Ich habe meine bootstrap datei angepasst. Ich erhalte den Quelltext mit html nicht!

    Auch beim nächsten URL bekomme ich kein doppeltes html sondern das richtige!
    meine Version 1.9.3PL1

  19. 19

    wie sieht das ganze denn nun aus?

    “(ok, bei uns schaut es ein klein wenig anders aus, da dieses hier das Bild vom Original-Tutorial ist)”

    was heißt ein klein wenig anders?
    Bei mir sieht es aus wie html plain, will sagen dass es aussieht wie wenn die css nicht eingebunden wird..

    Bei mir kommt:
    Travelloblog
    navi
    die boxen
    content
    footer

    ich habe um eigene fehler auszuschließen mir die das .zip nocheinmal gezogen und meine durch dieses in tiel 5 angelegten ersetzt.

    Jemand eine ahnung?

    danke, super tutorial!

  20. 20

    Zend Frameworks Version 1.10.5.

    Habe eigentlich das gleiche Problem wie mein Vorredner. Das Template main.phtml klappt (also im Quelltext ist meta usw. zu sehen) jedoch scheint das css nicht so richtig zu greifen.

    Also ich erhalte nur textausgaben schwarz auf weiss (bzw. blau auf weiss für die links ;) ). Das selbe habe ich aber auch, wenn ich die tutorialdatein part 5 runterlade.

    Mfg
    Nicholas

    Ich verwende $view->headLink()->appendStylesheet(‘http://localhost/travelloblog/public/_files/css/styles.css‘);
    um die css File einzubinden.

  21. 21

    $view->headLink()->appendStylesheet(‘_files/css/styles.css’);

    Einfach so und dann gehts.
    Achte auf groß und kleinschreibung oder setze es wie ich auf absolute. Damit solltest du dann keine Probleme mehr haben , grüße

  22. 22

    Hallo,

    eig. ein sehr gutes Tutorial.
    Aber eins passt nicht ganz!

    Einmal redest du von einer Bootstrap als Klasse und einmal eine Bootstrap mit den ganzen defined und require_once.

    Also einmal mit run_app und einmal ohne. Leider so auch im download.
    Wie soll man es den nun machen?

    Schick mir mal bitte ne mail, dann erkläre
    ich es dir mal genauer was ich meine!

  23. 23

    Hallo,

    auch von mir ein großes Lob an dich. Tolles Tutorial.
    Zu dem Problem mit den CSS, kann ich nur meinen Vorvorredner Stephan empfehlen.
    “$view->headLink()->appendStylesheet(‘_files/css/styles.css’);

    Einfach so und dann gehts.
    Achte auf groß und kleinschreibung oder setze es wie ich auf absolute. Damit solltest du dann keine Probleme mehr haben , grüße”

    Ich verwende die Version 1.10.6 und bei mir hat der Tipp gleich funktioniert.
    Danke Stephan und danke Uwe

  24. 24

    Hallo und danke für dieses Super Tut.
    Ich habe eine Verständnisfrage! Wenn ich mir, bei der HTML Ausgabe, den Quellcode anschaue dann fällt mir auf dass, die einzelnen Meta-Angaben aufeinander folgen, und nicht wie im Quellcode, nacheinander (Zeile für Zeile) dargestellt sind.

    Jetzt ist z.B. so:

    Müsste aber so sein:

    Kann mir das jemand verdeutlichen?

    Schöner Gruss und Danke

  25. 25

    Ups, merke das die HTML nicht erlaubt ist.
    Ich hoffe trotzdem das Ihr Versteht was ich meine. Sonst einfach nochmal fragen.

  26. 26

    Hey,

    wie kann ich denn nun die Boxen rechts verwenden? Das hast du glaube ich nicht mehr erläutert.

    Wie bekomme ich es hin, dass je nach Controller dort ein anderer Text steht?

    Gruß,
    Pascal

  27. 27

    “Der Teil des Titels, der bei ->prepend() steht, wird immer angezeigt.”

    Vielleicht bin ich ja auch blind, aber da steht nirgends prepend. Da steht nur “$view->headTitle(‘Zend Framework Tutorial’);”. Was ist da los? :-)

  28. 28

    Mit “zf enable layout” in der Konsole wird Layout für das Projekt schon eingerichtet. Auch mit Standarddateien und Pfaden. Ich finde wichtig, das man sich daran hält.

    “/layouts/scripts/layout.phtml”

  29. 29

    schade daß dieses tutorial so voller fehler ist ! es muss layout.phtml und nicht main.phtml heissen.

  30. 30

    Chris, es ist verständlich, dass man – vor allem bei einem solch komplexen Vorhaben, wie ZF zu erlernen – irgendwann frustriert ist. Es wäre jedoch angebracht, objektiv zu bleiben.
    Und in deinem speziellen Fall, Chris: Wer lesen kann (und nicht gleich anfängt zu motzen), ist schwer im Vorteil:
    Also lies dir dieses Kapitel nochmals durch. Am Anfang unter Haupttemplate einrichten mit Zend_Layout wirst du in dem Fenster, in dem die application.ini aufgeführt ist, sehen, dass dort die Zeile steht:
    resources.layout.layout = “main”
    und auch im Text darunter steht, was gemacht wurde.

    Noch Fragen?

  31. 31

    beim 1.11er-zend muß man wiederum erstmal das layout über die kommandozeile initialisieren.
    die confs-pfade sind auch anders als im tutorial.
    aber sonst funzts.

    greez

    ulle

  32. 32

    der pfad zu den styles heißt bei mir
    $view->headLink()->appendStylesheet(‘http://'.$_SERVER'HTTP_HOST'.'/_files/css/styles.css‘);

  33. 33

    Ich würd nen absoluten Pfad nehmen und das geht so:

    $view->headLink()->appendStylesheet(‘/travelloblog/public/_files/css/styles.css‘);

    Ich finde Zend scheisse, der hat null plan von einfachen HTML gehabt. Das ist daran zu erkennen das mehr möglichkeiten geboten werden als jemals benötigt wird. Ach die Tatsache das es ja eigendlich nur verschiedene Formular Elemente typen benötigt werden und nicht z.b. checkboxen bei dem man den value je nach zustand ändern könnte, zeigt wie bescheuert die ganze sache ist. Nun ok man kann ja seine eigene Form Elemente erstellen:
    class MY_Form_Element_Email extends DBB_Form_Abstract_Text
    ….
    Mir fallen dabei folgende Typen ein, Name, City, Date, Fax, Gender, Hour, Image, minute, Password, Phone, Price, Radio, Select, Street, Taxnumber, Text, Textbox, Time, Url, Username, Zip … und alles was es noch so gibt, number oder integer …
    Ich finds kacke und habs echt versucht das toll zu finden.
    Noch ein Grund, EVA – wird es nicht in bekannter weise geben, zb daten sollen gezeigt werden, geändert und die geänderten gezeigt werden, toll das dann alles zweimal verarbeitet werden muss *lol*. Im phpmyadmin ist es so das zu dem anzeige ergebnis die aktuelle daten verarbeitung berechnet/kalkuliert wird also gelöschter Datensatz in den einmal abgerufenen Datensätzen entfernt wird (ein einziger durchlauf). Na ja jeder wie er es für richtig hält. Mein lieblings begriff ist PAGINATOR <– wo bleibt Arnold der sollte mir doch helfen es toll zu finden. Ach ja mod_rewrite verbiegen der verbogenen biegungen. einfach nur krank!

Kommentar abgeben