drupal6 error ajax inline - css

How can i set a custom inline error messages to form in a node (include cck and all the stuff) ?
I saw several modules, but none of them give a 100% solution, because there is no CCK-support, upload-support, error messages etc.

I'm guessing you are looking to do custom validation on a CCK field?
In that case you can add your function by creating a module and implementing hook_form_alter() and creating your own validation function.
function mymodule_form_alter(&$form, &$form_state, $form_id) {
switch ($form_id) {
case 'story_node_form': // Or whatever content type you're checking
// Simply add an additional link validate handler.
$form['#validate'][] = 'mymodule_field_validate';
break;
}
}
function mymodule_field_validate($form, &$form_state) {
if (!somevalidatorfunctionorother($form_state['values']['my_custom_field']) {
form_set_error('my_custom_field', t('Text of your error message.'));
}
}
I adapted the code above from this post: http://fleetthought.com/adding-additional-cck-validation-function-field-using-hookformalter

Related

Change form data after submit in drupal

in some content type form I added a checkbox. When this checkbox is checked I want to remove some of the submitted data.
To do so I created a custom module (my_module.module):
function my_module_form_alter(&$form, &$form_state) {
// ...
$form['#submit'][] = 'my_module_form_alter_submit';
}
function my_module_form_alter_submit($form_id, $form_values) {
drupal_set_message(t('Submit Function Executed!'));
}
How can I tell this module to refer only to the form of a certain containt type? And how can I remove data when it is submitted?
Assuming you are altering a node edit form, you can either conditionally add the submit callback such as (in your hook_form_alter):
if(isset($form['#node']) && $form['type']['#value'] == 'page') {
$form['#submit'][] = 'my_module_form_alter_submit';
}
or, you could check the $form argument in the submit callback in a similar fashion.
You are missing the third argument to the hook_form_alter which should be $form_id, and your submit callback should take the arguments such as:
function my_module_form_alter_submit($form, &$form_state) { ... }
See also:
http://api.drupal.org/api/drupal/developer%21hooks%21core.php/function/hook_form_alter/6
http://api.drupal.org/api/drupal/developer%21topics%21forms_api.html/6
To remove data after the submit, in your form_alter function, just use unset() on the form field. unset($form['my-field']);

How to make file attachment required for a content type in Drupal

I want to make the file attachment option as a required field for a specific content type, user could not submit the node form without an attachment.
the way i am doing this is not working, pls guide me if i am doing it wrong way.
function ims_form_alter(&$form, &$form_state, $form_id) {
switch ($form_id) {
case 'media_content_node_form':
unset($form['buttons']['preview']);
if(is_numeric(trim(arg(3))))
{
$arg_nid = arg(3);
$form['field_media_model']['#default_value'][0]['nid'] = $arg_nid;
}
switch($form['#id'])
{
case "node-form":
$form['attachments']['#required'] = true;
break;
}
break;
}
}
I find that life in Drupal is easier when using FileField instead of Drupal's core Upload module. With FileField you can create a CCK field (FileField) on your content type and make that field required just like any other CCK field. This approach doesn't require writing a single line of code.
However, if you must use Drupal's core Upload module then you can use hook_form_alter to accomplish this, for example:
function my_module_form_alter(&$form, &$form_state, $form_id) {
switch ($form['#id']) {
case "node-form":
switch ($form['type']['#value']) {
case "my_node_type":
$form['attachments']['#required'] = true;
break;
}
break;
}
}
Yes it is possible.
Check for the form id. Usually you can get the name by inspecting the form and getting the id. Replace '-' by '_'. This gives you the form id for the form.
Put a conditional check if form id == . Use krumo($form) (enable devel module before this step).
krumo() give you the list of all the field names. Now, $form[<field_name>]['#required'] = 1;
Hope this helps!!

Drupal: run custom code when a form is submitted

how can I run specific code when a form is submitted in Drupal ?
I'm using hook_form_alter to edit the form, but I actually need to collect the data inserted by user and run code when the user click on "Save / Register" etc
thanks
You can add callbacks to the submit array. It goes something like this:
function myform_form_alter(&$form, &$form_state, $form_id) {
if($form_id == 'some_form') {
$form['#submit'][] = 'mycallback';
}
}
function mycallback(&$form, &$form_state) {
// do stuff
}
Try adding the following function:
function myform_form_submit($form_id, $form_values){
print_r($form_values);
// custom code
}
worked for me. Hope it helps :)

How can I get the title of a form element in Drupal?

