Ergebnis 1 bis 5 von 5

Thema: Zwei Contao-Websites zusammenführen - wie am besten vorgehen?

  1. #1
    Contao-Nutzer
    Registriert seit
    10.02.2012.
    Ort
    Basel
    Beiträge
    213
    Partner-ID
    8602

    Standard Zwei Contao-Websites zusammenführen - wie am besten vorgehen?

    Folgende spannende Herausforderung:

    Ich habe ein Theme, dass ich schon bei mehreren Kunden als Grundlage der Website genommen habe, darin sind auch einige Beispielseiten/-artikel/-CE's.
    Nun habe ich eine bestehende Website (mit vielen Inhalten), die auf den Look meines Themes upgedated werden soll.

    Was ich bereits gemacht habe:
    • Beide Websites auf Contao 3.5.6 upgedated
    • Das Theme der einen Website exportiert und bei der anderen importiert


    Was nun fehlt:
    Ich möchte auch die inhaltlichen Vorlagen transportieren.

    Gibt es einen (mehr oder weniger) einfachen Weg diese Seiten zu transportieren?

    Ich habe daran gedacht, die ID's im sql-backup zu erhöhen, z.B. auf Tausend - und dann in die neue DB einzufügen. Das liesse sich einfach mit search/replace machen, müsste dann allerdings auch bei den parentId's gemacht werden und da wirds schwieriger
    Code:
    INSERT INTO `tl_content` VALUES (1,4,'tl_article',128,1426013874, ...
    # würde zu
    INSERT INTO `tl_content` VALUES (1001,4,'tl_article',128,1426013874, ...
    Denke ich in die richtige Richtung oder gibt es dafür auch einen anderen Weg?

  2. #2
    Contao-Urgestein Avatar von the_scrat
    Registriert seit
    24.02.2010.
    Ort
    Augsburg
    Beiträge
    2.051
    User beschenken
    Wunschliste

    Standard

    Hi,

    das wird nur bedingt funktionieren. In deinem Beispiel wird das ganze schon daran scheitern, da zwar die ID deines Content-Elements die 1000 hat, sich jedoch die PID (4) auf den Artikel bezieht, also müsstest du diese ID auch noch ändern.
    Es gibt eine Erweiterung (clipboard) mit der man das sehr gut erledigen kann. Du kopierst dir die ganze Seitenstruktur, die Daten werden dann unter /files/clipboard gespeichert (als xml glaub ich). Diese Datei kannst du dann auf der anderen Installation einfügen und dort die Erweiterung nutzen um den Inhalt in einen neuen Seitenbaum zu bekommen.
    Allerdings verlierst du in jedem Fall die Verbindungen zu Modulen und zum Layout. Bislang gibt es keine Möglichkeit zwei Installationen zusammenzufassen, selbst wenn diese die gleiche Version haben. Die Erweiterung nimmt dir aber schon sehr viel Arbeit ab. Nacharbeitung bleibt jedoch immer...
    Programmers don't comment their code. It was hard to write, it should be hard to understand...

  3. #3
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von Webbaumeister Beitrag anzeigen
    ...und da wirds schwieriger...
    Und wieso wird es da schwieriger? Vom technischen her dürfte das ja kein Problem sein.
    PHP-Code:
    INSERT INTO `tl_contentVALUES (1,4,'tl_article',128,1426013874, ...
    // würde zu
    INSERT INTO `tl_contentVALUES (1001,1004,'tl_article',128,1426013874, ... 
    Allerdings müsstest du das dann bei allen Tabellen mit id und pid machen, wobei die IDs und evtl. PIDs auch noch in anderen Felder referenziert sein können, z.B. bei jumpTo ... oder auch innerhalb eines serialisierten Arrays, z.B. groups. Also besser mit clipboard probieren od. die Finger davon lassen.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  4. #4
    Gesperrt
    Registriert seit
    07.05.2011.
    Beiträge
    1.199

    Standard

    Man könnte versuchen, es mit einem kleinen awk-Skript zu lösen. Schätzungsweise auch ein paar Stunden Aufwand, sich die passende Logik zu überlegen, aber wahrscheinlich letztlich deutlich zeitsparender als mit clipboard und kein Hexenwerk. Abhängig davon, wieviele Datensätze die betroffenen Tabellen enthalten. Je mehr, um so eher lohnt es.

    Im ersten Schritt solltest Du mit PHPmyAdmin jeweils ein zusätzliches Feld anlegen (id und pid doppeln) und mittels SQL-Anweisung den Inhalt von id und pid dort reinkopieren. Dieses Hilfsfeld dient dazu, die ursprünglichen Master-/Detail-Beziehungen für den folgenden Umschreibvorgang unabhängig auslesen lassen zu können. Vielleicht könnte sich noch ein weiteres leeres Hilfsfeld als nützlich erweisen. Dann den SQL-Dump der Tabellen machen. Die verschiedenen SQL-Dateien sind nun die Inputquellen Deines awk-Skripts. Du ermittelst in einer verschachtelten Schleife quasi rekursiv in den verschiedenen Inputquellen die über id und pid verknüpften Datensätze und baust diese Felder mit Zählern in Zieldateien hochzählend neu auf - für jedes zusammen zu führende Tabellenpaar je eine Ausgabedatei. Wobei das awk-Skript für jeden Verarbeitungslauf der Inputdateien immer die nächste unverarbeitete "create table"-Anweisung sucht und dann den zugehörigen Inhalt wegschreibt. Das leere Hilfsfeld dachte ich zur Markierung verarbeiteter Zeilen. Ob man es brauchen könnte, evtl. nur zur einfacheren Kontrolle, weiß ich anhand der groben Logikvorstellung ad hoc nicht, aber das zeigt sich ja dann in Entwurfsphase und Test. Wenn schließlich alles geklappt hat, müsste in den Zieldateien nun eine mit den Quellen identische Zeilenzahl vorliegen und bei allen verknüpften Datensätze hübsch lückenlos neu hochgezählte id und pid.

    So ungefähr jedenfalls, als grobe Skizze. Hab womöglich noch nicht alles bedacht und natürlich brauchts als ersten Schritt Erstellung und logischen Schreibtischtest eines Ablaufdiagramms.

    Nach Ergebniskontrolle abschließend die Hilfsfelder in den Dateien und in den DB-Tabellen entfernen. Dann die DB-Tabellen mit truncate leeren und den Inhalt aus den Zieldateien neu importieren.

    Kontrollstrukturen, Funktionen und Syntax des awk-Interpreters sind sehr leicht verständlich. Guckst Du in die man-Page und kannst eigentlich sofort loslegen. Hm, eigentlich weiß ich momentan garnicht, ob´s eine man-page für awk gibt. Aber auf jeden Fall gute Tutorials. Alternativ gingen natürlich auch andere Sprachen wie Perl, PHP, Python usw., nur erfreut awk eben mit seiner speziell für solche Aufgaben optimierten Kompaktheit. Macht auch Spaß und es sich mal reinzuziehen, auf Dauer für alles Mögliche nützlich, auch wg. der Verknüpfungsoptionen der Posix/Linux-Tools.

    Tja, und sollte alles klappen, könntest Du sogar noch ein gutes Werk tun. Bestimmt gäbe es immer mal wieder dankbare Abnehmer des Skripts in der Community. :-)

    Edit:
    Ah ja, beinah vergessen ... Andreas Anmerkung "... wobei die IDs und evtl. PIDs auch noch in anderen Felder referenziert sein können" trifft natürlich auch auf diesen Lösungsansatz zu. Die Werkzeugwahl ändert ja nichts an der Ablauflogik. Allerdings mithilfe der Mustersuche in den jeweils zu verarbeitenden Zeilen recht einfach / vermutlich einfacher zu finden und in einem Rutsch mit zu ersetzen. Ziemlich knifflig ist ein solches Vorhaben auf jeden Fall. So könnte teils auch nicht nur einfache Master-Detail-Beziehungen geben, sondern mehrfach rekursive Verknüpfungen. Die müssten ggf. alle aufgedröselt werden, was auch voraussetzt, das Datenmodell der betroffenen Module zu verstehen bzw. sich bei Bedarf dieses Verständnis anzueignen. Deshalb würde ich es wohl nur bei durch eine recht große Datensatzmenge gerechtfertigtem Aufwand versuchen.

    https://de.wikipedia.org/wiki/Awk
    Geändert von soweit_ok (08.03.2016 um 07:14 Uhr)

  5. #5
    Contao-Nutzer
    Registriert seit
    10.02.2012.
    Ort
    Basel
    Beiträge
    213
    Partner-ID
    8602

    Standard

    Danke für eure Antworten.

    [clipboard] könnte eine passende Lösung sein.
    Natürlich gehts nicht ganz ohne Handarbeit, aber es ist schon viel wert wenn man diese deutlich reduzieren kann.

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •