[PHP] Eigen template engine..

Pagina: 1 2 Laatste
Acties:
  • 266 views sinds 30-01-2008
  • Reageer

Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Op vrijdag 05 april 2002 15:17 schreef Nielsz het volgende:

[..]

Dat is allemaal zo, maar als je een brakke browser gebruikt, gaat het niet goed :?
Das een nadeel en daar vroeg je niet naar... >:)

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • Nielsz
  • Registratie: Maart 2001
  • Niet online
Op vrijdag 05 april 2002 15:21 schreef LuCarD het volgende:

[..]

Das een nadeel en daar vroeg je niet naar... >:)
wijs-neus :P
'vroeger' kon het alleen foutgaan met HTML. Dat was de enige stap waardoor er verschillen konden zijn.
Nu komt daar weer een stap bij, XSLT. Nu zijn er dus 2 stappen waar het fout kan gaan. Lijkt me geen optimale situatie.

Acties:
  • 0 Henk 'm!

  • Grum
  • Registratie: Juni 2001
  • Niet online
Noem eens een paar browsers die 95%+ compliant zijn met xml/xslt aub, dat zijn volgens mij namelijk niet alle bekende browsers.

Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Op vrijdag 05 april 2002 15:39 schreef Grum het volgende:
Noem eens een paar browsers die 95%+ compliant zijn met xml/xslt aub, dat zijn volgens mij namelijk niet alle bekende browsers.
Denk geen een....

Maar dat was met HTML in het begin ook niet....

Komt wel.. en dat is een van de grootste voordelen van XSL. Het gaat zometeen net zo uitgebreid worden ondersteund als HTML.

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • Grum
  • Registratie: Juni 2001
  • Niet online
Ik zie op dit moment voornamelijk nadelen en dus niet echt een reden om er uberhaubt iets mee te doen.

Acties:
  • 0 Henk 'm!

  • tomato
  • Registratie: November 1999
  • Niet online
Het gebruik als stylesheets voor HTML pagina's is bij lange na niet de interessantste of meest logische toepassing van XSLT, zeker niet client-side.

Maar dit doet natuurlijk niets af aan de waarde van XSLT in het algemeen :)

Acties:
  • 0 Henk 'm!

  • Nielsz
  • Registratie: Maart 2001
  • Niet online
Op vrijdag 05 april 2002 16:58 schreef tomato het volgende:
Het gebruik als stylesheets voor HTML pagina's is bij lange na niet de interessantste of meest logische toepassing van XSLT, zeker niet client-side.

Maar dit doet natuurlijk niets af aan de waarde van XSLT in het algemeen :)
Maar wat is dan wel een interessantse toepassing, want veel meer dan voor html kan ik er niet voor bedenken :X :)

Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Op vrijdag 05 april 2002 17:06 schreef Nielsz het volgende:

[..]

Maar wat is dan wel een interessantse toepassing, want veel meer dan voor html kan ik er niet voor bedenken :X :)
XSLT is een transformatie taal van XML data naar een andere vorm. Je kan met gemak transformeren naar HTML (duh :) ), XML, CSV, PLAIN TEXT, WAP(?), PRINTER, speciaal formaat voor blinden...

En volgens mij zijn er geen beperkingen waar je naar toe kan transformeren....

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • Nielsz
  • Registratie: Maart 2001
  • Niet online
Op vrijdag 05 april 2002 17:10 schreef LuCarD het volgende:

[..]

XSLT is een transformatie taal van XML data naar een andere vorm. Je kan met gemak transformeren naar HTML (duh :) ), XML, CSV, PLAIN TEXT, WAP(?), PRINTER, speciaal formaat voor blinden...

En volgens mij zijn er geen beperkingen waar je naar toe kan transformeren....
Best gek, want na deze text van jou snap ik het ineens een stuk beter :Y)
en ik ben nog serieus ook |:( :)

Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Op vrijdag 05 april 2002 17:15 schreef Nielsz het volgende:

[..]

Best gek, want na deze text van jou snap ik het ineens een stuk beter :Y)
en ik ben nog serieus ook |:( :)
Hmmm dat is best gek ja.....

;)

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
Misschien dat je hier trouwens nog wat aan hebt:
PHP:
1
<?function ParseText($text, $arr){    if(is_array($arr)){      $arr_keys=array_keys($arr);      while(count($arr)){        $itm=array_pop($arr);        $key=array_pop($arr_keys);        $text=str_replace("%" . $key . "%", $itm, $text);      }    }    return $text;  }?>

Gebruik:
PHP:
1
<?$tekst="<html><head><title>%title%</title></head><body>%bodytext%</body></html>";$array=array(  "title"=>"Mijn site",  "bodytext"=>"<h1>Hoi Wereld</h1>");ParseText($tekst, $array);?>

De uitpoep kan je zelf wel raden....

Acties:
  • 0 Henk 'm!

  • Tim
  • Registratie: Mei 2000
  • Laatst online: 04-08 16:29

Tim

Op donderdag 04 april 2002 21:12 schreef Grum het volgende:
[/edit][/sup]

Timpie:
$array[$i][0] = $key
$array[$i][1] = $value


en dat doe je dan dus gewoon met
code:
1
$array[$key][] = $value;

:P
Dat lijkt me opzich dus niet zo handig, wat als je dan een waarde wilt overschrijven? Gaat het opeens fout :)

Acties:
  • 0 Henk 'm!

  • djc
  • Registratie: December 2001
  • Laatst online: 08-09 23:18

djc

Op vrijdag 05 april 2002 16:58 schreef tomato het volgende:
Het gebruik als stylesheets voor HTML pagina's is bij lange na niet de interessantste of meest logische toepassing van XSLT, zeker niet client-side.
Waarom vooral niet client-side?

Rustacean


Acties:
  • 0 Henk 'm!

  • tomato
  • Registratie: November 1999
  • Niet online
Manuzhai: Waarom vooral niet client-side?
Misschien was het laatste deel van de zin een beetje krom. Ik bedoelde iig dat je HTML stylesheets als interessante toepassing van XSLT niet client-side moet zoeken.
In ieder geval niet nu. Of je moet een beperkte doelgroep hebben of eisen kunnen stellen aan de doelgroep van je applicatie. Wanneer je bijvoorbeeld Mozilla 0.9.7+ of Internet Explorer 6 kunt eisen wordt client-side processing wel degelijk interessant.
Maar dan nog zal server-side gebruik van XSLT in de vorm van HTML stylesheets interessant blijven, er kunnen bijvoorbeeld meerdere stappen in het proces zijn waarvan enkele wel server-side moeten (denk bijvoorbeeld aan security etc).


Maar wat ik vooral met mijn post bedoelde: XSLT heeft zoveel meer toepassingen dan als HTML template engine.

Acties:
  • 0 Henk 'm!

  • djc
  • Registratie: December 2001
  • Laatst online: 08-09 23:18

djc

Op vrijdag 05 april 2002 18:52 schreef tomato het volgende:
Misschien was het laatste deel van de zin een beetje krom. Ik bedoelde iig dat je HTML stylesheets als interessante toepassing van XSLT niet client-side moet zoeken.
In ieder geval niet nu. Of je moet een beperkte doelgroep hebben of eisen kunnen stellen aan de doelgroep van je applicatie. Wanneer je bijvoorbeeld Mozilla 0.9.7+ of Internet Explorer 6 kunt eisen wordt client-side processing wel degelijk interessant.
Maar dan nog zal server-side gebruik van XSLT in de vorm van HTML stylesheets interessant blijven, er kunnen bijvoorbeeld meerdere stappen in het proces zijn waarvan enkele wel server-side moeten (denk bijvoorbeeld aan security etc).
Je kan performance-wise mensen met Moz of IE de XSLT zelf laten doen, en de rest server-transformed shit geven. :) Nu heeft dat misschien nog niet veel zin, maar dat komt nog wel. En als je een doelgroep hebt die redelijk up2date is (techies) betekent dat dat je minder zelf hoeft te transformeren.

