How to display node/add/sometype form on another page?

后端 未结 9 975
故里飘歌
故里飘歌 2020-12-07 22:41

The whole problem is following:

Lets say we have Items, Items can have Bids, Items can have Questions and Question can have Answer.

When an Item is displayed

相关标签:
9条回答
  • 2020-12-07 23:15

    This is how I solved the problem:

    In my hook_menu

    $items['add-visiteur'] = array(
      'title' => 'Add',
      'page callback' => 'add_visiteur',
      'access arguments' => array('access content'),
      'type' => MENU_CALLBACK,
    );
    

    and my callback function

    function add_visiteur() {
      module_load_include('inc', 'node', 'node.pages'); 
      // which nodeform you want
      $node_type = 'visiteur';
      $form_id = $node_type . '_node_form';
      // maybe add current users info
      global $user;
      // create a blank node
      $node = new stdClass;
      $node->uid = $user->uid;
      $node->name = (isset($user->name) ? $user->name : '');
      $node->type = $node_type;
    
      // Invoke hook_nodapi and hook_node
      node_object_prepare($node);
    
      $output = drupal_get_form($form_id, $node);
      return $output;
    }
    
    0 讨论(0)
  • 2020-12-07 23:16

    To get dobeerman's example (the accepted answer) to work in d7, add 'language' => LANGUAGE_NONE and cast the $node array into an object. i.e.:

    $node = (object)array(
      'uid' => $user->uid,
      'name' => (isset($user->name) ? $user->name : ''),
      'type' => $node_type,
      'language' => LANGUAGE_NONE
    );
    
    0 讨论(0)
  • 2020-12-07 23:19

    The Module Form Block is the easiest way to embed a node form on a page. Then I would use views with a block display and an argument to show a tabular listing of these related nodes.

    Although the Drupal 7 comment module is built on fields it really isn't quite flexible enough for non comment like things. If you want your sub-type to have a title and body then comments is probably the way to go. If you only want custom fields then a node is the way to go and possibly using something like Automatic Nodetitles.

    Update for 2014: If adding a block without coding is preferred by anyone you may wish to check out Advanced Form Block module, which adds a few features to your standard blocks (you can add as many as you like, make them all submit via AJAX and even select which fields you want). Unlike the Form Block module it is still actively maintained for Drupal 7.

    0 讨论(0)
  • 2020-12-07 23:24

    To get a node edit form, you need to include node.pages.inc.

    <?php
      // required for Drupal 6
      module_load_include('inc', 'node', 'node.pages'); 
      // which nodeform you want
      $node_type = 'YOURNODETYPE';
      $form_id = $node_type . '_node_form';
      // maybe add current users info
      global $user;
      // create a blank node
      $node = array(
        'uid' => $user->uid,
        'name' => (isset($user->name) ? $user->name : ''),
        'type' => $node_type,
      );
      // Invoke hook_nodapi and hook_node
      node_object_prepare($node);
      // Or you can also use an exiting node, for example
      // $node = node_load(123);
      // and the display the form:
      $output = drupal_get_form($form_id, $node);
    ?>
    
    0 讨论(0)
  • 2020-12-07 23:24

    In Drupal 7 the blank node needs to be created as an object (not an array).

      $node->uid = $user->uid;
      $node->name = (isset($user->name) ? $user->name : '');
      $node->type = $node_type;
      $node->language = '';
    
    0 讨论(0)
  • 2020-12-07 23:26
    module_load_include('inc', 'node', 'node.pages');
    
    $form = node_add('nodetype');
    $output = drupal_render($form);
    

    If your node form has a file upload widget, you should add the following lines to the menu array:

    'file path' => drupal_get_path('module', 'node'),
    'file' => 'node.pages.inc',
    
    0 讨论(0)
提交回复
热议问题