Toon posts:

[PHP] Het leed dat Template Engine heet...

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het is vandaag de dag erg verstandig een Template Engine voor een website te gebruiken. Er zijn verschillende voordelen te bedenken:
  • Code/HTML gescheiden
  • Snelheid
  • Cache (snelheid)
  • etc
Nu lopen veel mensen tegen het probleem aan dat men niet weet welke template engine men moet kiezen en dat is niet zo verwonderlijk, er zijn er namelijk heel veel op de markt!

Smarty schijnt toch erg populair te zijn onder de mensen echter is het niet echt PHP5-based als ik de verhalen mag geloven. Er is een alternatief genaamd DWOO welke erg goed lijkt te zijn.

Wat vergelijkingssites zijn:

http://www.webresourcesde...ing-php-template-engines/
http://www.livexp.net/tec...php-template-engines.html

Echter deze helpen de ontwikkelaars niet echt heel veel verder.

Er zijn ook nog steeds mensen welke zelf een template engine wensen te maken. De vraag is of dit zelf te onderhouden is naar gelang je website groeit.

Er zijn vreselijk veel voordelen en nadelen voor iedere optie cq template engine te noemen. De vraag is nog steeds, wat zou je gebruiken ?

Een nadeel vind ik nog steeds is dat je een nieuwe manier van proggen erbij moet leren wat opzich je ontwikkeling niet versnelt.

Acties:
  • 0 Henk 'm!

Verwijderd

Als je manier van programmeren verandert dan was je vorige manier van programmeren niet goed. Eerst verwerk je binnenkomende data en bereid je gegevens voor voor weergave. Je stopt bijvoorbeeld alle waarden, objecten, etcetera in arrays, en die voer je aan je output module, zoals bijvoorbeeld een template engine, of gewoon aan PHP code die niets anders doet dan output genereren.

De grootste hel ben je al kwijt als je niet in je presentatielaag nog bijvoorbeeld databasequeries gaat doen.

Zorg er dus eerst voor dat je een beetje kunt programmeren, en daarna maakt het eigenlijk geen bal uit of je Smarty of plain ol' PHP gebruikt.

Acties:
  • 0 Henk 'm!

  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

Ik gebruik zelf gewoon de PHP shorthand notatie en maak ook veel gebruik van ternaries. Hiervoor hoef ik dus geen nieuwe taal te leren. Daarnaast is snelheid hier ook niet zo'n probleem, aangezien een gemiddelde template engine toch weer een extra laag is. En dit valt ook te cachen, als je met Views werkt, in een MVC model.

Ik gebruik als php framework KohanaPHP en die kan die views ook cachen.

Ik zie dus geen reden om daar een template engine eroverheen te gooien. Het kan handig zijn als je templates bouwen wil uitbesteden en je wil templates met lelijke code voorkomen, dan kan zo'n template engine handig zijn. Of je wilt zoveel mogelijk fouten uit de views houden. Dan kan een template engine ook handig zijn.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op woensdag 22 juli 2009 @ 08:35:
Zorg er dus eerst voor dat je een beetje kunt programmeren, en daarna maakt het eigenlijk geen bal uit of je Smarty of plain ol' PHP gebruikt.
Dit is opzich niet zo'n probleem echter zie ik niet 1,2,3 in hoe je de code van je HTML wil scheiden met plain PHP.

Ik kan wat dirty manieren bedenken maar deze lijken me verre van handig.

Hetzelfde naar bovenstaand... plain PHP vind ik heerlijk, er zijn alleen zoveel mogelijkheden om dan een "template engine" te gebruiken.

Ik snap overigens niet waarom grote sites als facebook, myspace en hyves wel smarty gebruiken....

Acties:
  • 0 Henk 'm!

  • Kettrick
  • Registratie: Augustus 2000
  • Laatst online: 13-10 05:37

Kettrick

Rantmeister!

Verwijderd schreef op woensdag 22 juli 2009 @ 09:13:
[...]


Dit is opzich niet zo'n probleem echter zie ik niet 1,2,3 in hoe je de code van je HTML wil scheiden met plain PHP.
Heel eenvoudig, precies zoals je dat nu met smarty doet :). Je stopt alles in een of meerdere arrays/objecten, die je doorgeeft naar je view. Of je dat nu met smartytags of php tags merged met je html boeit weinig.
Ik kan wat dirty manieren bedenken maar deze lijken me verre van handig.
Dan moet je er gewoon wat langer over nadenken :+ , zie ^^ :)
Hetzelfde naar bovenstaand... plain PHP vind ik heerlijk, er zijn alleen zoveel mogelijkheden om dan een "template engine" te gebruiken.
Het voordeel van bijvoorbeeld smarty vind ik dat je wat handigheidjes hebt binnen loops e.d.
Ik snap overigens niet waarom grote sites als facebook, myspace en hyves wel smarty gebruiken....
Keuzes, er zullen ook genoeg grote sites zijn die het niet doen :).

Acties:
  • 0 Henk 'm!

Verwijderd

Als ik dit zo eens bekijk:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<table>
{section name=mysec loop=$name}
{strip}
   <tr bgcolor="{cycle values="#eeeeee,#dddddd"}">
      <td>{$name[mysec]}</td>
   </tr>
{/strip}
{/section}
</table>

<table>
{section name=mysec loop=$users}
{strip}
   <tr bgcolor="{cycle values="#aaaaaa,#bbbbbb"}">
      <td>{$users[mysec].name}</td>
      <td>{$users[mysec].phone}</td>
   </tr>
{/strip}
{/section}
</table>

Krab ik mij toch eens achter de oren... Is dit niet een vorm van veredelde redundantie?
Waarom zou je de overhead van een template engine willen, je hebt immers PHP zélf toch al?

Acties:
  • 0 Henk 'm!

  • Mike2k
  • Registratie: Mei 2002
  • Laatst online: 11-10 19:59

Mike2k

Zone grote vuurbal jonge! BAM!

Je zou je eens moeten verdiepen in MVC... (Model-View-Controller)
Als je dat principe hanteert heb je sowieso je presentatie en database laag gescheiden...

Anant Garg heeft er een hele mooie tutorial over:
http://anantgarg.com/2009...php-mvc-framework-part-1/

You definitely rate about a 9.0 on my weird-shit-o-meter
Chuck Norris doesn't dial the wrong number. You answer the wrong phone.


Acties:
  • 0 Henk 'm!

  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

PHP template notatie:
PHP:
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
<html>
<head>
    <title><?=html::specialchars($title);?></title>
    <?foreach ($stylesheets as $stylesheet):?>
        <link type="text/css" rel="stylesheet" href="<?=html::specialchars($stylesheet);?>" />
    <?endforeach;?>
</head>
<body>
    <fieldset>
        <legend>Gegevens set:</legend>
        <table>
            <?if (!empty($id)):?>
                <tr>
                    <td><label>ID:</label></td>
                    <td><input type="text" value="<?=(is_numeric($id)) ? (int) $id : NULL; ?>" /></td>
                </tr>
                <tr>
                    <td><label>ID afhankelijk:</label></td>
                    <td><input type="text" value="<?=html::specialchars($blah); ?>" /></td>
                </tr>
                <tr>
                    <td><label>ook ID afhankelijk:</label></td>
                    <td><input type="text" value="<?=html::specialchars($blah1); ?>" /></td>
                </tr>
            <?endif;?>
        </table>
    </fieldset>

    <table>
    <?php
    $cyclecolors = array("#aaaaaa", "#bbbbbb");
    ?>
    <?foreach ($users as $user):?>
        <?php
            $cycleindex = (!isset($cycleindex) || $cycleindex >= count($cyclecolors)) ? 0 : $cycleindex + 1;
        ?>
        <tr bgcolor="<?=$cyclecolors[$cycleindex]; ?>">
          <td><?=$user->name; ?></td>
          <td><?=$user->phone; ?></td>
        </tr>
    <?endforeach;?>
    </table>
</body>
</html>


Ik vind deze notatie niet echt lelijk ofzo. short_tags moet werk aan staan in php.ini, maar dat maakt de code nog niet lelijk. Als je maar volgens het MVC model of vergelijkbaar model werk, waar je iig geen data in de view ophaalt.

Van cycle kun je nog een functie maken, als je zou willen.

[ Voor 16% gewijzigd door eghie op 22-07-2009 09:49 ]


Acties:
  • 0 Henk 'm!

  • Kettrick
  • Registratie: Augustus 2000
  • Laatst online: 13-10 05:37

Kettrick

Rantmeister!

Verwijderd schreef op woensdag 22 juli 2009 @ 09:18:
Als ik dit zo eens bekijk:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<table>
{section name=mysec loop=$name}
{strip}
   <tr bgcolor="{cycle values="#eeeeee,#dddddd"}">
      <td>{$name[mysec]}</td>
   </tr>
{/strip}
{/section}
</table>

<table>
{section name=mysec loop=$users}
{strip}
   <tr bgcolor="{cycle values="#aaaaaa,#bbbbbb"}">
      <td>{$users[mysec].name}</td>
      <td>{$users[mysec].phone}</td>
   </tr>
{/strip}
{/section}
</table>

Krab ik mij toch eens achter de oren... Is dit niet een vorm van veredelde redundantie?
Waarom zou je de overhead van een template engine willen, je hebt immers PHP zélf toch al?
In dit voorbeeld gebruik je toch al de strip en cycle functies van smarty, dat zijn juist handigheidjes wat een voordeel van smarty is. Als je echt veel van deze tables maakt zou ik juist wel voor smarty kiezen.

Als je het over minder tables hebt, maar meer "platte" tags/text replacement zou ik eerder voor php gaan.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 22:32

Janoz

Moderator Devschuur®

!litemod

Je belangrijkste vergissing maak je alvast bij je eerste punt:
Dit is niet wat je wil. Wat je wel wilt is dat je presentatie gescheiden houd van de rest van je code. In de presentatie mag je best nog wel een beetje code gebruiken, zolang die code enkel voor het weergeven is. Denk aan een lusje die door een lijstje met elementen loopt om deze af te drukken in een tabel (een lijstje, NIET een resultset!), een stukje formateringscode om die timestamp als datum weer te geven, of een if om bepaalde delen wel of niet te tonen (niet om te switchen tussen compleet verschillende layouts, maar om te kiezen tussen het renderen van een lijstje elementen of de melding dat er niks gevonden is)

In dit topic wordt uitgebreid ingegaan op deze scheiding:
Over logica en presentatie

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • jbdeiman
  • Registratie: September 2008
  • Laatst online: 13-10 12:16
Ik gebruik geen echte template engine, ik doe het allemaal net wat anders:
- Ik echo alleen maar in de "index pagina" bepaalde variabelen (alles werkt met Mod_rewrite via index.php en database)
- In mijn pagina's (of content_func.php) pagina haal ik verschillende dingen op welke ik in een variabele zet:

$menu: krijgt een menu opgebouwd met <ul><li> (mag zo diep zijn als je zelf wilt) welke gebaseerd is op gegevens uit de database.
$content: haalt uit de database (of eventueel uit een extern bestand omdat er e.e.a. aan PHP code nodig is) de html code die in de "content div" komt te staan.

Op zo'n manier (er zijn nog wat variabelen, voor oa keywords e.d.) heb je een heel cleane index.php pagina, maar geen echte template engine. Toch lijkt het redelijk hetzelfde en kan je dit gebruiken voor eender welke pagina. Een beetje de HTML aanpassen (moet je toch altijd) en de CSS (het moet natuurlijk niet eenzelfde website met een paar andere kleurtjes worden) en voilla er staat een voor het oog volledig nieuwe pagina.
Nu zeggen jullie misschien wel dat dit het principe is van een template engine: True. Echter doordat ik alles zelf opbouw kan ik ook eenvoudig aanpassingen doen.
Zo heb ik nu in mijn config bestand een variabele (waarde true/ false mogelijk) $mod_rewrite staan en als die op true staat krijg ik keurig herschreven URL's terug in mijn menu, staat die op false worden get variabelen gebruikt.
Een (voor mij) ideale optie omdat ik het liefst wel met herschreven URL's werk, maar dit is niet overal mogelijk.

Acties:
  • 0 Henk 'm!

  • Saeverix
  • Registratie: Maart 2002
  • Laatst online: 18:57
Ik ben ooit eens Spoon Library tegen gekomen... Heb het nog niet uitvoerig kunnen testen en gebruiken, maar ziet er op het eerste gezicht erg leuk uit.

http://docs.spoon-library.be/template/spoontemplate/assign
Op die manual pagina zie je een voorbeeld hoe het werkt. Hierbij hoef je geen nieuwe manier van programmeren te leren. Hooguit een paar nieuwe "functies" leren te gebruiken. Maar dat is volgens mij bij elke template engine zo.

People who live in glass houses shouldn't throw stones.


Acties:
  • 0 Henk 'm!

  • Morax
  • Registratie: Mei 2002
  • Laatst online: 20:28
Saeverix schreef op woensdag 22 juli 2009 @ 09:50:
Ik ben ooit eens Spoon Library tegen gekomen... Heb het nog niet uitvoerig kunnen testen en gebruiken, maar ziet er op het eerste gezicht erg leuk uit.

