Drupal-Nodes programmatisch erzeugen

Node erstellen: ganz basic

Da ich ja nach wie vor auf über 300 Rezepten sitze, die ich nicht per Copy&Paste nach Drupal bringen will, hab ich mal nach Importmöglichkeiten gegooglet, und bin hier bei Group 42 fündig geworden. Der folgende Code erstellt einen Node vom Typ article, das funktioniert schon mal ganz gut. Was nicht so schön ist, ist dass die Sprache auf LANGUAGE_NONE gestellt wird, aber genau genommen stört das auch nicht weiter. Mal sehen, wie weit wir damit kommen. Hier der leicht modifizierte Code von Group 42:

/* Basic Node Creation Example for Drupal 7
        *
        * This example:
        * - Assumes a standard Drupal 7 installation
        * - Does not verify that the field values are correct
        */
        $body_text = '<h1>Text des neuen Nodes.</h1>';

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

        $node->title    = 'Node mit NID Evi full html';
        $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, evtl. aus WP übernehmen
        //$path = 'content/programmatically_created_node_' . date('YmdHis');
        //$node->path = array('alias' => $path);

        node_save($node);

        echo "Node erzeugt, ID= ".$node->nid;

Besonders nützlich macht sich hier das:

node_object_prepare()

das nimmt einem schon einen Haufen Arbeit ab, indem es den neuen Node mit etlichen validen Werten vorbelegt, wer will kann das in der Drupal 7 API genauer nachlesen.

Eigentlich muss man jetzt nur noch den body text und den title mit eigenen Inhalten füttern, das könnte klappen. Das Format habe ich auf full_html gestellt, weil ich ja meine Überschriften-Headings aus WordPress übernehmen möchte.

Schön wärs natürlich, wenn man den alias auch gleich vernünftig anlegt, dafür könnte der post_name aus WordPress herhalten, aber das sehen wir dann schon noch, ob das was wird.

Kriegen wir die Kategorien als Tags hier auch mit rein?

Ja, kriegen wir! Und zwar mit folgender Ergänzung:

//id of your taxonomy term
        $tid = 8;

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

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

Das macht man für mehrere Tags im Zweifelsfall einfach n mal. Damit sind wir bestens ausgerüstet und machen mal einen kurzen Break, weil ich erst in Access das Mapping von den WordPress-Kategorien auf die Drupal-Terms erstellen und mir eine vernünftige Export-Datei basteln muss.

Schreibe einen Kommentar

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