Sempervivum
Erfahrenes Mitglied
Danke für die Rückmeldung, freut mich zu lesen, dass es funktioniert.
Folge dem Video um zu sehen, wie unsere Website als Web-App auf dem Startbildschirm installiert werden kann.
Anmerkung: Diese Funktion ist in einigen Browsern möglicherweise nicht verfügbar.
$stack[$p][$key]['PARSED'] = preg_replace('/(\{\s*(\w+)\((.*)\)\s*\})/e', '(method_exists(\'Template\', \'tpl_$2\'))?$this->tpl_$2("$3"):"$1"', $stack[$p][$key]['FUNC']);
function tpl_calc($param)
{
$param =
preg_replace('/{(\w+)}/e', '$this->getval("$1", true)',
preg_replace('/\{('. PREG_FLT. ')\}/', '$1',
preg_replace('/('. PREG_FLT. ')|\b\w+\b/', '{$0}', $param
)));
do
$param = preg_replace(
'/^\s*('. PREG_FLT. ')\s*([-\/\^|&!*+%]|&~|\|\||&&|!=)\s*('. PREG_FLT. ')/e',
'$1$3$4', $tmp = $param);
while ($tmp!=$param);
return $param;
} // Template::tpl_cal
preg_replace_callback('/{(\w+)}/', function ($m) { return $this->getval($m[1], true);},
preg_replace_callback(
'/^\s*('. PREG_FLT. ')\s*([-\/\^|&!*+%]|&~|\|\||&&|!=)\s*('. PREG_FLT. ')/',
function ($m) { return $m[1]$m[3]$m[4];}, $tmp = $param);
Die Funktion selber ist in dem Fall ja anonym und hat keinen Namen. Was Du meinst, ist der Name des Parameters $m und der kann jedes Mal gleich sein, die Funktion wird jedes Mal mit dem richtigen Wert für diesen Parameter aufgerufen.Wenn ich mehrer preg_replace_callback-Funktionen habe, muss ich dann für jedes Austauchen einen neuen Variablen-Namen nehmen oder kann die Funktion immer function ($m) heißen?
$stack[$p][$key]['PARSED'] = preg_replace('/(\{\s*(\w+)\((.*)\)\s*\})/e', '(method_exists(\'Template\', \'tpl_$2\')) ? $this->tpl_\\2("$3") : "$1"', $stack[$p][$key]['FUNC']);
$temp1 = 'Template';
$temp2 = 'tpl_$2';
$stack[$p][$key]['PARSED'] = preg_replace_callback('/(\{\s*(\w+)\((.*)\)\s*\})/', function($m){return(method_exists($temp1, $temp2)) ? $this->$temp2($m[3]) : $m[1]; }, $stack[$p][$key]['FUNC']);
function parseTemplateString($tpl) {
$parsedTpl = $tpl;
$stack = array();
$stackPointer = 0;
$stackPointerStatus = array(TRUE);
$tplPointer = 0;
while ($tplPointer < strlen($tpl)) {
$posOpen = strpos($tpl, '{', $tplPointer);
$posClose = strpos($tpl, '}', $tplPointer);
if ($posOpen == FALSE && $posClose == FALSE) {
$tplPointer = strlen($tpl);
} elseif (($posOpen < $posClose) && $posOpen !== FALSE) {
if ($stackPointerStatus[$stackPointer] == TRUE) {
$stack[$stackPointer][] = array('START' => $posOpen);
$stackPointerStatus[$stackPointer] = FALSE;
} else {
$stackPointer++;
$stack[$stackPointer][] = array('START' => $posOpen);
$stackPointerStatus[$stackPointer] = FALSE;
}
$tplPointer = $posOpen + 1;
} elseif (($posOpen > $posClose) || $posOpen == FALSE) {
$tplPointer = $posClose + 1;
$stackPointerStatus[$stackPointer] = TRUE;
$l = count($stack[$stackPointer]) - 1;
$stack[$stackPointer][$l]['END'] = $posClose;
$stackPointer--;
}
}
for ($p = count($stack) - 1; $p >= 0; $p--) {
if (is_array($stack[$p])) {
foreach ($stack[$p] as $key => $value) {
$stack[$p][$key]['FUNC'] = substr($tpl, $value['START'], ($value['END'] - $value['START'] + 1));
// replace functions
//--- UM DIESEN TEIL GEHT ES ---------------------------------------------------------------------------------
$stack[$p][$key]['PARSED'] = preg_replace('/(\{\s*(\w+)\((.*)\)\s*\})/e', '(method_exists(\'Template\', \'tpl_$2\')) ? $this->tpl_$2("$3") : "$1"', $stack[$p][$key]['FUNC']);
//--- UM DIESEN TEIL GEHT ES ---------------------------------------------------------------------------------
}
}
}
#$tplReplacementOffset
$replacePos = 0;
for ($r = 0; $r < count($stack); $r++) {
if (is_array($stack[$r])) {
foreach ($stack[$r] as $key => $value) {
$parsedTpl = str_replace($stack[$r][$key]['FUNC'], $stack[$r][$key]['PARSED'], $parsedTpl);
}
}
}
$text = $parsedTpl;
if (is_array($this->vars)) {
foreach ($this->vars as $name => $value) {
if (($name != "content") || (strpos($text, '{'.$name.'}') !== false)) {
$text = str_replace('{' . $name . '}', $this->getval($name), $text);
}
}
}
return $text;
}
$temp2 = 'tpl_$2';
$stack[$p][$key]['PARSED'] = preg_replace_callback('/(\{\s*(\w+)\((.*)\)\s*\})/', function($m){return(method_exists('Template', 'tpl_$2')) ? $this->$temp2($m[3]) : $m[1];}, $stack[$p][$key]['FUNC']);
$stack[$p][$key]['PARSED'] = preg_replace('/(\{\s*(\w+)\((.*)\)\s*\})/e', '(method_exists(\'Template\', \'tpl_$2\')) ? $this->tpl_$2("$3") : "$1"', $stack[$p][$key]['FUNC']);
$stack[$p][$key]['PARSED'] = preg_replace_callback('/(\{\s*(\w+)\((.*)\)\s*\})/', function($m){$tpll = 'tpl_'.$m[2];return(method_exists('Template', 'tpl_'.$m[2])) ? $this->$tpll($m[3]) : $m[1];}, $stack[$p][$key]['FUNC']);