[development] form_api: same form called multiple times, wrong form_state values

Randy Fay randy at randyfay.com
Sun Mar 14 23:04:41 UTC 2010


Amazon Store has to do this:

function amazon_store_forms($form_id) {
  $args = func_get_args();
  $forms = array();
  if (strpos($form_id, 'amazon_store_addcart_form') === 0) {
    $forms[$form_id] = array(
        'callback' => 'amazon_store_addcart_form',
        'callback arguments' => $args[1],
    );
  }
  if (strpos($form_id, '_amazon_store_cart_quantity_form') === 0) {
    $forms[$form_id] = array(
        'callback' => '_amazon_store_cart_quantity_form',
        'callback arguments' => $args[1],
    );
  }
  return $forms;
}


Then instead of just drupal_get_form('form_id'), you have to do
drupal_get_form('form_id_plus_key'), if I remember right.

-Randy


On Sun, Mar 14, 2010 at 4:46 PM, Greg Knaddison <
Greg at growingventuresolutions.com> wrote:

> On Sat, Mar 13, 2010 at 6:53 AM, Hans Langouche
> <hans.langouche at gmail.com> wrote:
> > I have a small admin form (2 buttons and a hidden value) that is repeated
> > multiple times (each time the value is different).
> >
> > Now whenever I access $form_state['values'] from the submit function, the
> > hidden value always returns the data from the first form.  When I print
> out
> > $_POST directly I do get the correct data.
> >
> > I've been searching this and it seems this is because the form_state is
> > cached.  I couldn't find any workaround though, so for the moment working
> > with $_POST.  Anyone know the correct way to do this ?
>
> I ran into this a while ago myself. You have to do a little trickery
> with the form_id value so that each form on the page has a unique ID.
> If the forms are for users then maybe the UID will work. If they are
> for node teasers maybe the node ID. Then you create a hook_forms value
> that gets called and resets the callback to be a specific general
> function.
>
> See http://api.drupal.org/api/function/hook_forms and perhaps some of
> the modules which use it like fivestar.module and
> notifications_ui.module (I think that one does...one of the
> notifications/messaging modules does).
>
> Please ask if you need more advice - it's a tricky problem to resolve
> that cost me more time than I'd like to admit.
>
> Regards,
> Greg
>
> --
> Greg Knaddison | 303-800-5623 | http://growingventuresolutions.com
> Mastering Drupal - http://www.masteringdrupal.com
>



-- 
Randy Fay
Drupal Development, troubleshooting, and debugging
randy at randyfay.com
+1  970.462.7450
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.drupal.org/pipermail/development/attachments/20100314/07d5cc96/attachment.html 


More information about the development mailing list