Was ist die beste Wahl, um einen Knoten durch Code zu erstellen?

7

Das Szenario geht so, ich habe einen Knotentyp, der viele Taxonomie-Termfelder enthält. Es gibt auch andere Felder wie Text, Datum usw., aber 90% davon sind Taxonomiefelder. Mir ist bekannt, dass ein Knoten auf zwei Arten programmgesteuert erstellt werden kann:

  • node_save () - Ein Knotenobjekt erstellen und speichern

    $node =  new stdClass();
    
    $node->type = 'article';
    
    $node->field_term[LANGUAGE_NONE][0]['tid'] = 3128 // term id of the term
    
    node_save($node);
    
  • Formular senden - Erstellen eines Formulararrays und Senden mit drupal_form_submit

    $node[field_first]['und'] => chennai;
    
    $node[field_second]['und'] => "iphone5";
    
    $node['type'] = 'article'; 
    
    $form_state['values'] = $node;
    
    $form_state['values']['op'] = t('Save');
    
    drupal_form_submit($node_type . '_node_form', $form_state, (object)$node);
    

    mit $ node mit den POST-Werten.

Der Vorteil der Formularübermittlungsmethode besteht darin, dass Drupal sich um die Erstellung neuer Begriffe im Wortschatz kümmert (ich sollte mehr neue Begriffe erhalten). Das Senden von Formularen kann auf Formularüberprüfungen folgen, die zum Erstellen eines Knotens erforderlich sind.

Gibt es eine Methode, um Knoten schneller im Drupal-System zu erstellen, die mehr Begriffe enthalten soll?

Wenn es keine andere als die oben genannte Methode gibt, welche ist die beste?

Dinesh Kumar Sarangapani
quelle
Ihr erster Ansatz ist etwas schneller, aber wenn Ihr zweiter Ansatz einfacher zu warten ist, verwenden Sie den zweiten.
Jantimon
Das Problem entsteht, wenn ich mehr als 12 Termfelder habe und jedes Feld mehr als 10 Werte als Terme hat. Es ist extrem langsamer und beansprucht einen Großteil der Ressourcen
Dinesh Kumar Sarangapani
Anschließend können Sie eine Entitätsfeldabfrage schreiben, um herauszufinden, welche Begriffe bereits vorhanden sind, alle fehlenden Begriffe erstellen und am Ende die Knoten erstellen, die Sie im ersten Ansatz gezeigt haben.
Jantimon
Ja, wie gesagt, es gibt verschiedene Methoden, um einen Knoten zu erstellen. Ich möchte nur das Beste aus einem bestimmten Grund
Dinesh Kumar Sarangapani,
4
@DineshKumar 'Best' ist ein zu subjektiver Begriff. Vielleicht möchten Sie ihn auf das eingrenzen, was Sie tatsächlich meinen (z. B. am performantesten). Fragen, die nach dem Besten von etwas fragen, sind auf Stack-Exchange-Sites nicht so gut. Außerdem besteht die einzige wirkliche Antwort auf diese Frage darin, die verschiedenen Methoden in Ihrer aktuellen Umgebung zu vergleichen, was nur Sie tun können.
Clive

Antworten:

4

Die sicherste Methode ist die Verwendung von drupal_form_submit (). Wenn Sie sich das Servicemodul ansehen, macht es dasselbe. Die Formularüberprüfung sollte wichtig sein, wenn Sie Knoten programmgesteuert erstellen. Importieren oder erstellen Sie mehrere Knoten gleichzeitig? Wenn dies der Fall ist und Sie Bedenken hinsichtlich der Leistung haben, können Sie die Batch-API oder -Warteschlange von Drupal verwenden. Batch ist großartig, wenn Sie Benutzer-Feedback benötigen, aber wenn Sie Knoten auf cron erstellen und keine Benutzeroberfläche mit Feedback benötigen, ist die Warteschlange der richtige Weg. In beiden Fällen kümmern sie sich für Sie um die Speicherverwaltung.

Ich würde mir keine Gedanken darüber machen, wie lange es dauert, einen Knoten zu erstellen, da dies mit der Benutzeroberfläche so lange dauern würde. Es sei denn, der Grund, warum Sie dies über Codes tun, besteht darin, die Erstellungszeiten zu verlängern.

Jepedo
quelle