Template parser, extra div's aanmaken
Voor mijn website ben ik nu bezig met een OOP CMS systeem en een Template parser.
Mijn CMS kan nu een Array aan Artikelen ophalen.
Deze moeten dan elke in een eigen div worden geplaatst.
Normaal zou je dit doen met een foreach loop alleen ik wil gebruik maken van de Template parser.
Hoe kan ik mijn parser zo aanpassen dat hij automatisch extra div's (waar ook weer div's inzitten) laten toevoegen voor elk artikel.
Template parser:
Quote:
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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<?php
class JParser{
protected $file;
protected $errors;
protected $fileloaded;
protected $tplinhoud;
protected function loadFile(){
if(file_exists($this->file)){
$this->tplinhoud = file_get_contents($this->file);
$this->fileloaded = true;
}else{
throw new Exception("Geef een geldig TPL bestand op!");
}
}
public function __construct($file = false){
if($file != "" && $file != false){
}else{
throw new Exception("Geef een bestands naam op!");
}
if(!preg_match("#(.+?).tpl#si", $file)){
throw new Exception("Geef een geldig TPL bestand op!");
}
if(!file_exists($file)){
throw new Exception("Geef een geldig TPL bestand op!");
}
$this->fileloaded = false;
$this->tplinhoud = "";
$this->file = $file;
$this->loadFile();
}
public function set($naam, $content){
if($this->fileloaded == false){
$this->loadFile();
}
$this->tplinhoud = preg_replace("#\{".$naam."\}#si", $content, $this->tplinhoud);
}
public function parse(){
if($this->fileloaded == false){
$this->loadFile();
}
return $this->tplinhoud;
}
}
?>
class JParser{
protected $file;
protected $errors;
protected $fileloaded;
protected $tplinhoud;
protected function loadFile(){
if(file_exists($this->file)){
$this->tplinhoud = file_get_contents($this->file);
$this->fileloaded = true;
}else{
throw new Exception("Geef een geldig TPL bestand op!");
}
}
public function __construct($file = false){
if($file != "" && $file != false){
}else{
throw new Exception("Geef een bestands naam op!");
}
if(!preg_match("#(.+?).tpl#si", $file)){
throw new Exception("Geef een geldig TPL bestand op!");
}
if(!file_exists($file)){
throw new Exception("Geef een geldig TPL bestand op!");
}
$this->fileloaded = false;
$this->tplinhoud = "";
$this->file = $file;
$this->loadFile();
}
public function set($naam, $content){
if($this->fileloaded == false){
$this->loadFile();
}
$this->tplinhoud = preg_replace("#\{".$naam."\}#si", $content, $this->tplinhoud);
}
public function parse(){
if($this->fileloaded == false){
$this->loadFile();
}
return $this->tplinhoud;
}
}
?>
Hoe ik artikelen ophaal:
Quote:
$cms = new ArtikelCMS;
$cms->krijgArtikelen("home", "content");
// Page, Modus (Content = array artikelen, Main = 1 hoofdartikel)
$cms->krijgArtikelen("home", "content");
// Page, Modus (Content = array artikelen, Main = 1 hoofdartikel)
De div die dus herhaald moet worden:
Quote:
<div class="article">
<h3>Titel</h3>
<div class="clr"></div>
<div class="clr"></div>
<p>Dit is de content van het Artikel!!!!</p>
</div>
<h3>Titel</h3>
<div class="clr"></div>
<div class="clr"></div>
<p>Dit is de content van het Artikel!!!!</p>
</div>
Ik hoop dat iemand mij kan helpen.
Waarom een template parser? En geen view?
Wat bedoelt u met view?
Wat is MVC en wat doet het:
MVC Pattern staat voor het Model View Controller patroon. Het model zorgt voor alle informatie uit een data bron bijvoorbeeld een database. Het model geeft deze informatie door aan de controller die deze verwerkt of bewerkt en deze doorgeeft aan de view ( de output). De controller is dus eigenlijk een knooppunt van alle ‘bronnen’.
- Het Model representeert de applicatie data
- De View maakt een presentatie van de model gegevens
- De Controller is verantwoordelijk voor het verwerken van de data
Hieronder een standaard MVC Request.
De bovenstaande figuur geeft een voorbeeld van een simpel MVC request weer. Hieronder is puntsgewijs weergegeven hoe daadwerkelijk het MVC een request correct afhandeld.
1. Client klikt op een link. Zijn browser maakt een request aan naar de webserver
2. De dispatcher ( uitvoerder ) controleert de request URL en geeft de request door aan de juiste controller
3. De controller voert de applicatie specifieke logica uit. Bijvoorbeeld of de client is ingelogd.
4. Daarnaast gebruikt de controller een of meerdere modellen om toegang tot de applicatie data te verkrijgen. Meestal representeert een model een database tabel, maar kan ook een tekst bestand wezen.
5. Zodra het model de data heeft verkregen en deze heeft doorgegeven aan de controller geeft de controller deze data door aan de view. De view pakt deze data op en maakt deze klaar voor presentatie aan de gebruiker. Views zijn normaliter in HTML format, maar dit zou evengoed een PDF, XML document of een JSON object kunnen zijn, afhankelijk van de wensen van de applicatie ontwikkelaar.
6. Als de view de data van de controller heeft gebruikt om een volledige view op te bouwen, wordt de inhoud van die view teruggestuurd naar de browser van de client.
Bij elke request die naar de applicatie wordt verstuurd volgt dit basispatroon.
Waarom MVC:
Waarom gebruik maken van MVC? Omdat het een bewezen software design patroon blijkt te zijn dat van een applicatie, een goed onderhoudbaar, modulair en snel te ontwikkelen pakket maakt. De taken van de toepassingen onderverdelen in aparte modellen, views en controllers maakt de applicatie geheel lichtvoetig.
Gewijzigd op 02/04/2011 13:56:16 door Niels K
Templates gebruiken is eigenlijk al een stap richting MVC omdat de de View al begint los te weken van de rest van je code.
Als je foreach-lusjes wilt kunnen doen in je template moet je minstens aangeven van waar tot waar hij moet herhalen per Artikel. Vervolgens zou je zo'n foreach-lusje als sub-template kunnen behandelen (als eigen template) en dat per Artikel renderen.
Gewijzigd op 02/04/2011 14:35:19 door Jelmer -
Dat is naar mijn weten sneller ook? Je hoeft geen extra 'laag' in om je gegevens in de 'view' te gooien.
Het is al gelukt.
Ik heb een nieuwe function gemaakt in mijn parser genaamd setMulti.
Deze replaced de {iets} met een div door de content in te stellen op
"<div>\nTest\n</div>"
Daarna voegt hij er weer {iets} aan toe en zet {iets} in een array.
Nu kan je dus meerdere keren setMulti gebruiken voor 1 tag/{iets}
Tijdens het parsen removed hij alles wat in de Multi Array staat.
Alles werkt nu en heb een test versie gemaakt.
Zonder het CMS maar gewoon de website weergeven met test gegevens is mijn code 26 regels voor de hele website met 2 setMulti's