Toon posts:

[PHP/HTML] PHP en HTML scheiden in code.

Pagina: 1
Acties:

Verwijderd

Topicstarter
..

[ Voor 100% gewijzigd door Verwijderd op 08-06-2005 13:33 ]


  • Skinny
  • Registratie: Januari 2000
  • Laatst online: 25-07 18:17

Skinny

DIRECT!

The magic word of the day : Templates

SIZE does matter.
"You're go at throttle up!"


Verwijderd

Topicstarter
..

[ Voor 100% gewijzigd door Verwijderd op 08-06-2005 13:33 ]


Verwijderd

Op maandag 25 maart 2002 16:47 schreef DiEana het volgende:

[..]

Ik citeer uit mijn eigen post: "Ik mag echter geen gebruik maken van niet zelf gemaakte classen, dus templates waren geen optie :\"

EDIT: waarom is mijn layout verneukt van mijn eerste post? Was zonet niet?
waarom mag je niet gebruik maken van niet zelf gemaakte classes? Damn in welke tijd programmeren leef jij? Moet je ook nog zelf je compiler schrijven? :+
Dan schrijf je zelf toch een template engine 8-)

  • Skinny
  • Registratie: Januari 2000
  • Laatst online: 25-07 18:17

Skinny

DIRECT!

* Skinny agrees.

Je moet toch op de e.o.a. manier die PHP waarden in de HTML proppen. Of je het nou Template, Funktie, Class noemt, qua funktionaliteit maakt het niets uit.

SIZE does matter.
"You're go at throttle up!"


Verwijderd

Topicstarter
..

[ Voor 100% gewijzigd door Verwijderd op 08-06-2005 13:33 ]


Verwijderd

wat ik niet snap is waarom dat gewoon niet kan dan?
je kan toch een variabele in de ander stoppen?...

Verwijderd

Topicstarter
.

[ Voor 100% gewijzigd door Verwijderd op 08-06-2005 13:33 ]


  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 09-09 14:51

thomaske

» » » » » »

Op maandag 25 maart 2002 16:55 schreef DiEana het volgende:

[..]

Sorry, het kan gewoon niet :(.

Hehe, een eigen template engine schrijven, ja daar ben ik nu "net" niet pro genoeg voor :)
Waarom kan je dan geen templates gebruiken? :?

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

een template engine kan heel eenvoudig zijn hoor.

dit zou bijvoorbeeld al kunnen volstaan:
code:
1
2
3
4
5
6
7
8
9
10
11
$template = implode ( "", file ( "./template.html" ) );

$vars = array ();

$vars [ "title" ] = "Titeltje";
$vars [ "content" ] = "Inhoud";

foreach ( $vars as $key => $value )
   $template = str_replace ( '{' . $key . '}', $value, $template )

echo $template;

templatebestand template.html:
code:
1
2
3
4
5
6
7
8
<html>
<head>
   <title>{title}</title>
</head>
<body>
<p>{content}</p>
</body>
</html>

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Topicstarter
..

[ Voor 100% gewijzigd door Verwijderd op 08-06-2005 13:33 ]


Verwijderd

Topicstarter
..

[ Voor 100% gewijzigd door Verwijderd op 08-06-2005 13:33 ]


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

DiEana:
Coool! Als ik dat geweten had.... :)
Als je dat bedacht had >:) :D
DiEana:
Zo heb ik het nu:
PHP:
1
<?meuk?>