http://docs.spoon-library.be/template/spoontemplate/assign
Op die manual pagina zie je een voorbeeld hoe het werkt. Hierbij hoef je geen nieuwe manier van programmeren te leren. Hooguit een paar nieuwe "functies" leren te gebruiken. Maar dat is volgens mij bij elke template engine zo.
En wat is het voordeel van een extra laag, wanneer je die loop ook gewoon zelf in PHP zou kunnen schrijven in de template.php? Ik zie die library alleen maar als een overbodige laag die ook nog voor extra onnodige overhead zorgt...

What do you mean I have no life? I am a gamer, I got millions!


Acties:
  • 0 Henk 'm!

Verwijderd

RoeLz schreef op woensdag 22 juli 2009 @ 09:24:
[...]


In dit voorbeeld gebruik je toch al de strip en cycle functies van smarty, dat zijn juist handigheidjes wat een voordeel van smarty is. Als je echt veel van deze tables maakt zou ik juist wel voor smarty kiezen.

Als je het over minder tables hebt, maar meer "platte" tags/text replacement zou ik eerder voor php gaan.
Je kunt toch moeilijk beweren dat het formatteren van tables een reden is tot het kiezen voor een template engine? Je kunt zelf eenvoudig genoeg een functie schrijven voor zulke dingetjes? Lijkt me dat je een hoop bespaard op overhead. Ik heb verder geen ervaring met smarty, maar het lijkt me dat het performance niet echt in de hand werkt.

Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

eghie schreef op woensdag 22 juli 2009 @ 09:23:
PHP template notatie:
PHP:
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
<html>
<head>
    <title><?=html::specialchars($title);?></title>
    <?foreach ($stylesheets as $stylesheet):?>
        <link type="text/css" rel="stylesheet" href="<?=html::specialchars($stylesheet);?>" />
    <?endforeach;?>
</head>
<body>
    <fieldset>
        <legend>Gegevens set:</legend>
        <table>
            <?if (!empty($id)):?>
                <tr>
                    <td><label>ID:</label></td>
                    <td><input type="text" value="<?=(is_numeric($id)) ? (int) $id : NULL; ?>" /></td>
                </tr>
                <tr>
                    <td><label>ID afhankelijk:</label></td>
                    <td><input type="text" value="<?=html::specialchars($blah); ?>" /></td>
                </tr>
                <tr>
                    <td><label>ook ID afhankelijk:</label></td>
                    <td><input type="text" value="<?=html::specialchars($blah1); ?>" /></td>
                </tr>
            <?endif;?>
        </table>
    </fieldset>

    <table>
    <?php
    $cyclecolors = array("#aaaaaa", "#bbbbbb");
    ?>
    <?foreach ($users as $user):?>
        <?php
            $cycleindex = (!isset($cycleindex) || $cycleindex >= count($cyclecolors)) ? 0 : $cycleindex + 1;
        ?>
        <tr bgcolor="<?=$cyclecolors[$cycleindex]; ?>">
          <td><?=$user->name; ?></td>
          <td><?=$user->phone; ?></td>
        </tr>
    <?endforeach;?>
    </table>
</body>
</html>


Ik vind deze notatie niet echt lelijk ofzo. short_tags moet werk aan staan in php.ini, maar dat maakt de code nog niet lelijk. Als je maar volgens het MVC model of vergelijkbaar model werk, waar je iig geen data in de view ophaalt.

Van cycle kun je nog een functie maken, als je zou willen.
Als je al short tags wil gebruiken (ik persoonlijk namelijk niet, plus je weet nooit zeker of iemand short tags aan kán zetten) vind ik wel dat je consequent moet zijn en dan áltijd short tags moet gaan gebruiken, geen mengeling wat jij nu doet in je voorbeeld code.

Acties:
  • 0 Henk 'm!

  • Kettrick
  • Registratie: Augustus 2000
  • Laatst online: 13-10 05:37

Kettrick

Rantmeister!

Verwijderd schreef op woensdag 22 juli 2009 @ 09:56:
[...]

Je kunt toch moeilijk beweren dat het formatteren van tables een reden is tot het kiezen voor een template engine? Je kunt zelf eenvoudig genoeg een functie schrijven voor zulke dingetjes? Lijkt me dat je een hoop bespaard op overhead. Ik heb verder geen ervaring met smarty, maar het lijkt me dat het performance niet echt in de hand werkt.
Dat alleen is uiteraard geen reden :P, het aanbod van veel handige features om dergelijke trucjes door je hele pagina te doen wel :). Dat is wat mij betreft de enige meerwaarde van Smarty, templates engines die dat niet hebben vallen voor mij sowieso af.
GJtje schreef op woensdag 22 juli 2009 @ 09:58:
[...]
Als je al short tags wil gebruiken (ik persoonlijk namelijk niet, plus je weet nooit zeker of iemand short tags aan kán zetten)
Als je PHP op deze manier gebruikt zijn shorttags wat mij betreft een must, anders wordt het wel erg onleesbaar. Ik ben overigens nog geen hosting toko tegengekomen waar shorttags uit staan.

[ Voor 23% gewijzigd door Kettrick op 22-07-2009 10:07 ]


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 22:32

Janoz

Moderator Devschuur®

!litemod

Verwijderd schreef op woensdag 22 juli 2009 @ 09:56:
... Lijkt me dat je een hoop bespaard op overhead. Ik heb verder geen ervaring met smarty, maar het lijkt me dat het performance niet echt in de hand werkt.
Bij Smarty worden AFAIK de templates eenmalig 'gecompileerd' naar php code. Uiteindelijk werkt het qua efficiente vergelijkbaar met alles zelf in php code schrijven. De enige overhead die je hebt is een eenmalige controle of de brontemplates niet nieuwer zijn dan de gecompileerde varianten.

Het voordeel van Smarty is dat je in de view beperkt wordt.

Het nadeel van Smarty is dat je in de view beperkt wordt.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Kettrick
  • Registratie: Augustus 2000
  • Laatst online: 13-10 05:37

Kettrick

Rantmeister!

Janoz schreef op woensdag 22 juli 2009 @ 10:24:
[...]
Het voordeel van Smarty is dat je in de view beperkt wordt.
Dit kan je oplossen door de {php} tag te gebruiken.
Het nadeel van Smarty is dat je in de view beperkt wordt.
Dit kan je omzeilen door de {php} tag te gebruiken.

:>

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 22:32

Janoz

Moderator Devschuur®

!litemod

RoeLz schreef op woensdag 22 juli 2009 @ 10:28:
[...]

Dit kan je oplossen door de {php} tag te gebruiken.
Hmm, wat het dus eigenlijk een stuk minder nuttig maakt aangezien minder ervaren mensen er alsnog hun sql code in gaan lopen vrotten... Jammer.
[...]

Dit kan je omzeilen door de {php} tag te gebruiken.

