CakePHP 3 changing the radio input template
Asked Answered
F

1

5

Cakephp 3 create a radio container with label -> input like that

<div class="radio">
    <label class="radio-acces-checked" for="condition-access-1">
      <input id="condition-access-1" type="radio" value="1" name="condition_access">
      Free access
    </label>
</div>
...

I would like change structure but it does not work, it's always the same strucure... Do you have an idea about how to solve my problem ?

$myTemplates = [
  'radioWrapper' => '<div class="radio">{{label}}{{input}}</div>'
];
echo $this->Form->radio('condition_access', [
      ['value' => 1, 'text' => __('Free Access')],
      ['value' => 2, 'text' => __('Payment Access')],
      ['value' => 3, 'text' => __('Reduce price')]
    ]);
Fudge answered 11/1, 2016 at 20:37 Comment(1)
Where do you set the template?Janes
J
11

You need to set the nestingLabel template:

echo $this->Form->input('condition_access', [
    'type' => 'radio',
    'options' => [
        ['value' => 1, 'text' => __('Free Access')],
        ['value' => 2, 'text' => __('Payment Access')],
        ['value' => 3, 'text' => __('Reduce price')]
    ],
    'templates' => [
        'nestingLabel' => '{{hidden}}<label{{attrs}}>{{text}}</label>{{input}}',
        'radioWrapper' => '<div class="radio">{{label}}</div>'
    ]
]);

Output:

<div class="input radio">
    <label>Condition Access</label>
    <input name="condition_access" value="" type="hidden">
    <div class="radio">
        <label for="condition-access-1">Free Access</label>
        <input name="condition_access" value="1" id="condition-access-1" type="radio">
    </div>
    <div class="radio">
        <label for="condition-access-2">Payment Access</label>
        <input name="condition_access" value="2" id="condition-access-2" type="radio">
    </div>
    <div class="radio">
        <label for="condition-access-3">Reduce price</label>
        <input name="condition_access" value="3" id="condition-access-3" type="radio">
    </div>
</div>
Janes answered 12/1, 2016 at 9:41 Comment(3)
Is there any way to place some HTML in the templates so I could do something better in labels? book.cakephp.org/3.0/en/views/helpers/… {{input}}<label{{attrs}}>{{text}} {{SOME HTML}}</label>Anthology
@PatricePoliquin You can add whatever you want in templates, as long as it does not mess up with the template engine (e.g. avoid using {{ or }}).Janes
@Janes Would it be possible for me to add additonnal HTML after each {{text}} (<label for="condition-access-1">Payment Access <b>$1.00 / month "</label>) ?Anthology

© 2022 - 2024 — McMap. All rights reserved.