[PHP] Site omzetten naar templatesysteem

Pagina: 1
Acties:
  • 355 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 21-08 11:20
Hoi,
ik ben beheerder van een website, die door anderen is gebouwd. Zij hebben deze 'logica' aangehouden voor het opbouwen van een pagina: (en nog een aantal subincludes)
code:
1
2
3
4
5
6
7
8
9
10
11
- pagina
 - include paginaeigenschappen (titel, auteur, ...)
 - bovenstuk invoeren
 - linkermenu
  - script met nieuwe items
  - agenda
  - ...
 - middeninhoud
    - informatie die eerder is opgehaald (include)
 - rechtermenu
 - footer

Nu wil ik een nieuwe layout gaan invoeren, maar dit heeft nogal wat voeten in de aarde. De layout is namelijk verspreid over een aantal verschillende bestanden, dat lijkt mij niet erg logisch. Ik heb me voorgenomen om de hele site om te zetten naar Smarty.
Nu heb ik een probleem: alle includes (ook de middeninhoud) gebruiken echo() of print() om informatie op het scherm te zetten. Als ik dit in een templateparser zou proppen, zou ik eerst de inhoud krijgen, en daarna pas de template (lijkt me).
Zijn er manieren om echo() en print() 'af te vangen' naar een variabele zodat ik die in Smarty kan invoeren? Of heeft Smarty hier eigen methoden voor? Ik heb al geprobeerd om met variabelen te werken, maar dat zijn zo veel bestanden die moeten worden aangepast, en ik heb al een aantal parse-errors gezien als gevolg.
Ik heb niet echt gezocht, aangezien ik geen idee heb welke termen ik moet gebruiken.
Zijn er Tweakers die dit probleem hebben gehad en het hebben opgelost?

[ Voor 3% gewijzigd door Alex) op 16-04-2005 23:48 ]

We are shaping the future


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Ik ben bang dat je je hele site moet gaan ombouwen. Je kan wel de output afvangen met output buffering, maar dan krijg je gewoon dezelfde HTML die je anders ook zou hebben gekregen. Je zal dus zelf je variabelen in Smarty moeten gaan gooien.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Je kan natuurlijk eerst even alle echo's en prints replacen met een variabele en die op de juiste plek in je template terug laten komen. Dan kun je daarna per script en file langzamerhand alles omzetten naar Smarty totdat je alles hebt omgezet. Op die manier zou je geen errors moeten krijgen, omdat echoën niet veel anders is dan toewijzen aan een variabele...

Acties:
  • 0 Henk 'm!

  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 21-08 11:20
Dat heb ik dus geprobeerd, maar het probleem is dat er ook veel 'raw html' tussenzit (dus ?> html <?php middenin een script), dat moet ik dan ook allemaal wijzigen.

[ Voor 10% gewijzigd door Alex) op 17-04-2005 00:04 ]

We are shaping the future


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Alex schreef op zondag 17 april 2005 @ 00:04:
Dat heb ik dus geprobeerd, maar het probleem is dat er ook veel 'raw html' tussenzit (dus ?> html <?php middenin een script), dat moet ik dan ook allemaal wijzigen.
Toch zit er niks anders op. Wat wou je anders? Je HTML aan Smarty geven en verwachten dat Smarty het dan in je eigen template verandert? Het script moet natuurlijk wel weten wat een variabele is en wat niet.

Overigens: waarom kies je voor Smarty? Zoals in dit forum al vaker bediscussiëerd is, is PHP zelf ook te gebruiken als template engine. Is dat niet een betere optie? Het lost dit probleem niet voor je op, maar het betekent wel dat je je niet nog eens in Smarty hoeft te gaan verdiepen als je het niet al kent, en verder werkt het met PHP zelf gewoon sneller. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 21-08 11:20
Ik heb eigenlijk gekozen voor Smarty vanwege enkele functies, zoals:
code:
1
2
3
4
5
6
7
8
{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}

Dan is het ook voor mijn opvolger(s) enigszins makkelijker om templates te maken. Ik baseer al heel veel op CSS (http://nw6.alex-web.nl/athene voor een voorbeeld), maar als er grote wijzigingen nodig zijn kunnen die alsnog gemaakt worden door één bestand te bewerken.

We are shaping the future


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Ik zie in die post niet één ding dat PHP niet ook standaard kan, maar dan sneller en duidelijker. :) Maar goed, we gaan offtopic. :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 21-08 11:20
offtopic:
De hoofdreden voor Smarty is echt eenvoud in de layout, ook voor opvolgers.

Maar het kan dus echt niet op een andere manier dan alles aanpassen? zucht...

We are shaping the future


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Alex schreef op zondag 17 april 2005 @ 00:40:
offtopic:
De hoofdreden voor Smarty is echt eenvoud in de layout, ook voor opvolgers.
offtopic:
Diezelfde eenvoud heb je ook met PHP zelf. ;)
Maar het kan dus echt niet op een andere manier dan alles aanpassen? zucht...
Lijkt me niet nee. Beredeneer het zo: hoe zou PHP of Smarty moeten weten welk stukje van jouw HTML nou een variabele is die je juist wel wil zien, en wat een stukje overbodige HTML is die weg kan blijven? Als jij Smarty niet vertelt wat ie moet invullen, dan kan ie niks met je invoer. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 21-08 11:20
Mja, het gaat eigenlijk alleen om de HTML-output van het middendeel, de rest wordt al opgehaald via de DB. Kan dus buiten de HTML van het middendeel (action) worden ingevoerd.

