M
MaxivB
Hallo,
ich habe eine Template Klasse erstellt:
Das funktioniert auch...
Nun meine frage: Ich habe das mit dem exit_block() sehr umständlich gemacht... Kann man das noch vereinfachen?
ich habe eine Template Klasse erstellt:
PHP:
class tpl {
var $file;
var $output;
var $between;
var $r_str_arr;
var $v_str_arr;
var $name;
function tpl($tpl_file = ""){
$this->file = $tpl_file;
$output = '';
$handle = fopen ($this->file, 'r');
while (!feof($handle)){
$buffer = fgets($handle, 4096);
$output .= $buffer;
}
$this->output = $output;
fclose ($handle);
$this->r_str_arr = array();
$this->v_str_arr = array();
}
function replace($r_str, $v_str) {
$this->output = str_ireplace('{'.$r_str.'}', $v_str, $this->output);
}
function block($name) {
/* Ich fürhe am anfang diese Funtion aus */
preg_match_all("=\[".$name."\](.*)\[\/".$name."\]=siU", $this->output, $this->between);
$this->between = $this->between[1][0];
$this->name = $name;
}
function replace_block($r_str, $v_str) {
/* Dann kommt eine schleife in der index.php und in diese kommt dann beliebig oft diese Funktion reib */
array_push($this->r_str_arr, $r_str);
array_push($this->v_str_arr, $v_str);
}
function exit_block() {
/* Am ende wird dann außerhalb der schleife dies ausgeführt: */
$r_strs = array();
// -- Alle zu ersetztenden strings kommen hier in diese foreach-schleife --
foreach ($this->r_str_arr as $test) {
// -- Es wird der $r_strs nur $test hinzugefügt, wenn es in $r_strs nochnicht drin ist, so kann ich zählen, wie viele replaces in den schleifen eingesetzt wurden --
if (!in_array($test, $r_strs)) {
array_push($r_strs, $test);
}
}
// -- hier wird berechnet, wie oft die schleife ausgefürht wurde (die gesamtzahl der zu ersetztenden strings durch die replaces, die wir geade berechnet hatten --
$count = count($this->r_str_arr) / count($r_strs);
$end = "";
// -- Jetzt kommt eine einfache for-schleife --
for ($i = 0; $i < $count; $i ++) {
$test = array();
$zutest = array();
foreach ($r_strs as $str) {
// -- Hier haben wir dann jeden string, der ersetzt werden soll und dann wieder in $test hinzugefügt wird --
array_push($test, $str);
}
$w = $i * count($r_strs);
$t = count($this->r_str_arr);
for ($r = $w; $r < $w + count($r_strs); $r ++) {
// -- Und hier dann jede ersetztung --
array_push($zutest, $this->v_str_arr[$r]);
}
$e = -1;
$content = $this->between;
foreach ($test as $j) {
$e ++;
// -- Hier wird dann ein str_replace() ausgeführt. --
$content = str_replace("{".$j."}", $zutest[$e], $content);
}
// -- Ab hier wird es hoffentlich verständlich ;)
$end .= $content;
}
$this->output = preg_replace("=\[".$this->name."\](.*)\[\/".$this->name."\]=siU", $end, $this->output);
}
function display(){
echo $this->output;
}
}
/* ------------------------------- */
$tpl = new tpl("./test.txt");
$tpl->block("test");
$array = array("nr1", "nr2", "nr3");
$c = 0;
foreach($array as $string) {
$c++;
$tpl->replace_block("hallo", $c);
$tpl->replace_block("test", $string);
$tpl->replace_block("halloo", "ersetztung");
$tpl->replace_block("ein_test", "...");
}
$tpl->exit_block();
$tpl->display();
Nun meine frage: Ich habe das mit dem exit_block() sehr umständlich gemacht... Kann man das noch vereinfachen?
Zuletzt bearbeitet von einem Moderator: