[PHP] Template engine - loop/if maken?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben bezig met een websiteje, ik heb nou een redelijk stabiele en snelle tpl engine gemaakt. Nou zit ik met 2 dingen die ik niet echt werkend krijg.

1) Ik wil loops kunnen maken, zodat ik b.v. een menu kan maken, en dat ik dan makkelijk de code in een menu kan veranderen ipv voor een link een aparte template te maken zodat ik het als een loop kan gebruiken

Als tpl file wil ik iets als dit maken:
code:
1
2
3
{LOOP=name}
<a href="{URL}">{NAME}</a><br>
{/LOOP}


Alleen ik krijg het gewoon niet werkend, regex is niet zo simpel als ik dacht :+
Ik heb dus al iets gevonden, alleen daar staat niets zinnigs in.
En kan je dan ook een loop in een loop maken? Of een loop in een loop in een loop.

2) Ik wil een if blok kunnen maken, maar heb geen idee hoe dat kan

code:
1
2
3
{IF=name}
boel code
{/IF}


Dat ik een functie kan gebruiken door b.v.
PHP:
1
$tpl->ParseIF("name",TRUE);

Zodat ik blokken aan en uit kan zetten, en met wat moeite wil ik ook een ELSE er bij maken.

In hoeverre snap je regex?
Ik snap wel iets van regex, maar dat is met veel pijn en moeite.
deze regex en code snap ik nog:
PHP:
1
$text = preg_replace("/(\\[b\])(.*)(\\[\/b\])/U","<b>\\2</b>", $text);

code:
1
2
3
4
5
6
7
8
9
10
11
/         start regex
(         begin met het verwerken van blok 1
\\[b\]     de code [b] moet er in staan (in blok 1)
)         blok 1 sluiten
(         start blok 2
.*        alle tekens
)         blok 2 sluiten
etc.
/U      einde regex?

in het 2e stuk is \\2 de inhoud van blok2 terugzetten.


Maar hellaas kom ik niet ver genoeg om in mn eentje deze 2 functies te maken

Nou is dit mijn vraag:
Wat is de techniek hier achter, ik heb dus geen enkel idee(Ja met regex, maar hoe maak je dan die loop).

Acties:
  • 0 Henk 'm!

  • Apache
  • Registratie: Juli 2000
  • Laatst online: 16-09 10:29

Apache

amateur software devver

Mja, als eerste raad ik je een beetje af om een regex based systeem te bouwen en meteen voor een stackbased model te gaan.

De belangrijkste reden hiervoor is dat nesting van loops, if's ed met regex gewoon ingewikkelder zal worden.

Nu heb ik zelfs van allebei 1tje geschreven, de loops handelde ik af in de regex doormiddel van de /e (eval) flag wat tussen de looptags staat door te geven aan een methode van de template classe waarin dan bepaald werd hoe vaak die inhoud geloopt moest worden.

dan krijg je zoiets als functie

code:
1
2
3
4
5
6
7
8
function parseLoop($param, $content){

    // als $param numeric is gebruik je die (voor {loop=4} oid)
    // anders check je of er een loop variable is met de naam en bepaald je de grote van die array: count / sizeof

    // en dan hier add je zelf de content achter elkaar in een gewone for loop in php en concateneer je de $content van de loop x aantal keren met zichzelf

}


die if ongeveer hetzelfde, maar dan naam controleren, als het waar is return je de eigen content anders return je gewoon niets of wat in de else tak staat.

Als je code wil zien van v1 (de regexbased versie) of v2, of beide neem dan maar contact op via icq/mail aangezien v1 crappy code betreft en v2 zoiezo nog niet 100% als final beschouwd word.

V2 ondersteund trouwens syntax als:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<table>
    <tr>
    {foreach=menuName}
        <td onmouseover='expand("{menuName}%i")'>{if=is_null([menuLink])}{menuName}{else}<a href='{menuLink}'>{menuName}</a>{/if}
        <div id='{menuName}%i' onmouseout='collapse("{menuName}%i")' style='position:absolute; z-index:2; visibility: hidden; filter:alpha(opacity=70);-moz-opacity:0.7;'>
        <table style='background: #CCCCCC;'>
            {foreach=menuSubName}
                <tr><td>{if=is_null([menuSubLink])}{menuSubName}{else}<a href='{menuSubLink}'>{menuSubName}</a>{/if}</td></tr>
            {/fe}
        </table>
        </div>
        </td>
    {/fe}
    </tr>
</table>

If it ain't broken it doesn't have enough features


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Apache, ik heb je een mailtje gestuurd, ik hoop dat ik er wat me kan(denk het wel ;) ).

Is het trouwens niet slim om eerst heel de code af te sporen naar de if's, en dan b.v. dit doen.
code:
1
2
3
4
5
asdasd
{IF=asd}
adasdasd
{/IF}
asdasd

dan de if code knippen, de naam er af halen en dan in een 2d array te zetten, dan op de plaats van de if een code met arrayplek heeft, dus zoiets
code:
1
2
3
asdasd
{IFARRAY=asd}
asdasd

Zodra je dan bij een ifarray tegenkomt gewoon even vervangen in die array.

Het lijkt me sneller dan preg_replace, omdat preg het ook ongeveer doet. Maar mischien is het wel veel langzamer, maar lijkt me wel een idee (mits sneller) ;)

Acties:
  • 0 Henk 'm!

  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07 12:07
hmm weet niet hoe je templates doet maar ik doe altijd een soort van xslt (maar dan simpel) approach:

<i:...>
<i:...>

en dan een while die zoekt naar alle <i:...> allez het begin zo kun je loopen nesten whatever - en hij is supersnel en precompilable...

Acties:
  • 0 Henk 'm!

  • Erik Jan
  • Registratie: Juni 1999
  • Niet online

Erik Jan

Langzaam en zeker

Ik heb ook een tijdje met een home-made template class (nesting, loops, ifs, compilen etc.) lopen klooien in projectjes, maar dat uiteindelijk vind ik niets lekkerder werken dan XML / XSLT. Met regexps gaat je dat i.i.g. niet lukken, probeer het stackbased te doen.
Ik wilde wat stukken source hier posten maar ik zie dat ze allemaal overboord heb gegooid, tot zover het nut van mijn post :)

This can no longer be ignored.


Acties:
  • 0 Henk 'm!

Verwijderd

zo gemakkelijk is dat niet en zelfs ik heb dat nog niet voor elkaar gekregen, eerst zou je dan een tree moeten maken van alles wat tussen {} staat enzo... maar dat is een pokke werk :{

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik was even aan het testen, mischien werkt het wel, maar of het verstandig is ;)
PHP:
1
2
3
4
5
6
$text = "{IF=naam}\r"
."text<br>\r"
."{/IF}";

$ifblock = preg_replace("/(\{IF=(.*)\})(.*)(\{\/IF\})/U","\\3", $text);
$text = preg_replace("/(\{IF=(.*)\})(.*)(\{\/IF\})/U","{IFBLOCK=\\2}", $text);

Als ik hier mijn ParseTime systeem bij hang kost hem dit ongeveer 0.000727 sec.
Is dit snel of moet het sneller?
het is localhost server, specs zie CoolBlue specs @ sig.

[ Voor 18% gewijzigd door Verwijderd op 19-07-2003 11:48 ]


Acties:
  • 0 Henk 'm!

  • Erik Jan
  • Registratie: Juni 1999
  • Niet online

Erik Jan

Langzaam en zeker

Verwijderd schreef op 19 July 2003 @ 11:47:
Is dit snel of moet het sneller?
Als dit doet wat je wil, mag je zelf bepalen of dit snel is of niet :) Iets replacen is echter iets anders dan een mini-interpreter bouwen voor je eigen template-grammatica. Iets wat bijvoorbeeld dit kan interpreteren:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Hallo {naam}
[loop a]
  Test
  [ifelse x]
    [loop b]
      Blah {var}
    [/loop b]
  [else x]
    [loop b]
      Brah {var}
    [/loop b]
    Whee
  [/ifelse x]
[/loop a]
Doei
Als je daaraan gaat beginnen, gaat de prioriteit van die snelheid snel omlaag omdat je het eerst maar eens werkend moet krijgen :)

This can no longer be ignored.


Acties:
  • 0 Henk 'm!

  • Morrar
  • Registratie: Juni 2002
  • Laatst online: 08:20
Ik heb het hier werkend inclusief geneste structuren. Loops heb ik (nog) niet maar bijvoorbeeld wel database gerelateerde secties (loops over de results uit een database query).

Ik split eerst het template op tags en maak daar een array van. Je krijgt dan dus een array met allemaal stukjes van het template, soort tokenizer zeg maar. Bij dat array creeer ik vervolgens een boomstructuur van de tags. In deze boomstructuur staat het type tag, evt de argumenten en de begin- en eindepositie van de tag.

Vervolgens ga ik aan de hand van die boomstructuur kijken wat wel en niet in de output moet verschijnen.

Volgens mij is dat de enige methode om het te doen. Die regexps zijn leuk maar werken niet met geneste structuren.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb nou een vaag probleem, dit heb ik nog niet eerder gehad met php.

Ik heb 2 code's, een testversie en een final in mijn tpl engine class. De testversie werkt wel, maar in de class wil het niet werken.
PHP:
1
$text = preg_replace("/(\{IF=".$ifname."\})(.*)(\{\/IF=".$ifname."\})/U","",$text);

PHP:
1
$this->TEMPLATESTOSHOW[$tpl_name] = preg_replace("/(\{IF=".$ifname."\})(.*)(\{\/IF=".$ifname."\})/U","",$this->TEMPLATESTOSHOW[$tpl_name]);

Het zit hem niet dat er ergens een waarde niet bestaat, dat heb ik natuurlijk al getest.
Maar met die preg_replace wil hij gewoon niet werken voor het verwijderen van de code(zodra het in de class is).

Acties:
  • 0 Henk 'm!

Verwijderd

Ik gebruik voor mijn sites altijd de template parser class van PHPLIB, die is redelijk straightforward en stackbased. In jouw geval zou ik zeker even kijken bij de blocks functie. Je kunt in je templates geen PHP code verwerken, maar tot nu toe heb ik dat (zelfs bij uitgebreidere sites als template gebaseerde online shops) niet nodig gehad.

Je kunt deze class natuurlijk ook gewoon aan je eigen behoeften aanpassen..

-> linkje

[ Voor 1% gewijzigd door Verwijderd op 27-07-2003 16:51 . Reden: typo ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
hier een stukje code, ik wordt er even simpel van.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Template {
    //KNIP BEGIN CODE......
    function UseIF($tpl_name,$if_name,$use=1) {
        $if_name = strtoupper($if_name);

        if (empty($this->TEMPLATES[$tpl_name]))
            $tpl->Error("Cannot find [<b>$tpl_name</b>] in templates array.",1);
        
        if (empty($this->TEMPLATESTOSHOW[$tpl_name]))
            $this->TEMPLATESTOSHOW[$tpl_name] = $this->TEMPLATES[$tpl_name];
        
        if ($use==1) {
            $this->TEMPLATESTOSHOW[$tpl_name] = preg_replace("/(\{IF=".$if_name."\})(.*)(\{\/IF=".$if_name."\})/U","\\2", $this->TEMPLATESTOSHOW[$tpl_name]);
        } else {
            $this->TEMPLATESTOSHOW[$tpl_name] = preg_replace("/(\{IF=".$if_name."\})(.*)(\{\/IF=".$if_name."\})/U","",$this->TEMPLATESTOSHOW[$tpl_name]);
        }
    }
    // KNIP REST CODE.......
}

//aanroep via....
$tpl->UseIF(tplnaam,"ifnaam",0);

Hij wil de code's niet vervangen. En als het buiten de class is dan wel.

Wat heb je er aan getest?
Gegeken of de waardes wel bestaan(echo alle strings stuk voor stuk en bekijken).
Alle strings kloppen dus, maar hij wil nogsteeds de code's niet vervangen. En als ik de zelde preg regel gebruik in een nieuwe file met alleen deze functie dan wil het wel werken(ipv $this->TEMPLATESTOSHOW gebruik ik dan $text die global is).

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Oké het probleem zit hem ergens, en NIET in de preg_replace. Ik heb nou deze 2 code's getest, de 1e code is gewoon op een lege pagina, de 2e code in mijn tpl engine.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function a($naam,$text,$use=1) {
    $naam = strtoupper($naam);
    if ($use==0)
        $text = preg_replace("/(\{IF=".$naam."\})(.*)(\{\/IF=".$naam."\})/U",
        "", $text);
    else
        $text = preg_replace("/(\{IF=".$naam."\})(.*)(\{\/IF=".$naam."\})/U",
        "\\2", $text);
        
    return $text;
}

