Как добавить span к метке, используя $ form-> labelEx из Yii? - PullRequest
1 голос
/ 09 января 2012

Я хочу создать следующую разметку:

<label>some label here <span>(optional)</span></label>

Есть ли способ сделать это, используя Yii labelEx или просто label ?

Спасибо

Ответы [ 4 ]

5 голосов
/ 12 января 2012

Если атрибут обязателен

Вы можете установить статические свойства CHtml следующим образом

CHtml::$beforeRequiredLabel = '';
CHtml::$afterRequiredLabel = '<span>(optional)</span>';

Yii сгенерирует тег

<label>CHtml::$beforeRequiredLabel.$label.CHtml::$afterRequiredLabel</label>

но статические свойства будут влиять на все метки, сгенерированные $ form-> labelEx () (@see CHtml :: activeLabelEx ())

если вам не нужно, вы должны установить статические свойства по умолчанию

Если атрибут не требуется

, вы можете установить htmlOptions

$form->labelEx($model, $attribute, array('label' => 'your label'))
3 голосов
/ 24 января 2013

Все просто, используйте шаблон Decorator:

<?php
// components/CustomCHtml.php

class CustomCHtml extends CHtml
{
    public static function activeLabelEx($model,$attribute,$htmlOptions=array())
    {
        if (isset($htmlOptions['optional']) && $htmlOptions['optional']) {
            if (isset($htmlOptions['label']) && $htmlOptions['label']) {
                $htmlOptions['label'] .= $htmlOptions['optional'];
            } else {
                $htmlOptions['label'] = $htmlOptions['optional'];
            }
        }

        return parent::activeLabelEx($model,$attribute,$htmlOptions);
    }
}

вариант использования:

<?php echo CustomCHtml::activeLabelEx($model, 'field', array('optional'=>' <span>(optional)</span>')); ?>
0 голосов
/ 29 мая 2018

Вы можете использовать CHtml::$afterRequiredLabel и / или CHtml::$beforeRequiredLabel

$initValue = CHtml::$afterRequiredLabel;
CHtml::$afterRequiredLabel = $initValue.'<span>(optional)</span>';
echo $form->labelEx($model, $fname, array('class' => ''));
echo $form->textField($model, $fname, array('class' => ''));
CHtml::$afterRequiredLabel = $initValue;

Таким образом, метка будет применена только к указанному полю формы. Вы фактически устанавливаете начальное значение CHtml::$afterRequiredLabel и / или CHtml::$beforeRequiredLabel для временной переменной, перезаписываете нужное вам значение, а затем сбрасываете его до исходного значения.

0 голосов
/ 18 декабря 2014

Вот небольшой взлом, чтобы сделать это возможным.

<?php 
                $username = $form->field($model, 'username')
                ->input('text', ['class' => 'form-control input-lg'])
                ->label(true, 'username', ['class' => 'fa fa-user signin-form-icon']);

                $username->parts['{label}'] = '<span class="fa fa-user signin-form-icon">dwe</span>';

                echo $username;
            ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...