Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Strony: 1
Użytkownik
Próbuje coś własnego napisać tak aby wykorzystać to do tworzenia szablonu strony internetowej.
Mam sobie kod jak poniżej funkcja php ifM realizuje mi if`ale coś mi nie gra jeśli mam if w if`ie. Niby mogę wykonać dwa razy ifM i działa w przypadku DATA1, ale już gdy pierwsza zmienna daje wynik fale to pozostaje reszta {/if} tak jak w przykładzie DATA3.
Nie wiem jak to rozwiązać, może ktoś podpowiedziałby jak to rozgryźć, ew. w która strone iść?
<?php
## DATA 1
echo "<B>DATA1:</b><BR>";
$replace1 = array('{$title}' => "cos tam", '{$page}' => "nic");
$data1 = '{if $title}{$title}{/if}';
echo str_replace(array_keys($replace1), array_values($replace1), ifM($data1, $replace1));
## wynik: cos tam
## DATA 2
echo "<BR><BR>";
echo "<B>DATA2:</b><BR>";
$replace2 = array('{$title}' => "cos tam", '{$page}' => "nic");
$data2 = '{if $title}{if $page}{$page}{/if}{/if}';
echo str_replace(array_keys($replace2), array_values($replace2), ifM(ifM($data2, $replace2), $replace2));
## wynik: nic
## DATA 3
echo "<BR><BR>";
echo "<B>DATA3:</b><BR>";
$replace3 = array('{$title}' => "", '{$page}' => "nic");
$data3 = '{if $title}{if $page}{$page}{/if}{/if}';
echo str_replace(array_keys($replace3), array_values($replace3), ifM(ifM($data3, $replace3), $replace3));
## wynik: {/if}
function ifM($txt, $test) {
preg_match_all('/\{if(.*?)\}(.*?)\{\/if\}/msi', $txt, $if);
foreach($if[1] as $k => $v) {
if(preg_match('/^.*\&\&.*$/D', $v)) {
$tt = 1;
foreach(explode("&&", $v) as $vv) { $tt = ($tt*($test[trim($vv)] ? 1 : ($test["{".trim($vv)."}"] ? 1 : 0))); }
if(preg_match('/^.*\{else\}.*$/Dm', $if[2][$k])) {
if($tt) {
$txt = str_replace($if[0][$k], explode("{else}", $if[2][$k])[0], $txt);
} else {
$txt = str_replace($if[0][$k], explode("{else}", $if[2][$k])[1], $txt);
}
} else {
if($tt) {
$txt = str_replace($if[0][$k], $if[2][$k], $txt);
} else {
$txt = str_replace($if[0][$k], "", $txt);
}
}
} elseif(preg_match('/^.*\|\|.*$/D', $v)) {
$tt = 0;
foreach(explode("||", $v) as $vv) { $tt .= ($test[trim($vv)] ? 1 : ($test["{".trim($vv)."}"] ? 1 : 0)); }
if(preg_match('/^.*\{else\}.*$/Dm', $if[2][$k])) {
if(($tt*1)) {
$txt = str_replace($if[0][$k], explode("{else}", $if[2][$k])[0], $txt);
} else {
$txt = str_replace($if[0][$k], explode("{else}", $if[2][$k])[1], $txt);
}
} else {
if(($tt*1)) {
$txt = str_replace($if[0][$k], $if[2][$k], $txt);
} else {
$txt = str_replace($if[0][$k], "", $txt);
}
}
} else {
if(preg_match('/^.*\{else\}.*$/Dm', $if[2][$k])) {
if($test[trim($v)] or $test["{".trim($v)."}"]) {
$txt = str_replace($if[0][$k], explode("{else}", $if[2][$k])[0], $txt);
} else {
$txt = str_replace($if[0][$k], explode("{else}", $if[2][$k])[1], $txt);
}
} else {
if($test[trim($v)] or $test["{".trim($v)."}"]) {
$txt = str_replace($if[0][$k], $if[2][$k], $txt);
} else {
$txt = str_replace($if[0][$k], "", $txt);
}
}
}
}
return $txt;
}
?>Offline

Użytkownik


/\{if(.*?)\}(.*?)\{\/if\}/msinie łapie ostatniego
{/if}wiec w
$if[0][0]
masz tylko
{if $title}{if $page}{$page}{/if}i w linii 50
$txt = str_replace($if[0][$k], "", $txt)
wycinasz z
$txt
to co jest w
$if[0][0]
Offline
Strony: 1