$a = "234234234234234{IF=BLA}wzgsdfghsdfgdfgdfgdfg{/IF=BLA}";
$a = a("bla",$a,0);
echo $a;


PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//dit staat dus in mijn class Template...
    function UseIF($tpl_name,$naam,$use=1) {
        $naam = strtoupper($naam);
        
        if (empty($this->TEMPLATES[$tpl_name]))
            $tpl->Error("Cannot find [<b>$tpl_name</b>] in templates array.",1);
        
        if (empty($this->TEMPLATESTOSHOW[$tpl_name]))
            $this->TEMPLATESTOSHOW[$tpl_name] = $this->TEMPLATES[$tpl_name];
        
        if ($use==0)
            $this->TEMPLATESTOSHOW[$tpl_name] =
            preg_replace("/(\{IF=".$naam."\})(.*)(\{\/IF=".$naam."\})/U",
            "", $this->TEMPLATESTOSHOW[$tpl_name]);
        else
            $this->TEMPLATESTOSHOW[$tpl_name] = 
            preg_replace("/(\{IF=".$naam."\})(.*)(\{\/IF=".$naam."\})/U",
            "\\2", $this->TEMPLATESTOSHOW[$tpl_name]);
    }
//veel geknipt, alles behalve de UseIF Functie waar het probleem in voorkomt.


Waarom werkt de replace wel bij de 1e functie en niet in de class? het doet toch eigenlijk het zelfde, niet dan?

Acties:
  • 0 Henk 'm!

  • The_Eternal
  • Registratie: Oktober 2001
  • Laatst online: 26-08 16:59
Waarom zou je een if / loop nabootsen als deze in php al bestaan :)
in principe is php een template engine.
als je het goed regeld is php code en dynamische html makkelijk te splitsen.
ik heb zelf ook veel met een echte template engine gewerkt, maar uiteindelijk kan je er, vooral bij grote templates veel tijd uit persen door php te gebruiken ipv een template engine :)

je kan gewoon een template systeem nabootsen door gebruik te maken van ob_start() en ob_get_contents() en ob_end_clean(). waarna je de 'geparstte template' in een string krijgt via ob_get_contents :)

[ Voor 22% gewijzigd door The_Eternal op 28-07-2003 18:28 ]

Uhm... ja


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
The_Eternal schreef op 28 July 2003 @ 18:25:
Waarom zou je een if / loop nabootsen als deze in php al bestaan :)
in principe is php een template engine.
als je het goed regeld is php code en dynamische html makkelijk te splitsen.
ik heb zelf ook veel met een echte template engine gewerkt, maar uiteindelijk kan je er, vooral bij grote templates veel tijd uit persen door php te gebruiken ipv een template engine :)

je kan gewoon een template systeem nabootsen door gebruik te maken van ob_start() en ob_get_contents() en ob_end_clean(). waarna je de 'geparstte template' in een string krijgt via ob_get_contents :)
Ik zal eens kijken naar die functies.
Maar waarom ik het namaak? Ik wil gebruik maken van verschillende templates op een site, die templates kunnen als je de html met php genereerd dus niet zo makkelijk veranderd worden. dan moet je namelijk halve php code's veranderen. Zo is het makkelijker voor mij want zo kan ik simpel in verschillende secties op de website de layout er naar aanpassen omdat ik maar 1 file hoef aan te passen ipv veel php files. Ik had het vroeger dus gewoon in de php file zelf staan. Dat is leuk als je je layout niet veranderd, maar dan komt je designer aan dat het weer anders mag, erg leuk :/ ;)

