2015-12-21 1 views
2

Hew Я написал обычный bootstrap css для полей формы. Но также применительно к скрытым полям. Как ограничить скрытые поля в cakephp 3.x bootstrap.cakephp 3.0 hidden filed bootstrap issue

$myTemplates = [ 
     //'nestingLabel' => '<label{{attrs}}>{{text}}</label>{{input}}{{hidden}}', 
     'inputContainer' => '<div class="form-group order-status">{{content}}</div>', 
     'checkboxContainer' => '<div class="checkbox">{{content}}</div>', 
     'label' => '<label class="col-sm-2">{{text}}</label>', 
     'input' => '<div class="col-md-3"><input type="{{type}}" name="{{name}}" class="form-control" {{attrs}} /></div>', 
     'select' => '<div class="col-md-3"><select name="{{name}}"{{attrs}} class="form-control">{{content}}</select></div>',   
     'textarea'=> '<div class="col-md-8"><textarea name="{{name}}" {{attrs}} class="form-control"></textarea></div>',   
    ]; 
$this->Form->templates($myTemplates);?> 
<fieldset> 
    <legend><?php echo __('{0} Promotion', $edit ? 'Edit' : 'Add'); ?></legend> 
    <?php 
     if($edit) { 
      echo $this->Form->hidden('id'); 
      echo $this->Form->input('active', array('type' => 'checkbox','div'=>false)); 
     } else { 
      echo $this->Form->input('active', array('type' => 'checkbox','checked' => true)); 
     } 
     echo $this->Form->input('name'); 
     echo $this->Form->input('description'); 
     if($edit) { 
      echo $this->Form->input('promotion_type', array('type' => 'select', 'options' => Configure::read('Sidecart.ModelOptions.Promotion.promotion_types'), 'empty' => '-- Select One --', 'disabled' => true)); 
      echo $this->Form->hidden('promotion_type'); 
     } else { 
      echo $this->Form->input('promotion_type', array('type' => 'select', 'options' => Configure::read('Sidecart.ModelOptions.Promotion.promotion_types'), 'empty' => '-- Select One --')); 
     } 
      ?> 

ответ

0

В CakePHP 3.0 вы можете сделать это с помощью Widgets.

Создать src\View\Widget\HiddenWidget.php:

<?php 
namespace App\View\Widget; 

use Cake\View\Widget\BasicWidget; 
use Cake\View\Form\ContextInterface; 
use Cake\View\Widget\WidgetInterface; 

class HiddenWidget extends BasicWidget implements WidgetInterface { 

    public function render(array $data, ContextInterface $context) { 
    $data += [ 
     'name' => '', 
    ]; 
    return $this->_templates->format('hidden' /* <-- Define the template name */, [ 
     'name' => $data['name'], 
     'attrs' => $this->_templates->formatAttributes($data, ['name']) 
    ]); 
    } 

} 

Затем в файл представления:

<?php 
$templates = [ // Define your templates 
    'hidden' => '<input type="hidden" name="{{name}}"{{attrs}}/>', 
    'input' => '<div class="col-md-3">' . 
       '<input type="{{type}}" name="{{name}}" class="form-control" {{attrs}}/>' . 
       '</div>' 
]; 

$this->Form->templates($templates); // Update the templates in FormHelper 
$this->Form->addWidget('hidden', ['Hidden']); // Add the HiddenWidget to FormHelper 

echo $this->Form->hidden('id'); // Renders with the 'hidden' template 
echo $this->Form->input('name'); // Renders with the 'input' template 

С другой стороны, вы можете сделать обратное и создать BsFormControlWidget (s) вместо этого. Таким образом, поля ввода (скрытые и видимые) сохраняют свои «готовые» функции. Ваша пользовательская реализация будет сидеть рядом с -Cake, в общем, кажется, предпочитает строить «сверху-сверху», а не morphed. Кроме того, теперь ваши виджеты будут более легко использоваться повторно в других проектах.