Ola,
Je me retrouve à un problème, à l'aide des form Helper de Cake, j'aimerai creer une série de bouton radio sur ce schema :

<div class="radio">
   <input type="radio" id="s8" name="optradio" checked>
   <label for="super8"><span class="radioIcon"></span>s8</label>    
</div>
<div class="radio">
   <input type="radio" id="s9" name="optradio" checked>
   <label for="super8"><span class="radioIcon"></span>s9</label>    
</div>

etc
Avec mon htmlHelper de cake j'ai :

$this->Form->radio(
                'originals',
                [
                    ['value' => 's8','class' => 'radioOriginal', 'id' => 's8', 'text' => 'sssss8','checked'=>'checked'],
                    ['value' => 's9','class' => 'radioOriginal', 'id' => 's9', 'text' => 'sssss9'],
                    ['value' => 's10','class' => 'radioOriginal', 'id' => 's10', 'text' => 'sssss10'],
                    ['value' => 's11','class' => 'radioOriginal', 'id' => 's11', 'text' => 'sssss11'],
                    ['value' => 's12','class' => 'radioOriginal disable', 'id' => 's12', 'sssss12'],
                ]
            );

Je cherche donc à integrer une div englobante et un span à l'interieur du label :/

Voila, si quelqu un peut m'indiquer une idée de solution...
Mercizavous :)

ps : vu qu'il existait un plug in pour intergrer bootstrap à cake, je me pencherait bientôt sur la question :)

4 réponses


Merci pour ton retour. Du coup il n y a pas de solution sans passer par l installation d un plug in ?

Bonjour,
tu n'as pas besoin d'installer un plugin, il y a deux solutions:
1- extend le FormHelper et créer une method par exemple myRadio(...)qui génère du html dynamiquement, dans ton cas un simple boucle foreach fera l'affaire.
2- Continuer à utiliser FormHelper::radio(...) par défaut de cake, créer un RadioWidget dans src/View/Widget/, créer aussi un ficher form_tpl.php dans le dossier config pour écraser la clé radioWrapper du template par défaut utilisée pour générer le html des input de type radio, dans ton AppController(ou bien où tu fais $this->loadHelper(['Form' => $config])), tu force la $config:

    // dans AppController.php par exemple
    public $helpers = [
          'Form' => [
              'templates' => 'form_tpl',
              'widget' => [
                  'radio' => ['App\View\Widget\RadioBoxWidget']
              ]
          ]
    ];

Pour plus d'information https://book.cakephp.org/3.0/fr/views/helpers/form.html#personnaliser-les-templates-que-formhelper-utilise

Merci Flashios, j'ai trouvé cette solution en fouillant tes propositions !
<?= $this->Form->input('originals', [
'type' => 'radio',
'options' => [
['value' => 's8','class' => 'radioOriginal', 'id' => 's8', 'text' => 's8','checked'=>'checked'],
['value' => 's9','class' => 'radioOriginal', 'id' => 's9', 'text' => 's9']
],
'templates' => [
'nestingLabel' => '{{hidden}}{{input}}<label{{attrs}}><span class="radioIcon"></span>{{text}}</label>',
'radioWrapper' => '<div class="radio">{{label}}</div>',
'formGroup' => '{{input}}'
]
]);
?>

Je trouve qu'il est compliqué de ce servir du book tellement il est complet :/ et l'API me fais peur... Moi qui apprend seul, j'affirme la compléxité des documentations, disons qu'on y arrive mais à quel prix ???
N'y a t il pas des tutos ou choses comme ca pour savoir comment aborder des API ?
En tous les cas merci des vos retours, c'est cool :)
^^