Palmstroem: HTML Code-file in HTML file einbinden

Hallo zusammen!

Gibt es eine Möglichkeit HTML-Fragmente in Files zu speichern und diese Files in anderen Seiten einzubinden. Ähnlich wie Bilder. Ich würde gerne Textblöcke, die ich immer wieder auf verschiedenen Seiten brauche nicht immer mit copy&paste übernehmen müssen.

  1. Hallo,

    mit den bisherigen Informationen von dir hört sich das für den Einsatz von PHP, speziell dem include-Befehl, an.

    Gruss

    MrMurphy

  2. Hi,

    Gibt es eine Möglichkeit HTML-Fragmente in Files zu speichern und diese Files in anderen Seiten einzubinden. Ähnlich wie Bilder.

    ja und nein. HTML selbst sieht diese Möglichkeit nicht vor. Aber der Webserver, der die Ressourcen ausliefert, kann auf verschiedene Weise mithelfen.

    Die meisten Webhosting-Pakete unterstützen SSI (Server Side Includes), das ist im Prinzip das, was du willst. Nur dass das Include bereits auf der Serverseite stattfindet.

    Wenn dein Webhoster die Scriptsprache PHP anbietet, könntest du dein Ziel auch damit erreichen.

    So long,
     Martin

    1. Hallo

      Gibt es eine Möglichkeit HTML-Fragmente in Files zu speichern und diese Files in anderen Seiten einzubinden. Ähnlich wie Bilder.

      ja und nein. HTML selbst sieht diese Möglichkeit nicht vor.

      An Palmstroem: Es gäbe HTML-seitig noch die Möglichkeit, Iframes oder Frames zu nutzen. Da in Frames aber vollständige HTML-Dokumente eingebunden werden, ist das nicht mur langsam, sondern auch mit meist ungewünschten Nebeneffekten verbunden. Ein solches Dokument ist wie jedes andere verlinkbar und kann einzeln aufgerufen werden. Dann steht der Benutzer aber wie das sprichwörtliche Schwein vor'm Uhrwerk. Er sieht dann nämlich nur die Navigation oder nur das Logo oder, oder, oder …

      Aber der Webserver, der die Ressourcen ausliefert, kann auf verschiedene Weise mithelfen.

      Die meisten Webhosting-Pakete unterstützen SSI (Server Side Includes), das ist im Prinzip das, was du willst. Nur dass das Include bereits auf der Serverseite stattfindet.

      Bei SSI sollte man seinen Hoster aber hochnotpeinlich nach der zukünftigen Unterstützung befragen. Nicht, dass das, wie bei Matthias, unerwartet abgeschaltet wird, weil's ja uralt ist und es eh keiner benutzt.

      Wenn dein Webhoster die Scriptsprache PHP anbietet, könntest du dein Ziel auch damit erreichen.

      Das sollte heutzutage die meistverbreitete Möglichkeit sien.

      Tschö, Auge

      --
      Es schimmerte ein Licht am Ende des Tunnels und es stammte von einem Flammenwerfer.
      Terry Pratchett, „Gevatter Tod“
      1. Hi,

        ja und nein. HTML selbst sieht diese Möglichkeit nicht vor.

        An Palmstroem: Es gäbe HTML-seitig noch die Möglichkeit, Iframes oder Frames zu nutzen.

        das habe ich absichtlich verschwiegen. Zum einen, weil man sich (oder seinen Besuchern) damit auch eine Reihe von Nachteilen verschafft; zum andern, weil man mit dieser Technik, egal wie man es anstellt, immer nur rechteckige Bereiche der Seite ausgliedern kann, aber nicht immer wiederkehrende Fragmente (Textbausteine), wie Palmstroem es beschrieben hat.
        Obwohl ... vielleicht meinte er ja gerade solche rechteckigen Boxen mit "Textblöcke" und "ähnlich wie Bilder". Ich hatte beim ersten Lesen an Inline-Inhalte gedacht.

        Da in Frames aber vollständige HTML-Dokumente eingebunden werden, ist das nicht mur langsam, sondern auch mit meist ungewünschten Nebeneffekten verbunden. Ein solches Dokument ist wie jedes andere verlinkbar und kann einzeln aufgerufen werden. Dann steht der Benutzer aber wie das sprichwörtliche Schwein vor'm Uhrwerk. Er sieht dann nämlich nur die Navigation oder nur das Logo oder, oder, oder …

        Das sind einige der Nachteile, die ich meinte.

        Die meisten Webhosting-Pakete unterstützen SSI (Server Side Includes), das ist im Prinzip das, was du willst. Nur dass das Include bereits auf der Serverseite stattfindet.

        Bei SSI sollte man seinen Hoster aber hochnotpeinlich nach der zukünftigen Unterstützung befragen. Nicht, dass das, wie bei Matthias, unerwartet abgeschaltet wird, weil's ja uralt ist und es eh keiner benutzt.

        Huch! Daran hätte ich garantiert nicht gedacht.

        So long,
         Martin

        --
        Man sollte alles in Maßen genießen, sagt der Bayer.
        1. Hallo zusammen!

          Herzlichen Dank für Eure Antworten. Frames und iFrames habe ich auch schon entdeckt. Vielleicht hilft es wenn ich meine Anwendung schildere. Ich will eine Dokumentation in HTML erstellen. Dh. der User bekommt direkt die HTML-Files in deinem "Doku"-Ordner, die direkt aus der SW heraus aufgerufen werden können. Kein Server, im Hintergrund, der irgend ein PHP laufen hat.

          Die Dokumentation beschreibt mehrere Dashboards mit teilweise redundanten Elementen. Etwa ein Kalender kommt darin immer wieder vor. Jetzt würde ich gerne ein File haben, das den Kalender beschreibt, und dieses in die Doku der Dashboards immer nur an geeigneter Stelle einbinden. Aber ohne Rahmen, Scrollbars und Größenangaben. Einfach so wie wenn ich den HTML-Code mit Copy&Paste aus dem File eingefügt hätte. Etwa in der Art: <file src="../irgendEinOrdner/Mein_Kalenderfile.txt"> Kalenderfile.txt enthält dann die HTML-Beschreibung aber ohne separaten Head. Also da steht beispielsweise drin:

          <h2>Kalender</h> Den Kalender kannst du verwenden um ein Datum auszuwählen, ...

          1. Aloha ;)

            Herzlichen Dank für Eure Antworten. Frames und iFrames habe ich auch schon entdeckt. Vielleicht hilft es wenn ich meine Anwendung schildere. Ich will eine Dokumentation in HTML erstellen. Dh. der User bekommt direkt die HTML-Files in deinem "Doku"-Ordner, die direkt aus der SW heraus aufgerufen werden können. Kein Server, im Hintergrund, der irgend ein PHP laufen hat.

            Komplett ohne Server? Keine Chance (ohne Frames, wenn man die Zusammensetzung erst zur Laufzeit will). Bedenke, dass bei einer potenziellen Änderung ja irgendwas geschehen muss, damit die geänderten Inhalte in die HTML-Dateien kommen. Mit Server geschieht das, indem das HTML-Dokument erst zur Zeit des Aufrufs aus den Einzelteilen generiert wird. Ohne Server sind die Dokumente statisch - und damit kann nichts erst zur Laufzeit eingefügt werden. In dem Fall kommst du dann um den Einsatz von Frames wirklich nicht drumrum (mit allen Nachteilen, die das nach sich zieht).

            Die einzige Möglichkeit, wie du zumindest auf einen Teil der Features eines Servers ohne direkten Servereinsatz kommst, wäre ein Generator für deine statischen Seiten - du könntest in deiner Entwicklungsumgebung einen Server mit PHP (oder ein beliebiges anderes Programm, das dessen mächtig ist) nutzen und aus den Einzelteilen bei jeder Änderung statische HTML-Dokumente erstellen lassen, die dann an den User gehen. Damit sparst du dir die Redundanz bei der Entwicklung und hast trotzdem später für deinen Benutzer statische Seiten.

            Jetzt würde ich gerne ein File haben, das den Kalender beschreibt, und dieses in die Doku der Dashboards immer nur an geeigneter Stelle einbinden. Aber ohne Rahmen, Scrollbars und Größenangaben. Einfach so wie wenn ich den HTML-Code mit Copy&Paste aus dem File eingefügt hätte.

            Das spricht dafür, einen entsprechenden Seitengenerator zu bemühen. Softwaretipps kann ich dir da keine geben (weil ich keine konkret kenne, auch wenn es sicher welche gibt).

            Wäre ich in deiner Situation (war ich auch schonmal) würde ich mir selber was schreiben (z.B. in PHP), was für eine gegebene Template-Datei zunächst die gesamte Datei in einen String liest, dann alle Vorkommen eines include-Platzhalters durch den entsprechenden Dateiinhalt ersetzt und dann den resultierenden String in eine neue Datei schreiben lassen - die neue Datei ist dann Teil des statischen Inhalts. Das kann man dann beliebig kompliziert treiben, je nach Anforderung (ab einem gewissen Komplexitätslevel lohnt es sich dann aber wahrscheinlich doch, auf fertige, durchdachte Tools zurückzugreifen statt selbst zu basteln). Selbst schreiben solltest du nur in Betracht ziehen, wenn du Erfahrung hast und sowas "schnell runterschreiben kannst", wenn also die Zeit, das selbst umzusetzen, geringer ist, als sich in etwas fertiges einzuarbeiten.

            Eine andere Möglichkeit wäre, die Entwicklungsversion mit PHP zu machen und dann einen Crawler drüberlaufen zu lassen, der die statischen Inhalte speichert. (z.B. mittels HTTrack - so wird unser Offline-Wiki erzeugt (werden) - sobald es denn mal regelmäßig erzeugt wird)

            Grüße,

            RIDER

            --
            Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar manchmal im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem eigenen TeamSpeak-Server (fritz.campingrider.de) oder unter: # Facebook # Twitter # Steam # YouTube # Self-Wiki # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
            1. Tach!

              Ich will eine Dokumentation in HTML erstellen. Dh. der User bekommt direkt die HTML-Files in deinem "Doku"-Ordner, die direkt aus der SW heraus aufgerufen werden können. Kein Server, im Hintergrund, der irgend ein PHP laufen hat.

              Komplett ohne Server? Keine Chance (ohne Frames, wenn man die Zusammensetzung erst zur Laufzeit will).

              Doch, die Chance ist prinzipiell da, nur braucht man dazu Javascript. AngularJS bringt die Möglichkeit mit, Templates (kann ja auch nur reiner HTML-Code sein) nachzuladen. Und wenn Angular das kann, kann man das mit nativem Javascript auch irgendwie geregelt bekommen. Inwieweit man allerdings Browser dazu überreden muss, Dateien aus dem Filesystem statt von einem Server nachzuladen, vermag ich aber nicht zu beantworten.

              dedlfix.

              1. Hallo

                … Inwieweit man allerdings Browser dazu überreden muss, Dateien aus dem Filesystem statt von einem Server nachzuladen, vermag ich aber nicht zu beantworten.

                Firefox und Safari unterstützen (noch) HTTP-Requests von der lokalen Platte, beim IE und Chrome geht das seit einiger Zeit nicht mehr. Ob man da über die Einstellungen was regeln kann, weiß ich nicht.

                Gruß Jürgen

              2. Aloha ;)

                Doch, die Chance ist prinzipiell da, nur braucht man dazu Javascript. AngularJS bringt die Möglichkeit mit, Templates (kann ja auch nur reiner HTML-Code sein) nachzuladen.

                Klar - mit einem Server im Hintergrund ist das kein Problem (z.B. AJAX). Das Problem entsteht ja gerade dann, wenn kein Server da ist.

                Inwieweit man allerdings Browser dazu überreden muss, Dateien aus dem Filesystem statt von einem Server nachzuladen, vermag ich aber nicht zu beantworten.

                Ich bezweifle, dass es da eine einfache/sinnvolle Möglichkeit gibt. Ideen hätte ich schon ein paar; beispielsweise per Zugriff auf den Inhalt eines versteckten Iframes oder so, aber in der Vergangenheit hat bei fast allen solchen Spielereien, die ich versucht habe, die SameOriginPolicy gekommen und hat meine Funktionalität gekillt.

                Grüße,

                RIDER

                --
                Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar manchmal im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem eigenen TeamSpeak-Server (fritz.campingrider.de) oder unter: # Facebook # Twitter # Steam # YouTube # Self-Wiki # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
                1. Herzlichen Dank Euch allen! Ich glaube Euch das jetzt, aber wundere mich dennoch. Bilddateien oder Audiodaten werden ja auch zur Laufzeit geladen und eingebunden. Wie schwer kann denn das sein, ein File zu öffnen, dort weiter zu parsen und am Ende des Files zurück zu springen in das aufrufende File! Ist wohl ein Sicherheitsfeature. Nochmals schönen Dank und schöne Weihnachten!

                  Palmstroem

                  1. Hallo Palmstroem,

                    Ich glaube Euch das jetzt, aber wundere mich dennoch. Bilddateien oder Audiodaten werden ja auch zur Laufzeit geladen und eingebunden. Wie schwer kann denn das sein, ein File zu öffnen, dort weiter zu parsen und am Ende des Files zurück zu springen in das aufrufende File! Ist wohl ein Sicherheitsfeature.

                    Du könntest mit dem object-Element experimentieren. (http://www.w3.org/TR/html5/embedded-content-0.html#the-object-element)

                    Bis demnächst
                    Matthias

                    --
                    Das Geheimnis des Könnens liegt im Wollen. (Giuseppe Mazzini)
                  2. Tach!

                    Wie schwer kann denn das sein, ein File zu öffnen, dort weiter zu parsen und am Ende des Files zurück zu springen in das aufrufende File!

                    Es ist nicht unmöglich, das zeigen ja andere Systeme, die Includes und Co. kennen. Es ist nur nicht vorgesehen, dass HTML-Dokumente aus mehreren vom Client nachladbaren Teilen bestehen. Eingebettete Inhalte sind ein etwas anderes Thema.

                    dedlfix.

                  3. Aloha ;)

                    Ich glaube Euch das jetzt, aber wundere mich dennoch. Bilddateien oder Audiodaten werden ja auch zur Laufzeit geladen und eingebunden. Wie schwer kann denn das sein, ein File zu öffnen, dort weiter zu parsen und am Ende des Files zurück zu springen in das aufrufende File!

                    Naja, das wesentliche sagst du eigentlich schon. Bilddateien oder Audiodateien werden zur Laufzeit geladen und eingebunden - aber erst, wenn der "Parser" fertig ist mit dem HTML-Code. Das ist ja genau das, was passiert, wenn man <iframe> oder <object> mit HTML-Dokument benutzt: Die Seite wird geparst und dann wird die Ressource geladen und eingebunden, in seinem eigenen, abgeschlossenen Inhaltsbereich. Das einzige, was zwischen <iframe>/<object> und <img> unterschiedlich ist, ist, dass <img> in der Lage ist, die Größe des Bereichs quasi-dynamisch dem Inhalt anzupassen (wenn das nicht durch CSS überschrieben wird).

                    Was du brauchst ist aber ja etwas anderes - du möchtest nicht eine Ressource nachladen und in ihrem Kontextelement in die Seite einbauen, sondern du möchtest den Inhalt (Quellcode) einer Ressource an einer Stelle im Quelltext einfügen (wie wenn der da schon immer gestanden hätte), also direkt, sobald der Parser zum ersten Mal im Quellcode auf die include-Anweisung stößt.

                    Das einzige, was eventuell möglich ist, ist, wie auch von @Matthias Apsel angedeutet, mit <object> (bzw. <iframe>) zu experimentieren und zu schauen, ob du mittels JavaScript auf das DOM der geladenen Ressource zugreifen kannst, so dass du dessen Inhalt per innerHTML-Eigenschaft irgendwo auf deiner Seite beliebig einfügen kannst. Das ist die einzige (mir bekannte/vorstellbare) Möglichkeit, sowas wie du willst mit JavaScript umzusetzen. Ich prophezeie da aber, dass mit einiger Wahrscheinlichkeit die Same Origin Policy greift (ein Sicherheitsfeature von JavaScript - JS kann nur innerhalb einer Domain arbeiten und nur auf Ressourcen aus derselben Domain zugreifen). Wenn du viel Glück hast, funktioniert es in deinem Fall ungeachtet dessen - es könnte sein, das im file-Protokoll (also wenn gar kein Server angesprochen wird) die Same Origin Policy durchlässiger ist und mehr gestattet als im Internet. Das müsstest du aber testen.

                    Grüße,

                    RIDER

                    --
                    Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar manchmal im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem eigenen TeamSpeak-Server (fritz.campingrider.de) oder unter: # Facebook # Twitter # Steam # YouTube # Self-Wiki # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
  3. Gibt es eine Möglichkeit HTML-Fragmente in Files zu speichern und diese Files in anderen Seiten einzubinden. Ähnlich wie Bilder. Ich würde gerne Textblöcke, die ich immer wieder auf verschiedenen Seiten brauche nicht immer mit copy&paste übernehmen müssen.

    Code in HTML einbetten, so wurde einst für PHP geworben. Wäre ne Möglichkeit, solche Code ist dann fürs Einbauen der Textfragmente zuständig. Sowas kann aber auch ein Templatesystem. Und es gibt Frameworks, womit in jede HTML-Seite Platzhalter eingebaut werden können.

    1. Oha, das klingt doch gut. Was wäre solch ein Templatesystem? (Siehe auch meine obige Antwort)