:>
Waarom dan smarty gebruiken in the first place? Zorg gewoon dat je een set handige php functies/classes hebt met dezelfde functionaliteit als de cycle ed.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Kettrick
  • Registratie: Augustus 2000
  • Laatst online: 13-10 05:37

Kettrick

Rantmeister!

Janoz schreef op woensdag 22 juli 2009 @ 10:30:
[...]

Hmm, wat het dus eigenlijk een stuk minder nuttig maakt aangezien minder ervaren mensen er alsnog hun sql code in gaan lopen vrotten... Jammer.

[...]

Waarom dan smarty gebruiken in the first place? Zorg gewoon dat je een set handige php functies/classes hebt met dezelfde functionaliteit als de cycle ed.
Hm, mijn sarcasme was dus niet duidelijk genoeg ;)

Acties:
  • 0 Henk 'm!

  • Eddy Dean
  • Registratie: November 2007
  • Laatst online: 10-10 19:16
Helaas gaan shorttags er uit met PHP6, en daarbij heb je ook nog het probleem dat je als je PHP gebruikt als templating language je toch 'overal' htmlspecialchars() moet gebruiken om XSS tegen te gaan. Dan wordt Smarty opeens wel best interessant. Dit is natuurlijk op te lossen als je zelf wat functies maakt die dit soort dingen voor je doen, maar wat is het voordeel boven een andere template taal dan?

PHP als templating taal kan zeker, maar ik begrijp de mensen die Smarty of andere talen gebruiken ook wel, omdat er handige dingen in zitten zoals wisselende achtergrondkleuren voor rijen in een tabel en het escapen van html. Scheelt weer een beetje ontwikkeltijd, ten koste van een heel klein beetje performance (Smarty templates worden ge-"compiled" naar PHP en daarna gecached).

De prettigste oplossing om views te maken (op de soms ranzige HTML na) vind ik zelf een component based framework als ASP.NET, JSF, PRADO, Yii, enzovoorts.

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
offtopic:
Alles dat er bij PHP6 uit gaat is volledig terecht en had er al veel eerder uitgekund en gemoeten. \o/

{signature}


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 22:32

Janoz

Moderator Devschuur®

!litemod

@RoeLz: Sarcasme wel gespot, maar kon de behoefte tot reageren gewoon niet bedwingen ;)
Eddy Dean schreef op woensdag 22 juli 2009 @ 11:58:
Helaas gaan shorttags er uit met PHP6, en daarbij heb je ook nog het probleem dat je als je PHP gebruikt als templating language je toch 'overal' htmlspecialchars() moet gebruiken om XSS tegen te gaan. Dan wordt Smarty opeens wel best interessant. Dit is natuurlijk op te lossen als je zelf wat functies maakt die dit soort dingen voor je doen, maar wat is het voordeel boven een andere template taal dan?
Las laatst Jaap-Jan in "Over logica en presentatie"
PHP als templating taal kan zeker, maar ik begrijp de mensen die Smarty of andere talen gebruiken ook wel, omdat er handige dingen in zitten zoals wisselende achtergrondkleuren voor rijen in een tabel en het escapen van html. Scheelt weer een beetje ontwikkeltijd, ten koste van een heel klein beetje performance (Smarty templates worden ge-"compiled" naar PHP en daarna gecached).
Eens
De prettigste oplossing om views te maken (op de soms ranzige HTML na) vind ik zelf een component based framework als ASP.NET, JSF, PRADO, Yii, enzovoorts.
Helemaal mee eens, maar iets vergelijkbaars zou je ook voor php kunnen proberen te maken. Niet met tags, maar door een (php) object representatie van je pagina bij te houden die zichzelf naar html kan renderen.

Nadeel is natuurlijk wel dat dit voor meer html georienteerde frontend developers nogal behoorlijk lastig te begrijpen is.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

GJtje schreef op woensdag 22 juli 2009 @ 09:58:
[...]
Als je al short tags wil gebruiken (ik persoonlijk namelijk niet, plus je weet nooit zeker of iemand short tags aan kán zetten) vind ik wel dat je consequent moet zijn en dan áltijd short tags moet gaan gebruiken, geen mengeling wat jij nu doet in je voorbeeld code.
Je weet inderdaad nooit zeker dat iemand shorttags heeft aan staan. Maar je weet ook nooit of een server de gewenste PHP libs heeft om je template engine te draaien of andere delen van je webapp. Daarnaast kon je met een .htaccess erg ver (php_flag short_open_tag on).

Ik doe die mengeling eigenlijk een beetje expres. De dingen in shorttags zijn gewoon standaard template dingen. Dingen die ik tussen volledige PHP tags ram, is eigenlijk code wat in de controller hoort. Dat is voor mij dus om de boel overzichtelijk te houden.

Acties:
  • 0 Henk 'm!

  • Kettrick
  • Registratie: Augustus 2000
  • Laatst online: 13-10 05:37

Kettrick

Rantmeister!

eghie schreef op woensdag 22 juli 2009 @ 12:10:
[...]

Je weet inderdaad nooit zeker dat iemand shorttags heeft aan staan. Maar je weet ook nooit of een server de gewenste PHP libs heeft om je template engine te draaien of andere delen van je webapp. Daarnaast kon je met een .htaccess erg ver (php_flag short_open_tag on).
Hangt van je project af, maar ik weet precies hoe mijn server er uit ziet er wat er wel en niet kan.
Ik doe die mengeling eigenlijk een beetje expres. De dingen in shorttags zijn gewoon standaard template dingen. Dingen die ik tussen volledige PHP tags ram, is eigenlijk code wat in de controller hoort. Dat is voor mij dus om de boel overzichtelijk te houden.
Wat moet het dan in je view :? :P

Is het trouwens niet zo dat <?= gewoon blijft werken, maar dat de ASP tag <% er uit gaat ?. De eerste variant wordt best veel gebruikt, de laatste heb ik volgens mij nog nooit voorbij zien komen :?

Acties:
  • 0 Henk 'm!

  • dev10
  • Registratie: April 2005
  • Laatst online: 13-10 11:39
Verwijderd schreef op woensdag 22 juli 2009 @ 09:13:
Ik snap overigens niet waarom grote sites als facebook, myspace en hyves wel smarty gebruiken....
Ik weet niet wat Myspace gebruikt, maar het zal geen Smarty zijn. ;)

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
$ curl -I http://www.myspace.com
HTTP/1.1 302 Moved Temporarily
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-Server: 767b5ea370a2e7a3d8c0173e1b53f737ed384420f0d79237
X-AspNet-Version: 2.0.50727
Location: http://m.myspace.com/login.wap?isredirected=true
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Length: 165
Date: Wed, 22 Jul 2009 11:02:08 GMT
Connection: keep-alive
Set-Cookie: NSC_mc_xxx-tqmbti_80=447f39133660;expires=Wed, 22-Jul-09 11:04:08 GMT;path=/

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
dev10 schreef op woensdag 22 juli 2009 @ 13:05:
[...]


Ik weet niet wat Myspace gebruikt, maar het zal geen Smarty zijn. ;)

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
$ curl -I http://www.myspace.com
HTTP/1.1 302 Moved Temporarily
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-Server: 767b5ea370a2e7a3d8c0173e1b53f737ed384420f0d79237
X-AspNet-Version: 2.0.50727
Location: http://m.myspace.com/login.wap?isredirected=true
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Length: 165
Date: Wed, 22 Jul 2009 11:02:08 GMT
Connection: keep-alive
Set-Cookie: NSC_mc_xxx-tqmbti_80=447f39133660;expires=Wed, 22-Jul-09 11:04:08 GMT;path=/
Facebook schijnt vrij zeker te zijn.

Wat me opviel was waarom dergelijke sites, ook hyves, een template engine zouden gebruiken waar redelijk wat mensen kritiek op hebben ivm het feit dat smarty vrij "oud" is.

Acties:
  • 0 Henk 'm!

  • Kettrick
  • Registratie: Augustus 2000
  • Laatst online: 13-10 05:37

Kettrick

Rantmeister!

Verwijderd schreef op woensdag 22 juli 2009 @ 13:09:
[...]
Wat me opviel was waarom dergelijke sites, ook hyves, een template engine zouden gebruiken waar redelijk wat mensen kritiek op hebben ivm het feit dat smarty vrij "oud" is.
Dat is zo ongeveer het laatste waar je je druk om moet maken... je gaat toch geen technische keuzes maken gebaseerd op de mening van je publiek?.

Acties:
  • 0 Henk 'm!

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Wij gebruiken al sinds 1999 XML/XSL als template engine. Via een omweg (extensions) kun je nog wel code uitvoeren, maar die moet je dubbel declareren (zowel in de XSL styleheet (namespace declararion) als bij de runtime engine).

Gewoon de informatie in de XML opnemen is vrijwel altijd sneller dan de betreffende class/functie beschikbaar maken vanuit XSL. Via een XslUtility worden wel een aantal framework functies beschikbaar gemaakt in XSL (zoals het uitlezen van een sessie waarde, het presenteren van een datum/getal - op basis van user locale) of een simpele replace).

If it isn't broken, fix it until it is..


Acties:
  • 0 Henk 'm!

  • Eddy Dean
  • Registratie: November 2007
  • Laatst online: 10-10 19:16
Oke, mijn fout. Shorttags gaan er dus niet uit, maar je zit nog steeds met het probleem van HTML escaping. Bij <?=$foo?> wordt foo niet geescaped, dus is er XSS risico als je de inhoud van de variabele foo niet kunt vertrouwen. Dan moet je alsnog <? echo htmlspecialchars($foo) ?> doen. Dan is de Smarty-variant {$foo|escape} naar mijn mening toch praktischer.

De laatste twee component based frameworks die ik noemde (Yii en PRADO) zijn overigens voor PHP. Ik vrees alleen dat de echte kracht van component based, namelijk het makkelijk kunnen gebruiken van door andere mensen geschreven componenten, niet gaat werken bij PHP omdat er een te grote diversiteit in PHP frameworks is.

XML + XSLT naar XHTML is ook wel een interessante combinatie, zeker als je je data al opslaat als XML. Als je je data uit een database haalt lijkt het me vrij omslachtig om hier eerst XML van te maken om het daarna om te zetten naar (X)HTML.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 22:32

Janoz

Moderator Devschuur®

!litemod

Eddy Dean schreef op woensdag 22 juli 2009 @ 15:02:
Oke, mijn fout. Shorttags gaan er dus niet uit, maar je zit nog steeds met het probleem van HTML escaping. Bij <?=$foo?> wordt foo niet geescaped, dus is er XSS risico als je de inhoud van de variabele foo niet kunt vertrouwen. Dan moet je alsnog <? echo htmlspecialchars($foo) ?> doen. Dan is de Smarty-variant {$foo|escape} naar mijn mening toch praktischer.
Contex aware escaping heb je altijd nodig, los van het betrouwbaar zijn van de inhoud, maar <?=htmlspecialchars($foo) ?> kan ook ;).

