Изменение шаблона CHtml::error

Есть ли какой-нибудь простой и правильный способ добавить <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

да, сделал совершенно правильно.