andi: Wie setze ich folgendes Layout effizient um?

Hallo Forum,
es geht um folgendes Layout:
layout

Umgesetzt wird das ganze mit PHP. Da Redundanzen vermeiden und das Ganze mögl. pflegeleicht halten will, habe ich mir gedacht ich erstelle erst einmal ein HTML-Gerüst mit den Teilen die sich nie ändern, und include an den entspr. Stellen die einzelnen Elemente der Unterseiten.

Ich habe also eine basis.php, in der der Aufbau wie oben zu sehen drin steht. Logo, News und Footer sind auf allen Seiten identisch. Das Hauptmenü wird aus der menue.php includiert. Soweit so gut.

BILD und CONTENT sind auf allen Seiten verschieden. Mein Problem ist jetzt, dass in der basis.php die entspr. DIVs nicht direkt zusammen stehen, sondern durch die news getrennt sind. Wären sie zusammen, könnte ich ja einfach z.B. contact.php includen, und dort dann <div id="bild">...</div><div id="content">..</div> schreiben.

Möglichkeinten, die mir jetzt einfallen:

  1. ich include 2 verschieden Seiten pro Unterseite (contact_bild.php und contact_content.php)
  2. ich schmeiss die news wieder aus der basis raus, include jeweils nur eine Datei (contact.php) und habe dort bild->news->content
  3. ich schreibe in die basis im bild-div: echo $picture; und bei content echo $content. Zuvor include ich eine Datei, in der die beiden Variabeln befüllt werden.

Irgendwie gefällt mir gar nix davon. Die Nachteile von 1+2 sind offensichtlich. Bei 3 stört mich, dass dann der ganze Content in Strings verpackt werden muss (oder?).

Ich hoffe ihr kapiert, worauf ich hinaus will. Und ich hoffe noch mehr, ihr habt ein paar Tipps für mich :-)

