Meine Export-Datei, und wie man die Nodes jetzt tatsächlich anlegt

Ich hab mir die Tabelle taxonomy_term_data aus Drupal ins Access überspielt und mit meinen WordPress-Tabellen verknüpft, so komme ich an die tag-IDs. Das läuft genau wie bei der Erzeugung der Export-Datei in Joomla, nachzulesen hier in meinem Artikel über das Tag-Mapping. Das vorläufige Endergebnis habe ich mal auf 24 Rezepte beschränkt, aussehen tut es so:

24_rezepte
24_rezepte

ID, post_content, post_name und titel kommen aus WordPress, die tags 1..3 sind die gemappten tag-IDs aus Drupal. Den post_content hab ich schon bereinigt, da sind schon alle Links draussen und alle Caption-Shortcodes entfernt, wie das geht habe ich in diesem Artikel beschrieben.

Ich habs mal auf maximal drei Tags beschränkt, das reicht zum Vorführen. Diese Tabelle kommt jetzt in die Drupal-Database mit rein, und dann wollen wir mal.

Vorbereitungen

Voraussetzung für den Import ist, dass das Modul „Blogs“ aktiviert und ein Menüpunkt für die Blogseite erstellt ist, wie das geht hab ich in diesem Artikel beschrieben. Dann ändern wir in unserem Source den node type auf blog:

$node->type = 'blog';

Der Import mit db_query

Die Import-Tabelle lesen wir wie gehabt mit einem db_query ein, ich hab hier mal für den ersten Test noch eine where-Klausel mit drin, um die Sache erstmal auf einen Datensatz zu beschränken:

//***exporttabelle einlesen
        $query = db_query("SELECT * FROM 24_export where id = 205");
        $records = $query->fetchAll();

Mit einem Foreach() holen wir uns die einzelnen Zeilen der Query und legen uns die Inhalte auf Variable:

foreach ($records as $record) {
                
                $akt_titel = $record->titel;
                $akt_content = $record->post_content;
                $akt_alias = $record->post_name;
                $akt_tag1 = $record->tag1;

            // hier kommt die Action hin

}

Query-Ergebnisse in Variable einlesen

Diese Variablen passen wir dann in die Kreation des Nodes ein.

$body_text = $akt_content;

                $node = new stdClass();
                $node->type = 'blog';
                node_object_prepare($node);

                $node->title    = $akt_titel;
                $node->language = LANGUAGE_NONE;

                $node->body[$node->language][0]['value']   = $body_text;
                //$node->body[$node->language][0]['summary'] = text_summary($body_text);
                $node->body[$node->language][0]['format']  = 'full_html';
                $node->promote = 0; //nicht auf der Starseite
                
                // Alias erzeugen, post_name aus WP übernehmen
                $path = $akt_alias;
                $node->path = array('alias' => $path);
                
                /**Taxonomy Term zuordnen*/
                //id of your taxonomy term
                $tid = $akt_tag1;

                //add term to a node field
                //field_yourfield_name - machine name of your term reference field

                $node->field_tags[$node->language][0]['tid'] = $tid;
                /** end taxonomy term zuordnen */
                
                node_save($node);

Tags mitnehmen

Ich hab erstmal nur einen tag mitgenommen, aber das lässt sich leicht ausbauen. Sicherheitshalber frag ich auch noch ab, ob das tag-Feld nicht leer ist:

/**Taxonomy Terms zuordnen*/
                //id of your taxonomy term
                
                if ($akt_tag1 != ""){
                $tid1 = $akt_tag1;
                $node->field_tags[$node->language][0]['tid'] = $tid1;
                }
                
                if ($akt_tag2 !=""){
                $tid2 = $akt_tag2;
                $node->field_tags[$node->language][]['tid'] = $tid2;
                }
                
                if ($akt_tag3 !=""){
                $tid3 = $akt_tag3;
                $node->field_tags[$node->language][]['tid'] = $tid3;
                }
                
                //**end taxonomy terms zuordnen

Achtung: man muss in den Zeilen:

$node->field_tags[$node->language][]['tid'] = $tid3;

… den Parameter hinter $node->language leer lassen [], sonst werden die folgenden Tags nicht hinzugefügt, sondern überschrieben, so dass dann nur der letzte Tag zugeordnet ist.

Import komplett

Das wars jetzt aber – meine 24 Rezepte hat Drupal klaglos in den Blog importiert, die erscheinen auch brav im Block „Neueste Blogeinträge“:

neueste_blogbeiträge
neueste_blogbeiträge

Auch die Kategorien und die URL-aliase sind korrekt zugeordnet. Das nenn ich Spaß auf der Datenbank! 🙂

Jetzt lassen wir uns doch gleich mal das Inhaltsverzeichnis ausgeben:

ivz_24
ivz_24

Da hätte ich noch eine kleine Korrektur der Source für das Inhaltsverzeichnis nachzuliefern, das Array mit den Buchstaben braucht noch Anführungsstricherl, das sollte so aussehen, sonst wirft es PHP-Warnings:

$alfa = array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');

Aber jetzt lass’mas gut sein, und nehmen eine Kaffeepause.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert