Appeler en php le formulaire d'un node dans n'importe quelle partie de votre site

La documentation Drupal 6 n'est plus maintenue et en cours de dépublication.


Consultez le guide utilisateur Drupal en français directement sur drupal.org.

J'ai trouvé différentes versions sur internet pour appeler un formulaire de création de node sur drupal 6, beaucoup ne marchant pas toujours. J'ai donc opté pour le code suivant, avec succès, sur un site. Je n'ai pas testé ce code dans toutes les configurations possibles je ne sais donc pas si il fonctionne dans toutes les conditions.

<?php
 
global $user;
 
// quel type de node souhaitez vous ajouter ? mettre le nom machine
 
$type = 'page';
 
// sans cette inclusion, j'obtiens un message d'erreur. Quelqu'un sait pourquoi ?
 
include_once('modules/node/node.pages.inc');
 
// Il faut certaines informations de base pour afficher un formulaire d'ajout
 
$node = array(
   
'uid' => $user->uid,
   
'name' => (isset($user->name) ? $user->name : ''),
   
'type' => $type,
   
'language' => ''
 
);
  print
drupal_get_form($type .'_node_form', $node);
?>

Pour plus de facilité on pourrait packager tout ça dans une petite fonction dans un module que l'on pourrait appeler facilement de n'importe où :

<?php
function afficher_formulaire_node($type){
  include_once(
'modules/node/node.pages.inc');
  global
$user;
 
$node = array('uid' => $user->uid, 'name' => (isset($user->name) ? $user->name : ''), 'type' => $type, 'language' => '');
  return
drupal_get_form($type .'_node_form', $node);
}
?>

Ensuite il suffira de marquer par exemple dans un bloc (format d'entrée php) :

<?php
print afficher_formulaire_node('page');
?>

pour afficher le formulaire d'ajout de notre type de contenu.

Version de Drupal : 

Commentaires

note : j'aurais du mettre un module_load_include() à la place du "include_once('modules/node/node.pages.inc')"...

note 2 : le fichier node.pages.inc est requis car il n'est pas inclus systématiquement sur toutes les pages du site (seulement sur les urls de nodes) et c'est lui qui contient les fonctions liées au fonctionnement du formulaire de node. Voilà voilà.