Struppi: sprintf ein array übergeben.

Beitrag lesen

Hellihello Struppi,

Der Name ist ja z.b. 'FILE_OPEN_ERROR' das halte ich für aussagekräftig, die %s sind ja nur die Platzhalter im String den ich gar nicht mehr sehe.

In der Ausgabe nicht (;-). Aber beim basteln schon, oder?

was heißt basteln? In einer einzigen Funktion, die man normalerweise gar nicht zu Gesicht bekommt.

Vom Prinzip hier. Die Fehlerliste könnte includiert werden?

Vom Prinzip würde ich es so lösen, wobei ich eine Template Klasse verwende, momentan für die einfach Sache hab ich mir bTemplate ausgesucht.

<?php  
$lang = 'de';  
require_once("Texte.$lang.class.php");  
require_once('bTemplate.php');  
  
$texte = new Texte();  
$tmpl = new bTemplate();  
  
//fehlerliste  
$errors = array();  
//Testvar:  
$_GET["Name"] = "EinZulangerNameIstDas";  
$max_lenght_name = 20;  
  
if (strlen($_GET["Name"]) > $max_lenght_name) {  
 $errors[] = $texte->_('STRING_TOO_LONG', $_GET["Name"], strlen($_GET["Name"]), $max_lenght_name);  
}  
  
$file_name = "abc.txt";  
if (!file_exists($file_name)) {  
 $errors[] = $texte->_('FILE_NOT_EXIST', $file_name);  
}  
//default test  
$errors[] = $texte->_('UNKNOWN', 'fehler_xyz');  
  
$tmpl->set('error', $errors);  
echo $tmpl->fetch('error.html');  
?>

Texte.de.class.php

class Texte {  
var $msg = array(  
  'STRING_TOO_LONG' => 'Die Eingabe "%s" hat %s Zeichen. %s sind erlaubt.',  
  'FILE_OPEN' => '%s. Datei %s nicht vorhanden',  
  'FILE_NOT_EXIST' => 'Datei %s nicht vorhanden',  
  'UNKNOWN' => '"%s" unbekannt.',  
);  
function _() {  
 $args = func_get_args();  
 $what = array_shift($args);  
 return vsprintf($this->msg[$what], $args);  
 }  
}

Das Template:

<ul>  
<loop:error>  
<li><tag:error[] /></li>  
</loop:error>  
</ul>

Der Punkt ist, Texte.de.class.php kann ich jederzeit austauschen z.b. gegen Texte.en.class.php oder Texte.fr.class.php und leicht bearbeiten, ich brauch dort kein HTML Code.

Was das jetzt damit zu tun hat, dass wenn ich ein fopen mache und es dabei zu einem Fehler kommt und dies ausgeben möchte, weiß ich auch nicht.

(;-). Na, vieleicht erst schauen, obs das Ding überhaupt gibt?

Das ist ja nur eine Möglichkeit warum fopen fehl schlagen kann, wie gesagt ich kenn das nur von Perl, da habe ich in $! die Meldung warum open nicht funktioniert hat und brauch nicht extra auf die existenz zu prüfen, aber wenn es nicht anders geht, werd ich das so machen müssen.

Das mag gut sein. Am Beispiel sieht mans ja, obs danneben liegt oder nicht.

Zumindest was das Templatesystem angeht, ich denke noch mal drüber nach.

Struppi.