2012-04-04 2 views
0

Я использую Twitter Bootstrap стилизовать validation_errors для регистрации страницы:Twitter Bootstrap и CodeIgniter игровой Validation_Errors

<?php 
echo "<div class='alert alert-error span4'>"; 
echo validation_errors(); 
echo "</div>"; 
?> 

В валидации работать и показать, но часть стиля всегда присутствует (DIV тег имеет красный фон). Есть ли способ, чтобы стиль отображался ТОЛЬКО при наличии validation_errors. Я пробовал несколько вещей (встраивание html в теги php и включение php в теги div), но результат тот же.

ответ

1

Вы можете попробовать что-то подобное, это работает для меня.

<?php if(validation_errors()):?> 
<div class='alert alert-error span4'><?php echo validation_errors(); ?></div> 
<?php endif;?> 
+0

Это сделало это для меня. Спасибо! – Julian25

+2

Еще лучше, сохраните вызов validation_errors() в переменной, передайте это в представление, так что вам не нужно дважды вызывать одну и ту же функцию. – Greg

4

Причина, по которой структура div все еще появляется, заключается в том, что она откликается независимо от того, имеются ли ошибки или нет.

Вы можете установить значение переменной в результате вашей validation_errors() функции в контроллере, то только для отображения предупреждения DIV на ваш взгляд, если вы на самом деле получил ошибку ...

Ваш контроллер будет назначить переменную для хранения (потенциальную) ошибку:

$this->data['reported_error'] = validation_errors(); 
$this->load->view('view_name', $this->data); 

Тогда ваш взгляд будет только отображать предупреждение DIV, если произошла ошибка:

if (isset($reported_error)) 
{ 
    echo "<div class='alert alert-error span4'>".$reported_error."</div>"; 
} 

Для этого требуется, чтобы ваша функция validation_errors возвращала значение только в случае ошибки.

+0

Я попытался сделать это, но я все еще получаю красный фон как часть div. Есть ли другой способ проверить, есть ли ошибки проверки, и если да, то представите их с определенным стилем? – Julian25

+0

Если вы все еще получаете красный фон, это означает, что вы делаете что-то неправильно. Этот способ будет работать. Можете ли вы обновить свой код? – Bram

+0

Проблема, скорее всего, в коде 'validation_errors() - если он возвращает * ничего *, то это приведет к тому, что' isset() 'будет true. Таким образом, ваша функция 'validation_errors()' должна возвращать только * ничего *, если есть ошибка. –

1

Я использую следующую конструкцию, чтобы поставить ошибки со специальными классами рядом с полями, которые они ссылаются:

<div class="<?php echo my_error_class('fieldname') ?>"> 
<input type="whatever" name="fieldname" /> 
<span class="whatever"><?php echo my_error_msg('fieldname') ?></> 
</div> 

со следующими функциями в помощнике CI:

<?php 
    if (! function_exists('my_error_class')) { 
     function my_error_class($field, $error_class = "error") { 
     if (FALSE === ($OBJ =& _get_validation_object())){ 
      return ''; 
      } 
     if(isset($OBJ->_field_data[$field]['error']) && !empty($OBJ->_field_data[$field]['error'])) { 
      return $error_class; 
      } 
     else { 
      return ''; 
     } 
     } 
    } 

if (! function_exists('my_error_msg')) { 
    function my_error_msg($field,$default = '') { 
    if (FALSE === ($OBJ =& _get_validation_object())){ 
     return $default; 
     } 
    if(isset($OBJ->_field_data[$field]['error']) && !empty($OBJ->_field_data[$field]['error'])) { 
     return $OBJ->_field_data[$field]['error']; 
     } 
    else { 
     return $default; 
    } 

    } 
} 
+0

Я получаю сообщение об ошибке «Невозможно получить доступ к защищенному свойству CI_Form_validation :: $ _ field_data», указав на функцию my_error_class, строку, которая запускает 'if (isset'. –

0

Я не нашел этого в руководстве, но, видимо, validation_errors принимает два необязательных аргумента для префикса и суффикса ... так что вы можете сделать:

validation_errors('<p class="text-warning">', '</p>'); 
1

У меня была та же проблема. Я назначил validation_errors() переменной в моем контроллере и передал ее в представление.

Уходя решение Джеймса, мне пришлось изменить:

if (isset($reported_error)) 

к:

if (!empty($reported_error)) 

После того, как я сделал это, предупреждение блок отображается только когда произошла ошибка.

Смежные вопросы