Support for Drupal 7 is ending on 5 January 2025—it’s time to migrate to Drupal 10! Learn about the many benefits of Drupal 10 and find migration tools in our resource center.
By gInverted on
Hi
Ive got a proper working module but if I use hook_forms() function it doens't insert the 'type' in the type field in the node table.
This is how my code looks:
preparing drupal_get_form
global $user;
$node=new stdClass();
$node->uid=$user->uid;
$node->type='my_node_type';
$output=drupal_get_form('my_node_type_node_form0',$node)
echo $output;
my hook_forms function
my_node_type_forms(){
$args=func_get_args();
$form_id=$args[0];
$forms=array();
if(strpos($form_id, 'my_node_type_form')===0){
$forms[$form_id]=array('callback'=>'my_node_type_form');
}
return $forms;
}
I guess I have to add arguments to $forms array so it still know which node type its handling? I tried $forms[$form_id]=array('callback'=>'my_node_type_form', 'callback arguments'=>array('type'=>'my_node_type'))
But its no use.
Comments
To add to he previous post
To add to he previous post when using hook_forms() the hook_insert function is not even called. I just calls a core funciton to save the node but without the type.
...
I don't know what you're trying to achieve.
Whatever, "the form function" doesn't equal "hook_form". These two are very different. Your hook_form is called by the real form function, which is implemented by Drupal and does quite a lot of things.
Thanks for your time. Im
Thanks for your time. Im aware of the hook_form(s) difference. I used hook_forms to map form_ids because I create a lot of forms from one builder function. Altough the form_ids are indeed correct mapped, the $forms return in hook_forms doesn't contain any node type data. And maybe it shouldn't. But after using the hook_forms function it is like the node builder function doesn't know what node type it is handling hence it gives a blank "" node type.
...
No, no. I was speaking of hook_form, not of hook_forms ;-)
When Drupal is asked to show a node form, the following happens:
What you're trying to do is to replace Drupal's node_form() with your own function. You shouldn't do that because node_form() does quite a few things that are needed in order to make the node system work at all. You shouldn't touch these low-level things.
What are you trying to achieve? I'm not sure you've told us. In other words, what's the problem that drove you to do what you're doing?
...
I indeed have a module which implements a node type. Which is populated by a node form (structured by hook_form). My intention is to display this form on a page. Ive no problem establishing that. But since I need multiple instances of the same form on this page I need to call hook_forms() to give unique ids to every form. Otherwise they will conflict with each other.
My problem is:
when using hook_forms() a forms variable is populated. Above called as $forms. When this $forms variable gets populated the form gets saved with all data except for the node type. So what you see in the node table is that every field is populated correctly except for the `type`field. This one stays blank.
Maybe I have to add something to the `callback arguments` in $forms. Just like there`s a callback value. Ive tried everything but I can`t see to get the node type through.
Hope you understand.
...
This should be 'node_form', not 'my_node_type_form'. I explained why.
You shouldn't need to pass the node type as parameter. It's in the node object already, and Drupal sees it. (To be exact, it's node_form() that sees it, and if it equals 'my_node_type', it calls your my_node_type_form() to complete the form.)
(BTW, I once published code very similar to yours. The comment about ['#submit'] isn't relevant in your case.)
...
That indeed solved the problem!
Ive nowhere found that information. I couldn't deduct that from the info in the documentation or on other tutorial websites.
http://api.drupal.org/api/function/hook_forms
http://www.gtrlabs.com/blog/dayre/drupal_5_how_to_process_multiple_insta....
However, now emerges a new obstacle. Hook_alter is not called. I used that function to unset the revision menu options et cetera.
Thank you very much.
..
Posted too fast. The form_id is ofcourse changed. Have to alter my switch statement.
Again thanks for your enlightening answers.