Ich suche nach einer Möglichkeit, ein Formular zum Hinzufügen eines Knotens in eine Zielseite einzubetten. Ich habe Form Block verwendet , aber es scheint viele Fehler zu bringen, da ich eine Entwicklungs-Snapshot-Version verwendet habe.
19
Antworten:
Sie können verwenden:
quelle
node_add()
undefinierte Fehlermeldung erhalten, sollten Sie dieseif (!function_exists('node_add')) { module_load_include('inc', 'node', 'node.pages'); }
am Anfang hinzufügen . Diese Informationen stammen von hier: ( kahthong.com/2012/01/embed-drupal-node-form-anywhere )Obwohl die Antwort von Daniel Wehner absolut richtig ist und funktioniert, wollte ich zwei häufige Probleme hinzufügen, mit denen ich bei diesem Ansatz konfrontiert war, sowie Problemumgehungen, wie ich diese Probleme bewältige. Erst mein Code, dann die Erklärungen:
Warum habe ich das so gemacht, anstatt Daniels einfach
node_add
?Problem 1: Die
node_add()
Funktion ändert den Seitentitel in "Knotentyp erstellen" . Dies ist in der Funktion fest codiert.Problemumgehung 1: Anstatt die
node_add
Funktion zu verwenden, habe ich den Code kopiert und den entferntdrupal_set_title
. Der obige Code ist derselbe Code wie dienode_add
Funktion, mit Ausnahme dieser einen Zeile.Problem 2: In der eingebetteten Form funktionierten einige Ajax-Funktionen nicht. Wenn Sie zum Beispiel ein Feld haben, das unbegrenzte Werte haben kann, so dass Sie eine Schaltfläche "Anderes Element hinzufügen" haben, oder wenn Sie ein Upload-Dateifeld in Ihrem Formular haben, funktionieren diese nicht.
Problemumgehung 2: Implementieren Sie in Ihrem benutzerdefinierten Modul
hook_menu_alter()
für Ajax-Aufrufpfade und schließen Sie einnode.pages.inc
.quelle
function YOURMODULE_form_NODETYPE_node_form_alter(&$form, &$form_state) { form_load_include($form_state, 'inc', 'node', 'node.pages'); }
Wenn ich den akzeptierten Antwortcode verwende ...
... innerhalb einer Seitenrückruffunktion führt
print drupal_render..
dies zu einer völlig unmotivierten (kaputt aussehenden) Seite.Also habe ich stattdessen einfach
return
Folgendes herausgegeben$form
:quelle