[php] Content uit een database in een buffer plaatsen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Gegroet lezers,

Ik zit met een dilema of een uitdaging whatever.

Ik heb een database met daarin template's en die templates wil ik parsen naar me php pagina.

Alleen dat parsen verloopt via een template systeem.

$tpl = new TemplatePower("template.tpl");

Nu wil ik dus dat inplaats van die template.tpl daar de template vanuit de database komt te staan.

Maar als ik daar waar nu template.tpl
$databsequerygooitemplatemaar neer doe.

Dan zegt Templatepower dat hij de template niet kan lezen.

Is er geen manier dat ik de template vanuit de database buffer en dan die buffer in de
$tpl = new TemplatePower($buffer); plaats.

Try't: Fopen, Eval. :(

Iemand enige suggesties?

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-09 08:50

gorgi_19

Kruimeltjes zijn weer op :9

Da's ook afhankelijk van de TemplatePower class wat die als input parameters vereist. Als die alleen een string als input accepteert, en vervolgens die file opent, dan kan je weinig er aan doen.

Geen idee of php overloaded constructors kent (en ook een speciale 'constructor' heeft voor deze constructie, maar anders denk ik niet dat het kan.
(disclaimer: nu ken ik de templatepower class en zijn method / properties niet)

[ Voor 9% gewijzigd door gorgi_19 op 14-01-2004 23:23 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • Infinitive
  • Registratie: Maart 2001
  • Laatst online: 25-09-2023
Maar als ik daar waar nu template.tpl
$databsequerygooitemplatemaar neer doe.
Ik volg je hier niet. Bedoel je hiermee dat je een tijdelijke, unieke file hebt aangemaakt waarin je het resultaat van de database query hebt geplaatst en de filename als parameter hebt opgegeven aan die constructor?

Het meesturen van de inhoud van de template als parameter is niet de bedoeling. Er wordt een filename verwacht. Als de klasse alleen maar files accepteerd kom je daar niet omheen, zonder deze klasse aan te passen.

[ Voor 11% gewijzigd door Infinitive op 14-01-2004 23:24 ]

putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]


Acties:
  • 0 Henk 'm!

Verwijderd

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
class TemplatePower {
     function TemplatePower() {
          $this->template = array();
     }

     function loadTemplate($template) {
          /* voer hier je query uit */
          $this->template[] = $tpl_uit_dbase;
     }
}

$tpl = new TemplatePower();
$tpl->loadTemplate("template.tpl");
En nou jij afmaken ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op 14 januari 2004 @ 23:23:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
class TemplatePower {
     function TemplatePower() {
          $this->template = array();
     }

     function loadTemplate($template) {
          /* voer hier je query uit */
          $this->template[] = $tpl_uit_dbase;
     }
}

$tpl = new TemplatePower();
$tpl->loadTemplate("template.tpl");
En nou jij afmaken ;)
He bedankt CowMike, ik zat toch al te denken om die template parser zelf te schrijven, en niet een te pakken die al bestaat.

Of zeggen jullie van kom op zeg vind effe niet voor de 300ste keer het wiel uit.
Deze template parser heeft al een template uit database halen functie in zich kijk hier maar.... suggesties?

En anders heb ik weer een leuke dagopvulling. 8)

[ Voor 4% gewijzigd door Verwijderd op 15-01-2004 00:53 ]


Acties:
  • 0 Henk 'm!

  • MatHack
  • Registratie: Oktober 2001
  • Niet online

MatHack

Dev by day, Gamer by night

Heb je überhaubt wel de tutorial doorgelezen van TemplatePower, vanaf v3.0 ondersteund dit systeem namelijk databasetemplates.
http://templatepower.codocad.nl

There's no place like 127.0.0.1


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Wat mensen ook zeggen, ik kan je toch zeker aanraden, als je tijd hebt om er zelf een proberen te schrijven. Ook al lukt dit niet geheel goed, het is wel een leuke leermiddel om je PHP wat op te krikken. Verder moet je ook nog uitgaan van een goed OO (voor PHP maatstaven dan :P) dus is het toch wel leerzaam om te doen. Nog een voordeel is, is dat je zelf 100% controle hebt over wat er gebeurt. Dit is wel handig als je zelf nieuwe functionaliteit wilt inbouwen. Verder kan ik je overigens nog aanraden om eens naar XML en XSLT te gaan kijken. Dit zijn de talen die bij mij de template parser hebben doen vervangen (en nog veel meer dan dat). Op w3schools zijn wel aardige tutorials te vinden als je toch tijd over hebt :?

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • Myrdhin
  • Registratie: April 2000
  • Laatst online: 19-09 23:15
En als je dan echt veel tijd hebt kun je ook proberen om dmv. een XML parser je template te parsen en dan runtime componenten eraan toe te voegen.

Bijvoorbeeld template:
code:
1
2
3
4
5
6
7
8
9
10
11
<h3>Overicht scores</h3>
<table>
<list:list id="ScoreList">
  <list:item>
      <tr>
       <td>{$person}</td>
       <td>{$score}</td>
      </tr>
  </list:item>
</list:list>
</table>


En dan de volgende PHP code:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
$db = new MysqlConnection();
$db->connect();
$stmt =& $db->createStatement("SELECT score,person FROM scores WHERE score > {score}");
$stmt->setNumber('score', 50);
$recordset =& $stmt->execute();

$template = file_get_contents('template.tpl'); // Kan natuurlijk ook uit een db gehaald worden
$tpl = new Template($template);
$scorelist =& $tpl->getObjectById('ScoreList')
$scorelist->assignRecordSet($recordset);

$tpl->display();


Het template systeem weet hoe het moet omgaan met <list> tags en zorgt ervoor dat de juiste PHP code wordt ingevoegd in gecompileerde template en wordt weggeschreven (caching mogelijkheden). Daarna include de template parser het bestand als PHP bestand en het template wordt uitgevoerd.

Je maakt dus eigenlijk op runtime niveau PHP code aan die daarna d.m.v. een include (eval werkt langzamer) uitgevoerd kan worden. Komt dezelfde pagina dat weer in beeld dan kun je gebruik maken van het al gecompileerde bestand.

Smarty werkt ook op zo'n manier behalve dat je niet zomaar makkelijk bv. objecten kunt gebruiken en die kunt koppelen aan je template.

Het WACT Project maakt hier mooi gebruik van.

edit:
Kleine foutjes uit de code gehaald

