Archief - PHP: ALGORITME: templates

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

aXl_

Legacy Member
voor mijn volgende forum had ik graag geprobeerd hierin een template systeem te verwerken zodat je, zoals op andere fora tss styles kunt switchen.

Nu ik weet dat het werkt met *.tpl files waarin html code staat, {VAR} in het document wordt gereplaced met het in het script gedefinieerde values maar heeft iemand een schema hoedat ik het efficiëntst zo'n tpl class ineen steek? Het hoeft geen code te zijn, met een schema ben ik al blij :)

medic

Legacy Member
zoek op www.php.net de functie ob_start(); eens op, dit zal je wel grotendeels op weg zetten / inspiratie geven hoe zoiets juist werkt ;)

DarkBone

Legacy Member
Goed gebruik van CSS maakt template systemen vaak overbodig :)

aXl_

Legacy Member
css gebruik ik ook wel :) maar ik ben beetje jaloers op dat systeem van phpBB dat ge zo kunt switchen tss verschillende styles en uit hun code ben ik niet bijster veel wijzer geworden omdat het nog altijd een beetje boven mij is wat zich daar allemaal afspeeld.

edit: en ik heb ook de indruk dat m'n code er een stukje ordelijker op zou kunnen worden indien ik php en html van elkaar zou kunnen scheiden (of schijden, ei of ij wil me ff ni te binnen schieten :p). Nu is het af en toe een rommelig geheel als ik iets moet terugvinden omdat ik weer een bug ergens opgemerkt heb :-/

DarkBone

Legacy Member
Code & Layout scheiden is altijd een mooie doelstelling :)

korte ei dus

ik schijt
ik scheid

killgore

Legacy Member
lol, gl, een groot templatesysteem maken is nie simpel, ik ben nu al 2 dagen aant zwoegen de mijne topspeed te laten halen :) (zonder result echter :():

Kijk eens naar templatesystemen als die van phpbb (zeer snel, weinig debugging).

schema kan ek u echt niet geven, je hebt zooooveel manieren ;).

1 iets: begin er niet aan als je nog niet teveel van php kent ;).

Hevia

Legacy Member
Als je heel de site opbouwt met css een xhtml, dan is dat heel snel gedaan zo'n template systeem.
Gewoon een paar css file'tjes maken en dan dan de style die je import aanpassen....

killgore

Legacy Member
Hevia zei:
Als je heel de site opbouwd met css een xhtml, dan is dat heel snel gedaan zo'n template systeem.
Gewoon een paar css file'tjes maken en dan dan de style die je import aanpassen....
das switchen tussen layouts, template systeem in php heeft nog 2° punt en dat is php-code van layout-code scheiden :).

aXl_

Legacy Member
ik ken genoeg van php om een forum ineen te draaien (check desnoods clan-site in sig) maar dat tpl systeem...zucht. Zit er al een tijdje op te zwoegen, al enkele dingen geprobeerd. Ik denk dat ik me nog is ga verdiepen in de code van phpBB :)

killgore

Legacy Member
aXl_ zei:
ik ken genoeg van php om een forum ineen te draaien (check desnoods clan-site in sig) maar dat tpl systeem...zucht. Zit er al een tijdje op te zwoegen, al enkele dingen geprobeerd. Ik denk dat ik me nog is ga verdiepen in de code van phpBB :)
ik heb sigs af staan (dus verwijzen naar een url in je sig is niet zo handig he :p), en een forum ineendraaien is van tijd niet meer dan paar aanpassingen doen aan gastenboek, het is niet omdat je een mini-forum kan ineen steken dat je deftig php kan hoor ;). (Ma kzou je forum wel is willen zien :) )

edit: srry, ma die site in je sig bevat enkel een forum dat wel heel veel weg heeft van phpbb zunne :p.

aXl_

Legacy Member
voor de non-believers wil ik de source online zetten, phpBB heeft echt geen html tss de php code staan :p. (liefst ni publiek want dan komen er ongetwijfeld security bugs aan de oppervlakte :))

edit: op jim.be was er ook zo'n non-believer dus daarvoor had ik eens screens gemaakt

http://users.skynet.be/bs939021/filerommel/phpbb_viewtopic.jpg is de index van een phpbb forum
http://users.skynet.be/bs939021/filerommel/rpuforum_index.jpg is die van mijn forum

http://users.skynet.be/bs939021/filerommel/phpbb_viewtopic.jpg is viewtopic van een phpbb forum
http://users.skynet.be/bs939021/filerommel/rpuforum_viewtopic.jpg is die van mijn forum

killgore

Legacy Member
aXl_ zei:
voor de non-believers wil ik de source online zetten, phpBB heeft echt geen html tss de php code staan :p. (liefst ni publiek want dan komen er ongetwijfeld security bugs aan de oppervlakte :))
Ik geloof je idd niet ;).

killgore

Legacy Member
aXl_ zei:
had ik nu net m'n post ge-edit :p, ff herpost:

...

