2012-04-04 4 views
0

Ich benutze Twitter Bootstrap validation_errors für eine Registrierungsseite zu stylen:Twitter Bootstrap und CodeIgniter der Validation_Errors

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

Die Validierungen arbeiten und zeigen, aber ein Teil des Styling ist immer vorhanden (die div-Tag hat einen roten Hintergrund). Gibt es eine Möglichkeit, das Styling NUR anzeigen zu lassen, wenn die validation_errors vorhanden sind? Ich habe ein paar Dinge ausprobiert (Einbetten von HTML in PHP-Tags und Einschließen der PHP in Div-Tags), aber das Ergebnis ist das gleiche.

Antwort

1

Sie können so etwas versuchen, es funktioniert für mich.

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

Das hat es für mich getan. Vielen Dank! – Julian25

+2

Noch besser, speichern Sie den Aufruf von validation_errors() in einer Variablen, übergeben Sie das an die Ansicht, damit Sie die gleiche Funktion nicht zweimal aufrufen müssen. – Greg

4

Der Grund dafür, dass die Div-Struktur immer noch angezeigt wird, ist, dass sie ohne Rücksicht darauf, ob es Fehler gibt oder nicht, widerhallt.

Sie könnten den Wert einer Variablen zu dem Ergebnis Ihrer validation_errors() Funktion in der Controller gesetzt, dann wird nur die Warnung div in Ihrer Ansicht angezeigt werden, wenn Sie tatsächlich einen Fehler haben ...

Ihr Controller würde weisen Sie die Variable, die die (potentiellen) Fehler zu halten:

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

dann nur noch Ihre Ansicht würde die Warnung div angezeigt, wenn ein Fehler aufgetreten ist:

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

Dies erfordert, dass Ihre validation_errors-Funktion nur einen Wert zurückgibt, wenn ein Fehler vorliegt.

+0

Ich habe versucht, dies zu tun, aber immer noch den roten Hintergrund als Teil der div. Gibt es einen anderen Weg, um zu überprüfen, ob Validierungsfehler vorliegen, und wenn diese mit einem bestimmten Styling versehen werden? – Julian25

+0

Wenn Sie immer noch den roten Hintergrund sehen, bedeutet das, dass Sie etwas falsch machen. Dieser Weg wird funktionieren. Können Sie Ihren Code aktualisieren? – Bram

+0

Das Problem liegt wahrscheinlich im 'validation_errors()' Code - wenn es * irgendwas * zurückgibt, dann wird 'isset()' wahr sein. Daher sollte Ihre 'validation_errors()' -Funktion nur * alles * zurückgeben, wenn ein Fehler vorliegt. –

1

Ich benutze das folgende Konstrukt die Fehler mit speziellen Klassen zu setzen neben den Feldern, die sie verweisen:

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

mit den folgenden Funktionen in einem CI-Helfer:

<?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

Ich erhalte hier einen Fehler "Kann nicht auf die geschützte Eigenschaft CI_Form_validation :: $ _ field_data" zugreifen, die auf die my_error_class-Funktion zeigt, Zeile, die 'if (isset' startet. –

0

Ich habe dies nicht in der Anleitung gefunden, aber anscheinend benötigt validation_errors zwei optionale Argumente für ein Präfix und ein Suffix ... so können Sie folgendes tun:

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

Ich hatte das gleiche Problem. Ich habe validation_errors() einer Variablen in meinem Controller zugewiesen und sie an die Ansicht übergeben.

James Lösung abgehend, musste ich ändern:

if (isset($reported_error)) 

zu:

if (!empty($reported_error)) 

Nachdem ich dies tat, wird nur der Alarmblock angezeigt, wenn ein Fehler aufgetreten ist.