[php] template engines

Pagina: 1
Acties:

  • xychix
  • Registratie: September 2000
  • Laatst online: 03-12-2025

xychix

FreeBSD Rules !

Topicstarter
Ik ben een syteem aan het bouwen waarin ik al gebruik maak van een
opmaak.php
dan de variables $header en $footer bevat (dit worden nog funcite) in de header staat een link naar een stylesheet.

Nu ben ik ook wel geinteresseerd in het gebruik van Templates en template engines
http://www.devshed.com/Server_Side/PHP/patTemplate/patTemplate1/print

ben ik nu aan het lezen.

als ik het goed begrijp krijg je toch een template per row.

dus als ik 3 tabellen heb die weergegeven moeten worden met alle 3 een andere hoeveelheid kolommen dan moet krijg ik een:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
header template
footer template

een 2kollomtableheader template
een 3kollomtableheader template
een 4kollomtableheader template

een 2kollomtablebody template
een 3kollomtablebody template
een 4kollomtablebody template

een 2kollomtablefooter template
een 3kollomtablefooter template
een 4kollomtablefooter template

pffft. wat een bestanden

kun je dan niet net zogoed
code:
1
echo ("<tr>$var1<td></td>$var2<td></td><td>$var3</td></tr>");

typen ipv
code:
1
2
$template->AddVar("sequence", $var1, $var2, $var3, $x);
$template->parseTemplate("sequence", "a");

Dat scheelt een boel bestanden en regels..

Waar-o-waar zit mijn denkfout. Templates zal wel handig zijn maar overtuig mij..
Welke template engine is het beste ?

Heeft iemand een "grote" voorbeeld app die leesbaar word door het gebruik van templates ? (nee geen scriptrequest, wat het ding doet boeit verder niet)

Heeft iemand een link naar aan aantal goede howto's ?

Every failure offers you a new opportunity! | Lokatie database|GoT - Notepad


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Je denkfout zit hier in:

Templates zijn in beginsel ontworpen om PHP en HTML te scheiden. Mede zodat mensen die HTML ontwikkelden, gewoon HTML konden blijven ontwikkelen zoals ze dat altijd deden, zonder enige kennis van PHP te hoeven hebben.

Daarnaast is het beter om layout, data en dataverwerking los van elkaar te houden, puur voor onderhoudbaarheid en flexibiliteit

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


  • xychix
  • Registratie: September 2000
  • Laatst online: 03-12-2025

xychix

FreeBSD Rules !

Topicstarter
Op dinsdag 02 juli 2002 13:58 schreef drm het volgende:
Je denkfout zit hier in:

Templates zijn in beginsel ontworpen om PHP en HTML te scheiden. Mede zodat mensen die HTML ontwikkelden, gewoon HTML konden blijven ontwikkelen zoals ze dat altijd deden, zonder enige kennis van PHP te hoeven hebben.

Daarnaast is het beter om layout, data en dataverwerking los van elkaar te houden, puur voor onderhoudbaarheid en flexibiliteit
dus het word er (voor iemand die beide programmeerd) niet korter en sneller op

--denk denk--
tenzij je templates hebt tot op niveau CEL
dan krijg je dus
code:
1
2
3
4
5
HEAD
TABLE
repeating ROW
    repeating CEL
FOOTER

Every failure offers you a new opportunity! | Lokatie database|GoT - Notepad


  • leonardo1504
  • Registratie: April 2001
  • Niet online
Op dinsdag 02 juli 2002 13:58 schreef drm het volgende:
Je denkfout zit hier in:

Templates zijn in beginsel ontworpen om PHP en HTML te scheiden. Mede zodat mensen die HTML ontwikkelden, gewoon HTML konden blijven ontwikkelen zoals ze dat altijd deden, zonder enige kennis van PHP te hoeven hebben.
...
Yep en precies daarom ben ik ook zwaar tegen de trend om "enhanced" template engines te ontwikkelen. Ik zie af en toe template engines die ook control-structures kennen, en zelfs engines die variabelen kunnen declareren en assignments kunnen doen. Ik ben van mening dat je juist een middel moet hebben om applicatielogica en layout van elkaar te scheiden, anders kan je net zo goed PHP of een andere scripting taal gaan gebruiken.

/typo

  • xychix
  • Registratie: September 2000
  • Laatst online: 03-12-2025

xychix

FreeBSD Rules !

Topicstarter
Iedereen heeft het over FastTemplates als templates engine, zijn jullie ervaringen hiermee ook zo goed ?

Every failure offers you a new opportunity! | Lokatie database|GoT - Notepad


  • Rense Klinkenberg
  • Registratie: November 2000
  • Laatst online: 09-08 19:19
Op dinsdag 02 juli 2002 14:27 schreef xychix het volgende:
Iedereen heeft het over FastTemplates als templates engine, zijn jullie ervaringen hiermee ook zo goed ?
Nee, ik vind de standaard template engines veel te beperkt in de mogelijkheden.

* Rense Klinkenberg is zwaar tevreden over de xml/xslt xombinatie ;)

  • Nielsz
  • Registratie: Maart 2001
  • Niet online