maar we zijn aan het afdwalen :woohoo:
ik zeg niet dat je een phpbb forum hebt gepakt en er een nieuwe layout hebt opgezet he. Ik vind enkel dat je voor een eigen forum wel een uitzicht hebt dat zeer veel aan die paar open forums doen denken, waardoor ik het zeer goed mogelijk acht dat je dingen van phpbb of iboard hebt gepikt.
edit: ik geloof goed dat je er alleszins een deel (al dan niet alles) zelf hebt gescript, maar haal die dingen gauw offline, want ik kan sql-injecties doen!
ma, das naast de kwestie: wat snap je niet van template klasses?

aXl_

Legacy Member
het systeem snap ik ongeveer:

je haalt de code uit een *.tpl bestand, vervangt de vars die tussen accolades staan door in het script bepaalde variabelen en je geeft dat weer.

Maar: zij lijken alles op te slaan in een array met "handles" en "filenames". Zo alles lijken op te sparen tot het einde en dan pas weer te geven. Wat zij echter bedoelen met hun "block-levels" blijft me een raadsel.

Ik neem aan dat
het volgende comment bovenaan:
// variable that holds all the data we'll be substituting into
// the compiled templates.
// ...
// This will end up being a multi-dimensional array like this:
// $this->_tpldata[block.][iteration#][child.][iteration#][child2.][iteration#][variablename] == value
// if it's a root-level variable, it'll be like this:
// $this->_tpldata[.][0][varname] == value
var $_tpldata = array();

er iets mee te maken heeft.

eveneens hoedat ze het klaarspelen om 1 template in een andere te krijgen (bijvoorbeeld een error-msg in een error-layout op de plaats waar de txt van een post zou moeten komen indien die niet beschikbaar is).

het blijft nu eenmaal code met comments, geen tutorial :-/

killgore

Legacy Member
block systeem:

stel dat je iets wilt herhalen (bv. in een nieuwsscript je nieuwsitem):

dan sla je je layout van 1 item op in <-- BEGIN NIEUWSBLOCK --> layout <-- END NIEUWSBLOCK --> en je template systeem laat dat het nodige aantal keren herhalen :).

aXl_

Legacy Member
nifty :D

mare, wat zou het efficiëntst zijn.

Per keer dat je een stukje template-code nodig hebt de file te laden, vars te replacen en als output weer te geven.

(vb

class tpl{
function load($file,$varArray){
//ik load de code hier
$output = $this->parse($filecode,$varArray);
//en geef $output weer
}

function parse($filecode, $varArray){
//ik replace vars hier
return $filecode;
}
}

en dan bijvoorbeeld voor elke post:
$tpl->load("post.tpl", array("TXT" => "txtje", enz...));

of zoals dat phpBB forum, alles opsparen tot het einde (een array van handles en filenames, en van handles en vars) en op het einde alles replacen en dan als output weergeven?

BloodSeaker

Legacy Member
PHP:
function gettemplate($template,$ext="tpl") {
                $templatefolder = "template";
                $templatecache = array();
                if(!isset($templatecache[$template]))
                {
                        $templatecache[$template] = implode("",file($templatefolder."/".$template.".".$ext));
                }
                return str_replace("\"","\\\"",$templatecache[$template]);
}

function dooutput($template) {
        echo $template;
}

en dan doe ik wanneer ik bvb een pagina toon met nieuws het volgende
PHP:
eval("\$footer = \"".gettemplate('footer')."\";");
eval("\$header = \"".gettemplate('header')."\";");
while(ne hoop nieuws){
  $poster = "info uit database";
  $date = "info uit database";
  $postContent = "info uit database";
  eval("\$content = \"".gettemplate('newsItem')."\";");
}
eval("dooutput(\"".gettemplate("news")."\");");

aannemende dat news.tpl eruitziet als
$header
<h1>De nieuwsitem zijn</h1>
$content
$header

en de template voor content bevat bvb
<p align="left">
$poster - $date<br/>
$postContent
</p>

sneax

Legacy Member
ik gebruik gewoon nen
header.inc.php -> daar staat gewoon de header in, tot aan de inhoud vd pagina
footer.inc.php -> alle html dat na de inhoud komt
theme.inc.php -> een aantal functies die gewoon een html output geven, bv. de start van een kleine table, de start van een header-table, etc... die ik gebruik in mijn code etc...
blah.css -> css file voor de blah site

nu als ge theme.inc.php verandert kunt ge gans de site er anders laten uitzien, om effectief de layout te wijzigen moet ge dan header.inc.php en content.inc.php editten

de code is gescheiden in die zin dat in de 'template' files zoals footer, header en theme, daar staat geen php in maar als er php moet aangeroepen worden dan is da gewoon bv:
<?php show_latest_comments('10'); ?>
zo steekt alles ewa in functiekes en kunt ge dus makkelijk een pagina opbouwen

allé ja zo doe ik het nu, das dus geen écht template system maar mijn code is toch wa gescheiden van de layout, alhoewel de code niet EERST gedaan wordt en DAN pas de layout, dus mooie error-msgs behoren niet tot de mogelijkheid.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan