Thanks for responding José.

To address the first message, i understand i have to provide the attributes 
if i build the elements separately. That's what i thought i was doing. The 
first argument of label() is the [for] attribute (notice i didn't provide 
any options to label() except 'escape'=>false to render the inner HTML 
correctly). The variable i set previous to that gets the _domId() 
treatment. Then in the checkbox call, the $attrId variable is untouched for 
[id]. The _domId() method isn't public, so i can't treat my variable when 
using it as the [id]. The result is it doesn't match the label's [for]. It 
seems like the [id] attribute should always get the _domId() treatment, but 
currently it looks like _domId() is only applied to the auto-generated [id]. 
If i provide my own, the auto-generated is skipped, and mine isn't 
converted - and thus match the label's [for].

Also, as i noted in my original, i tried using just the checkbox call with 
a 'label' key, and the label was instead used as an attribute, no tag was 
generated to wrap the checkbox. It may have been unclear in the way i 
posted it, because it was a secondary issue. 

This:
$this->Form->checkbox('checkboxName', ['label' => 'Some Checkbox']);
or
$this->Form->checkbox('checkboxName', ['label' => ['text' => 'Some 
Checkbox']]);

Produces:
<input type="checkbox" name="checkboxName" label="Some Checkbox">
rather than:
<label for="checkbox-name"><input type="checkbox" id="checkbox-name" 
name="checkboxName">Some Checkbox</label>

The other inputs don't seem to have that label problem, but i don't know if 
checkbox is the only one doing this (or why).

The basic structure i'm trying to achieve is something like:
<div>
    <label for="associated-checkbox-1">
        <input type="checkbox" id="associated-checkbox-1" 
name="associated[checkbox][1]">
    </label>
    <input type="text" name="associated[checkbox][1][value]">
</div>

So, getting to your second message: since the label tag wasn't being 
generated, and because i needed a little extra customization (the text 
input is generated/required for some of the checkboxes), i went with 
building the elements separately. The Form helper is very flexible & i'd 
like to use it's capabilities, but i wasn't sure how to get the results i 
needed using the templating system (especially the additional text input).

Which brings me back to my question: if i'm providing the attributes 
myself, but Form helper is converting some of them with _domId() but not 
others, how do i get the [for] to match the [id] (and both be DOM-valid)?

Thanks!
-joe


On Tuesday, 2 December 2014 03:03:46 UTC-5, José Lorenzo wrote:
>
> Why not use the form tempting system instead? The Form helper is very 
> flexible in the way that it allows you to create your html
>
> On Tuesday, December 2, 2014 9:01:06 AM UTC+1, José Lorenzo wrote:
>>
>> If you use label() and checkbox() separately, you re responsible for 
>> passing the correct attributes to those 2 functions. For example, for 
>> label() you will have to provide the 'for' attribute and for checkbox() the 
>> 'id' attribute.
>> When using the input() function, the label and the checkbox will be 
>> generated for you with a matching id for both tags
>>
>> On Tuesday, December 2, 2014 5:21:47 AM UTC+1, Joe Theuerkauf wrote:
>>>
>>> i'm a little confused about how labels & inputs are assigned for/id 
>>> pairs in FormHelper.
>>>
>>> Here's the code i have (it's inside a foreach of an entity collection):
>>>
>>> $attrId = 'Listing.ItemAttr.' . $attr->id;
>>> echo
>>>   $this->Html->div('columns small-16 medium-8',
>>>     $this->Form->label($attrId, // [for] attribute
>>>       $this->Form->checkbox(
>>>         $attrId, // [name] attribute
>>>         [
>>>            'id' => $attrId, // [id] attribute - if i skip this for 
>>> checkbox inputs, i don't get an [id] attribute.
>>>            // 'label' => $attr->name >> turns into <input 
>>> type="checkbox" label="Attribute Name">
>>>            // other checkbox attributes
>>>         ]
>>>       ) . $attr->name,
>>>       [
>>>          'escape' => FALSE
>>>       ]
>>>     ) // end label
>>> );
>>>
>>> The resulting HTML:
>>>
>>> <div class="columns small-16 medium-8">
>>>   <label for="listing-itemattr-3">
>>>     <input type="checkbox" id="Listing.ItemAttr.3" name="
>>> Listing[ItemAttr][3]">Attribute Name
>>>   </label>
>>> </div>
>>>
>>> The label passes the [for] attribute through FormHelper::_domId, which 
>>> i'd expect. But the [id] attribute doesn't appear to get the same 
>>> treatment. i changed the checkbox() call to input() and the same ID 
>>> string was assigned. It looks like an auto-generated ID is passed through 
>>> _domId, but that only gets into the attributes if 'id' isn't already 
>>> set in that array.
>>>
>>> i also discovered that in the checkbox() method, a 'label' key is 
>>> turned into an attribute of the input, not used to generate a wrapping 
>>> <label> element as with most other inputs. Peculiar. So i'm doing this 
>>> manual structure (which is fine, i also need to customize some other parts 
>>> of the HTML anyway). 
>>>
>>> *Question 1*: In FormHelper::input(), shouldn't the ID attribute be 
>>> adjusted with _domId *after* the $options array is complete? Or is 
>>> there an issue in checkbox() that it's not outputting the generated ID 
>>> to HTML?
>>>
>>> *Question 2*: Any suggestions how to get the wrapping label's [for] to 
>>> match the checkbox's [id] until one of the above is addressed?
>>>
>>> Thanks.
>>> -joe t.
>>>
>>

-- 
Like Us on FaceBook https://www.facebook.com/CakePHP
Find us on Twitter http://twitter.com/CakePHP

--- 
You received this message because you are subscribed to the Google Groups 
"CakePHP" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/cake-php.
For more options, visit https://groups.google.com/d/optout.

Reply via email to