Today I needed to port Node Limit to Drupal 7, which was an easy task. Node Limit for D6 is a well written module by Stefan Auditor, which makes the porting process easier.
While doing it I noticed that the form_alter he was making to the Node settings page/form included no submit handler, which wasn't a surprise, since most of the values end up then being a variable of the form "field-namenode-type", which in this case is "comment-limit_node-type". But some questions came up:
- is everything then becoming a variable?
- if I add my own _submit handler, how do I stop the node module from converting my form fields to variables?
And the answer was again simple, just unset the $form_state['values']['field-name'] value, but it needs some considerations, here is option 1:
- Have your own _submit handler (obvious, right? well, worth mentioning)
- Ensure your _submit runs before the default one.
- Do whatever you need to do with your data.
- Unset the value here:
unset($form_state['values']['field-name']);
And that might bring some funny things happening, like saving values when a node type is about to be deleted (which you don't want to do, because you don't need them anymore), since that happens in the default _submit handler. So here it is option 2:
- Have your own _validate AND _submit handlers
- In you _validate
- move your data from
$form_state['values']['field-name']to$form_state['WHATEVER']['field-name'] - unset your data here:
unset($form_state['values']['field-name']);
- move your data from
- In your submit, which runs in the normal order
- Use
$form_state[WHATEVER]['field-name']instead of$form_state['values']['field-name']
- Use
- Nothing here!
I like the second option better, seems more elegant, but hey, there is the first one just in case.
The original conversation
Earlier comments are hosted by Disqus. Loading them connects to Disqus and may use cookies and tracking.