Vielen dank schon mal & gruß
andi

  1. Moin!

    Warum sollte "<div id="bild">...</div><div id="content">..</div>" nicht gehen? Dein HTML scheint dann anders zu sein, als es Dein Bild erstmal vermuten laesst.

    Ansonsten lade deine php. Dort ist z.B. drin eine Variable mit einem String der den Pfad des Bildes abbildet und einem String der den inhalt wiedergibt. Den String mit dem Bilderpfad schreibst du zu deinem Bild. (Das wahrscheinlich eherin s CSS gehoert) und den Inhalt in den Inhaltsbereich.

    Am ehesten laedst Du sowieso dein Template (als String), das lediglich mit Platzhaltern versehen ist sowie deine Inhalte (als String). Dann ersetzt Du lustig Platzhalter und gibst das So veraenderte Template wieder aus. (EVA Prinzip)

    --
    Ich bin dafuer verantwortlich was ich sage, nicht dafuer, was Du verstehst.
    1. Hallo!

      Warum sollte "<div id="bild">...</div><div id="content">..</div>" nicht gehen? Dein HTML scheint dann anders zu sein, als es Dein Bild erstmal vermuten laesst.

      So sieht das Gerüst zur Zeit aus:
      <logo></logo>
      <oben>
       <menü></menü>
       <bild></bild>
      </oben>
      <news></news>
      <content></content>
      <footer></footer>

      Das ist so (und das habe ich vergessen zu erwähnen bzw. zu kennzeichnen) weil das Menü und das Bild das selbe, durchgehende Hintergrundbild haben.
      Aus diesem Grund erscheint es mir nicht möglich, <bild> und <content> komplett aus einer Datei zu includen.

      Ansonsten lade deine php. Dort ist z.B. drin eine Variable mit einem String der den Pfad des Bildes abbildet und einem String der den inhalt wiedergibt. Den String mit dem Bilderpfad schreibst du zu deinem Bild. (Das wahrscheinlich eherin s CSS gehoert) und den Inhalt in den Inhaltsbereich.

      So ähnlich hab ich es bereits versucht:

        
              <div id="mainpic">  
                <?php echo $mainpic; ?>  
              </div>
      

      In den includierten Unterseiten wird diese variabel befüllt. Ist das so i.O.? Bei einem Bild seh ich da auch kein Problem. Aber im Content-Bereich kann ja alles Mögliche kommen (Tabellen, Auflistungen, etc.). Soll das dann alles am Ende EIN String werden, der dann in die entsp. Variabel gepackt wird?

      Danke nochmal
      Andi

  2. Hi,

    Die Nachteile von 1+2 sind offensichtlich. Bei 3 stört mich, dass dann der ganze Content in Strings verpackt werden muss (oder?).

    Nein, nicht unbedingt - du kannst PHP auch in seiner ursprünglich(st)en Bedeutung nutzen, als Templatesprache. Einfach ein Template erstellen, dass die Werte zuvor ermittelter Variablen in den entsprechenden HTML-Code eingebettet ausgeben kann, und dieses an der richtigen Stelle per include einbinden. (Die alternativen Schreibweisen für Kontrollstrukturen können dabei ggf. ganz hilfreich sein.)

    Ich hoffe ihr kapiert, worauf ich hinaus will.

    Nicht so ganz. Mit Layout scheint mir dein Problem noch gar nicht so viel zu tun zu haben, sondern eher mit vernünftigem Scriptaufbau und -organisation.
    Deshalb vielleicht auch gleich noch das Stichwort EVA-Prinzip.

    MfG ChrisB

    --
    “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
    1. Ich hoffe ihr kapiert, worauf ich hinaus will.

      Nicht so ganz. Mit Layout scheint mir dein Problem noch gar nicht so viel zu tun zu haben, sondern eher mit vernünftigem Scriptaufbau und -organisation.
      Deshalb vielleicht auch gleich noch das Stichwort EVA-Prinzip.

      Drum hab ich auch nicht (LAYOUT) Sondern (PROGRAMMIERTECHNIK) als Kategorie gewählt :-)

      Wie wäre folgender ansatz (habe ich mal in einer Agentur so gesehen).

      • Es gibt eine data.php, in der der KOMPLETTE Content ALLER Unterseiten, aufgebaut als Array, drin steht. Das sieht dann irgendwie so aus:
        
      $data = array(  
      	"home" => array(  
      		"template"	=> "index",  
      		"content" => array(  
      			array(  
      				"type"		=> "headline",  
      				"content"	=> "headline-1"  
      				),  
      			array(  
      				"type"		=> "paragraph",  
      				"content"	=> "lorem ipsum ... "  
      				),  
      			array(  
      				"type"		=> "paragraph",  
      				"content"	=> "<table><tr><td>... "  
      				)  
      	),  
      	"products" => array {  
      		"template"	=> "mainpage",  
      		"content" => array(.....  
      
      

      Darauf zugegriffen wir dann (im template) wie folgt:

        
      	foreach ($data[$pageName]['content'] AS $content){  
      		switch ($content['type']){  
      			case 'paragraph':  
      					echo $content['content'];  
      				break;  
      
      

      Ist das guter Stil?

      1. Ist das guter Stil?

        Was mich dabei z.B. stört ist, dass der ganze Content in einem String steht und somit u.a. alle "" maskiert werden müssen und der Texteditor kein sinnvolles text-highlighting mehr anzeigt.

        1. Hi!

          Das ist auch kein besonders guter Stil, wie ich finde. Warum die ganze Webseite in eine Datei? Bei kleinen Visitenkarten ist das vielleicht noch in Ordnung.

          Natuerlich ist, eine Seite in einem String zu hinterlegen, moeglich aber mit Nachteilen behaftet. Du kannst dir so ein Konstrukt aber anlegen und dort nur ein paar Informationen fuer jede Seite hinterlegen. (Gewoehnlich liegt sowas eher in einer Datenbank)

          Und jetzt kommt der fuer dich interessante Teil:

          Dort ist einmal der Bildname hinterlegt und zum anderen ein Dateiname. Die hinterlegte Datei enthaelt einfach nur das HTML fuer den Inhaltsbereich.  Den kannst Du dann einlesen und als string ausgeben. Oder (das ging frueher jedenfalls noch, wenn ich mich richtig erinnere) einfach includieren.

          --
          Ich bin dafuer verantwortlich was ich sage, nicht dafuer, was Du verstehst.
          1. hallo nochmal

            Dort ist einmal der Bildname hinterlegt und zum anderen ein Dateiname. Die hinterlegte Datei enthaelt einfach nur das HTML fuer den Inhaltsbereich.  Den kannst Du dann einlesen und als string ausgeben. Oder (das ging frueher jedenfalls noch, wenn ich mich richtig erinnere) einfach includieren.

            Kann man mittle sinclude() auch nur einen Teilbereich einer Quelle ausführen lassen?

            z.B. so: in meiner products.php habe ich zwei Bereiche PICTURE und CONTENT, die irgendwie (wie?) voneinandern getrennt sind und wo der jeweilige Inhalt hinterlegt ist.
            aus einer Anderen DAtei will ich einmal nur den PICTURE-Teil und ein anderes mal nur den CONTENT-Teil includieren. (Wie) geht das?
            Die Beschr. von include() auf php.net hat mir nicht weiter geholfen.

            danke!!
            andi

            1. Hi!

              Du includierst jeweils die komplette Datei. Was da drin steht liegt bei Dir. Wenn dort einfach nur Code steht, wird der so ausgefuehrt (und ueberschreibt Dir eventuell vorhandene Strukturen, z.B. Variablen). Sind dort Funktionen, stehen sie Dir damit zur Verfuegung und wenn dort Objekte sind...

              Wenn Du nur Teile moechtest, solltest Du dafuer sorgen dass der Inhalt der Dateien das ermoeglicht. Wenn dort einfach immer nur Variablen wie $bild="back1.png" oder $content="<h1>Header</h1>" drin stehen, dann werden die beim include einer anderen Datei natuelrich ueberschrieben.

              Sorge also fuer eine vernuenftige Programmstruktur, die mit deinen Wuenschen klarkommt.

              Ich habe schon erwaehnt, dass Du gern irgendwo deine Webseitenstruktur hinterlegen kannst. Dort speicherst Du z.B. Bildnamen und Contentdatei. Den String mit dem Bildnamen schreibst Du in dein HTML/CSS und den String mit dem Dateinamen nutzt Du zum Include (evtl. interessiert Dich auch fopen()). Da kannst Du dich auch entscheiden welches Element du nutzen moechtest.

              Das kannst Du fuer die komplette Seite machen: Du pruefst, welche Seite angezeigt werden soll. Du laedst einfach deine Grundstruktur mit Platzhaltern (ein String), entscheidest welche Elemente dort hineingehoeren (auch Strings die Du besorgst) und fuegst Diese an die Stelle von Platzhaltern ein. Die fertige HTML Seite gibst Du dann aus. Das nun schon mehrfach erwaehnte EVA Prinzip.

              --
              Ich bin dafuer verantwortlich was ich sage, nicht dafuer, was Du verstehst.