[ Voor 3% gewijzigd door Janoz op 22-07-2009 15:09 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Gaan we nu wat offtopic of ligt het aan mij ? :?

Acties:
  • 0 Henk 'm!

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Eddy Dean schreef op woensdag 22 juli 2009 @ 15:02:
[...]

XML + XSLT naar XHTML is ook wel een interessante combinatie, zeker als je je data al opslaat als XML. Als je je data uit een database haalt lijkt het me vrij omslachtig om hier eerst XML van te maken om het daarna om te zetten naar (X)HTML.
Los van het feit dat wij ook veel data betrekken van webservices. De commerciele databases tegenwoordig genoeg XML mogelijkheden aan boord. Vooral XML in MSSQL en IBM DB2 (Met XML Extender) zit goed in elkaar. Niet alleen kent MSSQL een speciaal XML veld waarop native xpointer queries kunnen worden losgelaten, maar ook het 'FOR XML' statement bied grote voordelen.

In 1999 programmeerde wij in een uitgebreide verzameling talen (Perl, PHP, ASP en Python). Elk taal had zijn eigen template systemen, maar vrijwel elke website had dezelfde onderdelen. Allemaal hadden ze een nieuws sectie en ook het e-commerce gedeelte was vrijwel altijd hetzelfde. Met XSL kregen wij een template systeem in handen welke niet alleen in elke taal hetzelfde werkt, maar we konden zelfs XSL stylesheets tussen de projecten overhevelen en indien nodig aanpassen. Ik kan de XSL niet alleen gebruiken voor websites, maar ook voor de productie van PDF, XPS en excel bestanden.

Maak je gebruik van een ORM framework? In dat geval zet je data om in objecten, op zich niet anders dat diezelfde data omzetten naar XML. Daarnaast krijgen wij gewoon al vanuit de database XML terug.

Een ander voordeel is dat je niet je 'normale' programmeertaal kunt gebruiken in de XSL. Wat je niet in de XML hebt gestopt, is niet beschikbaar. Dat zorgt ervoor dat developers beter nadenken over welke informatie ze waar nodig hebben.

If it isn't broken, fix it until it is..


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het probleem van veel template engines / frameworks is dat ze toch vaak complex zijn en niet echt de manier van PHP gebruik vergemakkelijken.

Dit is niet zozeer een mening welke afhangt van PHP kennis maar meer van wat je in gebruik merkt en ook veel leest vanuit gebruikers ervaringen en reviews.

Ik ben www.phpwork.org tegen het lijf gelopen wat echt een goede variant lijkt te zijn. De community is echter niet groot maar het gebruikersgemak is toch aanzienlijker dan bij andere frameworks als je het mij vraagt.

Acties:
  • 0 Henk 'm!

  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

Eddy Dean schreef op woensdag 22 juli 2009 @ 15:02:
[...]


Oke, mijn fout. Shorttags gaan er dus niet uit, maar je zit nog steeds met het probleem van HTML escaping. Bij <?=$foo?> wordt foo niet geescaped, dus is er XSS risico als je de inhoud van de variabele foo niet kunt vertrouwen. Dan moet je alsnog <? echo htmlspecialchars($foo) ?> doen. Dan is de Smarty-variant {$foo|escape} naar mijn mening toch praktischer.

De laatste twee component based frameworks die ik noemde (Yii en PRADO) zijn overigens voor PHP. Ik vrees alleen dat de echte kracht van component based, namelijk het makkelijk kunnen gebruiken van door andere mensen geschreven componenten, niet gaat werken bij PHP omdat er een te grote diversiteit in PHP frameworks is.

XML + XSLT naar XHTML is ook wel een interessante combinatie, zeker als je je data al opslaat als XML. Als je je data uit een database haalt lijkt het me vrij omslachtig om hier eerst XML van te maken om het daarna om te zetten naar (X)HTML.
Maak een functie t bijvoorbeeld die zowel kan vertalen, als escaped.

Dus iets als zo:
PHP:
1
2
3
4
<?php
function t($var) {
    return htmlspecialchars(gettext($var));
}

Combineer je die functie nog met de functie (dsprintf) van "jeppe dot dyrby at gmail dot com"@04-Mar-2009 12:52 (op: http://nl3.php.net/manual/en/function.vsprintf.php#89349), dan heb je een mooie translate functie erbij, die met sprintf kan werken.

Dan kun je het dus gewoon zo gebruiken:
<?=t($blah); ?>

En in je .htaccess:
code:
1
php_flag short_open_tag on


Dat werkt naar mijn mening uitstekend.

Ik kan me er trouwens ook wel in vinden dat XSL ook erg goed werkt. En ik zie zeker ook wel het voordeel ervan in. Misschien nog wel beter dan wat ik hierboven noem. Voornamelijk omdat het je dwingt om de data in de controller op te halen.

[ Voor 6% gewijzigd door eghie op 26-07-2009 11:05 ]


Acties:
  • 0 Henk 'm!

  • prototype
  • Registratie: Juni 2001
  • Niet online

prototype

Cheer Bear

Dit is nou een punt waarop ik zeg dat PHP'ers eens voor de lol hun horizon moeten proberen te verbreden en wat meer worden dan een PHP'er. Voor je persoonlijke ontwikkeling doe je je dan goed om eens te kijken hoe andere talen icm frameworks dit oplossen :-) Neem in het bijzonder ook even een kijkje naar Rails/Django, die kicken behoorlijk de bestaande PHP frameworks' asses, maar dat komt al omdat de taal sane is om mee te beginnen :P Pik tegelijkertijd wat software engineering filosofien op zoals YAGNI, en ik denk dat je al steeds meer van mening zult zijn dat een template engine in een template taal behoorlijk retarded is ;-)

Acties:
  • 0 Henk 'm!

  • Eddy Dean
  • Registratie: November 2007
  • Laatst online: 10-10 19:16
Natuurlijk kan dat, ik gaf zelf ook al aan dat je best PHP kunt gebruiken zonder template engine. Het is absoluut mogelijk om zelf functies te schrijven zoals jij aangeeft, maar waarom zou je dat doen als je een kant en klaar pakket kunt gebruiken?

Ik heb trouwens nachtmerries over gettext, wil je me daar alsjeblieft niet mee confronteren? ;) (het onding is (was?) niet thread safe, en daar ben ik op de pijnlijke manier achter gekomen).

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Momenteel neig ik toch meer naar Smarty omdat hier echt een grote userbase omheen zit, dit is altijd handig.

CakePHP en andere frameworks blijken bij de ontwikkelaars opzich wel in trek maar er wordt vaak gezegd d at smarty hun niet echt in de steek gelaten heeft in het verleden dus men ziet niet direct een reden om over te stappen... hoewel met als bijvoorbeeld CakePHP eerder had bestaan men daar toch voor gekozen zou hebben.

Native PHP blijven werken als je een framework wil gaan gebruiken is gewoon verre van handig, het scheelt je gewoon zoveel tijd in ontwikkeling.

Acties:
  • 0 Henk 'm!

  • Eddy Dean
  • Registratie: November 2007
  • Laatst online: 10-10 19:16
prototype schreef op zondag 26 juli 2009 @ 11:13:
Dit is nou een punt waarop ik zeg dat PHP'ers eens voor de lol hun horizon moeten proberen te verbreden en wat meer worden dan een PHP'er. Voor je persoonlijke ontwikkeling doe je je dan goed om eens te kijken hoe andere talen icm frameworks dit oplossen :-) Neem in het bijzonder ook even een kijkje naar Rails/Django, die kicken behoorlijk de bestaande PHP frameworks' asses, maar dat komt al omdat de taal sane is om mee te beginnen :P Pik tegelijkertijd wat software engineering filosofien op zoals YAGNI, en ik denk dat je al steeds meer van mening zult zijn dat een template engine in een template taal behoorlijk retarded is ;-)
Ik heb zelf ook een hekel aan PHP hoor, maak je maar geen zorgen.

YAGNI betekend dat je geen dingen moet maken die je niet nodig hebt, niet dat je alles wat je wel nodig hebt zelf moet bouwen. Als ik smarty gebruik omdat ik dan zelf geen functie hoef te schrijven die de rijen van een tabel om en om een andere kleur geef, is dat toch juist iets goeds, omdat het mij tijd scheelt. Dat ik een groot deel van smarty niet gebruik boeit niet, omdat het me ook niet in de weg zit. YAGNI houdt in dat je zelf geen template taal met alles er op en er aan moet gaan schrijven als je een groot deel niet nodig hebt.

