Oops. Yes, i goofed. i'm looking right at it in the docs. >.< Well, here's what i did... i created an extension FormHelper class, adding a public domId function that returns the protected _domId value. Checkbox isn't generating a wrapping label, nor a DOM-valid ID, so i'm providing the field's name in dot-notation to label() & checkbox(), and calling $this->Form->domId on the name for the checkbox's id attribute. The for & id match. It's not exactly as elegant as how other inputs handle things, but i can live with it.
Thanks for the help. -joe On Wednesday, 3 December 2014 02:15:17 UTC-5, José Lorenzo wrote: > > The first argument for label is not "for", it is "fieldName".... From the > "fieldName" the "for" attribute is inferred. If you wish to provide you own > for attribute, then use label('field_name', 'Label text', ['for' => > 'field-id']); > > On Wednesday, December 3, 2014 6:14:34 AM UTC+1, Joe Theuerkauf wrote: >> >> 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 cake-php+unsubscr...@googlegroups.com. To post to this group, send email to cake-php@googlegroups.com. Visit this group at http://groups.google.com/group/cake-php. For more options, visit https://groups.google.com/d/optout.