Форма флажок и метка с CakePHP и Bootstrap - PullRequest
4 голосов
/ 04 марта 2012

У меня возникают некоторые проблемы при попытке получить входные данные флажков и метки для вывода правильного HTML с помощью CakePHP и Twitter Bootstrap.

Выходные данные, специфичные для Bootstrap, должны быть:

<div class="control-group">
  <div class="controls">
    <label class="checkbox">
      <input type="checkbox"> Keep me logged in
    </label>
  </div>
</div>

Однакос использованием inputDefaults, упомянутых здесь (http://stackoverflow.com/a/9496242/1247225), этот ввод формы Cake:

echo $form->input('auto_login', array(
 'type' => 'checkbox', 
 'label' => __('Keep me logged in', true)));

Выводит это:

  <div class="control-group">
    <input type="hidden" name="data[User][auto_login]" id="UserAutoLogin_" value="0" />
    <input type="checkbox" name="data[User][auto_login]" class="" value="1" id="UserAutoLogin" />
    <div class="controls">
      <label for="UserAutoLogin">Keep me logged in</label>
    </div>
  </div>

Любые идеи, как настроить этот отдельный ввод так, чтобы он выводил правильный BootstrapHTML, как и выше?

Ответы [ 10 ]

5 голосов
/ 16 марта 2013

Лучший способ управлять выводом формы или форматом вывода - передать аргумент 'format'.Попробуйте поиграть с этим:

'format' => array('before', 'label', 'input', 'between', 'after', 'error')

Я не думаю, что это документ, но, прочитав код, вы можете найти его там.

4 голосов
/ 30 января 2014

самый красивый способ сделать это это:

<?php
echo '<div class="col-lg-2">';
echo $this->Form->input('Content.checkbox', array(
'div' => array(
    'class' => 'input-group',
),
'label' => false,
'type' => 'checkbox',
'before' => '<span class="input-group-addon">',
'after' => '</span><span class="input-group-addon"><label for="ContentCheckbox">What does the fox say?</label></span>',
));
echo '</div>';
3 голосов
/ 20 января 2015

Я использую:

<?php 
echo $this->Form->input('coupDeCoeur', 
array('div' => false,
'label' => false,
'type' => 'checkbox',
'before' => '<label class="checkbox">',
'after' => '<i></i>coupDeCoeur</label>'
));
?>
2 голосов
/ 27 февраля 2014

Попробуйте следующий код:

<div class="control-group">
    <div class="controls">
        <label class="checkbox">
            <?php echo $this->Form->input('auto_login', array('type'=>'checkbox','label' => false, 'div' => false,'class'=>false,'after'=>__('Keep me logged in')));?>
        </label>
    </div>
</div>
2 голосов
/ 31 марта 2012

Вам необходимо создать виджет формы вручную для флажков вместо использования FormHelper::input.

Например:

echo '<div class="control-group">';
echo $this->Form->label('Model.field', null, array('class' => 'control-label')); 
echo '<div class="controls">';
echo $this->Form->checkbox('Model.field');
echo '</div>';
echo '</div>';
1 голос
/ 25 мая 2016

В моем случае я использовал шаблон AdminLTE с Bootstrap 3, и этот код работал для меня:

       <?php
            echo $this->Form->input('Model.fieldname', array(
                'label' => false,
                'type' => 'checkbox',
                'before' => '<label>',
                'after' => 'Field name label here</label>',
            ));
       ?>

Удачи здесь !!!

1 голос
/ 30 ноября 2014

Если вы хотите получить ответ «одна строка», я получу его:

echo $this->Form->input('Model.Field', array('class'=>'form-inline', 'after'=>'</br>'));
1 голос
/ 05 марта 2014

Вот готовое решение:

App::uses('FormHelper', 'View/Helper');
class InputHelper extends FormHelper {
    // var $helpers = array('Form', 'Html');
    public function create($model, $options = array()) {
        $options['class'] = (isset($options['class']) && $options['class']) ? $options['class'] : 'form-horizontal table';
        $options['inputDefaults'] = (isset($options['inputDefaults']) && $options['inputDefaults']) ? $options['inputDefaults'] : array(
            'div' => 'control-group',
            'label' => array('class' => 'control-label'),
            'between' => '<div class="controls">',
            'after' => '</div>'
        );
        return parent::create($model, $options);
    }

    public function input($fieldName, $options = array()) {
        $this->setEntity($fieldName);
        $options = $this->_parseOptions($options);
        if ($options['type'] == 'checkbox') {
            $options['format'] = array('before', 'label', 'between', 'input', 'after', 'error');
        }
        fdebug($options);
        return parent::input($fieldName, $options);
    }
}
1 голос
/ 07 сентября 2012

Если вы используете компонент безопасности, у вас могут возникнуть проблемы, если вы создадите свои входные данные без FormHelper::input.Если это так, попробуйте следующее:

echo "
<div class='control-group'>
    <div class='controls'>
        <label class='checkbox'>";                    
            echo $this->Form->input('Model.field', array('label' => false, 'after' => 'Model.field'))."
       </label>
    </div>
</div>";
0 голосов
/ 23 июня 2014

Вот простое решение, которое работает для меня:

CSS (МЕНЬШЕ):

input.form-control[type="checkbox"] {
    width: auto;
    height: auto;
    margin-right: 5px;
    display: inline;
}

Затем используйте помощник по формам:

echo $this->Form->input(
    'field_name',
    array(
        'div' => 'form-group',
        'class' => 'form-control',
        'type' => 'checkbox',
        'label' => array(
            'text' => 'Your label',
            'class' => 'label-checkbox'
        ),
        'format' => array('input', 'label')
    )
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...