[PHP] template systeem waarin je in de tp PHP kunt gebruiken

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

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo,
ik ben op zoek naar het volgende:
een php template systeempje (only basics, dus niet iets als smarty oid) waarin je in de template zelf ook nog PHP code kunt gebruike (ik weet het, beetje tegenstrijdig maar ik zoek het wel...)

dat gaat meestal niet en ik weet ook niet exact hoe dit op te lossen...
wie kan me helpen?


ik heb ook eigen template systeem gemaakt ( {CONTENT} {PAGETITLE} etc etc)
maar wat ik dus wil is dat ik in die template zelf ook nog klein beetje php toevoegen.

Bv:
template bestaat uit:
<table>
<tr>
<td>
{CONTENT}
</td>
<td>
<?
echo "blablablablablabla test";
?>
</td>
</tr>
</table>

zo wil ik dus mijn template file eruit laten zien (pseudo code).
Maar als je mijn template file aanroept om in de layout te zette (template.php) dan werkt alles wel buiten die php code erin (echo blabla)

ik wil dus systeem wat dat ook meteen goed doet...
snappie?

hopelijk deze keer beter want de vorige keer ging ie opslot omdat ze dachten dat dit wel meteen mogelijk is... :(
lees eerst eens goed...

Acties:
  • 0 Henk 'm!

  • simon
  • Registratie: Maart 2002
  • Laatst online: 00:18
http://smarty.php.net?

Daar hebben ze een aardig systeem :)

|>


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Nou zal ik je eens een geheimpje vertellen: PHP is een template engine!

De techniek die altijd toepas is het eerst opbouwen van variabelen en/of assosiatieve arrays waarna ik een template include die deze arrays uitleest en invult tussen de html

Ik gebruik dan constructies als:
PHP:
1
2
3
4
5
6
7
8
9
<? foreach ( $array as $item ) { ?>
<p>
  <?=$item?>
</p>
<? } ?>

<? if ( $boolTest ) { ?>
<p>blaat</p>
<? } ?>


Zo kun je netjes je logica van je presentatie scheiden en heb je mocht je het nodig hebben toch nog de kracht van php. Erg prettig werkt dat.

Verder heeft het ook nog als voordeel dat het vrijwel geen overhead geeft. Het is een stuk sneller dan eerst een template parsen met een apart systeempje.

[ Voor 90% gewijzigd door Michali op 22-12-2004 17:51 ]

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Michali schreef op woensdag 22 december 2004 @ 17:45:
Nou zal ik je eens een geheimpje vertellen: PHP is een template engine!
fout, PHP kan je gebruiken als template taal ;)
PHP is an HTML-embedded scripting language. Much of its syntax is borrowed from C, Java and Perl with a couple of unique PHP-specific features thrown in. The goal of the language is to allow web developers to write dynamically generated pages quickly.
ontopic:
je zou output buffering kunnen toepassen en dan die file includen om vervolgens de template vars te str_replacen :)

