PHP en HTML
<html>
html-blablabla
</html>
Ikzelf maak mijn scripts op volgende manier:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
php-blablabla;
print <<<HTML
<html>
html-blablabla
</html>
HTML;
nog meer php-blablabla;
?>
php-blablabla;
print <<<HTML
<html>
html-blablabla
</html>
HTML;
nog meer php-blablabla;
?>
Beide geven hetzelfde output maar welke is beter?
De vraag is niet wat is beter maar wat werkt voor jezelf het prettigste.
Wat zijn de voor- en nadelen van beide opties?
smarty. Je krijgt opzich nog best veel smarty code in je html (vooral als je met div's etc werkt). Maar op die manier heb ik in iedergeval geen html code meer in men php. En dat mijn HTML templates er wat lelijker op worden. Tja daar zit ik opzich niet zo mee aangezien je die een keer maakt en nooit meer aanpast waarschijnlijk. PHP ben je echter constant mee bezig.
Ik ben bij men laatste project bezig met De filosofie zou moeten zijn (in mijn ogen althans) dat template bouwers grafisch onderlegde mensen zijn die nagenoeg 0% kennis (willen) hebben van technieken als PHP e.d...
Op moment dat dat geen eis is, tjah.. dan is de hemel te rijk ;)
Maar goed ik doe dit project alleen mij boeit 't opzich niet als er van die lelijke codes tussen men HTML templates staan. Ik ben al blij genoeg dat ik geen html meer in mijn php files heb staan.
Waarom heb ik dan toch voor smarty gekozen? Ik wou men HTML en PHP gescheiden houden. Dus geen html in mijn php en geen php in mijn html. Nu wordt dat met een ander taaltje opgelost. Dit is trouwens ook de eerste keer dat ik met smarty werk. Hiervoor had ik wel eens met de phpBB template engine gewerkt. Maar goed ik ga die smarty class zelf nog eens wat aanpassen want die ouput buffer is nog niet naar mijn zin.
btw voorbeeld van een smarty template:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<div id="blog">
<div id="article">
{section name=articles loop=$article}
<div class="blogItem">
<a name="{$article[articles].art_id}"></a>
<h3>{$article[articles].date}</h3>
<h2>{$article[articles].title}</h2>
<p>{$article[articles].article}</p>
<h4>Posted by: {$article[articles].posted_by} - <a href="javascript:toggle('blog_{$article[articles].art_id}')">{$article[articles].comment_count} comment(s)</a></h4>
</div>
<div class="blogComments" id="blog_{$article[articles].art_id}" style="display: none;">
{section name=comments loop=$comment[articles]}
<h1 class="commentUsername">{$comment[articles][comments].username} wrote:</h1>
<p>{$comment[articles][comments].message}</p>
<h2 class="commentDate">{$comment[articles][comments].commentDate}</h2>
{/section}
</div>
{/section}
{section name=page_numbering loop=$page_numbers}
<a href="blog/{$page_numbers[page_numbering].num_articles}/">{$page_numbers[page_numbering].page_nr}</a>
{/section}
</div>
</div>
<div id="article">
{section name=articles loop=$article}
<div class="blogItem">
<a name="{$article[articles].art_id}"></a>
<h3>{$article[articles].date}</h3>
<h2>{$article[articles].title}</h2>
<p>{$article[articles].article}</p>
<h4>Posted by: {$article[articles].posted_by} - <a href="javascript:toggle('blog_{$article[articles].art_id}')">{$article[articles].comment_count} comment(s)</a></h4>
</div>
<div class="blogComments" id="blog_{$article[articles].art_id}" style="display: none;">
{section name=comments loop=$comment[articles]}
<h1 class="commentUsername">{$comment[articles][comments].username} wrote:</h1>
<p>{$comment[articles][comments].message}</p>
<h2 class="commentDate">{$comment[articles][comments].commentDate}</h2>
{/section}
</div>
{/section}
{section name=page_numbering loop=$page_numbers}
<a href="blog/{$page_numbers[page_numbering].num_articles}/">{$page_numbers[page_numbering].page_nr}</a>
{/section}
</div>
</div>
Gewijzigd op 01/01/1970 01:00:00 door Roy Bongers
Nee, ik denk het niet. Templates moeten altijd een koppeling hebben met de code, dus 0% zal nooit mogelijk zijn. Wat wel kan is natuurlijk gewoon de gebruikelijke samenwerking tussen programmeur en grafisch ontwerper, waarbij de programmeur een html layout van de grafisch ontwerper vertaald naar een template.
De andere optie is dus om de designer te leren werken met smarty of php code. foreach lusjes en wat echo's zijn niet zo moeilijk.
Oh nog een groot voordeel van template engines ipv directe echo's! Stel je wilt een cookie aanmaken dan kun je dit overal doen aangezien de content pas op 't eind van het script naar de browser wordt gestuurd als alles al afgehandeld is. Als je met echo's werkt kom je echt in de problemen als je bijv. altijd een vaste header direct naar de browser stuurt. Je kan dan namelijk geen cookie meer maken.
Wat ook handig is, is PHP een XML-bestand laten genereren en dat met XSLT tot een HTML-bestand te laten ombouwen. Je kan er voor kiezen de XML of HTML als broncode te nemen.
Wou je dat gereren door DOM laten doen? Ik heb daar laatst een stuk code van gezien maar ik vond het een behoorlijke lap code voor iets simpels. En als je 't genereren zelf doet met echo's dan is je XML / HTML niet meer gescheiden van je code.