We are shaping the future


Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 22:34
Geen ervaring met smarty, maar als er nette HTML wordt uitgepoept door wat je al hebt kun je de layout toch al aanpassen met een stylesheet? Een apart templatesyteem invoeren lijkt me iig veel werk, volgens mij benje sneller klaar als je de HTML op bepaalde plekken opschoont en er degelijke CSS aanhangt, maar dat is natuurlijk een gokje zonder beeld van de output :)

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 01:08
Smarty heeft wel degelijk voordelen, zoals bijvoorbeeld het krijgen van een perfecte scheiding tussen content en markup. Bovendien kun je gemakkelijk een template bouwen voor RSS ofzo. Verder heeft Smarty mooie features zoals caching, zodat je database minder belast wordt.

Acties:
  • 0 Henk 'm!

  • JHS
  • Registratie: Augustus 2003
  • Laatst online: 16-09 16:02

JHS

Splitting the thaum.

Even iets over het ombouwen van logica in systemen: het is (bijna) altijd verstandig om het helemaal opnieuw op te bouwen :) . Als je aan de achterliggende logica komt, en je gaat het halfzacht lopen ombouwen kan ik je bijna garanderen dat er een hele hoop bugs in blijven én komen. En ik spreek uit ervaring :P . Bovendien garandeert dat in een véél grotere mate dat zoiets niet nog een keer nodig is. Beter gezegd, het omgooien van de logica zónder "opnieuw" te beginnen garandeert bijna dat het wél nog een keer nodig is in de toekomst :) .

DM!


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Dennis schreef op zondag 17 april 2005 @ 07:00:
Smarty heeft wel degelijk voordelen, zoals bijvoorbeeld het krijgen van een perfecte scheiding tussen content en markup. Bovendien kun je gemakkelijk een template bouwen voor RSS ofzo. Verder heeft Smarty mooie features zoals caching, zodat je database minder belast wordt.
Die scheiding tussen content en markup kun je ook krijgen door in PHP zelf templates te maken. Onderaan je code zet je gewoon een regel als deze:
PHP:
1
include('tpl/maintemplate.php');

en maintemplate.php ziet er dan als volgt uit:
PHP:
1
2
3
4
5
6
7
8
9
<html>
<head>
  <title><?=$title?></title>
</head>
<body>
  <h1><?=$header?></h1>
  <!--enz-->
</body>
</html>

Een template bouwen voor RSS is op dezelfde manier ook niet lastig. Verder is het natuurlijk ook niet lastig om zelf caching in te bouwen. Ik vind het sowieso apart om in snelheid in te leveren (Smarty is langzamer dan PHP zelf als template engine gebruiken), en vervolgens een snelheids- en belastingsargument aan te dragen om juist wel Smarty te nemen. ;)

Anyway, dit is het laatste wat ik hierover zeg; deze discussie is al vaker gevoerd, en mijn argumenten zijn ook al allemaal genoemd en zijn in de search ook wel te vinden. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • twiekert
  • Registratie: Februari 2001
  • Laatst online: 30-08 11:55
En dat is nu net wat smarty doet :? + wat control structures en default functions?
Smarty is overigens maar weinig langzamer als native php doordat templates gewoon omgezet worden naar php code.

En de discussie is inderdaad al vaker gevoerd maar het lijkt wel of dat sommige php coders hier zich te 1337 voelen om 3rd party libraries te gebruiken, terwijl het gewoon enorm veel tijd scheelt :)

Acties:
  • 0 Henk 'm!

  • prototype
  • Registratie: Juni 2001
  • Niet online

prototype

Cheer Bear

Met alle respect, waarom wil je hier smarty templates voor gebruiken; imho streeft smarty templates z'n doel al voorbij door zelf code te incorporeren in de template files, iets wat het niet veel anders maakt dan gewoon inline php/html code schrijven.
Een alternatief dat ik je om veel redenen kan aanraden is door gebruik te maken van XML en XSLT, daar het gestandardiseerd is, en daarmee een dergelijke principe als "write once, run everywhere" kan hanteren als het neerkomt op een template structuur. Je schrijft dus vanuit je PHP script een XML, die vervolgens door middel van een statische XSL file getransformeerd wordt; hooray for XSLT(ransformation). Het voordeel hiervan is, is dat je eigenlijk je templates volgens een standaard geschreven hebt even als het XML datamodel. Je kan dus in de toekomst elke taal gebruiken die je maar wi, zolang het maar dezelfde XML structuur blijft behouden; je XSL is enkel afhankelijk van de XML en is daarmee dus onafhankelijk van de keuze van je taal, en daarmee dus herbruikbaar.
Pagina: 1