Op dinsdag 02 juli 2002 14:27 schreef xychix het volgende:
Iedereen heeft het over FastTemplates als templates engine, zijn jullie ervaringen hiermee ook zo goed ?
Kijk eens naar smarty.php.net :)

Verwijderd

Op dinsdag 02 juli 2002 14:34 schreef freak007 het volgende:

[..]

Nee, ik vind de standaard template engines veel te beperkt in de mogelijkheden.

/me is zwaar tevreden over de xml/xslt xombinatie ;)
Ik heb nu 1 site gemaakt met fasttemplates maar ik ben er niet helemaal te vreden over. Ik vind dat je te veel parse dit en assign dit enz te doen waardoor je code/layout scheiding eigenlijk ook weer minder wordt.

Freak: Zou jij iets meer over dat xml/xslt kunnen vertellen? Misschien kan ik me daar beter in vinden.

  • leonardo1504
  • Registratie: April 2001
  • Niet online
Op dinsdag 02 juli 2002 14:44 schreef Nielsz het volgende:

[..]

Kijk eens naar smarty.php.net :)
Kijk dat bedoel ik nou, met Smarty kan je volgende dingen flikken:
code:
1
2
3
4
5
{if $name eq "Fred"}
    You are not allowed here
{else}
    Welcome, <font color="{#fontColor#}">{$name}!</font>
{/if}

Control structures als dit horen m.i. in de applicatie logica thuis, en dat vindt ik niet passen in het concept van een template-engine. Het is wenselijker om applicatie-logica en layout gescheiden te houden. Net zo min als je HTML hoort aan te treffen in je applicatiecode, hoor je applicatie-logica aan te treffen in je templates. Hiervoor is alleen een wat andere manier van code ontwerpen en schrijven nodig dan je misschien gewend bent (iets meer discipline). Als je jezelf er een tijdje aan went om datalaag, applicatielaag en presentatielaag van elkaar te scheiden, en zeker als je met andere disciplines (DBA, design) samen moet werken, zal je het een zegening vinden. Dan kan je bijvoorbeeld eens een andere front-end bouwen, zonder dat je applicatie op de schop hoeft.

/edit
Het voorbeeld is overgenomen uit de online smarty docs

Verwijderd

Op dinsdag 02 juli 2002 14:49 schreef Xenith het volgende:
[..]
Freak: Zou jij iets meer over dat xml/xslt kunnen vertellen? Misschien kan ik me daar beter in vinden.
Zoek eens zou ik zeggen: [search=xslt sablotron]

Verder houdt ik ook niet van template parsers met ingewikkelde control structures, als je dat wilt dan kom je uiteindelijk toch weer terecht op een soort van PHP en heb je in feite niks bereikt.

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Op dinsdag 02 juli 2002 14:07 schreef leonardo1504 het volgende:
Yep en precies daarom ben ik ook zwaar tegen de trend om "enhanced" template engines te ontwikkelen. Ik zie af en toe template engines die ook control-structures kennen, en zelfs engines die variabelen kunnen declareren en assignments kunnen doen. Ik ben van mening dat je juist een middel moet hebben om applicatielogica en layout van elkaar te scheiden, anders kan je net zo goed PHP of een andere scripting taal gaan gebruiken.
Ben ik het niet helemaal mee eens (wel gedeeltelijk). Om dingen een juiste layout te geven heb je soms ook logica nodig. Simpel voorbeeldje is bijvoorbeeld de blauw/lichtblauw omwisseling die je hier op GoT per bericht ziet. Dat is toch iets wat in de template thuishoort imo :)

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


  • leonardo1504
  • Registratie: April 2001
  • Niet online
Op dinsdag 02 juli 2002 14:54 schreef drm het volgende:

[..]

Ben ik het niet helemaal mee eens (wel gedeeltelijk). Om dingen een juiste layout te geven heb je soms ook logica nodig. Simpel voorbeeldje is bijvoorbeeld de blauw/lichtblauw omwisseling die je hier op GoT per bericht ziet. Dat is toch iets wat in de template thuishoort imo :)
Ja dat hoort zeker in de template thuis. Maar zie mijn tweede post in dit draadje ter verduidelijking van wat ik bedoel. Het voorbeeld uit de smarty docs dat daar staat is precies wat ik niet in een template wil zien.

Overigens ben ik er een groot voorstander van om de presentatielaag uit het klassieke drielagenmodel te splitsen in twee sub-lagen: 1 pure layout laag, en 1 die met de presentatielogica te maken heeft (zoals de kleur-toggle hier in de fora). Dan krijg je dus:

DB -> applicatielogica -> presentatielogica -> layout

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

leonardo1504:
Ja dat hoort zeker in de template thuis.
Dan zijn we het eens :)

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


  • Nielsz
  • Registratie: Maart 2001
  • Niet online
Op dinsdag 02 juli 2002 14:52 schreef leonardo1504 het volgende:

[..]

