[FONT="]Hallo,[/FONT]
[FONT="]
ich möchte gerne eine ganzen Menge selbst-gecodete HTML-Seiten verarbeiten. Ca. 700.[/FONT]
[FONT="]
Als Stapelverarbeitung, Batch oder Datenzusammenführung mit Platzhaltern[/FONT]
[FONT="]
[/FONT]
[FONT="]
Es soll in einer Vorlagen-HTML Datei Platzhalter eingefügt werden, die aus einer Excel-Datei entnommen & zusammengeführt werden.[/FONT]
[FONT="]
[/FONT]
[FONT="]
Z.B. soll sich der Websiten-Titel der Vorlagen-Datei immer ändern in: Hompage Berlin, Homepage Stuttgart, Homepage München[/FONT]
[FONT="]
Dann soll die Datei jeweils für sich allein abgespeichert werden als berlin.html,stuttgart.html, münchen.html[/FONT]
[FONT="]
[/FONT]
[FONT="]
Ich möchte also ohne großen Aufwand, größere Mengen an HTML-Daten erstellen, in die ich Platzhalter einfügen kann und dann nach Vorgabe einzeln abspeichern.[/FONT]
[FONT="]
[/FONT]
[FONT="]
Danke für hilfreiche Antworten![/FONT]
Massen HTML-Daten verarbeiten - Stapelverarbeitung / Batch / Platzhalter / Datenzusam
-
inetstrich -
26. Juni 2017 um 18:03 -
Geschlossen
-
-
Im Nachhinein wirds schwer. Es gibt aber Editoren, die mit Platzhaltern, Includes arbeiten. Die haben dann evtl. auch noch dateiübergreifendes Ersetzen. Evtl. hast du solch einen Editor im Einsatz?
Automatisches Ersetzen und abspeichern in eine neu Datei kenne ich dagegen nicht.
-
Sorry, ich habe mich falsch ausgedrückt. Ich habe eine Datei, aus der ich ca. 700 HTML Dateien erzeugen möchte. Wie heißen die Editoren mit Platzhalter-Funktion ?
-
So etwas ließe sich sicherlich mit vertretbarem Aufwand mit zB PHP realisieren.
csv Datei aus Excel Tabelle erzeugen - mit PHP in ein Array einlesen - Ursprungs-HTML Datei zeilenweise einlesen und danach sollte es nur noch eine paar for- bzw while- Schleifen bedürfen, um die 'Platzhalter' durch die Daten aus der csv auszutauschen und entsprechend zu speichern. Problem könnte da nur die Laufzeit der Routine machen, denn das könnte bei 700 Dateien eine ganze Weile brauchen und mitunter ist die zulässige Laufzeit auf dem Server (Localhost) limitiert. -
- Offizieller Beitrag
Hallo,
Sooo groß wird der Aufwand nicht sein, ich frage mich nur, ob ich das richtig verstanden habe:
Du hast eine statische Standard HTML Datei und willst daraus quasi mehrere Kopien mit unterschiedlichen Titeln machen, um mal bei Deinem Beispiel zu bleiben?Also aus
sollen diese Duplikate entstehen:usw.?
Wenn ja, dann geht das relativ einfach per DOMDocument/DOMXPath.
Du legst Dir quasi Arrays an, in denen die "Ersetzungen" definiert sind und läufst mit dem DOMParser einfach über das Original und speicherst das Ergebnis als neue Datei.
Evtl. würde ich die Ersetzungen und Zieldateinamen auch per XML konfigurieren und einlesen, aber das sind nur Vermutungen, weil mir immer noch ein konkretes Beispiel fehlt.Gruß Arne
-
Hallo und danke.
Korrekt Arne Drews. DOMDocument/DOMXPath sieht für mich als blutiger Anfänger zwar recht kompliziert aus, aber ich hoffe, dass ich das hinbekomme.Ich habe mir das einfacher vorgestellt Vgl. einer Serienbrieffunktion von Word o.Ä.
Eventuell hat mir jemand noch eine solche Software als Empfehlung.
-
- Offizieller Beitrag
Das aufwendigste bei Deinem Vorhaben ist die Ersetzungsbasis, da niemand ( auch kein Programm ) wissen kann, welche Textpassagen Du ersetzen willst.
Daher wird ein Automatismus über ein Programm vom Aufwand nicht weniger, sondern eher mehr werden.Du solltest die Basis selbst schaffen und dann die DOMDocument/DOMXPath Variante wählen.
Wenn Du Fragen dazu und/oder dem verlinkten Tutorial hast, kannst Du mich gerne kontaktieren. Es sieht nur kompliziert aus, ist aber relativ einfach und effektiv. -
Die Problemstellung ist hier so individuell, dass nach meiner Meinung auch am ehesten eine individuelle, maßgeschneiderte Lösung zum Erfolg führt.
[tr][td]
Die notwendigen Parameter sind doch (zumindest dem Fragesteller) bekannt.
Es existiert eine HTML Datei, in der Wörter/Begriffe enthalten sind, die durch Wörter/Begriffe zu ersetzen sind, die in einer Excel-Tabelle vorgegeben sind.
Die zu ersetzenden Wörter/Begriffe (Platzhalter) aus der HTML Datei sind dem Fragesteller bekannt.
Vorausgesetzt, dass die Excel-Tabelle eine 'sinnvolle' Struktur hat - zb zeilenweise Auflistung der Ersatzwörter - dann können diese bekannten Platzhalter auch in Zeile 1 der Tabelle aufgelistet werden...
[TABLE='class: grid, width: 700, align: left']Platzhalter 1
[/td][td]Platzhalter 2
[/td][td]Platzhalter 3
[/td][td]Platzhalter 4
[/td][td]usw...
[/td][/tr][tr][td]Ersatzbegriff 1
[/td][td]Ersatzbegriff 2
[/td][td]Ersatzbegriff 3
[/td][td]Ersatzbegriff 4
[/td][td]usw..
[/td][/tr][tr][td]Ersatzbegriff 1
[/td][td]Ersatzbegriff 2
[/td][td]Ersatzbegriff 3
[/td][td]Ersatzbegriff 4
[/td][td]usw...
[/td][/tr][tr][td]Ersatzbegriff 1
[/td][td]Ersatzbegriff 2
[/td][td]Ersatzbegriff 3
[/td][td]Ersatzbegriff 4
[/td][td]usw...
[/td][/tr][tr][td]...
[/td][td]...
[/td][td]...
[/td][td]...
[/td][td]...
[/td][/tr]
[/TABLE]Man kann diese Dateien also programmgesteuert einlesen (Excel-Tabelle vorher in eine CSV Datei umwandeln) und in den Arrays $html und $csv zur weiteren Verarbeitung nutzen.
Mit einer Schleife über alle Elemente von $html (Startwert n=0)
erfolgt dann der Tausch Platzhalter gegen Ersatzbegriff.
Wobei ich mir nicht sicher bin, wie str_replace auf das multidimensionale Array $csv reagiert und ob man nicht vorher aus den Zeilen eindimensionale Arrays erzeugen sollte.
Damit ist das komplette HTML Dokument geändert und kann unter dem gewünschten Namen, der ja auch in der Tabelle angegeben ist, gespeichert werden.Die obige Schleife über alle Elemente von $csv wiederholen... fertig!
- - - Aktualisiert - - -
Ich sehe es gerade... kleiner logischer Fehler!
In der ersten Schleife muss natürlich der 'Zähler' für das Array $csv konstant bleiben - also...
Wobei sich dann 'x' erst in der nächsten Schleife über die Anzahl der Elemente von $csv jeweils um 1 erhöht. -
- Offizieller Beitrag
Wer garantiert Dir, dass ein/e Wort/Textpassage, die an einer Stelle ersetzt werden soll nicht auch in einem Fließtext auftaucht, aber unverändert bleiben soll?!
Nach Deinem Vorschlag wäre das eine "Vermutungs"-Ersetzung, keine Garantie, dass die Resultate wirklich korrekt sind.Das DOM zu verarbeiten macht hier imho deutlich mehr Sinn.
-
Arne Drews
Das müsste/sollte der Fragesteller wissen, ob es Textpassagen im HTML Dokument gibt, die ausgeschlossen werden sollen - ansonsten hast du natürlich Recht. Meine Methode ändert alle Vorkommnisse der Platzhalter. Aber ohne nähere Informationen über die fragliche .html und die zugehörige . xls sind das alles nur akademische Betrachtungen. Nur wenn man es ausprobiert, weiß man sicher, ob es funktioniert oder nicht. -
Vielen Dank für die vielen Informationen, die für mich als Laie (zugegeben) noch schwer zu greifen sind.
Ich versuche näher auf die eine Ursprungsdatei einzugehen, aus der dann ca. 700 HTML-Dateien generiert werden sollen:
-in der HTML-Ursprungsdatei würde ich einen Platzhalter "ORT" eingegeben
-in der xls/csv sind 700 Orte eingepflegt
-in der Ursprungsdatei muss "ORT" mit der ersten Zeile in der xls/csv (z.B. Berlin) ersetzt werden. Es wurde dann ca. 5 mal "ORT" gesucht und durch "BERLIN" ersetzt
-die nun generierte Datei muss wie die erste Zeile in der xls/csv - hier also Berlin - als "berlin.html" abgespeichert werden.Dann geht es wieder von vorne los, "ORT" wird in der Ursprungsdatei gesucht und dann mit der Zeile 2 - z.B. "Berlin-Tegel" ersetzt. Die Datei wird dann wieder als "Berlin-Tegel.html" erstellt.
Und immer so weiter.
-
-
- Offizieller Beitrag
Kann man so machen, ich würde allerdings das file_get_contents() und explode()-Gebinde mit file() ersetzen:
-
Da spricht der Kenner. Aber, danke für den Hinweis.
-
WOOOOW Prima ich habe es durch eure Hilfe hinbekommen - unglaublich
Kurze Zusammenfassung für die Anfänger:
1. XAMMP herunterladen und installieren
2. Im XAMMP Programm "Apache" und "MySQL" einfach starten
3. Dieses Video auf yotube anschauen und erste Erfahrungen sammeln, dauert nur ein paar Minuten:
"How to Run PHP in XAMPP - Testing PHP Tutorial" von Ken Swartwout
4. Eine Datei erstellen in z.B. "Wordpad" mit dem Inhalt in das Verzeichnis Bsp.: D:\xampp\htdocsPHP<?php $sVorlage = file_get_contents( 'vorlage.html' );$aOrte = file( 'liste.csv', FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES ); foreach ( $aOrte as $ort ) file_put_contents( $ort . '.html', str_replace('[ORT]', $ort, $sVorlage) );?>
5. Eine liste.csv Datei in Excel erstellen mit den Orten, direkt in der Zeile A1 mit den Orten beginnen
6. Eine vorlage.html mit "Wordpad" erstellen in das Verzeichnis Bsp.: D:\xampp\htdocsHTML<!DOCTYPE HTML> <html><head><title>[ORT]</title><meta charset="UTF-8"></head> <body><h1>[ORT]</h1></body></html>
7. http://localhost/generator.php in den Webbrowser eingegeben.
8. Mit ganz vielen HTML-Dateien glücklich werden.Die Vorlage.html muss dann natürlich mit der eigenen html Datei ersetz werden. Platzhalter ist dann der [ORT]
Danke nochmal an alle. Falls mir noch etwas auffällt oder nicht ganz läuft melde ich mich
-
- Offizieller Beitrag
Da spricht der Kenner. Aber, danke für den Hinweis.
Ist nur ein wenig kürzer und für mein subjektives Empfinden übersichtlicher, aber Deine Variante funktioniert im Prinzip genau so. -
So ich habe noch eine Frage. Leider bekomme ich es nach einigen Tests nicht hin. Es ist wahrscheinlich kinderleicht. Wie bekomme ich ein immer gleichbleibendes Wort vor den [ORT] der ausgegebenen HTML Datei.
Also statts [ORT].html (berlin.html)
soll
Stadt-[ORT].html (stadt-berlin.html, stadt-berlin-tegel.html, usw.) ausgegeben werden -
Indem du in der Zeile, in der die Datei gespeichert wird, statt
$ort . '.html'
einfach
'Stadt-' . $ort . '.html'
einfügst.
-
1. XAMMP herunterladen und installieren
Damit fängt es schon an, XAMPP ist für mich mittlerweile nur noch eine Notlösung. Den Apachen mit PHP einzeln zu installieren, ist kein Hexenwerk, MariaDB ist da nicht anders. Und phpMyAdmin bekommt man auch schnell installiert, wenn man es denn braucht. In XAMPP hat man einen Overhead, den man nicht oder nur selten braucht. -
Super, danke Sailor.
Jetzt wird es wahrscheinlich komplizierter
Wenn ich die Daten aus der .csv entnehme, führt es durch die Umlaute ä ö ü in den Stadtnamen zu Problemen. Ich muss also 2 Spalten in der .csv machen.
Spalte 1 - Ortsnamen ohne HTML Umlaute für den .html-Dateinamen
Spalte 2 - Platzhalter [Ort]: Mit HTML-lesbaren Umlaute-Code für den .html-Datei-InhaltDann hätte ich gerne noch variablen Text um den Inhalt der HTML Datei aufzubauen
Spalte 3 - Platzhalter [Text1]
Spalte 4 - Platzhalter [Text2]
Spalte 5 - Platzhalter [Text3]
Spalte 6 - Platzhalter [Text4]Beispieldaten wie die .csv aussieht:
[TABLE='class: grid, width: 500, align: center']
[tr][td]Österreich
[/td][td]Österreich
[/td][td]Servus
[/td][td]Hier gehts lang
[/td][td]Danke dafür
[/td][td]php Neuling
[/td][/tr][tr][td]Stuttgart
[/td][td]Stuttgart
[/td][td]Hi
[/td][td]Vielen Dank
[/td][td]Dort gehts lang
[/td][td]HTML für Erfahrene
[/td][/tr][tr][td]Berlin
[/td][td]Berlin
[/td][td]Super Sache
[/td][td]Danke f¨r die Hilfe
[/td][td]php f¨r Anfänger
[/td][td]Hier gehts mit dem Text weiter
[/td][/tr]
[/TABLE]Wie lautet hier der php-Code? Ich habe schon etwas mit den .php-Einsteiger Tutorials geübt aber mir fehlt einfach noch die Übung...
-