Toon posts:

[PHP] Blocks support in tpl engine..

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi.,

Ik heb al een tijd geleden een Template Engine geschreven, deze bevatte wel blocks, maar die werkte alleen als je ze uit losse files haald.

Nu wil ik dit:
PHP:
1
<?$string = "<htmnl><head><title>{TITEL}</title></head><body>[BLOCK:boven]Menu bla bla[/END:boven][BLOCK:content]<table border='0'><tr>[BLOCK:row]<td>Hoi {NAAM}</td><td>Het is vandaag {DAG}</td>[/END:row]</tr></table>[/END:content]</body></html>";function Convert ($string){// Deze functie moet het verwerken!    echo "<HR>".$string."<HR>";    return "$string";}$string = preg_replace("/\\[BLOCK:(.*?)\]((.|\n)*?)\\[\/END:\\1\]/ise", "Convert('\\2')", $string);echo $string;?>

Nu werkt dit wel.. als ik dus
code:
1
[BLOCK:boven] test [/END:boven]

doe, dan doed ie <HR> test <HR>

Maar als ik
code:
1
2
3
4
5
6
7
8
9
10
[BLOCK:content]
<table border='0'>
<tr>
[BLOCK:row]
<td>Hoi {NAAM}</td>
<td>Het is vandaag {DAG}</td>
[/END:row]
</tr>
</table>
[/END:content]

doe , geeft hij dit weer:
code:
1
2
3
4
5
6
7
8
<table border='0'>
<tr>
[BLOCK:row]
<td>Hoi {NAAM}</td>
<td>Het is vandaag {DAG}</td>
[/END:row]
</tr>
</table>

Ik weet het, me regex is gewoon fout.. maar weet iemand hoe het anders moet, ik wil dus meerdere blocks in elkaar kunnen doen..
Alleen regex code nodig.. want ik doe de afwerking later, dit is even een test om te kijken of het lukt met de blocks regex.

Alvast bedankt.

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 27-08 13:53

chem

Reist de wereld rond

wat dacht je van een while-loop?

Klaar voor een nieuwe uitdaging.


Verwijderd

Topicstarter
Op maandag 08 april 2002 19:05 schreef chem het volgende:
wat dacht je van een while-loop?
Ja, maar ik moet eigenlijk de [blocks] vanaf het midden er uit trekken en dan de rand er omheen, en dan de rand er omheen, of snap ik het verkeerd?

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 27-08 13:53

chem

Reist de wereld rond

Op maandag 08 april 2002 19:09 schreef Stoel het volgende:

[..]

Ja, maar ik moet eigenlijk de [blocks] vanaf het midden er uit trekken en dan de rand er omheen, en dan de rand er omheen, of snap ik het verkeerd?
ja, dat klopt dan wel ongeveer :)

Klaar voor een nieuwe uitdaging.


Verwijderd

Topicstarter
Op maandag 08 april 2002 19:26 schreef chem het volgende:

[..]

ja, dat klopt dan wel ongeveer :)
enig idee hoe je dit doed??

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 27-08 13:53

chem

Reist de wereld rond

zoiets?
PHP:
1
<?while($string != $oldstring){$oldstring = $string;$string = preg_replace("/\\[BLOCK:(.*?)\]((.|\n)*?)\\[\/END:\\1\]/ise", "Convert('\\2')", $string);}?>

Klaar voor een nieuwe uitdaging.


Verwijderd

Topicstarter
Thanks chem, wist niet dat het zo simpel was, hier kan ik wat mee, TOPP!!

Verwijderd

Topicstarter
hmzz
PHP:
1
<?function Convert ($naam,$inhoud){    echo "<HR><B>Naam: $naam</B>".$inhoud."<HR>";    return "[BLOCK=$naam]";}$string = "Test<BR>Bla bla bla<BR>blabla<BR>[BLOCK:content]Hoi allemaal[BLOCK:test]test11[/END:test]hehehe lol[/END:content]<BR><BR>TEYDR<BR>[BLOCK:blaat]test12[/END:blaat]";while($string != $oldstring){    $oldstring = $string;    $string = preg_replace("/\\[BLOCK:(.*?)\]((.|\n)*?)\\[\/END:\\1\]/ise", "Convert('\\1','\\2')", $string);}echo $string;?>

Probleem is nu dat hij alleen block content en block blaat doed, block test is plijte, omdat ik een waarde return tijdens het regexen.

Is er geen andere manier ??

Alvast bedankt.

Verwijderd

Topicstarter
volgens mij weet niemand wat van dit onderwerp ? :?

Verwijderd

Dit is verre van perfect, ik weet het, maar dit is mijn functie om tot 10 levels diep quotes in UBB te ontcijfferen.... Je kan er vast niks mee maar je weet maar nooit ;) *D
PHP:
1
<?  function Quote($string){    if(ereg("\\[quote",$string)){      preg_match_all ("/(\\[([quote]+)[^\]]*\])/Usi", $string, $opentags, PREG_SET_ORDER);      echo "<br>";      preg_match_all ("/\\[\/quote\]/Usi", $string, $closetags, PREG_SET_ORDER);      if(count($opentags) == count($closetags)){        $inquote = false;        $rest = substr(strrchr($string, "[/quote]"), 8);        for($j = 0; $j < 10; $j++){          preg_match_all ("/(.*)(\\[([\/?quote]+)[^\]]*\])(.*)(\\[\/?quote\])/Usi", $string, $b, PREG_SET_ORDER);          for ($i=0; $i < count($b[0]); $i++) {            if($inquote){              $b[$i][1] = "";              $inquote = false;            }              if(ereg("\\[quote",$b[$i][2]) &amp;&amp; ereg("\\[quote",$b[$i][5])){              $b[$i][5] = "[...]";                $inquote = true;            }            if(ereg("\\[\/quote",$b[$i][2]) &amp;&amp; ereg("\\[\/quote",$b[$i][5])){              $b[$i][1] = "";              $b[$i][2] = "";            }            $a[$i] = $b[$i][1].$b[$i][2].$b[$i][4].$b[$i][5];          }          $string = implode("", $a);          $string = ereg_replace("\\[\.\.\.\]\n?\\[\.\.\.\]","[...]", $string);           $string .= $rest;        }      } else {        $string = str_replace("[quote", "[ quote", $string);        $string = str_replace("[/quote]", "[ /quote]", $string);      }    }    return $string;  }?>

Verwijderd

Topicstarter
ik zal hem vanmiddag testen, ik zit nu namelijk op school.. :'(

Verwijderd

Topicstarter
is er geen beter functie om het uit elkaar te hakken, vind het beetje zonde om me code te vervuilen met die functioen quote()

:)
Pagina: 1