Standard: vorgefertigte Template Funktion
Mit dem include des Standard Fehler-Templates können Fehlermeldungen für alle Seiten einheitlich an einer zentralen Stelle gestalltet werden.
Siehe auch: http://www.smarty.net/manual/de/language.function.include.php
Standardaufruf dieses Templates:
{include file='msgbox.tpl'}Die hier übergebene Variable $error und $information sind PHP typische Arrays und können als solche innerhalb der Template-Engine zur ausgabe gebracht werden.
{if count($errors)>0}
Es kam zu einem Fehler! Bitte beachten Sie
{if count($errors)==1}
den folgenden Hinweis
{else}
die folgenden Hinweise
{/if}.<br>
{foreach item=error from=$errors}
{$error}<br>
{/foreach}
{/if}siehe auch: http://www.smarty.net/foreach
Beispiel: Fehlerhafte Eingabefelder farbig hinterlegen, direkte CSS Einbindung
Möchte man einzelne Felder nach einem Fehler farbig hinterlegen kann man die $error Variable dafür zur Hilfe nehmen. Ist der Name des Eingabefeldes als Key der $error Variable gesetzt, so ist in diesem Feld ein Fehler aufgetreten.
Aufbau:
$error.EINGABEFELDNAME = FEHLERMELDUNGBeispiel (ohne zugehörige Fehlermeldung):
<div{if isset($error.archive_1)} style="background-color:#990000;padding:3px;"{/if}>
<input name="sfm_field[archive_1]" type="text" value="{$sfm_field.archive_1}"/>
</div>Beispiel (mit zugehörige Fehlermeldung):
{if isset($error.archive_1)}<div style="background-color:#990000;padding:3px;">{$error.archive_1}{/if}
<input name="sfm_field[archive_1]" type="text" value="{$sfm_field.archive_1}"/>
{if isset($error.archive_1)}</div>{/if}Beispiel: Fehlerhafte Eingabefelder farbig hinterlegen, CSS Klasse
Möchte man einzelne Felder nach einem Fehler farbig hinterlegen kann man die $error Variable dafür zur Hilfe nehmen. Ist der Name des Eingabefeldes als Key der $error Variable gesetzt, so ist in diesem Feld ein Fehler aufgetreten.
Aufbau:
$error.EINGABEFELDNAME = FEHLERMELDUNGBeispiel (ohne zugehörige Fehlermeldung):
Teil 1: Style Sheet definieren (CSS)
<style type="text/css">
.errorStyle {
background-color:#FFCCFF;
border-color:#990000;
border-width:3px;
border-style:solid;
}
</style>Teil 2: Bei Fehler CSS-Klasse einbinden
<input name="sfm_field[archive_1]" type="text" value="{$sfm_field.archive_1}" {if isset($error.archive_1)}class="errorStyle"{/if}/>Beispiel: Bei Fehler direkt in das fehlerhafte Feld springen
Möchte man beim auftreten von Fehlern direkt in das passende Feld springen, benötigt man dafür zwingend Javascript. Mit den folgenden Ablauf lässt es sich realisieren:
Beispiel:
Teil 1: Notwendiges Javascript
<script language="javascript" type="text/javascript">
{literal}
function start(){
{/literal}
{if count($error)>0}
document.getElementById('EINGABEFELDID').focus();
{/if}
{literal}
}
{/literal}
</script>
Teil 2: Der Aufruf der vorherigen Funktion
<body ... onLoad="start()" ..>Will man das erste Feld automatisiert auslesen, so kann man mit einem Trick die Template Engine dafür ebenfalls verwenden.
<script language="javascript" type="text/javascript">
{literal}
function start(){
{/literal}
{if count($error)>0}
{foreach name=e item=e key=eid from=$error}
{if $smarty.foreach.e.first}
document.getElementById('{$eid}').focus();
{/if}
{/foreach}
{/if}
{literal}
}
{/literal}
</script>Hinweis
Im Beispiel wird per getElementById das passende Eingabefeld fokusiert, dafür muss dem Eingabfeld aber auch die passende ID beigefügt werden!
<input name="sfm_field[EINGABEFELDID]" type="text" id="EINGABEFELDID" value="{$sfm_field.EINGABEFELDID}"/>siehe Javascript getElementById: http://de.selfhtml.org/javascript/objekte/document.htm#get_element_by_id
siehe Javascript onLoad: http://de.selfhtml.org/javascript/sprache/eventhandler.htm#onload