Rustacean


Acties:
  • 0 Henk 'm!

Verwijderd

Als iemand nog interesse heeft ik heb zelf ook al een template engine geschreven, werkt prima.

ik heb een paar speciale keys gemaakt die door de template engine zelf vervangen worden. Een hiervan is taalafhankelijke keys erg handig als je een site in 2 talen wilt maken.
Verder kun je ook 1 hele file met een key includen en nog wat andere handige shit... Als er interesse is mail dan ff. Aan de documentatie wordt gewerkt (anders ben ik zelf ook zo weer vergeten hoe ie werkt ;) )

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Post ut maar, dit is natuurlijk een leuk topic om iedereen samen te laten werken :)

En heeft iemand ook een oplossing voor mijn probleem? grin... want zag/las meer dingen over template engines in het algemeen (XLT ofzo :?)

Acties:
  • 0 Henk 'm!

  • Grum
  • Registratie: Juni 2001
  • Niet online
Op vrijdag 05 april 2002 18:04 schreef Timpie het volgende:

Dat lijkt me opzich dus niet zo handig, wat als je dan een waarde wilt overschrijven? Gaat het opeens fout :)
je zei eerder:

maar dan kan je geen dubbele keys invoeren


Je mist de hele context nu dus :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Op vrijdag 05 april 2002 10:55 schreef marcusk het volgende:

[..]

Met de eval-modifier (/e) kun je een functie uitvoeren op de gematchde tekst. In de php manual staat dit voorbeeld:
code:
1
2
3
4
// This would capitalize all HTML tags in the input text.
preg_replace ("/(<\/?)(\w+)([^>]*>)/e", 
          "'\\1'.strtoupper('\\2').'\\3'", 
          $html_body);

Je kunt dus de gematchde %tekst% en <htmlshitbladiebla> doorgeven aan een functie die <htmlshitbladiebla> terug geeft als %tekst% bestaat, anders een lege string.
sorry maar dit vat ik niet, het lijkt allemaal zo gemakkelijk maar de /(\/?) etc code is voor mij :? :? :? :D

Acties:
  • 0 Henk 'm!

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Op vrijdag 05 april 2002 21:03 schreef xtentic het volgende:

[..]

sorry maar dit vat ik niet, het lijkt allemaal zo gemakkelijk maar de /(\/?) etc code is voor mij :? :? :? :D
Gewoon stukje voor stukje lezen dan valt het wel mee:
code:
1
2
3
(<\/?) - probeer de < te matchen met daarachter optioneel(=?) een / teken, de \ is om de / te escapen, anders zou dit het einde van de regex betekenen.
(\w+) - pak 1 woord en stop dit in een groep. \w staat voor een alpha-numeriek karakter, de + betekent dat er een of meer direct achter elkaar moeten staan.
([^>]*>) - stop nu alle tekens in de 3e groep behalve het '>' teken, dit is immers het einde van de tag, het sterretje betekent 'zoveel mogelijk'. Hier komen dus de parameters van een tag in te staan

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Op vrijdag 05 april 2002 21:11 schreef Orphix het volgende:

[..]

Gewoon stukje voor stukje lezen dan valt het wel mee:
code:
1
2
3
4
5
6
7
(<\/?) - probeer de < te matchen met daarachter optioneel(=?) een / teken, 
de \ is om de / te escapen, anders zou dit het einde van de regex betekenen.
(\w+) - pak 1 woord en stop dit in een groep. \w staat voor een alpha-numeriek karakter, 
de + betekent dat er een of meer direct achter elkaar moeten staan.
([^>]*>) - stop nu alle tekens in de 3e groep behalve het '>' teken, dit is immers het einde van de tag, 
het sterretje betekent 'zoveel mogelijk'. 
Hier komen dus de parameters van een tag in te staan
ik snap nu de (<\/?) nu denk ik wel... dat zou dan in mijn geval

([ifset=\"w+\"](.*)([/ifset])) moeten worden? :D

voor het uitlezen van [ifset="[b]%text%[/b]"]detextenzo[/ifset]

dus wanneer ik in mijn template parser de %text% heb gedefinieerd wil ik dat [ifset="%text%"] & [/ifset] weg gehaald worden, zoniet moet alles weg gehaald worden :) (i.v.m de output)

Acties:
  • 0 Henk 'm!

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
Op vrijdag 05 april 2002 21:19 schreef xtentic het volgende:
dat zou dan in mijn geval
([ifset=\"w+\"](.*)([/ifset])) moeten worden? :D
als je [ gebruikt ipv < moet je dat natuurlijk escapen. verder wil je w+ capturen (tussen haakjes zetten) en [/ifset] en de gehele regex niet (dus de buitenste haakjes moeten ook weg), aangezien je die captures niet nodig hebt.
dus wanneer ik in mijn template parser de %text% heb gedefinieerd wil ik dat [ifset="%text%"] & [/ifset] weg gehaald worden, zoniet moet alles weg gehaald worden :) (i.v.m de output)
om precies te zijn: als %tekst% gedefinieerd is moet je de boel vervangen door detekstenzo, anders vervangen door niets :)

Acties:
  • 0 Henk 'm!

  • tomato
  • Registratie: November 1999
  • Niet online
Nog wat ideetjes voor jullie uit mijn template engine *D :
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
* Database driven
* Webbased template editor
* Variabele substitutie:
  - {VarName}
  - {HashName.Key} voor arrays
* Conditional statements:
  - {{VarName}?Var is true:Var is niet true}
  - {{VarName}=34?Gelijk aan 34:Niet gelijk aan 34}
  - {{VarName}={OtherVarName}?Gelijk:Niet gelijk}
* Datum en tijd opmaak:
  - {time,{},} Huidige tijd in standaard opmaak
  - {time,{TijdVar},} Tijd in standaard opmaak
  - {time,{TijdVar},H:i, d-m-Y} Tijd in opgegeven opmaak
* Alle taalconstructies kunnen genest worden
* Runtime caching
* Debug mode
* Sneller dan alle bij mij bekende PHP template engines

Todo:
* Template cooker om templates om te zetten in native PHP
* Documentatie :D
* Uitgebreidere foutmelding bij syntax errors in template

Eigenlijk is het nog steeds een Quick Hack (tm) by tomato, maar voor mezelf is ie al geruime tijd zeer bruikbaar. Huidige versie is 0.91.

Acties:
  • 0 Henk 'm!

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Op zondag 22 Maart 1998 19:52 schreef Orphix het volgende:
Mijn template engine heb ik vrij generiek opgezet. Het kan elke gestructureerde data dat van XML is afgeleid zeg maar 'transformeren' naar een andere data formaat en daarbij de data muteren. En ja ik heb er ook loopjes in zitten, templatematching, node-pattern-matching en the usual..ach het werkt voor mij dus waarom niet he, misschien dat ik het ooit nog eens ga uitwerken en publiceren :Y) :)
:X ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Op vrijdag 05 april 2002 22:54 schreef tomato het volgende:
Nog wat ideetjes voor jullie uit mijn template engine *D :
code:
1
2
3
4
5
* Database driven
* Conditional statements:
  - {{VarName}?Var is true:Var is niet true}
  - {{VarName}=34?Gelijk aan 34:Niet gelijk aan 34}
  - {{VarName}={OtherVarName}?Gelijk:Niet gelijk}
Nu, dat vind ik persoonlijk de 2 handigste opties eruit :)

EDIT: :) :o

Acties:
  • 0 Henk 'm!

  • Grum
  • Registratie: Juni 2001
  • Niet online
DiEana: Nu, dat vind ik persoonlijk de 2 handigste opties eruit :)


