Как задать шаблон для label() формы?

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

Как задать шаблон для label() формы?

Сообщение slo_nik »

Доброе утро.
Нужно при помощи ActiveForm() сгенерировать со своим html, отличным от того, что генерируется по умолчанию.
Требуется получить такой html

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

<form name="appointment_form" id="appointment_form" method="post" action="#" onSubmit="return false">

        <span class="input input--kohana">
          <input class="input__field input__field--kohana" type="text" id="input-29" name="input-29" />
          <label class="input__label input__label--kohana" for="input-29">
                        <i class="icon-user6 icon icon--kohana"></i>
            <span class="input__label-content input__label-content--kohana">Your Name</span>
          </label>
        </span>
        <!-- ОСТАЛЬНЫЕ ПОЛЯ ФОРМЫ -->
</form> 
Сделал таки образом

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

<?php
   $form = ActiveForm::begin([
       'id' => 'appointment_form',
       'fieldConfig' => [
           'options' => [
               'tag' => 'span',
               'class' => 'input input--kohana'
           ],
           'template' => '{input}{label}',
           'inputOptions' => ['class' => 'input__field input__field--kohana'],
           'labelOptions' => [
               'class' => 'input__label input__label--kohana',
           ]
       ]
   ]);
?>
<?= $form->field($model, 'name')->textInput()->label("<i class=\"icon-phone5 icon icon--kohana\"></i><span class=\"input__label-content input__label-content--kohana\">" . $model->getAttributeLabel('name') . "</span>") ?>
<!-- ОСТАЛЬНЫЕ ПОЛЯ ФОРМЫ  -->
<?= $form->field($model, 'body')->textInput()->label() ?>
<?= Html::submitButton('Submit') ?>
<?php
  ActiveForm::end();
?>
Получил то что требуется.
Но остался один вопрос.
Получается, что для каждого label() надо дублировать html.

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

->label("<i class=\"icon-phone5 icon icon--kohana\"></i><span class=\"input__label-content input__label-content--kohana\">" . $model->getAttributeLabel('name') . "</span>")
Как сделать так, чтобы не дублировать html код в содержимом label()?
andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: Как задать шаблон для label() формы?

Сообщение andku83 »

Используйте \yii\bootstrap\ActiveForm там больше возможностей для модификации
slo_nik
Сообщения: 344
Зарегистрирован: 2013.10.07, 19:08

Re: Как задать шаблон для label() формы?

Сообщение slo_nik »

andku83 писал(а): 2018.10.28, 01:11 Используйте \yii\bootstrap\ActiveForm там больше возможностей для модификации
Пробовал, но так и не нашёл, как не дублировать в каждом layout() этот html

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

"<i class=\"icon-phone5 icon icon--kohana\"></i><span class=\"input__label-content input__label-content--kohana\">" . $model->getAttributeLabel('name') . "</span>"
Меня интересует, возможно ли вообще задать содержимое для label() штатными средствами?

Сейчас выглядит так

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

<label class="control-label col-sm-3" for="mail-name">Name</label>
А надо вот так

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

<label class="control-label col-sm-3" for="mail-name">
    <i class="icon-phone5 icon icon--kohana"></i>
    <span class="input__label-content input__label-content--kohana">Name</span>
</label>
slo_nik
Сообщения: 344
Зарегистрирован: 2013.10.07, 19:08

Re: Как задать шаблон для label() формы?

Сообщение slo_nik »

andku83 писал(а): 2018.10.28, 01:11
Разобрался, не заметил в bootstrap/ActiveForm в параметре template {beginLabel} и {endLabel}
Теперь получается сформировать нужный label() , но без имени атрибута.
Как теперь добавить туда это имя
Такой вариант мне кажется не очень правильным

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

"{beginLabel}
       <i class=\"icon-phone5 icon icon--kohana\"></i>
       <span class=\"input__label-content input__label-content--kohana\">{label}</span>
{endLabel}"
Генерирует вложенные label

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

<label class="control-label col-sm-4" for="mail-name">
      <i class="icon-phone5 icon icon--kohana"></i>
      <span class="input__label-content input__label-content--kohana">
          <label class="control-label col-sm-4" for="mail-name">Name</label>
     </span>
</label>
andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: Как задать шаблон для label() формы?

Сообщение andku83 »

Вместо {label} используйте {labelTitle}
И загляните в сам класс, там можно еще много чего найти...
slo_nik
Сообщения: 344
Зарегистрирован: 2013.10.07, 19:08

Re: Как задать шаблон для label() формы?

Сообщение slo_nik »

andku83 писал(а): 2018.10.28, 21:55 Вместо {label} используйте {labelTitle}
И загляните в сам класс, там можно еще много чего найти...
Благодарю за подсказку.
Редко заглядываю в исходный код, всё больше в документации ковыряюсь)))
Ответить