Kijk dat bedoel ik nou, met Smarty kan je volgende dingen flikken:
code:
1
2
3
4
5
{if $name eq "Fred"}
    You are not allowed here
{else}
    Welcome, <font color="{#fontColor#}">{$name}!</font>
{/if}
Maar wat ook handig is als je geen resultaten uit een query krijgt, dat je dan een melding krijgt. En daar is het wel weer erg handig voor.

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Op dinsdag 02 juli 2002 15:30 schreef Nielsz het volgende:
Maar wat ook handig is als je geen resultaten uit een query krijgt, dat je dan een melding krijgt. En daar is het wel weer erg handig voor.
Maar bijvoorbeeld met XSL kan je dit mooier oplossen door in je PHP al te zeggen
code:
1
2
3
4
5
6
7
8
9
PHP:
if(mysql_num_rows($result) > 0)
{
   $XML = "<record> .... </record>";
}
else
{
   $XML = "<norecords/>";
}

En dan in je template:
code:
1
2
3
4
5
6
7
8
XSL:
<xsl:template match="record">
Record: <xsl:value-of select="."/>
</xsl:template>

<xsl:template match="norecords">
<b>Er zijn geen records gevonden</b>
</xsl:template>

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Ik heb in m'n template parser iets dergelijks gedaan:

Een result kan 1 van de volgende vormen zijn:
  • een serie van dezelfde soort "objecten"
    code:
    1
    2
    3
    4
    
    $result = array (
       array ( "id" => 1, "name" => "sjako" ),
       array ( "id" => 2, "name" => "spef" )
    );
  • een enkel "object"
    code:
    1
    
    $result = array ( "id" => 1, "name" => "sjako" );
  • leeg
    code:
    1
    
    $result = "";

    (of natuurlijk false, of null, whatever...)
Vervolgens geef je in de template aan welk "gedeelte" gebruikt moet worden in elk van de drie gevallen.

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


  • Nielsz
  • Registratie: Maart 2001
  • Niet online
Op dinsdag 02 juli 2002 15:37 schreef Orphix het volgende:

[..]
bla
Dat is zeker sehr geil, maar nu moet je in je code al meegeven dat je een melding wil. (klein) minpuntje. Maar verder echt wel stoer :)

  • xychix
  • Registratie: September 2000
  • Laatst online: 03-12-2025

xychix

FreeBSD Rules !

Topicstarter
ik wil bijvoorbeeld een systeem gaan maken dat uit de volgende Tabellen bestaat
facturen (fac_id,status_id,pers_id,bla,bla)
personen (pers_id,bla,bla)
status (status_id,bla,bla)
producten(prod_id,fac_id,bla,bla)
code:
1
2
3
een factuur heeft 1 persoon
            1 status
            1 of meer producten

het update formulier zal dus ook een subformulier bevatten.

hoe krijg ik zoiets bij netjes in templates ???

ik ben wel thuis in gewoon xml als bestandsformaat (voor tcpip zendingen etc) dus misschien is dit leuk oom eens naar te kijken..
hoe moeilijk is het ?? en werkt het met alle browsers ?

Every failure offers you a new opportunity! | Lokatie database|GoT - Notepad


  • Rense Klinkenberg
  • Registratie: November 2000
  • Laatst online: 09-08 19:19
Op dinsdag 02 juli 2002 15:46 schreef Nielsz het volgende:
Dat is zeker sehr geil, maar nu moet je in je code al meegeven dat je een melding wil. (klein) minpuntje. Maar verder echt wel stoer :)
Ok, doen we het iets anders:

PHP:
PHP:
1
<?$XML = '<recordset>';while($record = mysql_fetch_array(...)) {    $XML .= '<record>.....</record>';}$XML .= '</recordset>';?>

En dan in je template:
XSL:
code:
1
2
3
4
5
6
7
8
9
10
11
<xsl:template match="recordset[count(record) not 0]">
    <xsl:apply-templates />
</xsl;template>

<xsl:template match="recordset[count(record) = 0]">
<b>Er zijn geen records gevonden</b>
</xsl:template>

<xsl:template match="record">
Record: <xsl:value-of select="."/>
</xsl:template>

Dat ziet er toch wel leuk uit ;)

Ter algemen informatie over het gebruik van xml/xslt in php:

Wat je dan eigenlijk met php doet is het verzamelen van de juiste data uit verschillende bronnen (waarschijnlijk meestal alleen mysql en $_REQUEST) en daar de informatie vandaan halen die je wilt representeren.

Het representeren doe je vervolgens in je xsl.

De gedachte die erachter zit is dus een stukje anders en dat zal je eerst moeten begrijpen voordat je er fijn mee kan werken, maar dan werkt het ook perfect :)

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
XenithZou jij iets meer over dat xml/xslt kunnen vertellen? Misschien kan ik me daar beter in vinden.
Zie ook hier:

[topic=215030/1/400]

goh, das alweer bijna een jaar geleden :o

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


  • Rense Klinkenberg
  • Registratie: November 2000
  • Laatst online: 09-08 19:19
Op dinsdag 02 juli 2002 21:06 schreef mbravenboer het volgende:
Zie ook hier:

[topic=215030/1/400]

goh, das alweer bijna een jaar geleden :o
Wat gaat de tijd toch snel als je met dat soort leuke dingen aan het spelen bent ;)
Pagina: 1