Je noemt er anders 3 :X

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Op zaterdag 06 april 2002 10:02 schreef Grum het volgende:
DiEana: Nu, dat vind ik persoonlijk de 2 handigste opties eruit :)


Je noemt er anders 3 :X
als je ut zo bekijkt heeft ie er 5 :+ (of 4? :D)

Acties:
  • 0 Henk 'm!

Verwijderd

:)

Die condities moet ik ook dringend maken in mijn template systeempje, want ik word er zo moe van als ik steeds een nieuwe templatefile moet aanmaken, voor maar 1 kleine verandering :\

Acties:
  • 0 Henk 'm!

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 22:41
Ok Tomato, je hebt me overtuigd. Waar kan ik je template engine downloaden ? :+

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Op zaterdag 06 april 2002 10:06 schreef DiEana het volgende:
:)

Die condities moet ik ook dringend maken in mijn template systeempje, want ik word er zo moe van als ik steeds een nieuwe templatefile moet aanmaken, voor maar 1 kleine verandering :\
daarom add ik er nu ook een [ifset="%bladediebla%"]regel[/ifset] in :)... en nu ik die andere dingen zie is [ifkey="%test%"=="32"]bladediebla[/ifkey] ook wel handig...

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb nu de [ifset="%nogwat%]werkend[/ifset] en wil ook nog een [optionname="%bla%"] er in verwerken... teminste lijkt me handig, heeft iemand nog meer goede ideeen?... gewoon dingen die ik simpel kan adden? ;)

Tnx

Acties:
  • 0 Henk 'm!

Verwijderd

wat wil je met option ?? maybe kan je je sourse, want ik wil wel es zien wat je er van gebrouwd heb

Acties:
  • 0 Henk 'm!

Verwijderd

ik heb ook probleempje bij mijn template parser

ik wil deze tag maken:

[BLOCK content]content hier[/END content]

Hij moet dan "content hier" in een array genaamd $block plaatsen.

$block["content"] = "content hier";

Ik krijg dit niet voor elkaar met preg_replace
ik heb dit:
PHP:
1
<?    function saveblock ($name, $data)    {        $this->block["$name"][1] = $data;        return "[BLOCK $name]";// Geef [BLOCK $name] terug, omdat deze later weer overschreven word.    }preg_replace("/\[BLOCK (.*)\](.*|\n)\\[\/END (.*)\]/ise", "$this->saveblock('\\1','\\2')", $this->data["$name"][1]);// $this->data["$name"][1] daar zit de hele template in.?>

Alleen werkt die preg_replace nie.. ik zou ook graag willen dat je meerdere blocks in elkaar kon doen

[block content]
[block tabel]
blaat
[/end tabel]
[/end content]

iemand een idee?

Acties:
  • 0 Henk 'm!

  • Nielsz
  • Registratie: Maart 2001
  • Niet online
ik ben ook maar eens begonnen 8-)

Acties:
  • 0 Henk 'm!

Verwijderd

Het wordt hier bijna een template orgie :)

Acties:
  • 0 Henk 'm!

  • Grum
  • Registratie: Juni 2001
  • Niet online
Stoel: iemand een idee?


Stackbased parser maken, dit kan per definitie beter NIET met regexps.

Acties:
  • 0 Henk 'm!

Verwijderd

Op zaterdag 06 april 2002 15:30 schreef Grum het volgende:
Stoel: iemand een idee?


Stackbased parser maken, dit kan per definitie beter NIET met regexps.
Uhh, stackbased :? :? ?

Acties:
  • 0 Henk 'm!

Verwijderd

Grum: Stackbased parser maken, dit kan per definitie beter NIET met regexps.
Waarom? >:)

Acties:
  • 0 Henk 'm!

  • tomato
  • Registratie: November 1999
  • Niet online
Arien: Waarom? >:)
nested - a whatis definition:
nested

In general, something that is nested is fully contained within something else of the same kind. In programming, nested describes code that performs a particular function and that is contained within code that performs a broader function. One well-known example is the procedure known as the nested do-loop. In data structures, data organizations that are separately identifiable but also part of a larger data organization are said to be nested within the larger organization. A table within a table is a nested table. A list within a list is a nested list.

You'd rather not parse nested structures with a regular expression. Use a stack-based parser instead.

A common alternative to nested is the prefix sub, as in subprocedure, substructure, subtransaction, and so forth.
Because the definition says so :P

Acties:
  • 0 Henk 'm!

  • Grum
  • Registratie: Juni 2001
  • Niet online
Tomato: :* (zoals ook nog steeds .. ghehe .. in me sig staat :D)

Acties:
  • 0 Henk 'm!

Verwijderd

tomato: nested - a whatis definition: Because the definition says so :P
Recursieve regex. >:)

:P

Acties:
  • 0 Henk 'm!

  • Grum
  • Registratie: Juni 2001
  • Niet online
Well .. what are you waiting for ... show of your skilllzzz. :+

Acties:
  • 0 Henk 'm!

Verwijderd

Grum: Well .. what are you waiting for ... show of your skilllzzz. :+
Waarom zou ik een template eninge moeten hebbeb? Ik maak toch geen forum ofzo? >:)

En met regexen parsen: zie eerste reply van [topic=452595]. :) (De stack enzo mag je erbij denken. :+)

(Waarom niet templates via XSLT vertalen? Hallo Martin! :+)

Acties:
  • 0 Henk 'm!

Verwijderd

wat is stackbased :?

Acties:
  • 0 Henk 'm!

  • Grum
  • Registratie: Juni 2001
  • Niet online
Stackbased is een term die je op google.com kan invullen en dan enorme bergen info over terug krijgt.

Acties:
  • 0 Henk 'm!

  • tomato
  • Registratie: November 1999
  • Niet online
Stoel: wat is stackbased :?
Een stack is een LIFO collectie. LIFO staat voor 'Last In First Out'.

Een andere vorm van collecties is een FIFO stucture (First In First Out), bijvoorbeeld Queues.

Een voorbeeld van een stack is een array in PHP waar je alleen een item afhaalt als dat als laatste is toegevoegd.

Met stack-based parsen wordt dan ook een manier van parsen bedoeld waarbij je gebruik maakt van een stack. Doorgaans wordt het subject (de string) van begin tot eind doorlopen en worden in de stack states opgeslagen.
Wanneer je bijvoorbeeld een openings-<B> tegenkomt sla je die op in de stack (met een 'push' method). Hierna kun je natuurlijk alleen nieuwe openingstags tegenkomen, of een sluitings-</B> tag. Iedere openingstag push je weer op de stack en bij een sluitingstag haal je weer een element van de stack af (en als het goed is, is dat altijd het bijbehorende element, je haalt ze weer in omgekeerde volgorde eraf). Een item van de stack halen doe je met een 'pop' method.
Heb je heel je string doorlopen, dan moet je stack weer leeg zijn.

De loop is dan de engine van je parser en de stack gebruik je om de state in op te slaan.
Je kunt zelf een LIFO stucture ontwerpen, maar je kunt ook gewoon een PHP array nemen en je bij het gebruik daarvan aan de regels houden die bij een stack horen.

Acties:
  • 0 Henk 'm!

  • Johannes
  • Registratie: Juni 2000
  • Laatst online: 09-07 21:03
Op zaterdag 06 april 2002 16:59 schreef Grum het volgende:
Stackbased is een term die je op google.com kan invullen en dan enorme bergen info over terug krijgt.
Valt nogal tegen, volgens mij. Maar het principe is heel simpel. Je hebt een stack(een stapel). Daar gooi je wat op, en omdat het een stapel is, moet je steeds de bovenste er van afhalen(LIFO - Last In, First Out). Het kan ook andersom(FIFO - First In, First Out), maar dan heb je een queue(een wachtrij).
Dit kan je bijvoorbeeld gebruiken voor HTML-parsers en template engines. Als je een tag tegenkomt, gooi je die op de stack, als je dan de afsluitende tag tegenkomt, haal je 'm van de stack af. Je kunt dan ook meteen checken of het de tags goed in elkaar zitten, want als er een tag niet afgesloten is, dan klopt de tag op de stack niet met de afsluitende tag die je net gevonden hebt(waarna je dus fijn een error naar de browser kan sturen :P )

[Edit]
Tomato was wat eerder en duidelijker. :D

Overigens vind ik het een beetje raar dat je een template engine gaat schrijven in PHP. PHP is nu juist zo bedoeld dat het zelf een template-engine is. Eigenlijk probeer je de taal steeds simpeler te maken. Is PHP niet simpel genoeg?

Uit volle borst op weg naar nergens / Zonder reden zonder doel
Met m'n zeden en m'n zonden / En mijn angstig voorgevoel
Laat mij mijn kont tegen de krib / Laat mij dit goddeloze lied
Hef jij je handen maar ten hemel / Maar red mij niet


Acties:
  • 0 Henk 'm!

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Op zaterdag 06 april 2002 17:06 schreef Johannes het volgende:
Overigens vind ik het een beetje raar dat je een template engine gaat schrijven in PHP. PHP is nu juist zo bedoeld dat het zelf een template-engine is. Eigenlijk probeer je de taal steeds simpeler te maken. Is PHP niet simpel genoeg?
De scheiding tussen code en layout is vaak nog steeds erg wenselijk. Als je bv een forum levert aan klanten dan wil je niet dat ze in je PHP's moeten klooien en vervolgens allerlei parse errors krijgen en jou de schuld geven.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb het idee om het maar zo te doen, ik kan meerdere templates tegelijk laden en per template de dingen toevoegen en wanneer ik de layout wil laten zien parse ik gewoon alle string met mijn routine :)...

dus ik kan mijn header, content en footer apart laden en weergeven :)

Acties:
  • 0 Henk 'm!

  • Johannes
  • Registratie: Juni 2000
  • Laatst online: 09-07 21:03
Op zaterdag 06 april 2002 17:18 schreef Orphix het volgende:

[..]

De scheiding tussen code en layout is vaak nog steeds erg wenselijk. Als je bv een forum levert aan klanten dan wil je niet dat ze in je PHP's moeten klooien en vervolgens allerlei parse errors krijgen en jou de schuld geven.
Ik snap de voordelen van templates wel, maar ik vind het een kludge om een template-taal(ik moet toegeven, een krachtige), te gebruiken om een template-engine te bouwen voor een nieuwe template-taal(is 't nog duidelijk?).

Uit volle borst op weg naar nergens / Zonder reden zonder doel
Met m'n zeden en m'n zonden / En mijn angstig voorgevoel
Laat mij mijn kont tegen de krib / Laat mij dit goddeloze lied
Hef jij je handen maar ten hemel / Maar red mij niet


Acties:
  • 0 Henk 'm!

  • Nielsz
  • Registratie: Maart 2001
  • Niet online
Op zaterdag 06 april 2002 16:17 schreef Arien het volgende:

[..]

Recursieve regex. >:)

:P
8-)
Oftewel ik ben bezig met een parser die dmv regexp's recursief een stack opbouwt :7

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Johannes:
Ik snap de voordelen van templates wel, maar ik vind het een kludge om een template-taal(ik moet toegeven, een krachtige), te gebruiken om een template-engine te bouwen voor een nieuwe template-taal(is 't nog duidelijk?).
woei :) Kan me herinneren dat Arien er ongeveer een jaar geleden precies hetzelfde over zei...

Ik heb de volgende "tegenwerping":
  • PHP overstijgt doorgaans een template-taal behoorlijk. Je zou kunnen zeggen dat het het midden houdt tussen een script-taal en een template-engine.
  • Laten we er vanuit gaan dat we code (data-verwerking) en layout zoveel mogelijk willen scheiden
  • Als je dat puur in PHP zou moeten doen, is PHP niet toereikend als template engine (imo), plus dat je gauw de fout maakt toch weer code te gebruiken in de template
  • conclusie: maak je eigen template engine :)
desalniettemin kan ik me heel goed voorstellen waarom je het een kludge vindt, maar ik vind het geen slechte keuze een template-engine naast PHP te gebruiken, wanneer je PHP verder alleen voor data-extractie etc gebruikt.

just my $0,02 :)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 07-10-2022
Arien: Waarom niet templates via XSLT vertalen? Hallo Martin! :+
:* . Leuk weer eens iets van je te zien :) .

Template Languages in XSLT

Ik zeg niet dat ik het mooi vind ;) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Acties:
  • 0 Henk 'm!

  • tomato
  • Registratie: November 1999
  • Niet online
drm: woei :) Kan me herinneren dat Arien er ongeveer een jaar geleden precies hetzelfde over zei...
En nog steeds ;)
PHP overstijgt doorgaans een template-taal behoorlijk. Je zou kunnen zeggen dat het het midden houdt tussen een script-taal en een template-engine.
Hmmm, dat ben ik niet met je eens. Wat bedoel je met een template taal? Wanneer je kijkt naar 'professionele' oplossingen zie je vaak dat je toch in je templates een taal als Perl of Python kunt gebruiken. Dus nog een stuk krachtiger dan PHP.
Laten we er vanuit gaan dat we code (data-verwerking) en layout zoveel mogelijk willen scheiden
Hmmmjah, eigenlijk zou ik het zo niet willen omschrijven. Het processen van een template kun je ook data-verwerking noemen.
Je eigenlijk je applicatie in lagen opzetten. De business-logica en de presentatie-laag wil je natuurlijk scheiden (en dat kan in meer dan 2 stappen).
<li> Als je dat puur in PHP zou moeten doen, is PHP niet toereikend als template engine (imo), plus dat je gauw de fout maakt toch weer code te gebruiken in de template
</li>
Maar het leuke van een presentatie-laag is dat er ook logica in kan voorkomen. In veel template systemen voor PHP is ook een soort primitieve vorm van programmeren mogelijk (zie bijv conditional statements). In professionele oplossingen gaat dit nog veel verder, waar je je templates lekker kunt vullen met bijvoorbeeld Perl code.
Deze code heeft dan niets te maken met de business-logica, maar met presentatie. Denk bijvoorbeeld aan de logica die nodig is om in een tabel iedere row om en om zwart en wit te kleuren. Hier is logica voor nodig, maar dit wil je niet in je business-logica opnemen. Het is onderdeel van de presentatie, dus als je met templates werkt wil je dat daar in kunnen verwerken.
desalniettemin kan ik me heel goed voorstellen waarom je het een kludge vindt, maar ik vind het geen slechte keuze een template-engine naast PHP te gebruiken, wanneer je PHP verder alleen voor data-extractie etc gebruikt.
Ik gebruik het zelf ook hoor ;)
Maar misschien kun je het in een wat breder perspectief zien, al is dat voor relatief kleine projecten wellicht niet echt relevant.

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

tomato zei er e.e.a. over...
[o.a. "code (logica) in presentatielaag vaak ook nodig"]
warempel ben ik het daar mee eens :D

Maar de keuze tussen een losse template-engine (los van waar die op draait) en puur PHP blijven gebruiken, zou imo hetzelfde zijn als dat ik bijvoorbeeld niet Perl en PHP zou mogen combineren, wanneer ik het misschien wel prettig vind om het ene in PHP te doen en het andere in Perl, for instance.

