CakePHP - 使用Form-> radio包装div和fieldset的广播和标签

时间:2014-03-26 09:25:57

标签: html cakephp

任何可以帮助我解决这个问题的cakePHP大师。我试图在循环中生成此标记块。我的想法是,我不必手动编写每个字段,同时保持项目蛋糕的方向。

这是我想要的Html(基本上):

<fieldset>
   <div>
      <label><span></span></label>
      <div>
         <div>
            <label><input type="radio"></label>
         </div>
         <div>
            <label><input type="radio"></label>
         </div>
      </div>
   </div>
</fieldset>

简单吧? (错误的)

我正在尝试使用Form helper,如此

foreach($my_questions as $key => $quest){
        $attributes = array(
            'between' => "<label><span>{$quest}<span><label>",
            'separator' => '</div><div class="radio inline">',
            'format' => array('after', 'input', 'between', 'label', 'before', 'error' )
        );
        echo '<fieldset>';
        echo $this->Form->radio($key, $options,$attributes);
        echo '</fieldset>';
}

我确信我错过了一些东西,或者我很简单就能做到这一点。任何帮助表示赞赏。越快越好。非常感谢

2 个答案:

答案 0 :(得分:1)

您应该使用element作为字段集。因此,创建一个像app/View/Elements/radio_fieldset.ctp这样的文件,将字段集HTML添加到其中,在其中放置一个foreach以循环插入要插入的数组,例如:

<fieldset>
   <div>
      <label><span><?php echo $question; ?></span></label>
      <div>
         <?php foreach ($options as $optionId => $option): ?>
         <div class="radio inline">
             <label>
             <?php echo $this->Form->input($optionId, array(
                 'value' => $option,
                 'type' => 'radio'
             )); ?>
             </label>
         </div>
         <?php endforeach; ?>
      </div>
   </div>
</fieldset>

确保在Controller中设置所有问题/选项。 然后从您的视图中,将问题和选项推送到元素,如下所示:

echo $this->element('radio_fieldset', compact('questions', 'options'));

上面的代码肯定需要进行一些调整以适应您的具体情况,但它应该让您了解如何在更多的&#34; Cake-ish&#34;方式。

答案 1 :(得分:1)

我最接近的是:

    echo '<fieldset><div>';
    echo '<label><span>'.$quest.'</span></label>';
    echo $this->Form->input($key, array(
    'before' => '<div>',
    'after' => '</div>',
    'between' => '--between---',
    'separator' => '</div><div>',
    'legend' => false,
    'options' => array('Yes', 'No'),
    'type' => 'radio'
    ));
    echo '</div></fieldset>'; 

我不完全确定它是最好的方式,还是更正确的,但它对我有用,几乎可以满足我的需要!诀窍是将图例设置为false以删除创建字段集和图例的自动化,然后能够为分隔符设置开始和结束标记。

这是结果! Gotta Love Cake

<fieldset>
   <div>
     <label><span>Got any questions?</span></label>
     <div class="input radio">
       <div>
         <input type="hidden" name="data[q_3]" id="q_3_" value="">
         <input type="radio" name="data[q_3]" id="Q30" value="0">
         <label for="Q30">Yes</label>
       </div>
       <div>
         <input type="radio" name="data[q_3]" id="Q31" value="1">
         <label for="Q31">No</label>
       </div>
    </div>
   </div>
</fieldset>