In einem benutzerdefinierten Modul für Drupal 4.7 habe ich ein Knotenobjekt gehackt und es an Knoten_Save ($ Knoten) übergeben, um Knoten zu erstellen. Dieser Hack scheint in Drupal 6 nicht mehr zu funktionieren. Obwohl ich sicher bin, dass dieser Hack behoben werden könnte, bin ich neugierig, ob es eine Standardlösung gibt, um Knoten ohne ein Formular zu erstellen. In diesem Fall werden die Daten aus einem benutzerdefinierten Feed auf einer anderen Website abgerufen.Wie erstelle ich einen Knoten aus einem Cron-Job in Drupal?
Antwort
Ich kenne keine Standard-API zum pragmatischen Erstellen eines Knotens. Aber das habe ich aus dem Aufbau eines Moduls gelernt, das genau das tut, was Sie tun wollen.
- Sicherstellen, dass die wichtigen Felder festgelegt sind: uid, Name, Typ, Sprache, Titel, Körper, Filter (siehe
node_add()
undnode_form()
) - Führen Sie den Knoten durch
node_object_prepare()
so andere Module können an den $ Knoten hinzufügen Objekt.
Die Best Practices-Methode, um dies zu erreichen, ist die Verwendung von drupal_execute. drupal_execute führt die Standardvalidierung und grundlegende Knotenoperationen aus, so dass sich die Dinge so verhalten, wie das System es erwartet. drupal_execute hat seine Macken und ist etwas weniger intuitiv als einfach ein node_save, aber in Drupal 6 können Sie drupal_execute wie folgt verwenden.
$form_id = 'xxxx_node_form'; // where xxxx is the node type
$form_state = array();
$form_state['values']['type'] = 'xxxx'; // same as above
$form_state['values']['title'] = 'My Node Title';
// ... repeat for all fields that you need to save
// this is required to get node form submits to work correctly
$form_state['submit_handlers'] = array('node_form_submit');
$node = new stdClass();
// I don't believe anything is required here, though
// fields did seem to be required in D5
drupal_execute($form_id, $form_state, $node);
Noch eine Antwort, die ich entdeckte, war the example vom blogapi Modul in Drupal Kern zu verwenden. Die Tatsache, dass es im Kern ist, gibt mir ein bisschen mehr Vertrauen, dass es in zukünftigen Versionen weiter funktionieren wird.
Es gibt einige gute Antworten oben, aber in dem spezifischen Beispiel des Drehens eines aufgenommenen Feed-Elements in einen Knoten, könnten Sie auch den Ansatz der Verwendung des Simplefeed-Moduls (http://wwww.drupal.org/project/simplefeed) nehmen. Dieses Modul verwendet die Simplepie-Engine, um Feeds aufzunehmen und einzelne Artikel aus jedem Feed in Knoten umzuwandeln. Ich weiß, dass dies nicht speziell das Problem der Erstellung von Knoten aus Cron angeht, aber es könnte insgesamt eine einfachere Lösung für Ihr Problem sein.
Das Problem ist, es gibt nichts Einfaches über Simplefeed und es ist voll von Craft und Bloat. – deadprogrammer
Das klingt nach dem gleichen Problem mit vielen contrib-Modulen ... – Rimian
node_save() funktioniert immer noch gut in Drupal 6; Sie benötigen ein paar spezifische Daten, damit es funktioniert.
$node = new stdClass();
$node->type = 'story';
$node->title = 'This is a title';
$node->body = 'This is the body.';
$node->teaser = 'This is the teaser.';
$node->uid = 1;
$node->status = 1;
$node->promote = 1;
node_save($node);
‚Status‘ und ‚Förderung‘ ist leicht zu übersehen - wenn Sie diese nicht gesetzt ist, wird der Knoten bleibt nicht veröffentlicht und nicht aktiviert, und Sie werden nur sehen, wenn Sie auf die Inhaltsverwaltung Bildschirm gehen .
Ich denke, Sie sollten auch $ node-> revision einstellen. Wenn Sie es auf einen Anfangswert setzen und speichern, sollte es als Knoten-ID festgelegt werden. Ich kann mich daran erinnern, dass ich irgendwo in meinem Hinterkopf etwas Ärger damit hatte ... – Rimian
- 1. Wie entferne ich einen Knoten programmatisch in Drupal 6?
- 2. Wie kann ich programmatisch Bilder zu einem Drupal-Knoten hinzufügen?
- 3. Wie erstelle ich einen Knoten mit Neo4jClient in Neo4j v2?
- 4. Ein Drupal-Modul in einem Knoten
- 5. Wie erstelle ich einen XmlNode aus einem Aufruf von XmlSerializer.Serialize?
- 6. MATLAB: Wie erstelle ich einen Kreis aus einem Bild
- 7. Wie erstelle ich einen parametrisierten Typ aus einem Makro?
- 8. Wie erstelle ich einen JSONP aus einem externen JSON-Feed?
- 9. Wie erstelle ich einen UIColor aus RGBA?
- 10. Putting Drupal Knoten Kommentarformular in einem modalen
- 11. Erstelle einen Link zwischen Knoten
- 12. Wie erstelle ich einen Elixir-Knoten, ohne IEX zu verwenden?
- 13. Wie führe ich einen Befehl als ein anderer Benutzer von einem Root-Cronjob aus?
- 14. Wie erstelle ich einen Timer
- 15. Wie erstelle ich einen String aus anderen Saiten in Ada?
- 16. Wie kann ich in Drupal einen Knoten in einen anderen einbeziehen?
- 17. drupal 7, wie eine Variable in einem Knoten hinzuzufügen
- 18. Wie erstelle ich einen Ordner in Eclipse?
- 19. Drupal 8: Wie erstelle ich ein Inhaltsreferenz-/Textarea-Verbundfeld?
- 20. Wie erstelle ich ein Raster aus einem Datenrahmen in r?
- 21. Wie erstelle ich einen neuen Tupel-Typ aus einem alten und einen Typ in Boost?
- 22. Wie erstelle ich einen Tabellenalias in MySQL
- 23. Wie erstelle ich einen NSManagedObjectContext
- 24. Wie erstelle ich ein mp3 aus einem Spektrogramm in Python?
- 25. Wie erstelle ich einen Style in einem WPF UserControl?
- 26. Wie erstelle ich einen Ordner auf einem Server in Ruby?
- 27. Wie erstelle ich einen App-Benutzer in einem Box-Konto?
- 28. Wie lösche ich Knoten benutzerdefinierten Cache in Drupal 7
- 29. Wie erstelle ich einen Turnierplan in Ruby?
- 30. Wie erstelle ich einen benutzerdefinierten Transformer aus einer UDF?
Ich halte drupal_execute tatsächlich für ein Risiko, da es die Formular- und Knoten-APIs mischt, und eine der Konsequenzen ist, dass es in einer Schleife nicht gut funktioniert, was oft beim programmgesteuerten Erstellen von Knoten erforderlich ist. Mit einigen contrib-Modulen kann es erforderlich sein, aber es ist im besten Fall eine Problemumgehung. – FGM