Ben zelf al een tijd bezig met een template parser in PHP, en die werkt echt een stuk fijner dan PHP zelf (imo :D), simpelweg omdat ik alles gewoon zo aan kan passen dat 't allemaal net ff wat vlugger en overzichtelijker te coderen is. Dingetjes als regeltje wit-regeltje zwart zijn ingebakken faciliteiten. Meer iets als een attribuut zoals je dat in html ziet, dan een stuk code wat dat voor je doet. Daarnaast biedt het de mogelijkheden dergelijke stukken code gewoon toe te voegen als handlers in de template-parser, zodat er nog steeds geen code in de template zelf voorkomt... Da's een beetje mijn idee van een template parser.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

Verwijderd

re: drm

Source postuhhhh :P

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Stoel:
re: drm

Source postuhhhh :P
komt nog wel...

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

Verwijderd

Op dinsdag 09 april 2002 11:31 schreef drm het volgende:

[..]

komt nog wel...
kee dan,kunnen we wat van leren .. :D :D

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Stoel:
kee dan,kunnen we wat van leren .. :D :D
Heb helaas veel te weinig tijd om er eens een beetje docs etc. voor te schrijven, en 'm helemaal goed door te testen.

Maar als ik weer een beetje gesettled ben (moet nu nog verhuizen, etc...) dan komt het allemaal wel :)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik zit nu met een vaag probleem, in mijn template heb ik het volgende verwerkt zitten..
code:
1
2
3
4
5
[ONCE]
Bladediebla

etc etc
[ENDONCE]

nu heb ik de volgende routine er in gemaakt om dit te removen als het meer dan 1x is laten zien...
PHP:
1
<?$thePattern = '!\\[ONCE\](\w.*?)\\[ENDONCE\]!i';        preg_match_all($thePattern, $theString, $theBackRef);//        echo '<pre>';//        var_dump($theBackRef);//        echo '</pre>';        $theString = str_replace($theBackRef[0][$i], "", $theString);?>

Maar als dit op meerdere regels staat werkt het niet, iemand een idee? :D tnx.

Acties:
  • 0 Henk 'm!

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
moet je ff de /s modifier gebruiken.

Acties:
  • 0 Henk 'm!

  • Johannes
  • Registratie: Juni 2000
  • Laatst online: 09-07 21:03
Op maandag 08 april 2002 11:13 schreef drm het volgende:
woei :) Kan me herinneren dat Arien er ongeveer een jaar geleden precies hetzelfde over zei...
Echt waar? Koel! :)
Ik heb de volgende "tegenwerping":
Omdat Tomato hier al aardig wat op gereageerd heeft, zal ik alleen nog wat toevoegingen doen. :)
• Als je dat puur in PHP zou moeten doen, is PHP niet toereikend als template engine (imo), plus dat je gauw de fout maakt toch weer code te gebruiken in de template
Waarom zou PHP niet toereikend zijn voor een template-engine? Als PHP daarvoor niet toereikend is, kan een template-engine in PHP ook niet toereikend zijn. Dus eigenlijk zeg je: het is makkelijker om een template-engine te coden, dan om de templates gewoon in PHP te doen. Dat is wel een punt, maar ik vind het zelf niet nodig.
<li> conclusie: maak je eigen template engine :)
Er zijn er al veels te veel. Dat vind ik sowieso jammer aan PHP: omdat iedereen de applicaties zelf kan maken, doet iedereen dat ook. Als er meer mensen aan minder projecten zouden werken, zouden er waarschijnlijk hogere kwaliteits-applicaties in PHP zijn. Er zijn nog zoveel projecten die hulp nodig hebben, waarom dan een nieuwe starten?</li>
(Dit is trouwens niet alleen kritiek op PHP'ers, maar op developers in het algemeen.)

Uit volle borst op weg naar nergens / Zonder reden zonder doel
Met m'n zeden en m'n zonden / En mijn angstig voorgevoel
Laat mij mijn kont tegen de krib / Laat mij dit goddeloze lied
Hef jij je handen maar ten hemel / Maar red mij niet


Acties:
  • 0 Henk 'm!

  • Martijn02
  • Registratie: September 2000
  • Laatst online: 17-09 17:32

Martijn02

/* No Comment */

Jeetje wat een discussie.

Ik gebruik al een jaartje ofzo Smarty en dat werkt gewoon helemaal perfect. Het is vreselijk uitbreidbaar, en makkelijk te gebruiken. Als het moet kan je er ook PHP in gebuiken, maar bij mij hebben de standaard functies altijd volstaan. Het werkt door de tempate-code te compilen naar PHP, Dit compilen gebeurd maar een keer, daarna wordt gewoon PHP code uitgevoerd. dus het werkt rete-snel in tegenstelling tot de meeste regexp-template-engines.

De auteurs (een er van is een van de makers van php) steken erg veel tijd in het project, en iedere maand verschijnt er wel een keer een update. Verder is alles perfect gedocumenteerd, en georganiseerd. het is project open source. Ik heb een of 2 keer dingetjes ingebracht in de mailing list die later ook zijn opgenomen in het project.

Oftewel, ik ben wel overtuigd en ga mooi niet zelf aan een template engine zitten programmeren, want ik kan gewoon geen betere template-engine maken. zonde van mijn tijd dus.

Kijk er eens naar, en laat eens weten waarom je hem niet gebruikt.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Op woensdag 10 april 2002 22:21 schreef marcusk het volgende:
moet je ff de /s modifier gebruiken.
Hoe bedoel je?...

Acties:
  • 0 Henk 'm!

  • TweakBoy
  • Registratie: Augustus 2001
  • Laatst online: 14-09 22:16

TweakBoy

---

de /s modifier interpreteerd je te bewerken text als 1 regel wat het makkelijk maakt om de text in 1 maal door te werken en dan te parsen

---


Acties:
  • 0 Henk 'm!

  • Nielsz
  • Registratie: Maart 2001
  • Niet online
Op donderdag 11 april 2002 17:58 schreef Martijn02 het volgende:
Jeetje wat een discussie.

Oftewel, ik ben wel overtuigd en ga mooi niet zelf aan een template engine zitten programmeren, want ik kan gewoon geen betere template-engine maken. zonde van mijn tijd dus.

Kijk er eens naar, en laat eens weten waarom je hem niet gebruikt.
Sommige mensen vinden dat programmeren kunst is. En die gaan liever 10 uur schilderen dan 1 uur het schilderij bekijken.
Andere mensen weigeren gewoon om code te gebruiken die niet zelfgeschreven is.

Ik zit in het midden :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Op donderdag 11 april 2002 20:06 schreef TweakBoy het volgende:
de /s modifier interpreteerd je te bewerken text als 1 regel wat het makkelijk maakt om de text in 1 maal door te werken en dan te parsen
maar hoe moet ik die toevoegen als ik bv... een regex heb van

'!\\[CODE\](.*?)\\[ENDCODE\]!i'

?

Acties:
  • 0 Henk 'm!

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
gewoon een s achter de i zetten.

lees anders dit ff door, daar staat het allemaal uitgelegd.

Acties:
  • 0 Henk 'm!

  • Martijn02
  • Registratie: September 2000
  • Laatst online: 17-09 17:32

Martijn02

/* No Comment */

Op donderdag 11 april 2002 20:37 schreef Nielsz het volgende:

[..]

Sommige mensen vinden dat programmeren kunst is. En die gaan liever 10 uur schilderen dan 1 uur het schilderij bekijken.
Andere mensen weigeren gewoon om code te gebruiken die niet zelfgeschreven is.

Ik zit in het midden :)
Heb je wel een beetje gelijk in, Ikzelf heb dat ook wel een beetje. En natuurlijk is het ook hobby/sport, en natuurlijk heb ik er zelf ook wel eens een gebouwd, maar met een regexp ding kom je niet in de buurt van iets als Smarty

