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.