[PHP ZF] Zend Framework en SMarty

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • chielsen
  • Registratie: Oktober 2003
  • Laatst online: 08:35
Ik ben nu net bezig met het leren van ZendFramework. Ik heb altijd zelf een mijn eigen framework en daarbij ook template engine gebruikt.
Nu is het zo dat ZF met Zend_layout en Zend_view werkt. Best leuk, maar toen ik al die php code in de templates zag schrok ik wel.

Na wat googlen zag ik dat er ook implementaties van ZF met Smarty zijn. Ik heb dit dan ook overgenomen.
Nu ik dit werkend heb vraag ik me echter wat af.
Of ik nu in mijn template phpcode heb staan of pseudo commando's dat maakt eigenlijk niet zo veel uit.
Een designer moet toch over beide heenlezen.
Aangezien ik ook geen ervaring heb met smarty (en daar dus vrij alles ook nog van moet leren) en de extra overhead, zit ik nu toch weer te denken dat de standaard implementatie misschien toch wel de beste is.

Hoe denken jullie hierover?

Acties:
  • 0 Henk 'm!

  • Freeaqingme
  • Registratie: April 2006
  • Laatst online: 12:39
Ik ben tegen het gebruik van Smarty (in een ZF applicatie) omdat - er van uitgaand dat je de standaard MVC implementatie al gebruikt - Smarty geen enkele toegevoegde waarde biedt. Daarnaast introduceer je met Smarty een extra abstractielaag. Dat is op zich geen punt, mits die abstractie je maar wat oplevert, en dat is bij ZF dus niet het geval aangezien je daarbij al je logic & user input handling hebt gescheiden van de output.

Naast dat zijn er nog veel meer redenen te bedenken waarom Smarty nou niet het eerste is wat je iemand aanraadt.

Wellicht de beste hint:
"Smarty compiles templates into PHP code behind the scenes, eliminating run-time parsing of templates."

Smarty compiles down to PHP. This should give you a hint. Really.

[ Voor 16% gewijzigd door Freeaqingme op 23-08-2009 04:00 ]

No trees were harmed in creating this message. However, a large number of electrons were terribly inconvenienced.


Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 11-09 21:40
Zonder weer in dezelfde eindeloze discussie terecht te willen komen: hoezo is dat een hint? Alle talen hoger dan ASM compileren naar iets van een lager niveau, wil je dan ook beweren dat al die talen onzin zijn en iedereen gewoon weer ASM moet gaan lopen kloppen? :? Is C++ dan ook onzin omdat je alles wat je met C++ kan ook gewoon in C kan doen? For that matter, is PHP dan niet ook onzin omdat dat uiteindelijk weer van C/C++ afstamt?

Alle hogere level talen compileren naar iets lagers. Die hogere laag dan afdoen als onzinnig omdat het compileert naar iets lagers is een ongelovelijk nonargument. Er zijn genoeg argumenten te bedenken waarom Smarty als abstractielaag weinig toevoegt, en mensen die niet gebruik willen maken van de extra functionaliteit die Smarty bied onder het motto "dat kan PHP ook" moeten dat vooral zelf weten. Voor mij persoonlijk zorgt Smarty ervoor dat de gegevens die naar mijn templates gaan schoner zijn, dat ik minder logica in mijn templates stop en dat ik niet overal <?php hoef neer te knallen (ja, ik ken shorttags. Zolang die niet verplicht aanstaan ga ik er niet op vertrouwen voor portable code) met als overall gevolg dat m'n templates simpeler en beter beheerbaar zijn. Aangezien ik (en mijn opdrachtgever) daar waarde aan hecht is Smarty voor mij de moeite waard, hoe anderen daarover denken moeten ze zelf weten :)

[ Voor 46% gewijzigd door FragFrog op 23-08-2009 08:57 ]

[ Site ] [ twitch ] [ jijbuis ]


Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
Ik heb mijn frontend developers geadviseerd zich meer in php te gaan verdiepen. Zij gebruikten altijd Smarty, maar nu met de introductie van ZF bij ons zijn we gewoon Zend_Layout en Zend_View gaan gebruiken.

Voorheen was Smarty handig omdat ze zelf aparte "sub" templates konden aanroepen, ze zelf zeer eenvoudig een tabel een wisselende rijkleur konden geven enn meer van dat soort features die wat lastiger in php zijn.
Nu is met ZF, de view helpers en partials, het zo eenvoudig om dit allemaal te realiseren dat Smarty alleen een grote overhead is zonder echt toegevoegde waarde (in ons geval). Daarom hebben we Smarty eruit gegooid en gebleven met ZF. Als jij toch niet bekend bent met Smarty, zou ik ook lekker bij ZF blijven.

De template functionaliteiten in ZF zijn groter in dan Smarty en de "overhead" die ZF geeft reken je hier niet specifiek mee omdat je toch al veel van ZF gebruikt. ZF+Smarty levert wel weer een bak overhead op. Bijvoorbeeld de caching die Smarty kent is net zo makkelijk te doen (en beter geïntegreerd) met Zend_Cache (en zo kan ik nog wel even doorgaan).

Acties:
  • 0 Henk 'm!

  • cariolive23
  • Registratie: Januari 2007
  • Laatst online: 18-10-2024
Ik gebruik zelf graag XSLT als template engine, dat werkt niet alleen met PHP maar ook met .NET, Java, etc.

En ja, XML (wat XSLT ook is en nodig heeft als input) kost wat performance, maar voor webpagina's is dat minimaal. Er wordt relatief weinig data op één pagina getoond, dat levert dus ook maar een kleine performance penalty op.

Voordelen:
- XML is met XSD eenvoudig te valideren. Handig tijdens het bouwen en testen, bij een bug krijg je direct een dikke error voor je kiezen.
- XML heb je geen werkende applicatie voor nodig, de frontend kun je dus eevoudig bouwen en testen voordat de applicatie klaar is.
- XML en XSLT komen uit dezelfde familie als xHTML, een designer kan hier vrij snel mee uit de voeten.
- Wordt ondersteund door diverse programmeertalen en databases

Nadeel:
- Performance penalty. Maar, dat is met iedere oplossing het geval. Geen enkele oplossing kan iets uitvoeren zonder processortijd of memory te verbruiken. Ga meten om te zien wat de verschillen zijn in jouw situatie.

Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
FragFrog schreef op zondag 23 augustus 2009 @ 08:46:
[...]

Zonder weer in dezelfde eindeloze discussie terecht te willen komen: hoezo is dat een hint? Alle talen hoger dan ASM compileren naar iets van een lager niveau, wil je dan ook beweren dat al die talen onzin zijn en iedereen gewoon weer ASM moet gaan lopen kloppen? :? Is C++ dan ook onzin omdat je alles wat je met C++ kan ook gewoon in C kan doen? For that matter, is PHP dan niet ook onzin omdat dat uiteindelijk weer van C/C++ afstamt?

Alle hogere level talen compileren naar iets lagers. Die hogere laag dan afdoen als onzinnig omdat het compileert naar iets lagers is een ongelovelijk nonargument. Er zijn genoeg argumenten te bedenken waarom Smarty als abstractielaag weinig toevoegt, en mensen die niet gebruik willen maken van de extra functionaliteit die Smarty bied onder het motto "dat kan PHP ook" moeten dat vooral zelf weten. Voor mij persoonlijk zorgt Smarty ervoor dat de gegevens die naar mijn templates gaan schoner zijn, dat ik minder logica in mijn templates stop en dat ik niet overal <?php hoef neer te knallen (ja, ik ken shorttags. Zolang die niet verplicht aanstaan ga ik er niet op vertrouwen voor portable code) met als overall gevolg dat m'n templates simpeler en beter beheerbaar zijn. Aangezien ik (en mijn opdrachtgever) daar waarde aan hecht is Smarty voor mij de moeite waard, hoe anderen daarover denken moeten ze zelf weten :)
Leuk verhaal, maar dan ken je Zend_View (en ook Zend_Layout) dus nog niet. Ook daarbij moet je nadenken over welke variabelen je wel en niet doorstuurt naar de template, niet alles is zomaar beschikbaar en zit er geen/minder logica in de templates. Templates in Zend_View (en dus in PHP) zijn net zo schoon als in Smarty, alleen de notatie is anders. Namelijk direct in PHP, in plaats van eerst nog in Smarty, wat daarna wordt omgezet naar PHP.

Het enige argument wat dan overblijft is dat je elke keer <?php moet typen. Dat vind ik wel meevallen, zeker als je een goede editor gebruikt die dat gewoon automatisch aanvult.

Het gebruik van Zend_View is zelfs nog makkelijker, want iemand die PHP kent kan er mee aan de slag. Voor Smarty moet eerst een nieuwe notatie worden aangeleerd en kennis daarover kan ook niet op enig andere manier worden ingezet. Met Smarty kun je niets meer dan templates maken, met PHP kun je alles.

Voorbeeldjes:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
// Smarty
<ul>
{foreach from=$myArray key=k item=v}
   <li>{$k}: {$v}</li>
{/foreach}
</ul>

// Zend_View
<ul>
<?php foreach ($myArray as $k => $v) : ?>
  <li><?=$k?>: <?=$v;?></li>