Is dit dan de juiste/snelle methode die ik moet gebruiken?
Snelheid is niet echt een issue, hoor. Het scheelt op zijn allerhoogst een paar milliseconden, omdat je anders geen bestand hoeft uit te lezen en geen str_replace hoeft te doen, maar dat is echt te verwaarlozen.
En een juiste methode bestaat niet. Er zijn altijd meerdere wegen die naar Rome leiden.
DiEana:
Want nu zit ik een beetje in de knoei met condities: bij de ene clanwar moet ik wel het fototje tonen om wars te editen (als de auteur van de war = de ingelogde username) en bij de andere wars moet ik dat niet tonen. Waar zet ik die condities dan?
Je zou aan subtemplates kunnen denken. Dat je een bepaalde template variabele ipv. door een "gewone" waarde te vervangen vervangt door de inhoud van een ander template bestand, die je ook weer str_replacet:
code:
1
2
3
4
5
6
7
8
9
10
11
12
-> lees hoofdtemplate
-> lees db uit
-> lees template A en B in
-> voor elke record
   -> is de owner van dit record ingelogd?
    -> gebruik voor dit record template A
   -> anders
    -> gebruik voor dit record template B
   -> doe str_replace met de waarden van het record icm met
    te gebruiken template
   -> voeg resultaat toe aan var X
-> output de variabelen, daar waar X moet staan X in de template replacen

if you get what i mean
En hoe kan ik het best die templates opvatten: van heel de pagina, of enkel de deeltjes die dynamisch zijn.. maw, de deeltjes die afhankelijk zijn van de gegevens in de dbase?
:?
PS: Gaat dit het proces niet enorm vertragen?
Zie hierboven :)

hth

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Topicstarter
..

[ Voor 100% gewijzigd door Verwijderd op 08-06-2005 13:33 ]


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

DiEana:
Over die snelheid: gelukkig maar! Want ik dacht dat het enorm vertraagd ging worden, door steeds op al die "template paginas" een str_replace op los te laten. Niet dus, phew :)
str_replace is een hele "lichte" functie
Ja subtemplates, heb ik ook aan gedacht. Je bedoelt dus dat ik voor elk mogelijk situatie een nieuwe subtemplate aanmaak. (die natuurlijk zo klein mogelijk is: er moet zo weinig mogelijk gekopieerd worden natuurlijk). Maar ik dacht weer dat al die extra templates (die dus moeten geladen worden) enorm vertragend gingen werken :)

Oops, dan deed ik het dus fout? Want ik las per row uit de database opnieuw de template file in. Zo hoort het dus niet?
Dat is uberhaupt niet nodig. Je moet gewoon 1 string bewaren, waarin je het origineel van de template bewaart.
Over die deeltjes bedoelde ik: mijn pagina bestaat uit 3 delen zeg maar: bovenkant, rechterkant en midden. De bovenkant en rechterkan veranderen nooit, die zijn dus statisch. De vraag was gewoon of ik daar ook templates moet voor gebruiken, en niet alleen voor het dynamische (afhankelijk van de input gebruiker + dbase) midden.
Wat ik bedoel met subtemplates is ongeveer dit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
<html>
<head>
   <title>{title}</title>
</head>

<body>
<h1>{title}</h1>

{content}

</body>
</html>

Vervolgens, kun je voor het invullen van {content} natuurlijk ook weer templates gebruiken:

entry.html
code:
1
<div id="{id}">{name}</div>

en voor het invullen van die templates zou je dus een functie kunnen schrijven:
code:
1
2
3
4
5
6
function parse ( $vars, $tpl )
{
   foreach ( $vars as $key => $value )
    $tpl = str_replace ( '{' . $key . '}', $value, $tpl );
   return $tpl;
}


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$maintpl = implode ( "", file ( "./main.html" ) );

$output [ "title" ] = "Overzicht dingesjes";

$entrytpl = implode ( "", file ( "./entry.html" ) );

$query = "SELECT * FROM tabel";
$res = mysql_query ($query);

if ( mysql_num_rows ( $res ) == 0 )
   $output [ "content" ] = "database is leeg";
else
   while ( $record = mysql_fetch_assoc ( $res ) )
    $output [ "content" ] .= parse ( $record, $entrytpl );

echo parse ( $output, $maintpl );

Probeer deze code nu regel voor regel voor jezelf uit te leggen. Kijk goed wat er gebeurt, en wat er handig / minder handig aan is, en ga dan na hoe je dat zelf zou willen implementeren, en ga aan de slag :)

suc6

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Topicstarter
..

[ Voor 99% gewijzigd door Verwijderd op 08-06-2005 13:32 ]


Verwijderd

Topicstarter
..

[ Voor 108% gewijzigd door Verwijderd op 08-06-2005 13:31 ]


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

graag gedaan :)

't is btw availability ;)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Topicstarter
..

[ Voor 99% gewijzigd door Verwijderd op 08-06-2005 13:31 ]


  • chem
  • Registratie: Oktober 2000
  • Laatst online: 27-08 13:53

chem

Reist de wereld rond

btw, ipv helemaal door die array te foreach'en kan je ook doen:
PHP:
1
<?str_replace(array_keys($vars),$vars,$string);?>

hupsakee :)

Klaar voor een nieuwe uitdaging.


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

chem:
btw, ipv helemaal door die array te foreach'en kan je ook doen:
[...]
hupsakee :)
:X ik wist dat natuurlijk wel maar ik wilde zien of jij het ook wist :X O-) :D

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • chem
  • Registratie: Oktober 2000
  • Laatst online: 27-08 13:53

chem

Reist de wereld rond

Op dinsdag 26 maart 2002 15:14 schreef drm het volgende:

[..]

:X ik wist dat natuurlijk wel maar ik wilde zien of jij het ook wist :X O-) :D
yeah, RIGHT! ;)

Klaar voor een nieuwe uitdaging.


Verwijderd

Topicstarter
..

[ Voor 100% gewijzigd door Verwijderd op 08-06-2005 13:33 ]


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

dat zou ik wel doen, denk ik, ja

Let trouwens wel op dat je je naamgeving van je templates duidelijk houdt! Je krijgt namelijk binnen no-time een enorme sloot van die dingen, en voor je het weet ben je een halfuur aan het zoeken naar een stukje template, als je een tijdje niet naar de code hebt gekeken.

Bijvoorbeeld, 3 titletemplates
title.new.html
title.active.html
title.default.html

Let ook op dat je niet te veel dubbel werk doet, (zoveel mogelijk code hergebruiken, ook in je templates).

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Topicstarter
..

[ Voor 100% gewijzigd door Verwijderd op 08-06-2005 13:33 ]


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

DiEana:
PS: is dit nu "even snel" als bijv. Smarty of phpLib, of zijn die "nog" sneller? Compacter is het allezins :)
Geen idee dat zou je even moeten benchen.
Ik denk wel dat dit sneller is, maar ik denk ook dat dat heel erg weinig zal zijn.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Topicstarter
..

[ Voor 100% gewijzigd door Verwijderd op 08-06-2005 13:33 ]


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

jep, ik heb nog een opmerking. Niet hierover maar wel over je database.

Ik zie dat je behoorlijk moeilijk doet om je date/time veld te formatten. Als je even een kijkje neemt in de MySQL manual bij The DATETIME, DATE, and TIMESTAMP Types en Date and Time Functions

Probeer dan een query te fixen waarbij de gegevens gewoon meteen geformat worden.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Topicstarter
..

[ Voor 100% gewijzigd door Verwijderd op 08-06-2005 13:33 ]


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

DiEana:
IDD! Dat stond/staat op mijn TODO lijstje,
[...]
Dan zou ik gewoon meerdere keren vanuit het ene datum-veld selecteren:
code:
1
2
3
4
SELECT
   DATE_FORMAT(..) as datum,
   HOUR(..) as hour,
   #etcetera

vind ik persoonlijk een stuk netter...

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Topicstarter
..

[ Voor 100% gewijzigd door Verwijderd op 08-06-2005 13:33 ]


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

just my C 0,02 m8 ;)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Topicstarter
..

[ Voor 100% gewijzigd door Verwijderd op 08-06-2005 13:32 ]

Pagina: 1