Aan de andere kant kan je enorm veel leren als je eens kijkt hoe een goed programma is opgebouwd. En ik denk dat deze zeker in de categorie "goede programma's" behoort. Als je kijkt hoe het is opgebouwd, en hoe alles werkt. Ik heb er erg veel van geleerd.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Op donderdag 11 april 2002 21:39 schreef marcusk het volgende:
gewoon een s achter de i zetten.

lees anders dit ff door, daar staat het allemaal uitgelegd.
het vage is dat ik dat heb geprobeerd maar dat werkte niet :(

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Nou ut werkt, alleen weet ik nu op dit moment geen dingen meer om te adden :( ik heb um gedeeltelijk online gezet >:)

http://members.lycos.nl/phpfreak/template/

heeft iemand mischien nog suggesties?

Acties:
  • 0 Henk 'm!

  • Rense Klinkenberg
  • Registratie: November 2000
  • Laatst online: 03-09 14:12
Op vrijdag 12 april 2002 19:05 schreef xtentic het volgende:
heeft iemand mischien nog suggesties?
Was XSLT al genoemd? :+

;)

Acties:
  • 0 Henk 'm!

Verwijderd

Op vrijdag 12 april 2002 19:05 schreef xtentic het volgende:
Nou ut werkt, alleen weet ik nu op dit moment geen dingen meer om te adden :( ik heb um gedeeltelijk online gezet >:)

http://members.lycos.nl/phpfreak/template/

heeft iemand mischien nog suggesties?
dullie, we kunnen de parser niet downloaden, de rest wel. .moet je nog ff onlijn zetten, btw leuke functies zijn [blocks] dus dat je heleboel blocks in 1 file zet en die dan kan parsen zovaak als je wil..

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Op vrijdag 12 april 2002 20:06 schreef freak007 het volgende:
Was XSLT al genoemd? :+

;)
jah, maar is dat PHP?... ow nee :D dus next B-)
Op vrijdag 12 april 2002 21:17 schreef Stoel het volgende:
dullie, we kunnen de parser niet downloaden, de rest wel. .moet je nog ff onlijn zetten, btw leuke functies zijn [blocks] dus dat je heleboel blocks in 1 file zet en die dan kan parsen zovaak als je wil..
Mischien later, maar zou je dit eens kunnen specificeren?... zou handig zijn :P

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb weer eens wat nieuws bedacht, stel ik wil een stukje meerdere keren gebruiken (uit een template) dan moet ik een of andere array hebben waaruit ik de data haal?

for example parsing this

[loop]
<a href="%link%">%linkname%</a> - %hits% - %views<br>
[/loop]

dan wordt de input daarvoor denk ik

$array[$template][%link%][0] = "link.html";
$array[$template][%linkname%][0] = "link";
$array[$template][%hits%][0] = "10";
$array[$template][%views%][0] = "15";

$array[$template][%link%][1] = "link.html";
$array[$template][%linkname%][1] = "link";
$array[$template][%hits%][1] = "10";
$array[$template][%views%][1] = "15";

maaruh stel ik voer hits niet in maar bij de volgende wel, dan loopt ut helemaal stuk :(

hoe kan ik een manier / functie maken die dat checkt ofzo?... of dat ik dit speciaal kan parsen?

Tnx... 't wordt steeds ingewikkelder >:)

Acties:
  • 0 Henk 'm!

  • Rense Klinkenberg
  • Registratie: November 2000
  • Laatst online: 03-09 14:12
Op vrijdag 12 april 2002 21:49 schreef xtentic het volgende:
jah, maar is dat PHP?... ow nee :D dus next B-)
Er is een php interface en is zeer uitgebreid ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Op donderdag 18 april 2002 19:07 schreef freak007 het volgende:

[..]

Er is een php interface en is zeer uitgebreid ;)
ik niet begrijp :?

Acties:
  • 0 Henk 'm!

  • Rense Klinkenberg
  • Registratie: November 2000
  • Laatst online: 03-09 14:12
Op donderdag 18 april 2002 22:47 schreef xtentic het volgende:
ik niet begrijp :?
Dat je het ook gewoon in php kan gebruiken en een hoop meer functionaliteit bied dan template parsers.

Acties:
  • 0 Henk 'm!

  • Nielsz
  • Registratie: Maart 2001
  • Niet online
Op donderdag 18 april 2002 18:19 schreef xtentic het volgende:
Ik heb weer eens wat nieuws bedacht, stel ik wil een stukje meerdere keren gebruiken (uit een template) dan moet ik een of andere array hebben waaruit ik de data haal?

for example parsing this

[loop]
<a href="%link%">%linkname%</a> - %hits% - %views<br>
[/loop]

dan wordt de input daarvoor denk ik

$array[$template][%link%][0] = "link.html";
$array[$template][%linkname%][0] = "link";
$array[$template][%hits%][0] = "10";
$array[$template][%views%][0] = "15";

$array[$template][%link%][1] = "link.html";
$array[$template][%linkname%][1] = "link";
$array[$template][%hits%][1] = "10";
$array[$template][%views%][1] = "15";

maaruh stel ik voer hits niet in maar bij de volgende wel, dan loopt ut helemaal stuk :(

hoe kan ik een manier / functie maken die dat checkt ofzo?... of dat ik dit speciaal kan parsen?

Tnx... 't wordt steeds ingewikkelder >:)
isSet misschien :?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Op vrijdag 19 april 2002 11:24 schreef Nielsz het volgende:

[..]

isSet misschien :?
Tuurlijk isSet, maar mischien een 'voor routine' die zorgt voor een correcte afwerking van deze variabelen? alleen weet ik niet hoe ik dat moet aanpakken.

Acties:
  • 0 Henk 'm!

  • Nielsz
  • Registratie: Maart 2001
  • Niet online
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    function forEachFunction($foreach,$do="")
        {
        $foreach=strtoupper(trim($foreach));
        $count=count($this->parseableVars["$foreach"]);
    
        $row=0;
        $stringValue="";
        while($row<$count)
            {
            //echo $row;
            $stringValue.=preg_replace('/\{\.(.*?)\}/ies','$this->getValue("$foreach.$row.\1")',$do);
            $row++;
            }
        return $stringValue;
        }

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
:'( daar snap ik elemaal niets van :'( zou je mischien wat uitleg kunnen geven. :D

Acties:
  • 0 Henk 'm!

  • Nielsz
  • Registratie: Maart 2001
  • Niet online
$foreach is een 2dimensionele array.
Nu kijk ik hoeveel records die heeft, en voer $do zovaak uit. Voor elke keer dat ik dat doe replace ik {.1} met $array.$row.1
simpel :)
Als hij niet bestaat krijg ik gewoon "" terug of {.1}, ligt eraan wat ik instel ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
hmmz, ik zal um eens ombouwen of zelf herschrijven, want jij maakt gebruik van een class en ik van een include :P

Acties:
  • 0 Henk 'm!

  • Nielsz
  • Registratie: Maart 2001
  • Niet online
Op zaterdag 20 april 2002 09:28 schreef xtentic het volgende:
hmmz, ik zal um eens ombouwen of zelf herschrijven, want jij maakt gebruik van een class en ik van een include :P
3 keuzes, je kan ook je programma in een class stouwen ;)

Acties:
  • 0 Henk 'm!

  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
offtopic:
[quote]
Programmeren is kunst, en ik ben Picasso.
[/quote]

Is die niet dood?

Acties:
  • 0 Henk 'm!

  • Nielsz
  • Registratie: Maart 2001
  • Niet online
Op zaterdag 20 april 2002 09:50 schreef /dev/null het volgende:
offtopic:
[..]

Is die niet dood?
lol :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Op zaterdag 20 april 2002 09:40 schreef Nielsz het volgende:

[..]

3 keuzes, je kan ook je programma in een class stouwen ;)
dat is zo alleen heb ik daar nog weinig verstand van... mischien kan je me helpen met het volgende ;)