Ne het gaat me er gewoon om dat de layout van mijn site in aparte files staat, want dan kan ik designers gewoon ftp rechten geven en hoef ik zelf niet alles te doen(uploaden etc). En ze kunnen niet bij mijn scripts want die staan dus niet in die dir.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Nou de IF's werken, nou heb ik nog een _klein_ probleempje met het vervangen van wat waardes.

het gaat om deze php code
PHP:
1
2
$this->ORGLOOPS[$naam] = preg_replace("/\{LOOP=".$naam."\}(.*)\{\/LOOP=".$naam."\}/sU","\\1",
$this->TEMPLATESTOSHOW[$tpl_name]);


hierbij gebruik ik b.v. deze tpl file, alleen hij returned hem dan fout.

code:
1
2
3
4
5
6
asd
{LOOP=A}asdasdasdasdasd
asdasdads
asdasdasd{/LOOP=A}
asdasdasd
asdasd


Hij returned dus de complete template file naar $this->ORGLOOPS ipv alle dat TUSSEN de {LOOP=A} en {/LOOP=A} staat. En dan heeft hij wel de loop codes weg gehaald, dit is vaag. Dit zou hij toch gewoon moetten doen? de eerste haakjes serie wordt \\1, dus dan zou ik alles wat TUSSEN de loop codes staat in die string moetten hebben. Dat doet hij dus niet :(

Acties:
  • 0 Henk 'm!

  • Martin Sturm
  • Registratie: December 1999
  • Laatst online: 09-09 17:23
Volgens mij moet je het dan anders doen
PHP:
1
2
3
4
<?
$this->ORGLOOPS[$naam] = preg_replace("/(\{LOOP=".$naam."\})(.*)(\{\/LOOP=".$naam."\})/sU","\\2",
$this->TEMPLATESTOSHOW[$tpl_name]);
?>

Acties:
  • 0 Henk 'm!

Verwijderd

offtopic:
Even een vraag tussendoor, soms wordt er bij preg_replace ook wel afgesloten met /si ofzo, maar hoe kan je weten of het /sU is of nog iets anders? Ik vind namelijk niet veel op het internet, zelfs niet op de search van Got

Acties:
  • 0 Henk 'm!

  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07 12:07
King : regex is heus niet zo snel als meeste mensen denken. vaak is het beter en sneller als je gewoon string functies gebruikt. Deze hebben ook geen overhead van de REGEX engine.

Ik zeg dit met ervaring met PHP 4.3.1 en heb sindsdien nooit geen regex meer gebruikt. Wel heb je meer code natuurlijk maar dit moet je beschouwen als 'parsed' regex. En meestal kun je dan beter werken met strings (ie no overhead en copy/paste gedoe). Meestal ook iets leesbaar voor de leek, maar dat is niet echt boeiend (wel voor debugging).

Acties:
  • 0 Henk 'm!

  • The_Eternal
  • Registratie: Oktober 2001
  • Laatst online: 26-08 16:59
Verwijderd schreef op 28 July 2003 @ 18:35:
[...]

Ik zal eens kijken naar die functies.
Maar waarom ik het namaak? Ik wil gebruik maken van verschillende templates op een site, die templates kunnen als je de html met php genereerd dus niet zo makkelijk veranderd worden. dan moet je namelijk halve php code's veranderen. Zo is het makkelijker voor mij want zo kan ik simpel in verschillende secties op de website de layout er naar aanpassen omdat ik maar 1 file hoef aan te passen ipv veel php files. Ik had het vroeger dus gewoon in de php file zelf staan. Dat is leuk als je je layout niet veranderd, maar dan komt je designer aan dat het weer anders mag, erg leuk :/ ;)

Ne het gaat me er gewoon om dat de layout van mijn site in aparte files staat, want dan kan ik designers gewoon ftp rechten geven en hoef ik zelf niet alles te doen(uploaden etc). En ze kunnen niet bij mijn scripts want die staan dus niet in die dir.
daarom zeg ik ook dat je de eigenlijke php code moet opsplitsen van de templates. wat je nu in principe ook wil doen. dan doe je iets van:

require('includes/php/news.php');
require('includes/tpl/news.php');

in de php dir gooi je het laden van de data. b.v.
$data = 'piet';

en in de tpl dir geef je die data met behulp van zo simpel / weinig mogelijk php weer:

<B><? echo round($data); ?></B><BR>

bijvoorbeeld :)
het voordeel hierbij is dat je ALLE php functies kan gebruiken om data te formatteren. (round, number_format, replace, verzin het maar ;P) en daarnaast is het een stuk sneller dan het parsen van een complete template EN is alles toch netjes opgesplitst :)

