Вопрос по шаблону формы (div-ка label-a)

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
tier2003
Сообщения: 34
Зарегистрирован: 2012.11.26, 19:34
Откуда: Киев

Вопрос по шаблону формы (div-ка label-a)

Сообщение tier2003 »

Всем привет.

Проблема в следующем: у label-а есть div под html-валидацию. При указании своего шаблона в параметрах формы, эти дивки оказываются вне формы, таблицы и т.п.

Код ниже:

Код: Выделить всё

$form = ActiveForm::begin([
            'options' => [
                'enctype'=>'multipart/form-data',
            ],
            'fieldConfig' => [
                'template' => "<tr><td>{label}</td><td>{input}\n{error}</td></tr>"
            ]
            ]);
    
        echo Html::beginTag('table',[ 'class' => 'form_table']);
 
А в итоге получаем список пустых div-ов каждого поля, и только потом идёт

<form>
<table>
.....


Чё-то наковырять, как подправить, пока не вышло.
Кто что подскажет?
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Вопрос по шаблону формы (div-ка label-a)

Сообщение zelenin »

покажи код, генерируемую разметку.
tier2003
Сообщения: 34
Зарегистрирован: 2012.11.26, 19:34
Откуда: Киев

Re: Вопрос по шаблону формы (div-ка label-a)

Сообщение tier2003 »

Вот исходный код.
Выше описание отличается. Как оказалось, "исходный код" и "фаербаг" (и в хроме, и в мозиле) по-разному рендерят...Не обращал раньше внимания.

В общем, проблема с дивами, которые в текущем состоянии обрамляют <tr>.

Код: Выделить всё

<form id="w0" action="/ad/edit/5" method="post" enctype="multipart/form-data">
<input type="hidden" name="_csrf" value="...">
<table class="form_table">

<div class="form-group field-product-name required">

<tr>
<td>
    <label class="control-label" for="product-name">Название</label>
</td>
<td>
    <input type="text" id="product-name" class="form-control" name="Product[name]" value="Таварчик" maxlength="255">
    <div class="help-block"></div>
</td>
</tr>
</div>

<div class="form-group field-product-price">
<tr>
    <td>
        <label class="control-label" for="product-price">Цена</label>
    </td>
    <td>
        <input type="text" id="product-price" class="form-control" name="Product[price]" value="100" maxlength="255">
        <div class="help-block"></div>
    </td>
</tr>
</div>
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Вопрос по шаблону формы (div-ка label-a)

Сообщение zelenin »

div не может обрамлять tr
tier2003
Сообщения: 34
Зарегистрирован: 2012.11.26, 19:34
Откуда: Киев

Re: Вопрос по шаблону формы (div-ка label-a)

Сообщение tier2003 »

Угу.
Это "исходный код" так рисует.

"Фаербаг" выдаёт следующее:

Код: Выделить всё


<form enctype="multipart/form-data" method="post" action="/ad/edit/5" id="w0">

<input type="hidden" value="..." name="_csrf">

<div class="form-group field-product-name required"></div>
<div class="form-group field-product-price"></div>
<div class="form-group field-product-city"></div>

<table class="form_table">        
    <tbody>
        <tr>
            <td>
                <label for="product-name" class="control-label">Название</label>
            </td>
            <td>
                <input type="text" maxlength="255" value="Таварчик" name="Product[name]" class="form-control" id="product-name">
                <div class="help-block"></div>
            </td>
        </tr>
...
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Вопрос по шаблону формы (div-ка label-a)

Сообщение zelenin »

правильно. т.к. див не может быть внутри тр, то при генерации DOM дивы выносятся.
tier2003
Сообщения: 34
Зарегистрирован: 2012.11.26, 19:34
Откуда: Киев

Re: Вопрос по шаблону формы (div-ка label-a)

Сообщение tier2003 »

Да, но ведь в шаблоне я его прошу весь label вставить между <td>.
Вопрос, почему часть - там, а именно этот див рендериться вне.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Вопрос по шаблону формы (div-ка label-a)

Сообщение zelenin »

Код: Выделить всё

    <?php $form = ActiveForm::begin([
        'fieldConfig' => [
            'template' => "<td>{label}</td><td>{input}\n{error}</td>"
        ]
    ]); ?>
    <?= Html::beginTag('table',[ 'class' => 'form_table']) ?>
        <?= $form->field($model, 'name', ['options' => ['tag' => 'tr','class' => 'form-group col-sm-6']])->textInput(['maxlength' => 255]) ?>
    <?= Html::endTag('table') ?>

    <?php $form::end(); ?>
tier2003
Сообщения: 34
Зарегистрирован: 2012.11.26, 19:34
Откуда: Киев

Re: Вопрос по шаблону формы (div-ка label-a)

Сообщение tier2003 »

Похоже, что оно!

Теперь всё сходится: 'tag' в option-ах задаёт тег обрамления - видел в исходниках, но запутало то, что это может быть для label-а. И если этот самый "tag" для field-а не задан - рендерится div. Но, уже из-за html-правил "выпадает" из таблицы!

Благодарочка!
Ответить