Every site of consequence I've ever done has had a site-specific module to hold a form alter hook, a one or two entry menu hook, maybe a nodeapi hook, etc. That's very common.
You can use form_alter to modify *any* form. You just need to know how to identify which form you're after. For a node edit form, I believe the usual code is something like this:
if (isset($form['type']) && 'page_node_form' == $form_id) { ... }
That will let you modify just the add/edit form for page nodes. You can do pretty much anything you want to it; add validate and submit hooks, add prefix and suffix attributes, change default values, move things around, mutate a textfield to a select box (my favorite), etc. The only thing you need to be careful of is that the form's structure vis a vis what element names return what value doesn't change, or else the other submit and validate callbacks that are defined on it will get confused. It doesn't sound like that's an issue in your case.
The nodeapi validate op is for validating the *node*. You want to validate the *form*. The difference is rather subtle and, honestly, mostly due to legacy issues at this point. :-) You can try both ways and see which works better in this case. It will vary depending on your use case.
On Tuesday 05 June 2007, btully@about.com wrote:
thanks a bunch Larry.
so I can create a module that only includes one function - an instance of hook_form_alter?
also how would I specify which form it is I want to validate, i.e. how does Drupal know?
Can hook_form_alter also modify the form fields that have been created within CCK, such as adding extra attributes not visible through CCK's add form UI? If so this would be super as I would like to add #prefix and #suffix tags to several form elements but the CCK UI does not allow for this.
also, I found this link a few hours ago http://drupal.org/node/134289 which suggests creating a module that uses hook_nodeapi and specifying code within the 'validate' case. Can this work as well?
No, CCK does not.
However, FAPI does. :-) You can use hook_form_alter() in your own module somewhere to add another validation function to the form. In that validation function, just set a form error if you don't like what the user's doing. FAPI will take care of rejecting the form and showing it back to the user with your message. That the form is built with CCK is irrelevant to this task.
Cheers.
On Tuesday 05 June 2007, Brian Tully wrote:
hey there -
I'm looking to use CCK fields for defining if an article is exclusive to a role of users along with a specified timeframe.
Is it possible to utilize some sort of validation whereby if a role is specified then a startdate and enddate must be specified?
The trick is that if they specify a role, I need them to also specify a startdate and enddate.
Does the CCK module allow for hooks to alter the form and/or specify more advanced validation rules?
i've read about node_alter_form and hook_alter_form, but how does one use them with CCK fields?
Any advice would be greatly appreciated.
regards, brian
-- Larry Garfield AIM: LOLG42 larry@garfieldtech.com ICQ: 6817012
"If nature has made any one thing less susceptible than all others of exclusive property, it is the action of the thinking power called an idea, which an individual may exclusively possess as long as he keeps it to himself; but the moment it is divulged, it forces itself into the possession of every one, and the receiver cannot dispossess himself of it." -- Thomas Jefferson -- [ Drupal support list | http://lists.drupal.org/ ]