ik heb de volgede code gebrouwen en zou volgens mij moeten werken :)
PHP:
1
<?/*for example parsing this[loop]<a href="%link%">%linkname%</a> - %hits% - %views<br>[/loop]dan wordt dat denk ik$array[$template][%link%][0] = "link.html";$array[$template][%linkname%][0] = "link";$array[$template][%hits%][0] = "10";$array[$template][%views%][0] = "15";$array[$template][%link%][1] = "link.html";$array[$template][%linkname%][1] = "link";$array[$template][%hits%][1] = "10";$array[$template][%views%][1] = "15";maaruh stel ik voer hits niet in maar bij de volgende wel, dan loopt ut helemaal stuk :(*/// include("../parser.include.php");$tmp['template'] = '[loop]<a href="%link%">%linkname%</a> - %hits% - %views%<br>[/loop]';function parseArrayRecord(&amp;$kwHash, $inKeyword, $inValue) {    if (isSet($kwHash[$inKeyword])) {        $kwHash[$inKeyword][count($kwHash[$inKeyword])+1] = $inValue;    } else {        $kwHash[$inKeyword][1] = $inValue;    }}for ($x = 0; $x < 100; $x++) {   parseArrayRecord($tmp, "%link%", "link$x");   parseArrayRecord($tmp, "%linkname%", "link$x");   parseArrayRecord($tmp, "%hits%", "link$x");   parseArrayRecord($tmp, "%views%", "link$x");}    $theString = $tmp['template'];    $thePattern = '!\\[loop\](\w.*)\\[/loop\]!ism';    preg_match_all($thePattern, $theString, $theBackRef);    $newStr = "";echo '<pre>';var_dump($theBackRef);echo '</pre>';    for ($i = 0; $i <= count($theBackRef[0]); $i++) {        $tmpStr = $theBackRef[1][$i];        if (isSet($name[$tmpStr])) {            for ($x = 1; $x <= count($name[$tmpStr]); $x++) {                $newStr = $newStr . $tmpStr;                foreach ($name as $key => $value) {                    $tmpStr = eregi_replace($key, $value, $newStr);                }            }        }    $theString = str_replace($theBackRef[0][$i], $newStr, $theString);    }    unset($theBackRef);echo $theString;?>

:D met de regex zou het volgens mij moeten werken, ik wil dus als het ware die loop meerdere keren gebruiken totdat de 'array' op is... mja 't werkt niet echt..

heb je anders tips hoe ik het mischien kan aanpakken... etc.

Acties:
  • 0 Henk 'm!

  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
Het voordeel van classes is dat je heel makkelijk verschillende dingen kan scheiden. Je kan bijvoorbeeld een class voor de templates bouwen, en een class voor de database. Als je b.v. een database class bouwt, kan je met 'extended' heel makkelijk een class bouwen voor verschillende talen die je allemaal op dezelfde manier kan aanspreken.
Concreet voorbeeld:
PHP:
1
<?$dblayer = new DbLayer;$result=$dblayer->query($query);$array=$dblayer->fetch_array($result);?>

Stel dat je dit laat werken op een mysql-databeest, maar dat je later multiple selects wilt uitvoeren en besluit om over te stappen naar MSSQL. Dan hoef je alleen die ene class te veranderen en hoef je er in je code niet meer naar uit te kijken.
Maarja dit zal wel allemaal lekker vaag zijn enzo,
de mensen bij DevShed kunnen het veel beter

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Op zaterdag 20 april 2002 11:55 schreef /dev/null het volgende:
Het voordeel van classes is dat je heel makkelijk verschillende dingen kan scheiden. Je kan bijvoorbeeld een class voor de templates bouwen, en een class voor de database. Als je b.v. een database class bouwt, kan je met 'extended' heel makkelijk een class bouwen voor verschillende talen die je allemaal op dezelfde manier kan aanspreken.
Concreet voorbeeld:
PHP:
1
<?$dblayer = new DbLayer;$result=$dblayer->query($query);$array=$dblayer->fetch_array($result);?>