[ Voor 28% gewijzigd door Myrdhin op 16-01-2004 12:44 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Myrdhin schreef op 16 januari 2004 @ 12:39:
En als je dan echt veel tijd hebt kun je ook proberen om dmv. een XML parser je template te parsen en dan runtime componenten eraan toe te voegen.

Bijvoorbeeld template:
code:
1
2
3
4
5
6
7
8
9
10
11
<h3>Overicht scores</h3>
<table>
<list:list id="ScoreList">
  <list:item>
      <tr>
       <td>{$person}</td>
       <td>{$score}</td>
      </tr>
  </list:item>
</list:list>
</table>


En dan de volgende PHP code:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
$db = new MysqlConnection();
$db->connect();
$stmt =& $db->createStatement("SELECT score,person FROM scores WHERE score > {score}");
$stmt->setNumber('score', 50);
$recordset =& $stmt->execute();

$template = file_get_contents('template.tpl'); // Kan natuurlijk ook uit een db gehaald worden
$tpl = new Template($template);
$scorelist =& $tpl->getObjectById('ScoreList')
$scorelist->assignRecordSet($recordset);

$tpl->display();


Het template systeem weet hoe het moet omgaan met <list> tags en zorgt ervoor dat de juiste PHP code wordt ingevoegd in gecompileerde template en wordt weggeschreven (caching mogelijkheden). Daarna include de template parser het bestand als PHP bestand en het template wordt uitgevoerd.

Je maakt dus eigenlijk op runtime niveau PHP code aan die daarna d.m.v. een include (eval werkt langzamer) uitgevoerd kan worden. Komt dezelfde pagina dat weer in beeld dan kun je gebruik maken van het al gecompileerde bestand.

Smarty werkt ook op zo'n manier behalve dat je niet zomaar makkelijk bv. objecten kunt gebruiken en die kunt koppelen aan je template.

Het WACT Project maakt hier mooi gebruik van.

edit:
Kleine foutjes uit de code gehaald
Ik ben echt onder de indruk.
Ik ga even rustig op jacht en kijken of dit nu doeltreffender is.
Hebben jullie toevallig een aantal goede voorbeelden lopen van zulke verbeteringen door gebruik van XML buiten wact dan natuurlijk.

Ik denk dat ik me hierin ga verdiepen.
Bedankt

[ Voor 8% gewijzigd door Verwijderd op 17-01-2004 00:02 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik kan heel goed opmaken uit Wact dat ze gebruik maken van Smarty.
en dat ze dat als process gebruiken voor het doorvoeren van de data.

Kijk bij mij gaat het om de content scheiden van de source.
Dat zeggen ze bij Wact ook, dat is gewoon het systeem van georganiseerd programmeren.. maar ik wil dus absolut geen gebruik maken van smarty or what so ever die je moet installeren voordat je er functionaliteit uit kan halen.

Bij die Template power was het juist zo handig door met weinig voeten in aarde te steken er een aardig goede template systeem / website op kon bouwen..

Helaas heeft dat dus zo ze gebreken.
Nu blijkt dus wel dat in versie 3 dat ook ingebakken zit.. nou zover was ik dus niet gekomen omdat ik eigelijk toch een eigen systeem wil schrijven.

Het principe van XML gebruik ban xml:list id="lijst" spreekt me ontzettend aan want dan kan je meer overzicht tabel functies maken in een template.

Maar daarnaast vraag ik me dan weer af, heeft dat wel toegevoegde waarde dat je meer dan 2 van deze tabel overzichten kan maken buiten content en error.

Nouja in mijn ogen is het nu te kortzichtig om hier op verder te gaan, dus ga ik wel eens op verder onderzoek. :Y)

Acties:
  • 0 Henk 'm!

  • Myrdhin
  • Registratie: April 2000
  • Laatst online: 19-09 23:15
Verwijderd schreef op 17 januari 2004 @ 00:17:
Ik kan heel goed opmaken uit Wact dat ze gebruik maken van Smarty.
en dat ze dat als process gebruiken voor het doorvoeren van de data.
Dan moet je toch eens de source van CVS afhalen. Dan zie je dat ze Smarty helemaal niet gebruiken...
Kijk bij mij gaat het om de content scheiden van de source.
Dat zeggen ze bij Wact ook, dat is gewoon het systeem van georganiseerd programmeren.. maar ik wil dus absolut geen gebruik maken van smarty or what so ever die je moet installeren voordat je er functionaliteit uit kan halen.
Een template systeem maakt een scheiding tussen business logic zoals het ophalen en bewerken van data en presentation logic: het weergeven van data. De meeste template engines hebben dat idee eigenlijk nooit helemaal begrepen. Voor de weergave van bepaalde zaken heb je nou eenmaal een stukje programma nodig bv. voor het weergeven van een reeks waarden in een tabel.

Vaak wordt er in template engines de zoveelste "nieuwe" taal bedacht terwijl het onder water wordt geparsed door een PHP programma om weer uitgevoerd te worden als een PHP programma. Je kunt dan net zo goed je template in PHP schrijven. Een mooi artikel hierover is Beyond The Template Engine.

Mijn voorbeeld gaat ook een uit van een soort van taal, maar deze zit ingebakken in de html code waardoor programma's als Dreamweaver er goed meer overweg kunnen. Het is immers gewoon XHTML, op de variabele toekenning na (het {$var} gebeuren).
Bij die Template power was het juist zo handig door met weinig voeten in aarde te steken er een aardig goede template systeem / website op kon bouwen..

Helaas heeft dat dus zo ze gebreken.
Nu blijkt dus wel dat in versie 3 dat ook ingebakken zit.. nou zover was ik dus niet gekomen omdat ik eigelijk toch een eigen systeem wil schrijven.
Kijk maar eens naar dat artikel wat ik aangaf en probeer daar maar eens wat mee te schrijven. Het is ongelooflijk simpel en het werkt gewoon snel.
Het principe van XML gebruik ban xml:list id="lijst" spreekt me ontzettend aan want dan kan je meer overzicht tabel functies maken in een template.

Maar daarnaast vraag ik me dan weer af, heeft dat wel toegevoegde waarde dat je meer dan 2 van deze tabel overzichten kan maken buiten content en error.
Hoe bedoel je meer dan 2 tabel overzichten? Ik snap je zin niet helemaal.

Een ander leuk voorbeeld is een form. Wel eens een goed formulier gebouwd met error checking? Zie onderstaand voorbeeld:
code:
1
2
3
4
5
6
<form id="Formulier" action="form.php" method="post">
  <form:error id="email"><message /></form:error>
  Email: <input type="text" id="email" validate="EmailAddress">
  <form:error id="telefoon"><message /></form:error>
  Telefoon: <input type="text" id="telefoon" validate="RegExp" filter="^[0-9]+-[0-9]+$">
</form>

Je form wordt automatisch gechecked en eventueel worden de error berichten getoond. Hier heeft Simon Wilson een mooi artikel over geschreven: Easier form validation with PHP. Het principe berust op hetzelfde als het idee van de template engine in XML.
Nouja in mijn ogen is het nu te kortzichtig om hier op verder te gaan, dus ga ik wel eens op verder onderzoek. :Y)
Kijk gerust eens verder. Het hele principe wat hierboven beschreven is vergt nogal wat programmeerwerk maar je hebt er achteraf meer plezier van omdat het makkelijk hergebruikt kan worden.

