Create an account

Very important

  • To access the important data of the forums, you must be active in each forum and especially in the leaks and database leaks section, send data and after sending the data and activity, data and important content will be opened and visible for you.
  • You will only see chat messages from people who are at or below your level.
  • More than 500,000 database leaks and millions of account leaks are waiting for you, so access and view with more activity.
  • Many important data are inactive and inaccessible for you, so open them with activity. (This will be done automatically)


Thread Rating:
  • 329 Vote(s) - 3.53 Average
  • 1
  • 2
  • 3
  • 4
  • 5
How to display node/add/sometype form on another page?

#1
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, all content associated with this Item should also be displayed. Additionally depending on roles, certain forms to make Bids, ask Questions and replay Answers should be display.

How to achieve this? Should I have separate node type for each type? Or should I treat some subtypes like Questions and Answers as comments? Should I use some well-known modules for this?

I am using Drupal 7 and I tried to write a custom module but I didn't get it working properly.
Reply

#2
To get a node edit form, you need to include [node.pages.inc][1].

<?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);
?>


[1]:

[To see links please register here]

Reply

#3
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 = '';
Reply

#4
Thomas's answer looks good to me: Formblocks and perhaps automatic nodetitles. I think you could expand on that with <a href="http://drupal.org/project/nodereference_url">Nodereference URL Widget</a> -- using nodereferences rather than comments, and letting that module do the work of keeping child-nodes connected to their parent.
Reply

#5
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',
Reply

#6
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
);
Reply

#7
// Drupal 7
// Embed node creation form on a custom page inside module.
module_load_include('inc', 'node', 'node.pages');
$form = node_add('node_machine_name');
return drupal_render($form);
Reply

#8
The Module [Form Block][1] 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][2].


Update for 2014: If adding a block without coding is preferred by anyone you may wish to check out [Advanced Form Block][3] 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.


[1]:

[To see links please register here]

[2]:

[To see links please register here]

[3]:

[To see links please register here]

Reply

#9
I am reproducing the solution which worked for me on my case. it is available as an answer on Drupal.org and it may help others with the same problem I was experiencing.

The answer is available here:

[To see links please register here]

.

I am copying-pasting it below:

in your custom callback OR in a hook_form_alter, call either...

<?php
form_load_include($form_state, 'inc', 'node', 'node.pages');
?>

...OR...

<?php
form_load_include($form_state, 'inc', 'user', 'user.pages');
?>

...depending on whether the core Drupal form you're loading is a node form or a user form.
Reply

#10
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;
}
Reply



Forum Jump:


Users browsing this thread:
1 Guest(s)

©0Day  2016 - 2023 | All Rights Reserved.  Made with    for the community. Connected through