[ Voor 31% gewijzigd door Erkens op 22-12-2004 17:47 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Michali schreef op woensdag 22 december 2004 @ 17:45:
Nou zal ik je eens een geheimpje vertellen: PHP is een template engine!
grmbl, zeiden ze in vorig topic ook...
heeft dit er mee te maken?
nee, want dit gaat over PHP CODE in een TEMPLATE file (á la .TPL) uitvoeren...

Acties:
  • 0 Henk 'm!

  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 12:54
Waarom template's maken als PHP dat zelf allemaal al kan? Remember je eigen PHP scripts. De manier waarop PHP jouw scripts leest kan ie dat natuurlijk ook doen met jouw template's. Snappie?

Dus in jouw HTML template zet je bijvoorbeeld "echo $content" in plaats van "{CONTENT}". Dat die content daar komt te staan doet PHP uitzichtzelf al.

edit:
Dat wat Michali zegt bedoelde ik ook...

[ Voor 13% gewijzigd door Sybr_E-N op 22-12-2004 17:51 . Reden: Ben weer eens laat ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
werk ik niet graag mee, bedoeling is om CMS zo simpel mogelijk te houden qua code en eigenlijk ook niet opbouwen uit bestaande dingen...

Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Verwijderd schreef op woensdag 22 december 2004 @ 17:47:
[...]

grmbl, zeiden ze in vorig topic ook...
heeft dit er mee te maken?
nee, want dit gaat over PHP CODE in een TEMPLATE file (á la .TPL) uitvoeren...
Ik heb even mijn reactie aangepast. Lees hem nog maar eens.

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Erkens schreef op woensdag 22 december 2004 @ 17:46:
[...]

fout, PHP kan je gebruiken als template taal ;)
Niet zeiken mierenn***er :P

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Sybr_E-N schreef op woensdag 22 december 2004 @ 17:48:
Waarom template's maken als PHP dat zelf allemaal al kan? Remember je eigen PHP scripts. De manier waarop PHP jouw scripts leest kan ie dat natuurlijk ook doen met jouw template's. Snappie?

Dus in jouw HTML template zet je bijvoorbeeld "echo $content" in plaats van "{CONTENT}". Dat die content daar komt te staan doet PHP uitzichtzelf al.
nee...
zucht

mijn template systeem werkt perfect
dus waar {CONTENT} staat zie je ook de content staan etc

maar als ik nu bv in een tabbeleke toch iets qua code wil aanroepen ZONDER een {BLABLA-TAG} hiervoor te moeten aanmaken wil ik dat dus kunnen.
dus als ik 2 lijnen verderop echo "blabla" zet tussen php <? ?> wil ik dat ie dat uitvoert en niet negeert.

snapte?

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Verwijderd schreef op woensdag 22 december 2004 @ 17:50:
[...]


nee...
zucht

mijn template systeem werkt perfect
dus waar {CONTENT} staat zie je ook de content staan etc

maar als ik nu bv in een tabbeleke toch iets qua code wil aanroepen ZONDER een {BLABLA-TAG} hiervoor te moeten aanmaken wil ik dat dus kunnen.
dus als ik 2 lijnen verderop echo "blabla" zet tussen php <? ?> wil ik dat ie dat uitvoert en niet negeert.

snapte?
Je kunt toch gewoon helemaal geen apart template systeem gebruiken? Je vult dan ipv. {var} de waardes zo: <?=$var?> in. Zo kun je verder ook nog PHP gebruiken.

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 12:54
Verwijderd schreef op woensdag 22 december 2004 @ 17:50:
[...]


nee...
zucht

mijn template systeem werkt perfect
dus waar {CONTENT} staat zie je ook de content staan etc

maar als ik nu bv in een tabbeleke toch iets qua code wil aanroepen ZONDER een {BLABLA-TAG} hiervoor te moeten aanmaken wil ik dat dus kunnen.
dus als ik 2 lijnen verderop echo "blabla" zet tussen php <? ?> wil ik dat ie dat uitvoert en niet negeert.

snapte?
Ja, schat dat doet mijn eigen template systeempje ook {CONTENT} vervangen door inhoud. Maar als je die methodiek nou overboard gooit en gaat werken op de manier die Michaeli aangeeft dan kun je heel erg gemakkelijk ook gewone PHP code uitvoeren, dus die "blala" tussen die php-tags.

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Michali schreef op woensdag 22 december 2004 @ 17:53:
[...]

Je kunt toch gewoon helemaal geen apart template systeem gebruiken? Je vult dan ipv. {var} de waardes zo: <?=$var?> in. Zo kun je verder ook nog PHP gebruiken.
maar dat wil hij niet :/
daarnaast werkt dat niet op alle configuraties ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
jawel, maar nog niet onmidellijk getest, ben trouwens ook weer niet zo geweldig in php maar ga wel zodadelijk eens onderzoeken naar wat je zei

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 18:44

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op woensdag 22 december 2004 @ 17:44:
hopelijk deze keer beter want de vorige keer ging ie opslot omdat ze dachten dat dit wel meteen mogelijk is... :(
lees eerst eens goed...
Verwijderd schreef op woensdag 22 december 2004 @ 17:47:
[...]

grmbl, zeiden ze in vorig topic ook...
heeft dit er mee te maken?
nee, want dit gaat over PHP CODE in een TEMPLATE file (á la .TPL) uitvoeren...
Doe eens even rustig :/ Jij hebt een probleem en je hebt de hulp nodig van de anderen, post dan ook een beetje normaal :/ Verder ging hij onder andere dicht omdat hij in een compleet verkeerd forum stond.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Erkens schreef op woensdag 22 december 2004 @ 17:53:
[...]

maar dat wil hij niet :/
daarnaast werkt dat niet op alle configuraties ;)
Klopt ja, is dat het geval dan kun je dit:

<?php echo $var; ?>

en dit

<?php foreach ( ... ) { ?>

gebruiken mocht dat het geval zijn.

Is mischien ook beter eigenlijk

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Michali schreef op woensdag 22 december 2004 @ 17:57:
[...]

Klopt ja, is dat het geval dan kun je dit:

<?php echo $var; ?>

en dit

<?php foreach ( ... ) { ?>

gebruiken mocht dat het geval zijn.

Is mischien ook beter eigenlijk
maakt de code alleen maar onduidelijker ;)
en ook sommige wysiwyg apps kunnen daar niet goed mee werken.

Acties:
  • 0 Henk 'm!

  • Skaah
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:38
Je zal de php code eruit moetern filteren en dan eval'en, dat is het eerste wat zo in mij opkomt.

Acties:
  • 0 Henk 'm!

Verwijderd

Skaah schreef op woensdag 22 december 2004 @ 18:02:
Je zal de php code eruit moetern filteren en dan eval'en, dat is het eerste wat zo in mij opkomt.
Daarvoor hoef je het niet eens te filteren je kunt namelijk ook een eval() doen met html erin.


Zie hier voor meer info

[ Voor 4% gewijzigd door Verwijderd op 22-12-2004 18:16 . Reden: Is ook zo eval vertikt html te slikken ]


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Erkens schreef op woensdag 22 december 2004 @ 18:00:
[...]

maakt de code alleen maar onduidelijker ;)
en ook sommige wysiwyg apps kunnen daar niet goed mee werken.
Getver WYSIWYG :P

Nee als je templates door mensen bewerkt worden die geen verstand van html hebben, dan is deze oplossing idd geen optie. Ik raad toch echt aan met de hand te bewerken omdat het veel meer vrijheid en controle geeft.

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Michali schreef op woensdag 22 december 2004 @ 19:01:
[...]

Getver WYSIWYG :P

Nee als je templates door mensen bewerkt worden die geen verstand van html hebben, dan is deze oplossing idd geen optie. Ik raad toch echt aan met de hand te bewerken omdat het veel meer vrijheid en controle geeft.
Idd. Vaak is de enige reden om een template te gebruiken naast je PHP code om de mogelijkheid te bieden dat de gebruikers/klanten met gelimiteerde HTML know-how toch aanpassingen kunnen doorvoeren. Vaak staat in de PHP file dan de business logic en data retrieval methodes.

Alle boven genoemde mogelijkheden zijn valide, maar ook allemaal met een bepaald doel in het achterhoofd. Je zal de afweging: kracht/flexibiliteit <-> eenvoud moeten maken.
Ik heb voor een aantal projecten gekozen om met templates te werken met daarin enkel de mogelijkheid variabelen te substituten (${title}, etc).
De reden? De gebruikers ervan waren er tevreden mee, ze konden genoeg aanpassen en het was simpel te onderhouden. Bovendien heb je ook niet het gevaar dat ze met PHP gevaarlijke dingen gaan doen zoals 'ff' snel nog een waarde uit een database ophalen oid.

Bedenk ook dat je tegenwoordig met CSS enorm veel kan veranderen, zonder ook maar een enkele tag aan te passen.

Dus bedenkt eerst wat je wil, en ga daar een oplossing voor zoeken. Een oplossing forceren is het slechtste wat je kan doen.

Acties:
  • 0 Henk 'm!

  • raps
  • Registratie: April 2003
  • Laatst online: 06-09 19:51
Kijk eens naar SimpleT: http://simplet.sourceforge.net/

Mijn 'template-engine' lijkt hierop, maar dan basic:
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
class View {
    var $values=array();

    function set($name, $value) {
        $this->values[$name] = $value;
    }

    function display() {}
}

class Template extends View {
    var $fileName=null;

    function Template($fileName) {
        $this->fileName = $fileName;
        if (!is_file($this->fileName)) {
            trigger_error("File not found", E_USER_ERROR);
        }
    }

    function display() {
        foreach (array_keys($this->values) as $key) {
            if (is_a($this->values[$key], 'View')) {
                $$key = $this->values[$key]->display();
            } else {
                $$key = $this->values[$key];
            }
        }
        ob_start();
        include($this->fileName);
        $content = ob_get_contents();
        ob_end_clean();
        return $content;
    }
}

Delen van mijn html genereer ik met PHP. Als je alles in templates wil stoppen is dit waarschijnlijk niet genoeg.

Dit is op de manier die Erkens eerder noemde.

[ Voor 6% gewijzigd door raps op 22-12-2004 23:29 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Wat de topicstarter nou echt wil is eigenlijk heel simpel. Je zet ob_start () neer, je include het template bestand, je zet alle output in een variabele en stopt de output buffering weer. De variabele bevat dan de "template" en de PHP code is uitgevoerd, en de output daarvan staat ook keurig in de template. Leuke bijkomstigheid is dat je zelfs nog "template tags" kunt genereren met de PHP stukjes.

Verwijderd

Ik heb wel eens het template gedeelte gebruikt van phpBB. Gewoon de template.php includen, nog ergens een functie knippen en plakken, en je kan de templates gebruiken....
En voorbeelden van templates zat.....

Erg simpel en doeltreffend.

  • MarkvE
  • Registratie: Maart 2004
  • Laatst online: 30-01 17:16
Verwijderd schreef op donderdag 23 december 2004 @ 08:15:
Ik heb wel eens het template gedeelte gebruikt van phpBB. Gewoon de template.php includen, nog ergens een functie knippen en plakken, en je kan de templates gebruiken....
En voorbeelden van templates zat.....

Erg simpel en doeltreffend.
Je wist toen zeker niet dat PhpBB de template class van TemplatePower gebruikt? :)

Vormkracht10


  • paulh
  • Registratie: Juli 1999
  • Laatst online: 18-09 20:05
Michali schreef op woensdag 22 december 2004 @ 17:45:
Nou zal ik je eens een geheimpje vertellen: PHP is een template engine!
Wat een onzin. Het voordeel van templates is dat je geforceerd wordt om je code en presentatie te scheiden. Doe je die scheiding niet hard dan zul je zien dat developers hier en daar toch nog kleine stukjes code in de "templates" zetten. Ik zeg niet dat het niet kan zoals jij beweert maar dan moet je wel heel sterk in je schoenen staan om die verleidingen te weerstaan.

[ZwareMetalen.com] - [Kom in aktie tegen de CO2 maffia]


  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Orphix schreef op woensdag 22 december 2004 @ 19:09:
[...]
Idd. Vaak is de enige reden om een template te gebruiken naast je PHP code om de mogelijkheid te bieden dat de gebruikers/klanten met gelimiteerde HTML know-how toch aanpassingen kunnen doorvoeren. Vaak staat in de PHP file dan de business logic en data retrieval methodes.
Nou dat is voor mij de reden niet. De reden er achter in een oud princiepe dat zegt dat je je logica en presentatie van de data gescheiden moet houden. Als iemand aanpassingen maakt aan de templates vind ik het toch wel een eis dat ze even leren hoe het in elkaar zit en dat ze verstand van html hebben.

Noushka's Magnificent Dream | Unity


  • Brakkie
  • Registratie: Maart 2001
  • Niet online

Brakkie

blaat

Je mag best (php) code in je templates hebben zolang die code maar te maken heeft met opmaak en/of het loopen door gegevens die je wilt weergeven.

[ Voor 3% gewijzigd door Brakkie op 23-12-2004 10:52 ]

Systeem | Strava


  • steffex
  • Registratie: Augustus 2003
  • Laatst online: 12-08 00:24
er is een ander bestaand template systeem in php.. daarin zat een tag codeblock... daarin kon je php code uitvoeren :) het is een soort onderbreking van templatecode

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
paulh schreef op donderdag 23 december 2004 @ 10:02:
[...]

