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;
}

?>

[url]http://www.kazuko.pl[/url] - Mikrotik, Ubiquiti, LMS, Linux, Skrypty
[url]http://www.prorys.pl[/url] - Wykonywanie kosztorysów, sporządzanie wizualizacji i projektów budynków

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
Nas ludzie lubią po prostu, a nie klikając w przyciski ;-)

[ Generated in 0.011 seconds, 13 queries executed ]

Informacje debugowania

Time (s) Query
0.00015 SET CHARSET latin2
0.00008 SET NAMES latin2
0.00120 SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='18.216.124.8' WHERE u.id=1
0.00077 REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '18.216.124.8', 1714158148)
0.00045 SELECT * FROM punbb_online WHERE logged<1714157848
0.00083 DELETE FROM punbb_online WHERE ident='47.128.51.236'
0.00086 DELETE FROM punbb_online WHERE ident='47.128.56.150'
0.00071 SELECT topic_id FROM punbb_posts WHERE id=302675
0.00115 SELECT id FROM punbb_posts WHERE topic_id=28724 ORDER BY posted
0.00092 SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=28724 AND t.moved_to IS NULL
0.00034 SELECT search_for, replace_with FROM punbb_censoring
0.00075 SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=28724 ORDER BY p.id LIMIT 0,25
0.00091 UPDATE punbb_topics SET num_views=num_views+1 WHERE id=28724
Total query time: 0.00912 s