<?php endforeach; ?>
</ul>


Ik zie eigenlijk weinig verschil, behalve dat die Zend_View optie een normale manier is van een foreach opschrijven en de Smarty-versie ervan nogal omslachtig en vreemd is.

Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
Daarnaast is een van de requirements bij ons dat shorttags gewoon aan moeten staan.

Waar we normaal de ZF coding style aanhouden, doe ik dat alleen niet in views. Het gebruik van <? in plaats van <?php maakt het plotseling zo schoon ogend dat die verandering een grote verbetering levert in de leesbaarheid. Dan worden de uiterlijke verschillen met Smarty helemaal nihil :)

Acties:
  • 0 Henk 'm!

  • chielsen
  • Registratie: Oktober 2003
  • Laatst online: 08:35
Dank jullie, ben nu toch wel overtuigd om gewoon de standaard Zend_View en Zend_Layout te gebruiken.
Het punt over wel of niet short open tags is nog een lastige.
Het is volgens mij ook niet mogelijk om tijdens de bootstrap de short open tags aan te zetten, dus zit je wel met een portability probleem idd.

Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
chielsen schreef op zondag 23 augustus 2009 @ 15:59:
Dank jullie, ben nu toch wel overtuigd om gewoon de standaard Zend_View en Zend_Layout te gebruiken.
Het punt over wel of niet short open tags is nog een lastige.
Het is volgens mij ook niet mogelijk om tijdens de bootstrap de short open tags aan te zetten, dus zit je wel met een portability probleem idd.
Dat is eenvoudig op te zoeken: http://nl3.php.net/manual/en/ini.core.php

short_open_tag
"1"
PHP_INI_ALL
PHP_INI_ALL in PHP <= 4.0.0. PHP_INI_PERDIR in PHP < 5.3.0

Je kunt het dus per directory instellen middels een .htaccess en wellicht ook wel in je bootstrap.

Acties:
  • 0 Henk 'm!

  • krvabo
  • Registratie: Januari 2003
  • Laatst online: 11-09 22:10

krvabo

MATERIALISE!

cariolive23 schreef op zondag 23 augustus 2009 @ 09:37:
Ik gebruik zelf graag XSLT als template engine, dat werkt niet alleen met PHP maar ook met .NET, Java, etc.

Nadeel:
- Performance penalty. Maar, dat is met iedere oplossing het geval. Geen enkele oplossing kan iets uitvoeren zonder processortijd of memory te verbruiken. Ga meten om te zien wat de verschillen zijn in jouw situatie.
Ik heb ooit een keer een site gemaakt met xml en xslt. Hoewel het opzich prima is, en redelijk goed (ook redelijk complex), heb ik nog wel een nadeel voor je;
Je kunt geen 3 iteraties in elkaar doen, bij mij ging het dan zeiken over mogelijke eindeloze loop. Je hebt twee soorten loops in xslt als ik het goed begreep: <xsl:for-each select=".."> en <xsl:call-template name="...">
Mij lukt het iig niet om een fatsoenlijke time table te maken met xslt (Dus Maandag-Zaterdag naast elkaar, dan alle uren onder elkaar, en dan per uur nog een loop met verschillende afspraken).

Dus nee: ik vind xslt geen handige template "engine", hoewel het zeker wel goede dingen in zich heeft.

Pong is probably the best designed shooter in the world.
It's the only one that is made so that if you camp, you die.


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
HuHu schreef op zondag 23 augustus 2009 @ 10:55:
[...]
Het gebruik van Zend_View is zelfs nog makkelijker, want iemand die PHP kent kan er mee aan de slag. Voor Smarty moet eerst een nieuwe notatie worden aangeleerd en kennis daarover kan ook niet op enig andere manier worden ingezet. Met Smarty kun je niets meer dan templates maken, met PHP kun je alles.
Tja, dat je met php aan de slag kan is imho juist het grootste nadeel...

Ik zou absoluut geen designers willen hebben die zelf met php aan de slag gaan en dan even op phpfreakz ofzoiets wat leuke tuts doornemen om te bereiken wat ze nog niet aangeleerd / aangeboden is.

Ik vind php een hardstikke handige taal, maar vanwege alle foute tuts / hints op internet zou ik er absoluut niet iemand in willen laten werken ( binnen een bestaande site ) die er niet goed in is... Daarvoor is het net even iets te krachtig... Voor je weet implementeert een designer een stukje businesslogic in je view...

[ Voor 4% gewijzigd door Gomez12 op 23-08-2009 16:22 ]


Acties:
  • 0 Henk 'm!

  • chielsen
  • Registratie: Oktober 2003
  • Laatst online: 08:35
HuHu schreef op zondag 23 augustus 2009 @ 16:04:
[...]

Dat is eenvoudig op te zoeken: http://nl3.php.net/manual/en/ini.core.php

short_open_tag
"1"
PHP_INI_ALL
PHP_INI_ALL in PHP <= 4.0.0. PHP_INI_PERDIR in PHP < 5.3.0

Je kunt het dus per directory instellen middels een .htaccess en wellicht ook wel in je bootstrap.
Inderdaad tot php 5.3 kan het via .htaccess, maar niet in je bootstrap. Later dus alleen nog via php.ini ..

Acties:
  • 0 Henk 'm!

Verwijderd

Zend_View werkt ook met short tags disabled: http://framework.zend.com...ew.introduction.shortTags
Enable an optional stream wrapper to convert short tags to long tags on the fly:

Acties:
  • 0 Henk 'm!

  • chielsen
  • Registratie: Oktober 2003
  • Laatst online: 08:35
Kijk, dan kan ik met een gerust hart <?= en :)

Acties:
  • 0 Henk 'm!

  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 24-08 20:35
chielsen schreef op zondag 23 augustus 2009 @ 18:34:
[...]


Inderdaad tot php 5.3 kan het via .htaccess, maar niet in je bootstrap. Later dus alleen nog via php.ini ..
Je leest de documentatie verkeerd. Het kan tussen PHP 4.0.x en PHP 5.2.x alleen per directory ingesteld worden. Voor alle andere PHP versies (dus ook PHP 5.3.x) kan het overal aangepast worden waar mogelijk (PHP_INI_ALL).

[ Voor 7% gewijzigd door Borizz op 23-08-2009 23:38 ]

If I can't fix it, it ain't broken.


Acties:
  • 0 Henk 'm!

  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
HuHu schreef op zondag 23 augustus 2009 @ 10:55:
[...]
Voorbeeldjes:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
// Smarty
<ul>
{foreach from=$myArray key=k item=v}
   <li>{$k}: {$v}</li>
{/foreach}
</ul>

// Zend_View
<ul>
<?php foreach ($myArray as $k => $v) : ?>
  <li><?=$k?>: <?=$v;?></li>
<?php endforeach; ?>
</ul>


Ik zie eigenlijk weinig verschil, behalve dat die Zend_View optie een normale manier is van een foreach opschrijven en de Smarty-versie ervan nogal omslachtig en vreemd is.
In Smarty 3.0 is de notatie voor een foreach een stuk eenvoudiger gemaakt.

code:
1
2
3
4
5
6
7
8
9
10
New {foreach...} syntax to loop over an array:

{foreach $myarray as $var}   ....  {/foreach}

$var@key            will deliver the key
$var@iteration      will deliver the iteration
$var@index          will deliver the index
$var@total          will deliver the total number of array entries
$var@first          will deliver true for the first iteration
$var@last           will deliver true for the last iteration

March of the Eagles


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
FragFrog schreef op zondag 23 augustus 2009 @ 08:46:
[...]

Zonder weer in dezelfde eindeloze discussie terecht te willen komen: hoezo is dat een hint? Alle talen hoger dan ASM compileren naar iets van een lager niveau, wil je dan ook beweren dat al die talen onzin zijn en iedereen gewoon weer ASM moet gaan lopen kloppen? :? Is C++ dan ook onzin omdat je alles wat je met C++ kan ook gewoon in C kan doen? For that matter, is PHP dan niet ook onzin omdat dat uiteindelijk weer van C/C++ afstamt?
Het verschil is dat C een abstractie laag toevoegt ten opzichte van Assembly, en C++ ook ten opzichte van C. Een template engine zoals Smarty voegt geen abstractie toe. Je krijgt een subset van php instructies in een ander jasje.
Voor mij persoonlijk zorgt Smarty ervoor dat de gegevens die naar mijn templates gaan schoner zijn, dat ik minder logica in mijn templates stop en dat ik niet overal <?php hoef neer te knallen (ja, ik ken shorttags.
Dit zijn allemaal non-argumenten. Punt 1 & 2 kun je ook heel eenvoudig bereiken zonder Smarty, punt 3 geef je zelf al aan.

De enige twee redenen die ik kan bedenken dat je Smarty wilt gebruiken is als je werkt met frontend developers die je juist wil beperken in wat ze kunnen, en de situatie waarin je te onervaren bent om een goede architectuur neer te zetten en Smarty je daarin tot enkele goede keuzes kan dwingen. Maar in dat tweede geval biedt een framework zoals ZF ook al genoeg oplossingen.

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info

Pagina: 1