Ankündigung

Einklappen
Keine Ankündigung bisher.

Zwei Tagging-Tabellen mergen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Zwei Tagging-Tabellen mergen

    Hallo Tim,

    wir müssen zwei Tagging-Tabellen aus separaten CC Installationen zusammenführen.
    Hast du einen sinnvollen Ansatz dazu?


  • #2
    "Sinnvoll" ist gut . Das wird Handarbeit mit Lookup-Arrays. Ich bin mir sicher das Grundprinzip hab ich in anderen Threads bereits aufgezeigt.
    http://www.premium-contao-themes.com

    Kommentar


    • #3
      Werde ich mal testen. Das einzige, was mir spontan auffällt:
      Immer wenn ich neue Tags in die bestehende Tags Tabelle importiere, werden diese spätestens beim Aufruf über das Backend wieder gelöscht.
      Kann es sein, dass ein Import über die DB hier gar nicht funktioniert?

      Kommentar


      • #4
        Zitat von eblick Beitrag anzeigen
        Werde ich mal testen. Das einzige, was mir spontan auffällt:
        Immer wenn ich neue Tags in die bestehende Tags Tabelle importiere, werden diese spätestens beim Aufruf über das Backend wieder gelöscht.
        Kann es sein, dass ein Import über die DB hier gar nicht funktioniert?
        Du musst zwingend das tstamp Feld befüllen.
        Contao löscht alles, was keinen Wert im tstamp gesetzt hat (gilt für alle durch Contao gemanagted Tabellen)
        Kein tstamp gilt für Contao als ungespeichert und wird im reviseTable Hook gekillt. (wenn man sich wieder in der Listen-Ansicht befindet).

        -> wie frisch angelegt, aber noch nicht Speichern geklickt. Drückt man Zurück ohne Speichern, gleicher Effekt.
        http://www.premium-contao-themes.com

        Kommentar


        • #5
          tstamp ist komplett gesetzt, siehe Anhang.
          Angehängte Dateien

          Kommentar


          • #6
            Das ist eine Eltern-Kind-Tabelle. Wenn du pid > 0 setzt, muss es einen Eintrag mit dieser id geben usw. usw.

            Id ist increment (erhöht sich also immer von selbst). Du musst für neue Einträge die neu gesetzt ID abfangen und eventuelle Kind-Einträge auf diese ID mappen.

            Einfach blind rein geht für verschachtelte bzw. referenzierte Tabellen nicht.
            Zuletzt geändert von Tim; 25.04.2023, 13:07.
            http://www.premium-contao-themes.com

            Kommentar


            • #7
              Zitat von Tim Beitrag anzeigen
              .

              Id ist increment (erhöht sich also immer von selbst). Du musst für neue Einträge die neu gesetzt ID abfangen und eventuelle Kind-Einträge auf diese ID mappen..
              Habe ich tatsächlich alles berücksichtigt. Alle Ids haben eine entsprechende PID. Die Tabelle war nach dem Import in sich plausibel. Den Increment habe ich für den Import deaktiviert und anschließend mit dem höchsten Wert fortgeführt.

              Kommentar


              • #8
                Wenn diese Grundvoraussetzungen erfüllt sind, kann eigentlich nur noch ein aktiver Backend-Filter die Darstellung unterbinden. Mehr fällt mir nicht ein.

                Das klappt ohne Probleme. Erstellt einen neuen Tag "Mein Tag" auf Wurzelebene (kein Eltern-Element : pid = 0)

                initconfig.php

                Code:
                $arrSet = array
                (
                'pid' => 0,
                'tstamp' => time(),
                'title' => 'Mein Tag'
                );
                \Contao\Database::getInstance()->prepare("INSERT INTO tl_pct_customelement_tags %s")->set( $arrSet )->execute();

                Das ganze mit einem Kind gefüttert sieht so aus:
                Code:
                // Tag auf Root-Ebene
                $arrSet = array
                (
                'pid' => 0,
                'tstamp' => time(),
                'title' => 'Mein Tag'
                );
                $objStatement = \Contao\Database::getInstance()->prepare("INSERT INTO tl_pct_customelement_tags %s")->set( $arrSet )->execute();
                
                // Kind-Element in vorab angelegten Tag platzieren. Siehe pid Wert
                $arrSet = array
                (
                'pid' => $objStatement->__get('insertId'), // ID des angelegten Tags aus dem vorherigen Statement
                'tstamp' => time(),
                'title' => 'Mein Kind'
                );
                $objStatement = \Contao\Database::getInstance()->prepare("INSERT INTO tl_pct_customelement_tags %s")->set( $arrSet )->execute();
                Zuletzt geändert von Tim; 26.04.2023, 15:11.
                http://www.premium-contao-themes.com

                Kommentar

                Lädt...
                X