[development] form_set_error and updating form values
Athanasios Velios
a.velios at gmail.com
Tue Feb 21 15:55:20 UTC 2012
Yes, I have tried the same code as a separate module as well. But the
behaviour was identical. In D7, I believe, you can use _form_alter in
the template.php but anyway it does not seem to make any difference.
Thanasis
On 21/02/12 12:32, Todd wrote:
> What are you using for the name space for your functions?
>
> Instead of using MYTHEME_form_alter, you should use
> {modulename}_form_alter (where "modulename" is anything, as long as it's
> not already being used by Drupal).
>
> You'll also need a .info file.
>
> So, for instance, your directory structure in /sites/all/modules will
> look like this, assuming that the module name is "velios" (your last name).
>
> velios [directory]
> + velios.info <http://velios.info> [See here for info:
> http://drupal.org/node/542202]
> + velios.module [contains the code below, using the namespace "velios"
> for your hooks. Ie, "velios_form_alter()"]
>
> Once you have all that added, you'll have to go to your modules page and
> enable it and it should alter the form properly.
>
> Regards,
> Todd
>
> On 20 February 2012 12:09, Athanasios Velios <a.velios at gmail.com
> <mailto:a.velios at gmail.com>> wrote:
>
> Sorry, I will have to accept your offer for editing as I am clearly
> missing something obvious:
>
> function MYTHEME_form_alter(&$form, $form_state, $form_id) {
> global $user;
> //alter forms but not for admin account
> if ($user->uid != 1){ //limit it for some users, let's say admin only
> //various irrelevant alterations here
> } else {
> if ($form_id == 'uc_cart_view_form') {
> //add extra registration logic
> $form['#validate'] = array('congr_afternoon___bookings');
> }
> }
> }
>
> /**
> * Extra logic
> */
> function congr_afternoon_bookings(&$__form, &$form_state){
> //check afternoon tours for a max of 2 bookings
> $congr_highlight_afternoon___fields = array();
> $congr_max_afternoon = 0;
> foreach($form['items'] as $key=>&$val) {
> if (isset($val['nid']['#value'])) {
> $node = node_load($val['nid']['#value'__]); //load the node of
> the corresponding item in the form
> if ($node->field_product_type['__und'][0]['tid'] == 476){ //if
> the associated term tid is 476
> $congr_max_afternoon = $congr_max_afternoon +
> $val['qty']['#default_value']; //add the quantity field of the item
> list to our max value
> $congr_highlight_afternoon___fields[] = $key; //also keep
> the key in an array
> }
> }
> }
> if ($congr_max_afternoon > 2) { //if the max number of quantity
> items is more than 2
> //$form_state['rebuild'] = TRUE; //TODO: I am told this is
> required because otherwise the form is not updated with the newly
> user inputted figures but it does not work...
> foreach($congr_highlight___afternoon_fields as $key=>$val) {
> //for each item in the list
> if ($key == 0) { //if it is the first one, show the full
> message which is independent of a specific quantity field
> form_set_error('','You have tried to buy
> '.$congr_max_afternoon.' items, but the maximum you can buy is 2.
> See below for a list of items which you can possibly amend.');
> form_set_error('items]['.$val,__'Please amend this item:
> '.$form['items'][$val]['title'__]['#markup'].'.');
> } else { //for the rest do not show the message only highlight
> form_set_error('items]['.$val,__'Please amend this item:
> '.$form['items'][$val]['title'__]['#markup'].'.');
> }
> }
> }
> }
>
> Thanks for looking into this.
>
> Thanasis
>
>
> On 20/02/12 16:02, Mukesh Agarwal wrote:
>
> http://api.drupal.org/api/__drupal/modules%21system%__21system.api.php/function/__hook_form_alter/7
> <http://api.drupal.org/api/drupal/modules%21system%21system.api.php/function/hook_form_alter/7>
> -- the hook takes $form as an argument passed by reference.. so
> all the
> changes you make in $form, it should get reflected in the UI..
> Please
> share your code if it does not work for you..
>
> On Mon, Feb 20, 2012 at 8:57 PM, Athanasios Velios
> <a.velios at gmail.com <mailto:a.velios at gmail.com>
> <mailto:a.velios at gmail.com <mailto:a.velios at gmail.com>>> wrote:
>
> Hm, I commented the lines in template.php and built a new module
> with the hook_form_alter and additional logic but this does
> not make
> any difference at all. Exactly the same behaviour...
>
> Thanasis
>
>
> On 20/02/12 09:25, Mukesh Agarwal wrote:
>
> Yes, Drupal is quite structured and has defined ways to
> deal with
> stuff.. template.php and hook_form_alter are for 2 different
> purposes
> and in your case writing a custom module which
> implements the
> hook is
> the right way.
>
> On Mon, Feb 20, 2012 at 2:53 PM, Athanasios Velios
> <a.velios at gmail.com <mailto:a.velios at gmail.com>
> <mailto:a.velios at gmail.com <mailto:a.velios at gmail.com>>
> <mailto:a.velios at gmail.com <mailto:a.velios at gmail.com>
> <mailto:a.velios at gmail.com <mailto:a.velios at gmail.com>>>> wrote:
>
> Do you reckon that the problem is putting the code in
> template.php
> instead of a custom module?
>
> Thanks again,
>
> Thanasis
>
>
> On 20/02/12 08:27, Mukesh Agarwal wrote:
>
> The place to implement logic based
> form_set_error should
> be in the
> validate function and not template.php .. I would
> recommend you use
> hook_form_alter
> <http://api.drupal.org/api/______drupal/modules%21system%______21system.api.php/function/______hook_form_alter/7
> <http://api.drupal.org/api/____drupal/modules%21system%____21system.api.php/function/____hook_form_alter/7>
> <http://api.drupal.org/api/____drupal/modules%21system%____21system.api.php/function/____hook_form_alter/7
> <http://api.drupal.org/api/__drupal/modules%21system%__21system.api.php/function/__hook_form_alter/7>>
>
>
> <http://api.drupal.org/api/____drupal/modules%21system%____21system.api.php/function/____hook_form_alter/7
> <http://api.drupal.org/api/__drupal/modules%21system%__21system.api.php/function/__hook_form_alter/7>
> <http://api.drupal.org/api/__drupal/modules%21system%__21system.api.php/function/__hook_form_alter/7
> <http://api.drupal.org/api/drupal/modules%21system%21system.api.php/function/hook_form_alter/7>>>>
>
> -> $form_id will indicate the form you wish to
> alter,
> and there
> you can
> add a custom validate function in
> $form['#validate'] --
> the custom
> function should then take care of form_set_error
>
> http://api.drupal.org/api/______drupal/includes%21form.inc/______function/form_set_error/7
> <http://api.drupal.org/api/____drupal/includes%21form.inc/____function/form_set_error/7>
> <http://api.drupal.org/api/____drupal/includes%21form.inc/____function/form_set_error/7
> <http://api.drupal.org/api/__drupal/includes%21form.inc/__function/form_set_error/7>>
>
>
> <http://api.drupal.org/api/____drupal/includes%21form.inc/____function/form_set_error/7
> <http://api.drupal.org/api/__drupal/includes%21form.inc/__function/form_set_error/7>
> <http://api.drupal.org/api/__drupal/includes%21form.inc/__function/form_set_error/7
> <http://api.drupal.org/api/drupal/includes%21form.inc/function/form_set_error/7>>>
> -- you need to set the element name as first
> parameter
> to make
> sure that
> the particular field is highlighted.
>
> On Mon, Feb 20, 2012 at 1:51 PM, Athanasios Velios
> <a.velios at gmail.com <mailto:a.velios at gmail.com>
> <mailto:a.velios at gmail.com <mailto:a.velios at gmail.com>>
> <mailto:a.velios at gmail.com <mailto:a.velios at gmail.com>
> <mailto:a.velios at gmail.com <mailto:a.velios at gmail.com>>>
> <mailto:a.velios at gmail.com <mailto:a.velios at gmail.com>
> <mailto:a.velios at gmail.com <mailto:a.velios at gmail.com>>
> <mailto:a.velios at gmail.com <mailto:a.velios at gmail.com>
> <mailto:a.velios at gmail.com <mailto:a.velios at gmail.com>>>>> wrote:
>
> Hello,
>
> I am trying to alter a form
> (uc_cart_view_form) with
> various
> input
> fields (Qty for products). In template.php I am
> adding some
> extra
> logic which applies across a selection of these
> fields. Once the
> logic is checked I need to display an error
> message.
> I am using
> form_set_error to show the message. The
> problem is
> that the user
> then updates the input values and updates
> the form,
> but the new
> figures are not taken into account. They are
> shown
> in the
> form, but
> not used in my template.php extra logic.
>
> drupal_set_message allows the new values to
> work but
> the message
> appears twice and it does not, obviously,
> link to
> specific
> fields in
> the form which are problematic.
>
> Setting form_state rebuild to true before
> form_set_error
> does not
> have an effect.
>
> Any ideas of what needs to be done for these
> values
> to be
> taken into
> account with form_set_error?
>
> Thanks
>
> Thanasis
>
>
>
>
> --
> Cheers,
> Mukesh Agarwal
> ______________________________________
>
>
> Innoraft Solutions <http://www.innoraft.com> || +91
> 8017220799 <tel:8017220799>
>
>
>
>
> --
> Cheers,
> Mukesh Agarwal
> ____________________________________
> Innoraft Solutions <http://www.innoraft.com> || +91
> 8017220799 <tel:%2B91%208017220799>
>
>
>
>
> --
> Cheers,
> Mukesh Agarwal
> __________________________________
> Innoraft Solutions <http://www.innoraft.com> || +91 8017220799
> <tel:%2B91%208017220799>
>
>
More information about the development
mailing list