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
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
/\{if(.*?)\}(.*?)\{\/if\}/msi
nie ł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