Wat een onzin. Het voordeel van templates is dat je geforceerd wordt om je code en presentatie te scheiden. Doe je die scheiding niet hard dan zul je zien dat developers hier en daar toch nog kleine stukjes code in de "templates" zetten. Ik zeg niet dat het niet kan zoals jij beweert maar dan moet je wel heel sterk in je schoenen staan om die verleidingen te weerstaan.
Nou dan ontwikkel jij andere web apps dan ik. Voor simpele acties is een template engine mischien voldoende, maar ik heb toch echt meer nodig. En voor code die echt direct in verband staat met de presentatie is het niet erg om die ook in de template zelf te zetten. Als jij die code tussen je business/domain logic zet, dan ben je dus niet bezig met je presentatie en logica te scheiden. Dan ben imo fout bezig. Als je daartoe geforceerd wordt door een template engine dan gooi ik hem hard de deur uit. Bovendien geeft een template engine overhead die ik niet kan gebruiken. En als je als devver niet weet hoe je je code en presentatie goed kan scheiden ben je een slechte devver en hoef je ook niet te verwachten dat de rest van de app goed in elkaar steekt. Een template engine veranderd daar niets aan.

Noushka's Magnificent Dream | Unity


Verwijderd

Topicstarter
stef-o.nl schreef op donderdag 23 december 2004 @ 11:07:
er is een ander bestaand template systeem in php.. daarin zat een tag codeblock... daarin kon je php code uitvoeren :) het is een soort onderbreking van templatecode
en je weet toevallig niet de naam?

