Je cherche un moyen d'incorporer un formulaire "node add" sur une page de destination. J'utilisais le bloc de formulaire , mais il semble apporter de nombreuses erreurs car j'utilisais une version de capture instantanée de développement.
19
Réponses:
Vous pouvez utiliser:
la source
node_add()
n'est pas définie, vous voudrez l'ajouterif (!function_exists('node_add')) { module_load_include('inc', 'node', 'node.pages'); }
au début. Cette information vient d'ici: ( kahthong.com/2012/01/embed-drupal-node-form-anywhere )Bien que la réponse de Daniel Wehner soit absolument correcte et fonctionne, je voulais ajouter deux problèmes courants rencontrés avec cette approche et des solutions de contournement pour surmonter ces problèmes. D'abord mon code, puis les explications:
Pourquoi je l'ai fait de cette façon, au lieu du simple de Daniel
node_add
?Problème 1: la
node_add()
fonction change le titre de la page en Créer un «type de nœud» , c'est codé en dur dans la fonction.Solution de contournement 1: au lieu d'utiliser la
node_add
fonction, j'ai copié le code et supprimé ledrupal_set_title
. Le code ci-dessus est le même code que lanode_add
fonction, sauf à partir de cette seule ligne.Problème 2: Dans le formulaire intégré, certaines fonctions ajax ne fonctionnaient pas. Par exemple, si vous avez un champ qui peut avoir des valeurs illimitées, de sorte que vous avez un bouton «Ajouter un autre élément», ou si vous avez un champ de téléchargement de fichier dans votre formulaire, ils ne fonctionnent pas.
Solution de contournement 2: dans votre module personnalisé, implémentez
hook_menu_alter()
pour les chemins d'appel ajax et inclueznode.pages.inc
.la source
function YOURMODULE_form_NODETYPE_node_form_alter(&$form, &$form_state) { form_load_include($form_state, 'inc', 'node', 'node.pages'); }
Si j'utilise le code de réponse accepté ...
... à l'intérieur d'une fonction de rappel de page,
print drupal_render..
cela se traduit par une page complètement sans thème (d'aspect cassé).Au lieu de cela, je viens
return
de rédiger le$form
:la source