Uhm... ja


Acties:
  • 0 Henk 'm!

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 15-09 16:19

alienfruit

the alien you never expected

Ik heb dit probleem gewoon opgelost door Velocity achtige templates te gebruiken als php module :) Lekker snel en géén PHP maar mooi good old C++ powah!

Meer informatie over Velocity Template Engine: http://jakarta.apache.org/velocity/user-guide.html
Velocity Template Engine is geschreven in Java, maar er was geen JVM op de webserver... Dus heb een groot deel van de Java code wel kunnen gebruiken door BXML om te zetten naar C code via een XSLt transform :Y)

[ Voor 60% gewijzigd door alienfruit op 29-07-2003 23:36 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op 29 July 2003 @ 18:17:
offtopic:
Even een vraag tussendoor, soms wordt er bij preg_replace ook wel afgesloten met /si ofzo, maar hoe kan je weten of het /sU is of nog iets anders? Ik vind namelijk niet veel op het internet, zelfs niet op de search van Got
http://nl.php.net/manual/en/pcre.pattern.modifiers.php
http://nl.php.net/regex ;)

hobbit_be:
dat klopt wel ja, maar ik kies in dit script voor eenvoud, zodat andere als mij er aan kunnen werken zonder denken ;)

The_Eternal:
klopt ook, is sneller, maar voor een cms systeem niet echt makkelijk voor de klanten.
als klant wil je geen moeite doen voor het maken van een website, moetten ze nog met php aan de gang, lekker :/ ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Martin Sturm:
Dat zou toch niets mogen uitmaken hoe ik die extra haakjes gebruik? is alleen maar vertragend dus daarom had ik die andere even weg gelaten.
Maar het maakt geen verschil of ik ze met of zonder haakjes gebruik. Ik blijf continu de complete template file terug krijgen, en ik heb een testcode die doet het wel, verwerk ik die naar deze code dan werkt het niet(zelfde code).
Namelijk gebruik ik voor de IF code's als een if gebruikt moet worden de zelfde code, hier replaced + returned hij de code _WEL_ goed, de code daarvan staat hier beneden.
PHP:
1
2
3
4
$this->TEMPLATESTOSHOW[$tpl_name] =
preg_replace("/(\\".$this->REPLACEBYLEFT."IF=".$naam."\\".$this->REPLACEBTRIGHT.")
(.*)(\\".$this->REPLACEBYLEFT."\/IF=".$naam."\\".$this->REPLACEBTRIGHT.")/sU",
"\\2", $this->TEMPLATESTOSHOW[$tpl_name]);

paar enters er tussen, moeilijker leesbaar, beter voor layout ;)

als ik de preg_replace code die hij moet vervangen ga echoén, dan krijg ik deze code te zien:
code:
1
/\{LOOP=REACTIE\}(.*)\{\/LOOP=REACTIE\}/sU

Dit zou gewoon moetten kloppen, dan de \\1 is de loop-inhoud, alleen dat pikt hij niet op.
\\2 als je bij de loops ook haakjes ( ( en ) ) zet.

[edit]
Ik schaam me dood.

preg_replace code:
code:
1
/.*\{LOOP=REACTIE\}(.*)\{\/LOOP=REACTIE\}.*/sU

Werkt iets beter ;)

[ Voor 40% gewijzigd door Verwijderd op 30-07-2003 16:06 ]

Pagina: 1