Verwijderd

Topicstarter
Verwijderd schreef op woensdag 22 december 2004 @ 23:57:
Wat de topicstarter nou echt wil is eigenlijk heel simpel. Je zet ob_start () neer, je include het template bestand, je zet alle output in een variabele en stopt de output buffering weer. De variabele bevat dan de "template" en de PHP code is uitgevoerd, en de output daarvan staat ook keurig in de template. Leuke bijkomstigheid is dat je zelfs nog "template tags" kunt genereren met de PHP stukjes.
ik zal dat eens onderzoeken

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op donderdag 23 december 2004 @ 11:13:
[...]


en je weet toevallig niet de naam?
Ik begrijp persoonlijk niet waarom je niet iets als smarty kan gebruiken. Alles wat jij wilt kan het, het is eenvoudig te gebruiken en het scheelt je een berg ontwikkeltijd dan wanneer je hetzelfde gaat namaken. Met de tag {php} in smarty kan je php embedded gebruiken in je template.

http://smarty.php.net/manual/en/language.function.php.php

Persoonlijk denk ik dat je dan moet afvragen of je applicatie wel logisch in elkaar zit, want opmaak en code zijn echt prima te scheiden. Maargoed, dat moet je zelf uitzoeken.

Je kan het natuurlijk zelf maken, door de zelf de code uit je template te halen met een mooie reg exp en vervolgens door de eval() te halen, en de uitkomst op de goede plek terug te stoppen.
Pagina: 1