André: Seitenaufteilung

Hallo Freunde der guten Internetseitengestaltung!

Ich habe mal eine Frage zur Aufteilung einer Internetseite: Wie macht man das am besten? Mit Seitenaufteilung meine ich die Aufteilung in Buttonleiste/Navigation, Hauptseite/-inhalt, Kopf- und Fußleiste.

Früher wurden dazu frames verwendet, die glaube ich nicht mehr so funktionell sind. Ich habe bereits gegugelt und neben div-Containern auch den Hinweis mit Tabellen gefunden, aber ich bin mir nicht schlüssig, was hiervon am effektivsten ist.

Ich habe so etwas schon mal mit div-Containern gemacht. Der Nachteil war, dass die Buttonleiste/Navigation sowie alle weiteren Teile für jede Seite separat aufgeführt waren. Und wenn ich nun die Leiste oder andere Elemente verändern wollte, musste ich das für jede Seite einzeln machen, was nicht nur ineffektiv sondern auch fehleranfällig war.

Ich würde mich freuen, wenn mir jemand einen guten Tipp - auch gern in Form eines Links zu einer Seite wo dies erklärt ist - geben könnte.

Herzlichen Dank und viele Grüße,

André

  1. @@André:

    nuqneH

    Ich habe mal eine Frage zur Aufteilung einer Internetseite

    Du meinst Webseite. Das Internet ist die Infrastruktur (Rechner, Kable, Satelliten, …), das Web ist darauf basierende eine Anwendeung.

    Früher wurden dazu frames verwendet, die glaube ich nicht mehr so funktionell sind.

    Frames sind heute genau so funktionell wie früher, um verschiedene Dokumente neben-/untereinander darzustellen.

    Sie waren noch nie dafür gut, eine Webseite aufzuteilen.

    neben div-Containern auch den Hinweis mit Tabellen gefunden, aber ich bin mir nicht schlüssig, was hiervon am effektivsten ist.

    Nichts davon, sondern vernünftiges[tm] („semantisches“) Markup. (zeitliche Entwicklung)

    Aufteilung in Buttonleiste/Navigation

    Dafür ist das nav-Element da.

    Hauptseite/-inhalt

    Dafür ist das main-Element da.

    Zur weiteren Aufteilung gibt es section.

    Kopf- und Fußleiste.

    Da könnten header und footer passend sein, wobei zu beachten ist, dass deren Verwendung vom Inhalt abhängt, nicht von der Position auf der Seite. Möglicherweise ist auch aside passend.

    Der Nachteil war, dass die Buttonleiste/Navigation sowie alle weiteren Teile für jede Seite separat aufgeführt waren. Und wenn ich nun die Leiste oder andere Elemente verändern wollte, musste ich das für jede Seite einzeln machen, was nicht nur ineffektiv sondern auch fehleranfällig war.

    FAQ: Wie kann ich Teile meiner Webseite auslagern?

    Qapla'

    --
    „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
    1. Hallo Gunnar,

      vielen Dank für die umfangreiche und kompetente Antwort!

      neben div-Containern auch den Hinweis mit Tabellen gefunden, aber ich bin mir nicht schlüssig, was hiervon am effektivsten ist.

      Nichts davon, sondern vernünftiges[tm] („semantisches“) Markup. (zeitliche Entwicklung)

      Das vernünftige[tm] („semantische“) Markup wird dann durch die Elemente (nav, main, etc.) realisiert und diese per CSS auf der Seite positioniert, richtig?

      Der Nachteil war, dass die Buttonleiste/Navigation sowie alle weiteren Teile für jede Seite separat aufgeführt waren. Und wenn ich nun die Leiste oder andere Elemente verändern wollte, musste ich das für jede Seite einzeln machen, was nicht nur ineffektiv sondern auch fehleranfällig war.

      FAQ: Wie kann ich Teile meiner Webseite auslagern?

      Das ist ja das eigentlich Interessante. Scheint aber alles recht kompliziert zu sein und mit „einfachen“ HTML- und CSS-Kenntnissen nicht realisierbar zu sein. :-|  Nix für ungut...

      Schönen Sonntag,

      André

      1. Hallo,

        Das vernünftige[tm] („semantische“) Markup wird dann durch die Elemente (nav, main, etc.) realisiert ...

        nein, die sind nur ein kleiner Beitrag dazu.

        FAQ: Wie kann ich Teile meiner Webseite auslagern?
        Das ist ja das eigentlich Interessante. Scheint aber alles recht kompliziert zu sein und mit „einfachen“ HTML- und CSS-Kenntnissen nicht realisierbar zu sein. :-|  Nix für ungut...

        "Kompliziert" ist relativ. Ich finde beispielsweise SSI nicht wirklich kompliziert, und auch PHP ist sehr einfach, wenn man es nur für ein, zwei include- oder readfile-Anweisungen nutzt. Wenn dein Hoster eine dieser beiden Techniken (oder auch beide) anbietet, solltest du -notfalls mit etwas Hilfe von hier- wenig Mühe haben, sie zu nutzen.

        Ciao,
         Martin

        --
        Die letzten Worte des Hardware-Bastlers:
        Das Netzkabel lass ich wegen der Erdung lieber dran.
        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
        1. Das vernünftige[tm] („semantische“) Markup wird dann durch die Elemente (nav, main, etc.) realisiert ...

          nein, die sind nur ein kleiner Beitrag dazu.

          Und was macht dann den restlichen Beitrag aus? (Das verstehe ich leider nicht.)

          Dann noch mal die andere Frage: Diese Elemente (nav, main, etc.) werden dann per CSS auf der Seite positioniert, richtig?

          Ist das das gleiche Prinzip, wenn dies über div-Container realisiert wird, die dann ihre Eigenschaften mit CSS als ID zugewiesen bekommen [nur eben ohne vernünftiges[tm] („semantisches“) Markup]?

          Ich finde beispielsweise SSI nicht wirklich kompliziert, und auch PHP ist sehr einfach, wenn man es nur für ein, zwei include- oder readfile-Anweisungen nutzt.

          Danke, das schaue ich mir näher an!

          Dankende Grüße vom André

          1. Hallo,

            Das vernünftige[tm] („semantische“) Markup wird dann durch die Elemente (nav, main, etc.) realisiert ...
            nein, die sind nur ein kleiner Beitrag dazu.
            Und was macht dann den restlichen Beitrag aus? (Das verstehe ich leider nicht.)

            unter dem Buzzword "semantisches Markup" versteht man eigentlich etwas Selbstverständliches: Dass man konsequent die HTML-Elemente nutzt, die die Struktur des Dokuments am besten wiedergeben. Also beispielsweise h2,h2,h3,... für Überschriften; ul/ol für Listen oder listenähnliche Aufzählungen; fieldset zum Gruppieren von Formularelementen; eine Tabelle dann, wenn wirklich Tabellendaten wiedergegeben werden sollen. Das Ergebnis ist, dass man auch schon anhand des ungestylten HTML-Codes die Dokumentstruktur erkennen kann.

            Gegenbeispiele, also nicht semantisches Markup sind beispielsweise die Verwendung von Tabellen als Layoutmittel oder die übermäßige Verwendung von speziell gestylten div-Elementen, wo andere Elemente die Bedeutung besser treffen. Manche Webautoren scheinen zu glauben, dass man unbedingt div-Container bräuchte, um mit CSS darauf einzuwirken. Nein, das ist ganz sicher nicht so! Mit CSS kann man jedes Element formatieren (mit kleinen Einschränkungen bei Elementen, die eine bestimmte Funktion haben). Das div-Element ist eigentlich nur zum Gruppieren gedacht, also um mehrere Elemente zu einem Block zusammenzufassen (ein div mit nur einem Kindelement ist daher seltenst sinnvoll).

            Wenn man den Begriff etwas weiter fassen mag, versteht man unter semantischem Markup oft auch noch die saubere Trennung von Inhalt und Gestaltung, soll heißen: Der HTML-Quellcode enthält im Idealfall weder Hinweise auf das gewünschte Aussehen, noch wird er von darstellungsbezogenen Absichten beeinflusst sein. Als oft gesehenes schlechtes Beispiel mag die Verwendung eines h3- oder h4-Elements gelten, nur "weil die Schriftgröße dann so ist, wie ich sie haben will", und nciht, weil der damit markierte Text eine Überschrift dritter oder vierter Ordnung ist.

            Dann noch mal die andere Frage: Diese Elemente (nav, main, etc.) werden dann per CSS auf der Seite positioniert, richtig?

            Jein. Kommt drauf an, was du unter "Positionieren" verstehst. Wenn du die explizite Verwendung der position-Eigenschaft meinst, womöglich sogar mit position:absolute für einige Elemente ein starres Layout schaffen möchtest, rate ich davon ab. Oft ergibt sich die gewünschte Positionierung von Elementen "fast von allein", wenn man deren Größe und Abstände zu anderen Elementen pfiffig angibt, und so schafft man auch leichter ein Layout, das flexibel auf Änderung der Fenstergröße, der Schriftgröße oder des Zoomfaktors reagiert.
            Gegen den wohldosierten und überlegten Einsatz von Positionierung mit CSS, ggf. kombiniert mit Floating und anderen Mitteln, ist aber sicher nichts einzuwenden.

            Ist das das gleiche Prinzip, wenn dies über div-Container realisiert wird, die dann ihre Eigenschaften mit CSS als ID zugewiesen bekommen [nur eben ohne vernünftiges[tm] („semantisches“) Markup]?

            Die Frage verstehe ich nicht ganz, glaube ich. Aber vielleicht ist sie durch die vorhergehenden Absätze schon beantwortet.

            So long,
             Martin

            --
            Kleine Geschenke erhalten die Freundschaft.
            Große verderben sie aber meist auch nicht.
            Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
            1. Om nah hoo pez nyeetz, Der Martin!

              Manche Webautoren scheinen zu glauben, dass man unbedingt div-Container bräuchte, um mit CSS darauf einzuwirken.

              Ist das das gleiche Prinzip, wenn dies über div-Container realisiert wird, die dann ihre Eigenschaften mit CSS als ID zugewiesen bekommen [nur eben ohne vernünftiges[tm] („semantisches“) Markup]?

              Die Frage verstehe ich nicht ganz, glaube ich.

              André gehörte bis eben noch zu "manchen Webautoren".

              Matthias

              --
              1/z ist kein Blatt Papier.

              1. Manche Webautoren scheinen zu glauben, dass man unbedingt div-Container bräuchte, um mit CSS darauf einzuwirken.

                Ist das das gleiche Prinzip, wenn dies über div-Container realisiert wird, die dann ihre Eigenschaften mit CSS als ID zugewiesen bekommen [nur eben ohne vernünftiges[tm] („semantisches“) Markup]?

                Die Frage verstehe ich nicht ganz, glaube ich.

                André gehörte bis eben noch zu "manchen Webautoren".

                Richtig. Aber das "bis eben" deutet korrekterweise an, dass man sich weiterentwickeln kann. ;o))

                Viele Grüße,

                André  :D

            2. Hallo Der Martin!

              unter dem Buzzword "semantisches Markup" versteht man eigentlich etwas Selbstverständliches: Dass man konsequent die HTML-Elemente nutzt, die die Struktur des Dokuments am besten wiedergeben.

              Vielen Dank für Deine umfangreiche Darstellung! Jetzt weiß ich was gemeint ist. =)

              Wenn man den Begriff etwas weiter fassen mag, versteht man unter semantischem Markup oft auch noch die saubere Trennung von Inhalt und Gestaltung [...]

              Interessant, das kenne ich von LaTeX.

              Viele Grüße,

              André :D

    2. Hallo,

      Ich habe mal eine Frage zur Aufteilung einer Internetseite

      Du meinst Webseite. Das Internet ist die Infrastruktur (Rechner, Kable, Satelliten, …), das Web ist darauf basierende eine Anwendeung.

      es heisst: Website
      Eine Webseite gibt es nicht. Wann lernen das die Leute endlich? Warum wird so ein Unsinn in so einem Forum wie diesem verbreitet? Selbst bei Wikipedia steht der Quatsch.

      Wenn wir von einzelnen "Seiten" reden, reden wir von Dokumenten oder genauer Resourcen.

      Früher wurden dazu frames verwendet, die glaube ich nicht mehr so funktionell sind.

      Frames sind heute genau so funktionell wie früher, um verschiedene Dokumente neben-/untereinander darzustellen.

      Sie waren noch nie dafür gut, eine Webseite aufzuteilen.

      Eine Website konnte noch nie in dieser Form "aufgeteilt" werden. Du meintest wohl ein HTML-Dokument?

      1. @@Kense:

        nuqneH

        es heisst: Website

        Nein. Das ist was anderes.

        Eine Webseite gibt es nicht.

        Ach nee? Warum solle man denn ein Dokument im Web nicht „Seite“ nennen?

        Du meintest wohl ein HTML-Dokument?

        Nein, ich meine eine Webseite, egal ob mit HTML oder was anderem erstellt.

        Qapla'

        --
        „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
    3. Hallo Gunnar und alle Anderen!

      Der Nachteil war, dass die Buttonleiste/Navigation sowie alle weiteren Teile für jede Seite separat aufgeführt waren. Und wenn ich nun die Leiste oder andere Elemente verändern wollte, musste ich das für jede Seite einzeln machen, was nicht nur ineffektiv sondern auch fehleranfällig war.

      FAQ: Wie kann ich Teile meiner Webseite auslagern?

      Diese Sachen habe ich mir jetzt ausführlich angeschaut. Ich habe mir xampp zugelegt und erfolgreich mit SSI andere Dateien in mein Hauptdokument eingebunden. =))

      Aber wie kann ich denn jetzt mit dem SSI #include-Befehl auf einen Klick in meiner Navigationsleiste hin, neue Elemente in die Seite einfügen? Geht das mit SSI überhaupt? Oder (nur) mit PHP?

      Herzlichen Dank,

      André

      PS: Werden Antworten, also weitere Fragen, zu älteren Posts (die weiter unten stehen) noch irgendwie entdeckt oder fallen die potenziell durch?

      1. Tach!

        Diese Sachen habe ich mir jetzt ausführlich angeschaut. Ich habe mir xampp zugelegt und erfolgreich mit SSI andere Dateien in mein Hauptdokument eingebunden. =))

        Es kann sein, dass dir auf der Zielplatform kein SSI mehr zu Verfügung steht. Die Chancen, PHP verwenden zu können, sind höher.

        Aber wie kann ich denn jetzt mit dem SSI #include-Befehl auf einen Klick in meiner Navigationsleiste hin, neue Elemente in die Seite einfügen? Geht das mit SSI überhaupt? Oder (nur) mit PHP?

        In beiden Fälle kann eine serverseitige Technik keine clientseitigen Dinge erledigen. Du kannst lediglich ein neues Dokument anfordern und dies auf dem Server entsprechend zusammenstellen. Wenn allerdings im Browser das eigentliche Dokument stehenbleiben soll und lediglich Inhalte ausgetauscht werden sollen, dann brauchst du zum Beispiel Ajax. Bedenke aber, dass Suchmaschinen damit immer noch Probleme haben. Um diese und die anderen Besucher, die Javascript ausgeschaltet haben, zu bedienen, musst du serverseitg zusammengebaute Dokumente ausliefern.

        dedlfix.

        1. Tach auch!

          Es kann sein, dass dir auf der Zielplatform kein SSI mehr zu Verfügung steht. Die Chancen, PHP verwenden zu können, sind höher.

          Danke für den Tipp. Werde ich berücksichtigen. Mir gefiel das ganz gut, da es recht einfach ist.

          Du kannst lediglich ein neues Dokument anfordern und dies auf dem Server entsprechend zusammenstellen.

          Ja, das hört sich gut an. Geht das auch mit SSI? Hast Du evtl. einen Link für mich, wo das erklärt wird oder einen kleinen Code-Ausschnitt?

          1. Om nah hoo pez nyeetz, André!

            Du kannst lediglich ein neues Dokument anfordern und dies auf dem Server entsprechend zusammenstellen.
            Ja, das hört sich gut an. Geht das auch mit SSI? Hast Du evtl. einen Link für mich, wo das erklärt wird oder einen kleinen Code-Ausschnitt?

            Das geht genauso einfach mit SSI. Die Brückentags-Seiten werden etwa über SSI zusammengebaut.

            <!--#include virtual="./includes-brueckentage/neu.inc" -->  
            	  
            <!--#if expr="${land} = bw || ${land} = by || ${land} = st" -->  
                <!--#include virtual="./includes-brueckentage/hdk.inc" -->  
            <!--#endif -->  
            	 	  
            <!--#include virtual="./includes-brueckentage/ost.inc" -->
            

            Es werden grundsätzlich die Abschnitte zum Jahreswechsel und zu Ostern eingeblendet, die Heiligen Drei Könige gibts aber nur in Baden-Württemberg, Bayern oder Sachsen-Anhalt. Welches Land gerade angefordert wird, entnimmt man der URL.

            <!--#set var="landname" value="Deutschland" -->  
                // default ist deutschland  
            <!--#if expr="${DOCUMENT_NAME} =/-([a-z]{2})-/" -->  
                // suche in der URL nach einem Minus, gefolgt von 2 Buchstaben, gefolgt von einem Minus  
            <!--#set var="land" value="${1}" -->  
                // wenns das gibt, sollen die Brückentage für ein konkretes Bundesland angezeigt werden  
            <!--#endif -->  
            <!--#if   expr="${land} = be" --><!--#set var="landname" value="Berlin" -->  
            <!--#elif expr="${land} = br" --><!--#set var="landname" value="Brandenburg" -->  
            ...  
            <!--#endif-->  
                // hier erfolgt die Zuordnung 
            

            SSI-Tutorial

            Matthias

            --
            1/z ist kein Blatt Papier.

            1. Hallo Matthias!

              Das geht genauso einfach mit SSI.

              Danke für die Erklärung. Ich glaube, ich habe das Prinzip verstanden: Verlinkt wird eine (s)html-Seite und diese enthält mehr oder weniger SSI-include-Befehle, die dann die Seite insgesamt ausmachen.

              Ganz verstanden habe ich Deinen Code nicht. Du machst eine Abfrage
              <!--#if expr="${land} = bw || ${land} = by || ${land} = st" -->
              aber wo werden denn die Variablen bw, by und st festgelegt?

              Ich bin gerade am probieren, wie ich die Navigationsleiste gestalte. Selbst wenn ich sie aus einer extra Datei einbinde, sie aber für jede Unterseite anders ist, dann habe ich so viele einzubindende Dateien, wie Unterseiten. Dann macht das Einbinden ja keinen Sinn.

              Ich suche mal ein bisschen zum Thema und denke da schon fündig zu werden. Das geht sicher über die if-Abfragen -- aber wie gesagt bin ich da noch nicht ganz hinter gestiegen.

              Die Brückentags-Seiten werden etwa über SSI zusammengebaut.

              Übrigens: Bei mir im aktuellen Firefox (19.0.2) mit "sanftem Bildlauf" läuft das Scrollen etwas abgehackt!?

              Vielen Dank für die Hilfe und viele Grüße,

              André

              1. Om nah hoo pez nyeetz, André!

                Ganz verstanden habe ich Deinen Code nicht. Du machst eine Abfrage
                <!--#if expr="${land} = bw || ${land} = by || ${land} = st" -->
                aber wo werden denn die Variablen bw, by und st festgelegt?

                Die URL wird nach "-BuchstabeBuchstabe-" durchsucht. Das, was gefunden wird kommt in die Variable land. bw, by und st sind keine Variablen sondern Werte, die die Variable land annehmen kann.

                Navigation:

                <li><!--#if expr="${DOCUMENT_NAME} = info.html"-->  
                	Info  
                	<!--#else -->  
                	<a href="info.html">Info</a>  
                	<!--#endif -->  
                </li>
                

                Schreibe in ein Listenelement den unverlinkten Text, falls es die aktuelle Seite ist, sonst verlinke.

                Matthias

                --
                1/z ist kein Blatt Papier.

                1. Hey Matthias!

                  Schreibe in ein Listenelement den unverlinkten Text, falls es die aktuelle Seite ist, sonst verlinke.

                  Danke für die Erklärung. Ich glaube ich habe alles soweit verstanden. Beim Umsetzen stellen sich jedoch Fehler ein. Ich habe das im Prinzip so wie unten angegeben umgesetzt. Leider werden die #elif-Anweisungen übergangen und ALLE Listenpunkte angegeben. Woran kann das liegen?

                  <nav id="left">  
                    <ul>  
                      <!--#if expr="$DOCUMENT_NAME = index.shtml"-->  
                        <li><a href="/html/studium.shtml">Studium</a></li>  
                        <li><a href="/html/praxis.shtml">Praxis</a></li>  
                        <li><a href="/html/links.shtml">Links</a></li>  
                        <li><a href="/html/impressum.shtml">Impressum</a></li>  
                      <!--#elif expr="$DOCUMENT_NAME = studium.shtml"-->  
                        <li>Studium</li>  
                        <li><a href="praxis.shtml">Praxis</a></li>  
                        <li><a href="links.shtml">Links</a></li>  
                        <li><a href="impressum.shtml">Impressum</a></li>  
                      <!--#elif expr="$DOCUMENT_NAME = praxis.shtml"-->  
                        <li><a href="studium.shtml">Studium</a></li>  
                        <li>Praxis</li>  
                        <li><a href="links.shtml">Links</a></li>  
                        <li><a href="impressum.shtml">Impressum</a></li>  
                      <!--#endif -->  
                    </ul>  
                  </nav>  
                    
                  

                  Grüße vom André

                  1. Om nah hoo pez nyeetz, André!

                    Falls es nicht die fehlenden geschweiften Klammern sind, weiß ich es nicht.

                    Abgesehen davon würde ich das tatsächlich für jedes Listenelement einzeln machen. So hast du jeden Link nur einmal im Quelltext und nicht mehrmals. Du brauchst also ggf. nur an einer Stelle etwas ändern.

                    Matthias

                    --
                    1/z ist kein Blatt Papier.

                    1. Falls es nicht die fehlenden geschweiften Klammern sind, weiß ich es nicht.

                      Das ist es nicht, habe ich probiert.

                      Abgesehen davon würde ich das tatsächlich für jedes Listenelement einzeln machen.

                      Danke, der Hinweis ist gut. Ich habe es nun so gemacht, aber wieder wird jede #elif-Anweisung übergangen und JEDER Eintrag angezeigt. Und ich habe nicht die geringste Ahnung, woran es liegt?! :-|

                      <nav id="left">  
                        <ul>  
                          <li>  
                            <!--#if expr="${DOCUMENT_NAME} = index.shtml"-->  
                              <a href="html/studium.shtml">Studium</a>  
                            <!--#elif expr="${DOCUMENT_NAME} = studium.shtml"-->  
                              Studium  
                            <!--#elif expr="${DOCUMENT_NAME} = impressum.shtml || links.shtml || praxis.shtml"-->  
                              <a href="studium.shtml">Studium</a>  
                            <!--#endif -->  
                          </li>  
                        </ul>  
                      </nav>  
                      
                      

                      Vielleicht liegt es irgendwie daran, wie ich es eingebunden habe -- was ich mir aber irgendwie nicht vorstellen kann. Nix für ungut, vielleicht komme ich ja noch drauf.

                      Danke für die Hilfe, André  :D

                      1. Om nah hoo pez nyeetz, André!

                        Das ist wirklich unnötig kompliziert. Was stört dich an meiner Lösung?

                        <li><!--#if expr="${DOCUMENT_NAME} = info.html"-->  
                                Info  
                            <!--#else -->  
                                <a href="info.html">Info</a>  
                            <!--#endif -->  
                        </li>
                        
                        »» <!--#elif expr="${DOCUMENT_NAME} = impressum.shtml || links.shtml || praxis.shtml"-->  
                        
                        

                        Außerdem begehst du noch einen typischen Anfängerfehler. Du kannst zwar sprachlich formulieren

                        Wenn a = 3 oder 5 ist, dann tue dies aber nicht in einer Programmiersprache. Dort muss es heißen Wenn a=3 oder a=5 ist, tu dies

                        Matthias

                        --
                        1/z ist kein Blatt Papier.

                        1. Hey Matthias,

                          Das ist wirklich unnötig kompliziert. Was stört dich an meiner Lösung?

                          Nichts. ;) Im Prinzip ist meine "Lösung" ja sehr ähnlich. Ich habe nur eine weitere Abfrage, da ich noch Untermenüs einbauen will.

                          Außerdem begehst du noch einen typischen Anfängerfehler.

                          Ok!

                          Aber komisch ist, dass alle #elif- oder auch #else-Anweisungen übergangen werden. In dem Beispiel, was Du angegeben hast, erhalte ich "Info" als Text UND "Info" als Link.

                          Und dieses Beispiel...

                            <!--#set var="land" value="de" -->  
                            <!--#if expr="${land} = de" -->  
                              Hey! ;-)  
                            <!--#else-->  
                              Bäh :(  
                            <!--#endif-->  
                          
                          

                          ... ergibt die Ausgabe: "[an error occurred while processing this directive] Hey! ;-)".

                          Vielleicht gibt es ein Problem mit dem "Server"?! Ich benutze ApacheFriends XAMPP Version 1.8.1.

                          Grüße vom André

                          1. Om nah hoo pez nyeetz, André!

                            Aber komisch ist, dass alle #elif- oder auch #else-Anweisungen übergangen werden. In dem Beispiel, was Du angegeben hast, erhalte ich "Info" als Text UND "Info" als Link.

                            Schau doch mal, welche (Umgebungs-)variablen zur Verfügung stehen

                            <pre><!--#printenv --></pre>  
                            
                            

                            <!--#set var="land" value="de" -->

                            <!--#if expr="${land} = de" -->
                                Hey! ;-)
                              <!--#else-->
                                Bäh :(
                              <!--#endif-->

                            
                            >   
                            > ... ergibt die Ausgabe: "[an error occurred while processing this directive] Hey! ;-)".  
                              
                            klar. Es gibt bestimmt keine Variable land.  
                              
                            Matthias
                            
                            -- 
                            1/z ist kein Blatt Papier.  
                            ![](http://www.billiger-im-urlaub.de/kreis_sw.gif)  
                            
                            
                            1. Schau doch mal, welche (Umgebungs-)variablen zur Verfügung stehen

                              Eine ganze Menge:

                              MIBDIRS=D:/xampp/php/extras/mibs
                              MYSQL_HOME=\xampp\mysql\bin
                              OPENSSL_CONF=D:/xampp/apache/bin/openssl.cnf
                              PHP_PEAR_SYSCONF_DIR=\xampp\php
                              PHPRC=\xampp\php
                              TMP=\xampp\tmp
                              HTTP_HOST=localhost
                              HTTP_USER_AGENT=Mozilla/5.0 (Windows NT 6.1; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0
                              HTTP_ACCEPT=text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
                              HTTP_ACCEPT_LANGUAGE=de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
                              HTTP_ACCEPT_ENCODING=gzip, deflate
                              HTTP_CONNECTION=keep-alive
                              HTTP_CACHE_CONTROL=max-age=0
                              PATH=C:\Windows\system32
                              SystemRoot=C:\Windows
                              COMSPEC=C:\Windows\system32\cmd.exe
                              PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
                              WINDIR=C:\Windows
                              SERVER_SIGNATURE=<address>Apache/2.4.3 (Win32) OpenSSL/1.0.1c PHP/5.4.7 Server at localhost Port 80</address>

                              SERVER_SOFTWARE=Apache/2.4.3 (Win32) OpenSSL/1.0.1c PHP/5.4.7
                              SERVER_NAME=localhost
                              SERVER_ADDR=::1
                              SERVER_PORT=80
                              REMOTE_ADDR=::1
                              DOCUMENT_ROOT=D:/xampp/htdocs
                              REQUEST_SCHEME=http
                              CONTEXT_PREFIX=
                              CONTEXT_DOCUMENT_ROOT=D:/xampp/htdocs
                              SERVER_ADMIN=postmaster@localhost
                              SCRIPT_FILENAME=D:/xampp/htdocs/index.shtml
                              REMOTE_PORT=49602
                              GATEWAY_INTERFACE=CGI/1.1
                              SERVER_PROTOCOL=HTTP/1.1
                              REQUEST_METHOD=GET
                              QUERY_STRING=
                              REQUEST_URI=/
                              SCRIPT_NAME=/index.shtml
                              DATE_LOCAL=Tuesday, 19-Mar-2013 20:31:22 Mitteleurop�ische Zeit
                              DATE_GMT=Tuesday, 19-Mar-2013 19:31:22 GMT
                              LAST_MODIFIED=Tuesday, 19-Mar-2013 20:31:21 Mitteleurop�ische Zeit
                              DOCUMENT_URI=/index.shtml
                              USER_NAME=<unknown>
                              DOCUMENT_NAME=index.shtml

                              klar. Es gibt bestimmt keine Variable land.

                              Ich hätte gedacht, die lege ich an mit dem Befehl

                              <!--#set var="land" value="de" -->

                              1. Om nah hoo pez nyeetz, André!

                                Ich hätte gedacht, die lege ich an mit dem Befehl
                                <!--#set var="land" value="de" -->

                                Stimmt. Das funktioniert ja offensichtlich auch. Denn es wird ja "Hey;" ausgegeben. Die Fehlermeldung wird von etwas ausgelöst, was du vorher geschrieben hast.

                                Also heißt es jetzt Schritt für Schritt einzeln die Anweisungen zusammenzubauen. Zwischendurch kannst du immmer printenv verwenden, dort werden dir auch deine eigenen Variablen angezeigt. Eine konkrete Kontrollausgabe kannst du auch mit echo erreichen.

                                Matthias

                                --
                                1/z ist kein Blatt Papier.

                                1. Hallo Matthias,

                                  ich habe daraus jetzt eine separate Anfrage gemacht.

                                  Besten Dank und viele Grüße,

                                  André

                                  1. Om nah hoo pez nyeetz, André!

                                    ich habe daraus jetzt eine separate Anfrage gemacht.

                                    keine gute Idee. Es ist nicht gut, Informationen zu zerpflücken. Du kannst sie als Antwort auf dein OP hier anhängen, dann wird es ein neuer Ast.

                                    Matthias

                                    --
                                    1/z ist kein Blatt Papier.

      2. Hallo,

        PS: Werden Antworten, also weitere Fragen, zu älteren Posts (die weiter unten stehen) noch irgendwie entdeckt oder fallen die potenziell durch?

        kommt auf das Publikum an. Bei unregistrierten Nutzern, also sozusagen "Laufkundschaft", könnte es tatsächlich sein, dass neue Antworten nicht mehr wahrgenommen werden, weil sie irgendwo bei den alten Threads versauern.

        Registrierte Nutzer haben da mehrere Vorzüge.

        Erstens können sie serverseitig verfolgen lassen, welche Postings schon gelesen wurden - neue müssten daher eigentlich auffallen.

        Zweitens können sie die Sortierreihenfolge so wählen, dass Threads mit neuen Antworten wieder als "frisch" sortiert werden, also fallen neue Posts da auch auf.

        Drittens können sie einstellen, dass Threads, deren Beiträge alle gelesen wurden, zugeklappt werden. Taucht da ein neuer ungelesener Beitrag auf, springt das sofort ins Auge.

        Und viertens gibt es User, die ungeachtet aller Hilfsmittel immer mal wieder die komplette Liste von vorn bis hinten durchgehen.

        Fazit: Deine neuen Beiträge haben eine recht gute Chance, trotzdem noch wahrgenommen zu werden.

        Ciao,
         Martin

        --
        Wenn dir jemand eine unschlagbare Abkürzung empfiehlt, gehe einen Umweg.
        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
        1. Hallo Martin!

          [...]

          Fazit: Deine neuen Beiträge haben eine recht gute Chance, trotzdem noch wahrgenommen zu werden.

          Herzlichen Dank für die ausführliche Erklärung!  =)

          André

  2. Ich habe hier eine Seite gefunden, wo mir (unabhängig von Inhalt und Aussehen) die Aufteilung sehr gut gefällt. Die Endung der einzelnen Unterseiten lautet .php. Wenn ich mir den Quelltext anschaue, sieht es so aus, als ob der auf mehreren Seiten gleiche Code (z. B. Navigationsleisten) mehrfach in den Unterseiten vorgehalten wird - was ich jedoch nicht glaube.

    Kann man das irgendwie erkennen, wie das gelöst ist? Was ich sehr gut finde, ist, dass auf einen Klick hin verschiedene Elemente aktualisiert werden.

    Sonnige Grüße und herzlichen Dank für die Unterstützung,

    André  :D

    1. Ich habe hier eine Seite gefunden, wo mir (unabhängig von Inhalt und Aussehen) die Aufteilung sehr gut gefällt. Die Endung der einzelnen Unterseiten lautet .php. Wenn ich mir den Quelltext anschaue, sieht es so aus, als ob der auf mehreren Seiten gleiche Code (z. B. Navigationsleisten) mehrfach in den Unterseiten vorgehalten wird - was ich jedoch nicht glaube.

      Ja, die von Dir verlinkte Site ist sehr gut gemacht. Vermutlich arbeiten die mit Templates.

      Kann man das irgendwie erkennen, wie das gelöst ist? Was ich sehr gut finde, ist, dass auf einen Klick hin verschiedene Elemente aktualisiert werden.

      Sofern Du mit Templates arbeitest, tust Du gut daran, ins Layout (HTML) Kommentare einzubauen, das erleichtert das Auffinden der Sourcen (Templatesource, Programmsource).

      Dann hängts auch von Deiner Organisationsgeschicklichkeit ab, ob z.B. eine Einzelseite immer aus 3 Blöcken (Beispiel html_head, body, html_footer) besteht und eine von dieser Zahl abweichende Anforderung über Templates gelöst wird  (body sei ein Block = ein Template ||= mehrere Templates über die Programmlogik gesteuert).

      Oder Du organisierst das so, dass die Anzahl der Blöcke für eine Seite dynamisch ist, z.B. start_html, block_1, block_2,.., end_html; wobei dann jedem Block genau ein Template zugeordnet ist.

      Hotti

      1. Hallo Hotti!

        Ja, die von Dir verlinkte Site ist sehr gut gemacht. Vermutlich arbeiten die mit Templates.

        Danke für die Hinweise. Ich muss ehrlich zugeben, dass ich kaum was davon verstehe. Ich suche mal ein bisschen nach Templates und schaue mal, ob ich das mit dem Verständnis noch hin bekomme. ;))

        Viele Grüße,

        André  :D

  3. Hallo Matthias,

    keine gute Idee. Es ist nicht gut, Informationen zu zerpflücken.

    Das habe ich getan, weil die aktuelle Frage nichts mehr mit dem Ausgangsthema zu tun hat und inhaltlich eine neue Problematik darstellt. Dies wurde auch durch Themenbereich und Betreff "(PROGRAMMIERTECHNIK) SSI: #if-Anweisung funktioniert nicht" deutlich. Leider kann ich das hier im aktuellen Posting nicht beeinflussen und "(HTML/XHTML) Seitenaufteilung" trifft es trotz neuem Ast einfach nicht.

    Du kannst sie als Antwort auf dein OP hier anhängen, dann wird es ein neuer Ast.

    Nun gut, dann hier ein weiterer Versuch:

    Hallo an ALLE,

    Leider funktionieren die SSI-Anweisungen nicht so, wie ich denke, dass sie funktionieren sollten. Möglicherweise mache ich was falsch -- ich weiß es nicht. Oder es liegt an meiner Testumgebung (ApacheFriends XAMPP Version 1.8.1).

    Ich habe mal ein Beispiel einer Datei namens index.shtml:

    <!DOCTYPE html>  
    <html>  
    <head>  
    <meta http-equiv="content-type" content="text/html; charset=utf-8">  
    <title>Internetseite</title>  
    </head>  
      
    <body>  
    Name dieser HTML-Datei: <!--#echo var="DOCUMENT_NAME" --><br>  
      
    <!--#set var="land" value="de" --><br>  
    <!--#echo var="land" --><br>  
    <!--#if expr="${land} = de" --><br>  
    <!--#echo var="land" --><br>  
      Hey! ;-)  
    <!--#else-->  
      Bäh :(  
    <!--#endif-->  
      
    <br><br>  
      
    <!--#echo var="DOCUMENT_NAME" --><br>  
    <!--#if expr="${DOCUMENT_NAME} = 'index.shtml'"-->  
          Info  
      <!--#else -->  
          <a href="info.html">Info</a>  
      <!--#endif -->  
      
    <br><br>  
      
    <!--#set var="abc" value="bcd" -->  
    <!--#echo var="abc" --><br>  
    <!--#if expr = "'abc' = 'bcd'" -->  
                Wird nur angezeigt, wenn "abc" gleich "bcd" ist  
            <!--#elif expr = "'abc2' = 'abc1'" -->  
                Wird nur angezeigt, wenn "abc2" gleich "abc1" ist  
            <!--#else -->  
                Nur, wenn gar nichts zutrifft.  
            <!--endif -->  
      
    <ul>  
    <!--#include virtual="navi.inc" -->  
    </ul>  
      
    </body>  
    </html>
    

    Als Ausgabe erhalte ich:

    Name dieser HTML-Datei: index.shtml  
      
    de  
    [an error occurred while processing this directive]  
    de  
    Hey! ;-)  
      
    index.shtml  
    [an error occurred while processing this directive] Info  
      
    bcd  
    Nur, wenn gar nichts zutrifft.  
      
        Info Info Info
    

    Also als Ergebnis Fehlermeldungen (die von den #if-Anweisungen kommen) und im letzten Fall, bei der eingebundenen Datei navi.inc, werden die #elif- und die #else-Anweisung übergangen und ALLE drei Einträge ausgegeben werden.

    Ich habe in dem Beispiel bewusst verschiedene Notationen verwendet, die ich aus verschiedenen online-Tutorials zu SSI habe, um zu schauen, ob eine andere Variante besser funktioniert.

    Kann mir jemand verraten, woran das liegt? Ich würde mir gern eine Navigationsleiste zusammenbasteln, aber aufgrund der nicht funktionierenden #if-, #elif- und #else-Anweisungen klappt das leider nicht.

    Herzlichen Dank, André  :D

    1. Hallo,

      Das habe ich getan, weil die aktuelle Frage nichts mehr mit dem Ausgangsthema zu tun hat und inhaltlich eine neue Problematik darstellt. Dies wurde auch durch Themenbereich und Betreff "(PROGRAMMIERTECHNIK) SSI: #if-Anweisung funktioniert nicht" deutlich. Leider kann ich das hier im aktuellen Posting nicht beeinflussen und ...

      selbstverständlich kannst du: In der Vorschau hast du die Möglichkeit, Kategorie und Titel nach Belieben zu ändern - mach ich für dieses Hinweisposting ja auch. ;-)

      Ciao,
       Martin

      --
      Nicht jeder, der aus dem Rahmen fällt, war vorher im Bilde.
      Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
    2. Tach!

      Leider kann ich das hier im aktuellen Posting nicht beeinflussen und "(HTML/XHTML) Seitenaufteilung" trifft es trotz neuem Ast einfach nicht.

      Doch, das geht, wenn man einmal die Vorschau ausgewählt hat, dann kann man Titel und Themenbereich ändern.

      Leider funktionieren die SSI-Anweisungen nicht so, wie ich denke, dass sie funktionieren sollten.

      Ich erwähnte ja bereits, dass die Chancen, PHP anzutreffen, deutlich höher sind. Das gilt auch für die Hilfsmöglichkeiten. Damit kennen sich einfach deutlich mehr Leute aus als mit SSI.

      Oder es liegt an meiner Testumgebung (ApacheFriends XAMPP Version 1.8.1).

      Ja. Die Expression-Syntax hat sich im 2.4er Apachen geändert. Die alte Version bekommst du mit SSILegacyExprParser on eingeschaltet.

      dedlfix.

      1. Om nah hoo pez nyeetz, dedlfix!

        Ja. Die Expression-Syntax hat sich im 2.4er Apachen geändert.

        Gibt es einen Link?

        Matthias

        --
        1/z ist kein Blatt Papier.

        1. Tach!

          Die Expression-Syntax hat sich im 2.4er Apachen geändert.
          Gibt es einen Link?

          http://httpd.apache.org/docs/2.4/mod/mod_include.html
          Abschnitte Flow Control Elements und nachfolgend Legacy expression syntax

          dedlfix.

      2. Tach auch!

        Ich erwähnte ja bereits, dass die Chancen, PHP anzutreffen, deutlich höher sind. Das gilt auch für die Hilfsmöglichkeiten. Damit kennen sich einfach deutlich mehr Leute aus als mit SSI.

        Danke (noch mal) für den Tipp. Ich habe ihn auch gleich in die Tat umgesetzt. Am SSI hat mir gefallen, dass es recht einfach war. Nachdem ich nun die vergleichbaren PHP-Befehle erkundet habe, durfte ich feststellen, dass es diese ebenso einfach sind.

        Aber dafür tun sich wieder andere Fragen auf... ;)

        Viele Grüße vom André