For example, in the registration form, there is "Username" and the text field for it which has the input type="text" name="name" ....
I need to know how can I get the title from the input field's name.
I'm expecting a function like:
$title = get_title_for_element('name');
Result:
assert($title == 'Username'); // is true
Is there something like this in Drupal?
Thanks.
You have the form and the form state variables available to your validation function. You should use form_set_error() to set the error.
There is no function that I am aware of which will map from the values array to the form array. But it is not dificult to work it out. Understanding the form data structure is one of the key skills you need when building drupal.
In this case the form in question is generated (in a roundabout way) by user_edit_form, you can see the data structure in there.
$form['account']['name'] is the username field. and the array key for the title is '#title' as it will be in most cases for form elements.
You can do it in two different ways as I see it. Let's create a module called mycustomvalidation.module (remember to create the mycustomvalidation.info file also).
Note: The code below has not been tested, so you might have to do some minor adjustments. This is Drupal 6.x code by the way.
1) Using hook_user()
What you need is a custom module containing your own implementation of hook_user() http://api.drupal.org/api/function/hook_user/6.
<?php
function mycustomvalidation_user($op, &$edit, &$account, $category = NULL) {
if ($op == 'validate') {
// Checking for an empty 'profile_fullname' field here, but you should adjust it to your needs.
if ($edit['profile_fullname'] != '') {
form_set_error('profile_fullname', t("Field 'Fullname' must not be empty."));
}
}
}
?>
2) Using form_alter() and a custom validation function
Personally, I would go for this option because I find it cleaner and more "correct". We're adding a custom validation function to our profile field here.
<?php
function mycustomvalidation_form_alter(&$form, $form_state, $form_id) {
// Check if we are loading 'user_register' or 'user_edit' forms.
if ($form_id == 'user_register' || $form_id == 'user_edit') {
// Add a custom validation function to the element.
$form['User information']['profile_fullname']['#element_validate'] = array('mycustomvalidation_profile_fullname_validate');
}
}
function mycustomvalidation_profile_fullname_validate($field) {
// Checking for an empty 'profile_fullname' field here, but you should adjust it to your needs.
if ($field['#value'] != '') {
form_set_error('profile_fullname', t("Field %title must not be empty.", array('%title' => $field['#title']));
}
}
?>

drupal form alter

I'm developing a module which alter display of add/edit node forms. I'm a beginner in module development.
I have written following code, it is not working properly. Please tell me what's wrong with this?
function hook_form_alter(&$form, $form_state, $form_id) {
if ($form_id == 'node_form') {
drupal_set_message(t('some message.'));
}
}
This is for drupal 6.
In addition, the node add/edit forms have content-type specific IDs. so story nodes would be:
function mymodule_form_alter(&$form, $form_state, $form_id) {
if ($form_id == 'story_node_form') {
drupal_set_message(t('Editing a story node!'));
}
}
If you're looking to catch every node edit form, regardless of type, try this:
function mymodule_form_alter(&$form, $form_state, $form_id) {
if (isset($form['#node']) && $form_id == $form['#node']->type .'_node_form') {
drupal_set_message(t('Editing a node!'));
}
}
you should not call your function "hook_form_alter" but rather "yourmodule_form_alter". yourmodule should be the name of your module file, so if your module is called "hello" the function name should be "hello_form_alter".
You need to understand the hook system that Drupal uses if you want to do module development. When a hook is implemented somewhere in Drupal, it's called hook_something. The way this works is that every time a module wants to implement the hook, you need to replace the 'hook' with the 'modelname'. Drupal will know it's an instance of that hook and call it as such. Drupal also uses the same system in the theming layer, with a twist. As it will look at the different theming functions and prioritize them based on a ranking system, that enabled themes to override the way modules output data.
function hook_form_alter(&$form, $form_state, $form_id) {
if ($form_id == 'node_form') {
drupal_set_message(t('some message.'));
}
}
First you must "hook" keyword to your module keyword.. lets suppose your module name is "contact_us" then
function contact_us_form_alter(&$form, $form_state, $form_id) {
Now this function has three variable
$form
$form_id
$form_state
Most important variable during form alter is $form_id which basically note down which form is load in a page.
function contact_us_form_alter(&$form, $form_state, $form_id) {
print_r($form_id);exit; // Used to find the form id
}
after you find the form_id
function contact_us_form_alter(&$form, $form_state, $form_id) {
if($form_id=='contact_us_form')
// Do your stuff
}
Note:check you have properly write custom module and enable it.. also clear cache

Resources