Есть ли какой-нибудь простой и правильный способ добавить <span></span> (для красивой стрелки кросбраузерной) во все сообщения ошибок? Не хотелось бы прямо редактировать код функции в CHtml, а как правильно переопределить не совсем понятно (чтобы работало в классах наследниках CActiveRecord).
Есть псевдо-селектор :before…
li:before { content: '-> ' }
в IE < 7 не работает… но есть хак…
li { z-index: expression(runtimeStyle.zIndex = 1, this.innerHTML = "-> " + this.innerHTML) }
Этот вариант не подходит, нужно в самом <div class=“errorMessage”></div> разместить <span></span>. Да, конечно, можно воспользоваться еще и javascript’ом, но все же хотелось бы какое-то более красивое решение.
видимо пока нельзя. дело в том что в CActiveForm жестко зашито использование класса CHtml, даже если ты создашь класс Html extends CHtml, переопределишь ф-цию CHtml::error, вставишь свой контент - надо будет переделывать CActiveForm - тоже. Оба решения не очень красивы. выбирай между js и таким вариантом.
Сам разобрался как переопределять ![]()
/**
* ActiveForm extends CActiveForm
*/
class ActiveForm extends CActiveForm
{
public function error($model,$attribute,$htmlOptions=array(),$enableAjaxValidation=true,$enableClientValidation=true)
{
...
$html=Html::error($model,$attribute,$htmlOptions);
...
}
}
/**
* Html extends CHtml
*/
class Html extends CHtml
{
public static function error($model,$attribute,$htmlOptions=array())
{
self::resolveName($model,$attribute); // turn [a][b]attr into attr
$error=$model->getError($attribute);
if($error!='')
{
if(!isset($htmlOptions['class']))
$htmlOptions['class']=self::$errorMessageCss;
return self::tag('div',$htmlOptions,'<span></span>'.$error);
}
else
return '';
}
}
В формах соответственно прописывать ActiveForm вместо CActiveForm
да, сделал совершенно правильно.