Stel dat je dit laat werken op een mysql-databeest, maar dat je later multiple selects wilt uitvoeren en besluit om over te stappen naar MSSQL. Dan hoef je alleen die ene class te veranderen en hoef je er in je code niet meer naar uit te kijken.
Maarja dit zal wel allemaal lekker vaag zijn enzo,
de mensen bij DevShed kunnen het veel beter
Op zich is wat je schrijft best begrijpelijk, maar dat is toch eingelijk het zelfde met een include?... wanneer je overstapt naar iets anders moet je gewoon de 'include' aanpassen :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb nu de volgende code maar kom er echt niet meer uit :( zou iemand verder kunnen helpen, en volgens mij is Mooo al aan het verder spacen :D
PHP:
1
<?/*for example parsing this[loop]<a href="%link%">%linkname%</a> - %hits% - %views<br>[/loop]dan wordt dat denk ik$array[$template][%link%][0] = "link.html";$array[$template][%linkname%][0] = "link";$array[$template][%hits%][0] = "10";$array[$template][%views%][0] = "15";$array[$template][%link%][1] = "link.html";$array[$template][%linkname%][1] = "link";$array[$template][%hits%][1] = "10";$array[$template][%views%][1] = "15";maaruh stel ik voer hits niet in maar bij de volgende wel, dan loopt ut helemaal stuk :(*/// include("../parser.include.php");$tmp['template'] = 'bladeidebla[loop="%items%"]<a href="%link%">%linkname%</a> - %hits% - %views%<br>[/loop]bleeeeeeehougoaih';function parseArrayRecord(&amp;$kwHash, $inKeyword, $inValue) {    if (isSet($kwHash[$inKeyword])) {        $kwHash[$inKeyword][count($kwHash[$inKeyword])+1] = $inValue;    } else {        $kwHash[$inKeyword][1] = $inValue;    }}for ($x = 0; $x < 100; $x++) {   parseArrayRecord($tmp, "%link%", "link$x");   parseArrayRecord($tmp, "%linkname%", "link$x");   parseArrayRecord($tmp, "%hits%", "link$x");   parseArrayRecord($tmp, "%views%", "link$x");}$tmp['items'] = "10";    $theString = $tmp['template'];    $thePattern = '!\[loop="(.*?)"\](.*?)\\[/loop\]!ism';    preg_match_all($thePattern, $theString, $theBackRef);    $newStr = "";echo '<pre>';var_dump($theBackRef);echo '</pre>';    for ($i = 0; $i <= count($theBackRef[0]); $i++) {        $tmpStr = $theBackRef[2][$i];        if (isSet($name[$theBackRef[1][$i]])) {            echo "Yes!";            for ($x = 1; $x <= $name[$theBackRef[2][$i]]; $x++) {                $newStr = $newStr . $tmpStr;                foreach ($name as $key => $value) {                    $tmpStr = eregi_replace($key, $value, $newStr);                }            }        }    $theString = str_replace($theBackRef[0][$i], $newStr, $theString);    }    unset($theBackRef);echo $theString;?>

Acties:
  • 0 Henk 'm!

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 22:59

chem

Reist de wereld rond

beetje pseudo code dan die ik je net stuurde:
PHP:
1
<?$string = "hoi hier komt een [loop=array]ik ben <font color='%kleur%'>%naam%</font>[/loop] loopje";$array[] = array('kleur' => '#00FF00', 'naam' => 'groen');while($string != $oldstring{    $oldstring = $string;    foreach(array('/\[loop=(.*?)\](.*)][\/loop\]/sie' => 'loop') as $pattern => $function)    {        $string = preg_replace_callback($pattern,$function,$string);    }}function loop(){    GLOBAL $array;    // iets met get_func_args() enzo, of doe iets hierboven met \\1 en \\2 etc.        foreach($array as $find => $value)    {        $patterns[] = '/'.preg_quote('%'.$find.'%') .'/si';        $replace[] = $value;    }        while($string != $oldstring)    {        $oldstring = $string;        $string = preg_replace($pattern,$replace,$string);    }    return $string;}?>

Klaar voor een nieuwe uitdaging.


Acties:
  • 0 Henk 'm!

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 22:59

chem

Reist de wereld rond

d'r zitten dus nog wat typos in, het is ongetest en misschien niet wat je bedoelt :+

Klaar voor een nieuwe uitdaging.


Acties:
  • 0 Henk 'm!

  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
Op zaterdag 20 april 2002 18:12 schreef xtentic het volgende:

[..]

Op zich is wat je schrijft best begrijpelijk, maar dat is toch eingelijk het zelfde met een include?... wanneer je overstapt naar iets anders moet je gewoon de 'include' aanpassen :)
Ja daswaar, maar
5 Oktober 200 schreef DevShed het volgende:

[..]

Once a class has been defined, PHP allows you to spawn as many instances of the class as you like. Each of these instances is a completely independent object, with its own properties and methods, and can thus be manipulated independently of other objects.

Now, you're probably wondering whether this is a little redundant, since PHP also allows you to create your own functions and use them wherever required in your code. And you're correct, to some extent - if you're only planning to spawn a single object, a class is redundant and a function will work just as well.

But there are situations where you need to spawn more than one instance of an object - for example, two simultaneous database links for two simultaneous queries, or two shopping carts. In such a situation, classes are preferred, since each instance of the class comes with its own variables and functions, and thus can be manipulated with affecting other variables within the program.

Classes also help you keep your code modular - you can define a class in a separate file, and include that file only in the pages where you plan to use the class - and simplify code changes, since you only need to edit a single file to add new functionality to all your spawned objects.

[..]
Spreekt voor zich?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Chem Ik ga er morgen (vandaag later) ff mee aan de gang!... alvast TNX :*

/dev/null
Je kan dus als het ware een functie wel 10x gebruiken zonder dat je eingelijk de zelfde functie gebruikt... :? :D als ik het goed gelezen heb (mijn engels zuigt)

Acties:
  • 0 Henk 'm!

  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
Nou niet echt een functie, maar je moet het meer als een verzameling van functies en variabelen zien. In het artikel op devshed werken ze b.v. met een winkelwagentje $winkwag.
Deze heeft een aantal functies, bijvoorbeeld $winkwag->addProduct($product) of $winkwag->showContents(). Dit kan ook wel met include's, maar dan krijg je een probleem als je bijvoorbeeld 2 winkelwagentjes wilt. Dan moet je alles helemaal aan gaan passen enzo. Hier is gewoon de definitie:
PHP:
1
<?$winkwag1 = new WinkelWagentje();$winkwag2 = new WinkelWagentje();?>

Je kan vervolgens allerlei bewerkingen en functies uitvoeren onafhankelijk van elkaar. Maarja.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Das inderdaad best handig, oftewel als ik van mijn dingues strax een class maak werkt het voor 101 layouts ook beter?... want op zich werkt ie nu ook al met 101 layouts :D

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Moi is even verder gegaan met zijn oude code na het lezen van de code van R.
PHP:
1
<?// dit is als het ware de 'template'.$tmp['template'] = 'bladeidebla[loop="%items%"]<a href="%link%">%linkname%</a> - %hits% - %views%<br>[/loop]bleeeeeeehougoaih';// deze functie saves de keys in de array, lijkt me wel logisch...function parseArrayRecord(&amp;amp;$kwHash, $inKeyword, $inValue) {    if (isSet($kwHash[$inKeyword])) {        $kwHash[$inKeyword][count($kwHash[$inKeyword])+1] = $inValue;    } else {        $kwHash[$inKeyword][1] = $inValue;    }}// loopje om een zogenaamde array te crearen.for ($x = 1; $x <= 10; $x++) {   parseArrayRecord($tmp, "%link%", "link: $x");   parseArrayRecord($tmp, "%linkname%", "linkname: $x");   parseArrayRecord($tmp, "%hits%", "hits: $x");   parseArrayRecord($tmp, "%views%", "views: $x");}// zeg ff voor het gemak dat er 10 items zijn$tmp['%items%'] = 10;    // met deze 3 regels lees ik alle [loop="etc"]bla[/loop]'s uit, lekker simpel.    $theString = $tmp['template'];    $thePattern = '!\[loop="(.*?)"\](.*?)\\[/loop\]!ism';    preg_match_all($thePattern, $theString, $theBackRef);    $newStr = "";    // loopje voor zovaak er een [loop=][/loop] gevonden is.    for ($i = 0; $i <= count($theBackRef[0]); $i++) {        $tmpStr = $theBackRef[2][$i];        // loopje voor het aantal 'items' dat er gevonden is [loop="%items%"]        for ($x = 1; $x <= $tmp[$theBackRef[1][$i]]; $x++) {            $newStr = $tmpStr;            // dit stukje zou het item moeten vervangen door een juiste waarde.            foreach ($tmp as $key => $value) {                $xC = $value[$x];                echo 'change: ' . $key . ' to ' . $xC . '<br>';                $tmpStr = str_replace($key, $xC, $newStr);            }            $addStr .= $newStr;        }    $theString = str_replace($theBackRef[0][$i], $addStr, $theString);    }    unset($theBackRef);echo $theString;?>

de output is het volgende.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
change: template to l
change: %link% to link: 0
change: %linkname% to linkname: 0
change: %hits% to hits: 0
change: %views% to views: 0
change: %items% to 
change: template to a
change: %link% to link: 1
change: %linkname% to linkname: 1
change: %hits% to hits: 1
change: %views% to views: 1
change: %items% to 
change: template to d
change: %link% to link: 2
change: %linkname% to linkname: 2
change: %hits% to hits: 2
change: %views% to views: 2
change: %items% to 
change: template to e
change: %link% to link: 3
change: %linkname% to linkname: 3
change: %hits% to hits: 3
change: %views% to views: 3
change: %items% to 
change: template to i
change: %link% to link: 4
change: %linkname% to linkname: 4
change: %hits% to hits: 4
change: %views% to views: 4
change: %items% to 
change: template to d
change: %link% to link: 5
change: %linkname% to linkname: 5
change: %hits% to hits: 5
change: %views% to views: 5
change: %items% to 
change: template to e
change: %link% to link: 6
change: %linkname% to linkname: 6
change: %hits% to hits: 6
change: %views% to views: 6
change: %items% to 
change: template to b
change: %link% to link: 7
change: %linkname% to linkname: 7
change: %hits% to hits: 7
change: %views% to views: 7
change: %items% to 
change: template to l
change: %link% to link: 8
change: %linkname% to linkname: 8
change: %hits% to hits: 8
change: %views% to views: 8
change: %items% to 
bladeidebla %linkname% - %hits% - %views%
%linkname% - %hits% - %views%
%linkname% - %hits% - %views%
%linkname% - %hits% - %views%
%linkname% - %hits% - %views%
%linkname% - %hits% - %views%
%linkname% - %hits% - %views%
%linkname% - %hits% - %views%
%linkname% - %hits% - %views%
bleeeeeeehougoaih

het blijkt dus dat de items niet veranderd worden, al snap ik niet waarom dat niet gebeurd? :(.. ik heb een $xC gedefenieerd die juist dat foutje moest opvangen mja...

HELP!..

Acties:
  • 0 Henk 'm!

Verwijderd

wat's wrong whit yapter :? :? :?

werkt perfect

www.yapter.com

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Genoeg, ik wil het zelf maken met of zonder hulp.. Jah ik weet dat het wiel al een keer is uitgevonden, maar als we zelf niet verder gaan experimenteren hadden we nu nog steeds op dat klote houten wiel gereden ;)
Pagina: 1 2 Laatste