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!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2016-06-22 23:00:48

  noyo - Użytkownik

noyo
Użytkownik
Skąd: Mazury
Zarejestrowany: 2014-05-06
Serwis

Własny język przy wykorzystaniu PHP oraz HTML coś na kształt Smarty

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ść?


Kod:

<?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

 

#2  2016-06-23 10:16:56

  ponury_kostek - Użytkownik

ponury_kostek
Użytkownik
Skąd: Wałbrzych
Zarejestrowany: 2007-01-02
Serwis

Re: Własny język przy wykorzystaniu PHP oraz HTML coś na kształt Smarty

Kod:

/\{if(.*?)\}(.*?)\{\/if\}/msi

nie łapie ostatniego

Kod:

{/if}

wiec w

Kod:

$if[0][0]

masz tylko

Kod:

{if $title}{if $page}{$page}{/if}

i w linii 50

Kod:

$txt = str_replace($if[0][$k], "", $txt)

wycinasz z

Kod:

$txt

to co jest w

Kod:

$if[0][0]

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
To nie jest tylko forum, to nasza mała ojczyzna ;-)