[development] Creating multiple login blocks with, different validation rules.

Alex Bronstein alex at craftyspace.com
Fri May 14 01:05:19 UTC 2010

In Drupal 6, there are several problems with having 2 forms on a page 
using the same form id. You will probably need to implement hook_forms() 
to create a new form id (e.g., 'YOURMODULE_user_login_block_premium') 
that maps to the 'user_login_block' callback (see 
http://api.drupal.org/api/function/user_forms/6 for an example of how 
this is done). Then you can drupal_get_form() the two forms using 
different ids, and hook_form_alter() them differently based on the $form_id.

I'm hoping Drupal 7 fixes the remaining bugs with multiple instances of 
the same form on a page. I'm not sure what all of them are yet, but for 
starters: http://drupal.org/node/766146.


Anth wrote:
> Hi Earnie,
> Thanks for the answer and that's one of the things to do, but my 
> problem at the moment with that path is that in hook_form_alter there 
> doesn't seem to be anything that I can use to identify which block it 
> is.  Am I missing something obvious?
> If there is nothing in the $form then what I think I actually want to 
> do is use some code to generate the form and as I have access to the 
> $form array to put in my own validation rule or hidden $form element 
> or whatever to distinguish between the different blocks.  So I'm 
> trying to generate the user_login_block myself so I can alter the 
> $form array but can't get it to work.  In my block code if I call 
> drupal_get_form('user_login_block') for the block content everything 
> is fine but I can't alter the form object.  So I'm trying to do the 
> same steps as drupal_get_form, i.e. the code below and the user login 
> block displays but there is a bunch of stuff missing from it so it 
> doesn't actually submit.
> Am I making this harder than I need to for what I'm trying to achieve?
> Regards,
> Anthony.
>   $form_state = array();
>   $form = drupal_retrieve_form('user_login_block', $form_state);
>   drupal_prepare_form('user_login_block', $form, $form_state);
>   $block['content'] = drupal_render_form('user_login_block', $form);
> On 14/05/2010 3:44 AM, development-request at drupal.org wrote:
>> Message: 1
>> Date: Thu, 13 May 2010 08:26:46 -0400
>> From: Earnie Boyd<earnie at users.sourceforge.net>
>> Subject: Re: [development] Creating multiple login blocks with
>>     different    validation rules.
>> To:development at drupal.org
>> Message-ID:<4BEBF006.9010907 at users.sourceforge.net>
>> Content-Type: text/plain; charset=ISO-8859-1; format=flowed
>> Anth wrote:
>>> >  Hi,
>>> >  Does anyone have ideas on how to implement the function in the 
>>> subject?
>>> >  Basically I want a page with two login blocks, one for general 
>>> users and
>>> >  one for premium users. I've used multiblock to get the two blocks up
>>> >  there but I need the two different blocks to work different for the
>>> >  different user types. That is if a general user tries to login on 
>>> the
>>> >  premium login it fails and vice versa. Is there any easy way to 
>>> do this
>>> >  or do I have to recreate my forms manually?
>> You don't need to start from scratch but you do need to code using
>> hook_form_alter to add the appropriate form elements and also a
>> hook_user to capture the user operations and operate on the 
>> appropriately.
>> -- Earnie -- http://progw.com -- http://www.for-my-kids.com

More information about the development mailing list