Ik ben het helemaal eens met DRY (Don't repeat yourself" maar ook met "Don't repeat others". (hoe zullen we dat noemen? DRO?). Smarty heeft een prima featureset om view-dingetjes te regelen, dus is dat wat mij betreft een goede keus.

Zo'n "template engine" voor PHP hoeft wat mij betreft ook geen heel nieuwe syntax te hebben (wat smarty dus wel heeft), maar bestaat wat mij betreft uit een verzameling praktische functies die je werk uit handen nemen. Dingen als een BBCode parser, een wisselende-achtergrondkleur-in-tabel-dingetje, enzovoorts horen daar wat mij betreft ook bij. Dat een groot deel van de sites geen BBCode nodig heeft betekend toch niet dat die template engine dan niet geschikt is?

Ik begrijp echt niet waarom mensen iets log vinden zodra het meer functies heeft dan ze zelf nodig hebben. Dan gebruik je die functies toch gewoon niet? Boeien die paar kilobyte je echt?
Als die functies die je niet gebruikt je in de weg staan is het library gewoon slecht gemaakt.

Samengevat: Als het je tijd scheelt om een "template engine"/library met helper functies te gebruiken en je toch het zelfde resultaat behaalt: go for it, ook al gebruik je niet alle functionaliteit die dat library te bieden heeft.
Verwijderd schreef op zondag 26 juli 2009 @ 12:05:
Momenteel neig ik toch meer naar Smarty omdat hier echt een grote userbase omheen zit, dit is altijd handig.

CakePHP en andere frameworks blijken bij de ontwikkelaars opzich wel in trek maar er wordt vaak gezegd d at smarty hun niet echt in de steek gelaten heeft in het verleden dus men ziet niet direct een reden om over te stappen... hoewel met als bijvoorbeeld CakePHP eerder had bestaan men daar toch voor gekozen zou hebben.

Native PHP blijven werken als je een framework wil gaan gebruiken is gewoon verre van handig, het scheelt je gewoon zoveel tijd in ontwikkeling.
Ik ben het met prototype eens dat je horizon verbreden en ook kijken naar andere frameworks en talen een heel goed idee is. Het Zend framework schijnt ook zo ongeveer heilig te zijn. Ik heb het zelf nooit gebruikt, maar het is misschien wel het bekijken waard. Ik heb zelf verlichting gevonden in JavaServer Faces. De keus is aan jou.

Een framework is iets heel anders dan een template engine, vergeet dat niet. Veel frameworks hebben ook zaken als ORM, authentication, authorisation, i18n, scaffolding (waar ik een absolute hekel aan heb. Ik zit niet de hele dag blogs en nieuwspaginas in elkaar te "programmeren"), een template engine, enzovoorts aan boord. Een template engine is dus veel "kleiner" dan een heel framework.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben het met je eens dat een framework en template engine zeker verschillende dingen zijn.

Nu vinden de meeste ontwikkelaars Smarty eerder en template engine dan een framework, waar opzich een goede kern van waarheid in zit, echter gebruik je het wel als framework omdat je echt een een andere manier gaat programmeren.

De nadelen van echte frameworks vind ik dat de manier van templates er niet lekker in zit gebouwd. Je gaat je templates op een dusdanige manier gebruiken dat je framework optimaal is maar je templates er een beetje omheen gefrommeld zitten.

Smarty combineert beide eigenlijk perfect !

Acties:
  • 0 Henk 'm!

  • prototype
  • Registratie: Juni 2001
  • Niet online

prototype

Cheer Bear

Eddy Dean schreef op zondag 26 juli 2009 @ 12:30:
[...]


Ik heb zelf ook een hekel aan PHP hoor, maak je maar geen zorgen.

YAGNI betekend dat je geen dingen moet maken die je niet nodig hebt, niet dat je alles wat je wel nodig hebt zelf moet bouwen. Als ik smarty gebruik omdat ik dan zelf geen functie hoef te schrijven die de rijen van een tabel om en om een andere kleur geef, is dat toch juist iets goeds, omdat het mij tijd scheelt. Dat ik een groot deel van smarty niet gebruik boeit niet, omdat het me ook niet in de weg zit. YAGNI houdt in dat je zelf geen template taal met alles er op en er aan moet gaan schrijven als je een groot deel niet nodig hebt.
Correct, maar mijn punt is meer dat PHP al een template taal __IS__. Het gebruik van Smarty is daarbij redundant: smarty is eigenlijk een preprocessor voor een preprocessor, en dat is imo 2x stom. Het doet me een beetje denken aan macro's in C/C++, die worden ook over 't algemeen al zo goed gebruikt vaak :P, en zijn dan vooral leuk om te debuggen...not. Misschien is het dan ook een kneejerk reactie van me, want begrijp me niet verkeerd, macro's zijn soms gewoon onvermijdbaar voor de convenience, en datzelfde kan eventueel gezegd worden ook voor smarty, echter heb ik het nog daarbij niet kunnen inzien.
Ik ben het helemaal eens met DRY (Don't repeat yourself" maar ook met "Don't repeat others". (hoe zullen we dat noemen? DRO?). Smarty heeft een prima featureset om view-dingetjes te regelen, dus is dat wat mij betreft een goede keus.
Maar Smarty heeft ook een huge shitload aan dingen die je NIET nodig hebt en imo nadelig is als je het vergelijkt met wat PHP al doet. En dat is dus mijn punt van YAGNI. Het meeste is gewoon redundant aan PHP. Nu zeg je idd dat je dat niet hoeft te gebruiken, en correct, daar zou ik het normaliter mee eens zijn ware het niet dat smarty gewoon z'n eigen syntax introduceert en eigenlijk daarmee opaque is voor de developer. Als je eenmaal aan smarty begint heb je ook meteen een opaque dependency door die afwijkende syntax van hun. Een sane interface in PHP daarentegen had je gewoon eenvoudig in staat gesteld om een andere provider ervoor te gebruiken, wat dan ook een transparantere oplossing was geweest.
Zo'n "template engine" voor PHP hoeft wat mij betreft ook geen heel nieuwe syntax te hebben (wat smarty dus wel heeft), maar bestaat wat mij betreft uit een verzameling praktische functies die je werk uit handen nemen. Dingen als een BBCode parser, een wisselende-achtergrondkleur-in-tabel-dingetje, enzovoorts horen daar wat mij betreft ook bij. Dat een groot deel van de sites geen BBCode nodig heeft betekend toch niet dat die template engine dan niet geschikt is?
Het betekent imho dat je disproportioneel teveel erbij pakt dan dat je daadwerkelijk nodig hebt. Een BB code parser, daar bestaan duizend en een libraries al voor die in "native PHP" zijn geschreven. In rails kun je daar gewoon een plugin aan koppelen, punt is, het is allemaal gewoon Ruby wat je schrijft wanneer je het gebruikt, niet een eigen taal zoals smarty. Verder, die wisselende achtergrondkleur in tabellen, daar heeft Rails het principe van view helpers voor, en in het bijzonder hebben ze hier de cycle helper voor. Die kan je ook eenvoudig met de hand schrijven eigenlijk voor PHP en rechtvaardigt imo dan ook niet het includen van een frickin' PHP in PHP aka smarty.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
class Cycler {
    protected $range;
    protected $size;
    protected $current;

    public function __construct($range = array()) {
        $this->range = range;
        $this->size = count($range);
    }

    public function next() {
        $this->current = ($this->current++) % $this->size;
        return $this->range[$this->current];
    }
}

?>


In je view kan je dan zoiets doen als:
code:
1
2
3
4
5
<?php $cycler = new Cycler(array("odd", "even")); ?>

<?php foreach($rows as $row): ?>
    <tr class="<?php $cycler->next(); ?>">
<?php endforeach; ?><!-- waarom niet gewoon end... volgens mij parser probleem :P -->
Ik begrijp daarom ook echt niet waarom mensen iets log vinden zodra het meer functies heeft dan ze zelf nodig hebben. Dan gebruik je die functies toch gewoon niet? Boeien die paar kilobyte je echt?
Als die functies die je niet gebruikt je in de weg staan is het library gewoon slecht gemaakt.
Normaal gesproken zou ik het hier met je mee eens zijn, ware het niet dat de library die je gebruikt niet de core functionaliteit moet nadoen van de taal zelf. Dat is een laag aan redundantie die een dependency met zich meebrengt die onderhoud, ook met het oog op toekomstige versies, in de weg kan staan. Het is vaak niet eens zozeer een kwestie van size van het project (tenzij je met een linux project aan de haal gaat, want die doen over 't algemeen wel lastig mbt vendoring, niet alleen omwille van size maar ook omwille van security, het blijft altijd weer een extra stukje code dat je meeneemt wat een risico kan zijn). Maar ook hier kan het argument van size opgaan: aangezien PHP alles inlaadt bij een request en daarna ook alles weer dumpt wil je niet dat hij een freakin' template engine inlaadt om vervolgens maar 2 dingen ervan te gebruiken :P Rails is ook geen lichtgewicht, maar die draait dan ook als applicatieserver en blijft zoveel mogelijk in memory: dat is meteen een voordeel en een nadeel afhankelijk van de situatie. Het pluspunt van PHP's "schaalbaarheid" is juist dat apps niet als applicatieserver draaien en in feite dus geen shared data hebben (excluding the database). Wil je dat voordeel helemaal leveragen, dan wil je niet dat hij teveel moet inladen voor elke request van disk, dat is dan wel duur.
Samengevat: Als het je tijd scheelt om een "template engine"/library met helper functies te gebruiken en je toch het zelfde resultaat behaalt: go for it, ook al gebruik je niet alle functionaliteit die dat library te bieden heeft.
Samengevat: ik vind dat PHP'ers eens zich goed achter de oren moeten krabben en zich afvragen waar ze die "template engine" nou echt voor gebruiken en zich dan eens af moeten gaan vragen of het wel echt die voordelen met zich meebrengt die het adverteert, vooral in het geval van smarty.
Een framework is iets heel anders dan een template engine, vergeet dat niet. Veel frameworks hebben ook zaken als ORM, authentication, authorisation, i18n, scaffolding (waar ik een absolute hekel aan heb. Ik zit niet de hele dag blogs en nieuwspaginas in elkaar te "programmeren"), een template engine, enzovoorts aan boord. Een template engine is dus veel "kleiner" dan een heel framework.
Een "template engine" is vaak een onderdeel van een framework idd, en het is daarom ook dat ik eens mensen zou willen aansporen om daar eens een kijkje naar te nemen en dan eens verlichting proberen te vinden in dingen die zij 200x ook programmeren, zij het waarschijnlijk een stuk slechter :P
Verwijderd schreef op zondag 26 juli 2009 @ 12:43:
De nadelen van echte frameworks vind ik dat de manier van templates er niet lekker in zit gebouwd. Je gaat je templates op een dusdanige manier gebruiken dat je framework optimaal is maar je templates er een beetje omheen gefrommeld zitten.
Kun je hier een concreet voorbeeld van geven?

Verder, in het kader van DRY, neem ook een kijkje naar m'n reacties in Over logica en presentatie . ;-)

[ Voor 3% gewijzigd door prototype op 26-07-2009 13:28 ]


Acties:
  • 0 Henk 'm!

  • Maghiel
  • Registratie: Maart 2004
  • Laatst online: 18:06
Zoals al eerder gezegd: PHP is al een template engine!
Je moet je alleen wel houden aan wat er in de template moet en niet toch stiekem logica gaan opnemen.

Kijk naar het Zend framework, Zend_View. Ok het is een extra laag maar in feite enkel php.

En ze zeggen zelf ook al:
Although PHP is itself a powerful template system, many developers feel it is too powerful or complex for their template designers and will want to use an alternate template engine. Zend_View provides two mechanisms for doing so, the first through view scripts, the second by implementing Zend_View_Interface.
http://framework.zend.com/manual/en/zend.view.scripts.html

Acties:
  • 0 Henk 'm!

  • masq
  • Registratie: September 2004
  • Laatst online: 18-04 00:18
Ik snap wel waarom mensen kiezen voor Smarty. Ik vind PHP-als-templatetaal maar rommelig, verbose en error prone. De syntax van Smarty is in vergelijking een stuk cleaner.

Totdat je fancy (custom) dingen wil gaan doen. Dan moet je je opeens weer in allerlei bochten gaan wringen om iets voor elkaar te krijgen wat je waarschijnlijk met 2 regels PHP ook had kunnen doen. En ja, je kunt php gebruiken in smarty, maar dan ben je in feite weer terug bij af.

Het mixen van html en code is waar het op fout gaat, dus waarom zou je het niet helemaal scheiden? Doe jezelf nog een plezier en gebruik een component based frameworkje, dan is zoiets als escaping meteen ook een non-issue.

Acties:
  • 0 Henk 'm!

Verwijderd

Het mixen van html en code is waar het op fout gaat, dus waarom zou je het niet helemaal scheiden?
Als je Smarty gebruikt scheidt je code en html toch ook niet? Waarom zou dat uberhaupt een streven zijn?

[ Voor 3% gewijzigd door Verwijderd op 04-08-2009 09:28 ]


Acties:
  • 0 Henk 'm!

  • masq
  • Registratie: September 2004
  • Laatst online: 18-04 00:18
Verwijderd schreef op dinsdag 04 augustus 2009 @ 09:28:
Als je Smarty gebruikt scheidt je code en html toch ook niet?
Dat klopt, en dat is mijn punt nu juist. Het mixen van html en code (en daar versta ik dus ook de control structures van Smarty onder) leidt tot een onnodig rommelig geheel. Dus laat html lekker overzichtelijke html (afgezien van unobtrusive attributen om de juiste elementen te identificeren) en laat de code gewoon overzichtelijke code.

[ Voor 21% gewijzigd door masq op 04-08-2009 09:47 ]

Pagina: 1