Acties:
  • 0 Henk 'm!

  • dingstje
  • Registratie: Augustus 2002
  • Laatst online: 02-01-2024
Je kan

PHP:
1
$template = new TemplatePower($stringUitDatabase, T_BYVAR);


doen, zoals de manual vertelt.

If you can't beat them, try harder


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
dingstje schreef op 17 januari 2004 @ 14:35:
Je kan

PHP:
1
$template = new TemplatePower($stringUitDatabase, T_BYVAR);


doen, zoals de manual vertelt.
Als je ietsjes hoger had gelezen van MatHack dan zie je hij je voor is geweest, en dat ik al op zn opmerking een reactie had gegeven dat ik zover niet wil gaan omdat ik een eige systeem wil hebben waar ik in later statium meer profeit van ga krijgen, omdat ik ook weet hoe het systeem in zijn totaliteit werkt.

En je zal je nu wel afvragen waarom ik nou weer me eigen template engine wil hebben nou als ik even uit een artikel mag citeren wat Brian Lozier over templates heeft geschreven.
Most "template engines" are overkill!.
Daarom :P

En Myrdhin mag ik je bedanken voor het artikel.. ik kan merken dat jij er dus veel meer kaas van gegeten hebt dan ik.

In iederegeval ben ik al met een probleem analyse begonnen om er toch maar stuctuur in te krijgen..
maar je zal er wel meer over te horen krijgen. :D

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
[b][message=19758705,noline]Myrdhin schreef op 17 januari 2004 @ 12:10
Hoe bedoel je meer dan 2 tabel overzichten? Ik snap je zin niet helemaal.

Een ander leuk voorbeeld is een form. Wel eens een goed formulier gebouwd met error checking? Zie onderstaand voorbeeld:
code:
1
2
3
4
5
6
<form id="Formulier" action="form.php" method="post">
  <form:error id="email"><message /></form:error>
  Email: <input type="text" id="email" validate="EmailAddress">
  <form:error id="telefoon"><message /></form:error>
  Telefoon: <input type="text" id="telefoon" validate="RegExp" filter="^[0-9]+-[0-9]+$">
</form>

Je form wordt automatisch gechecked en eventueel worden de error berichten getoond. Hier heeft Simon Wilson een mooi artikel over geschreven: Easier form validation with PHP. Het principe berust op hetzelfde als het idee van de template engine in XML.
Gebruik jij dit template systeem nou alleen voor formulieren. of heb jij je hele website op templates draaien via deze template parser?

Het voordeel van dit systeem is wel het controleren van de formulieren, dat lees ik ook overal terug

Ben begonnen met de bouw.
Vind het vrij pittig.....
Pagina: 1