Een experiment / idee
Ik had gister een idee om (ik denk) snel websites te kunnen maken. Hier is de download link : download
De index.php ziet er als volgt uit:
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
54
55
56
57
58
59
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
54
55
56
57
58
59
<?php
include_once("lib/Website.class.php");
include_once("lib/Position.class.php");
include_once("lib/Module.class.php");
include_once("lib/Database.class.php");
//MODULES
include_once("modules/Tekst.php");
include_once("modules/Menu.php");
include_once("modules/LoginForm.php");
//MAAK VERVINDING MET EEN DATABASE
Database::Connect("localhost","root","","social");
//START WEBSITE
$website = new Website('Dennis Sluijk - Home');
$website->addStylesheet('style/style.css');
$website->addJavascript('lib/javascript/jquery.js');
$website->addJavascript('lib/javascript/dynaload.js');
//MAKE MENU
$mainmenu = new Menu();
$home = new MenuItem('Home','index.php','');
$informatie = new MenuItem('Informatie','informatie.php','');
$informatiesub = new Menu();
$informatiesub->addMenuItem(new MenuItem('Honden','#',""));
$informatiesub->addMenuItem(new MenuItem('Katten','#',""));
$informatie->addMenu($informatiesub);
$mainmenu->addMenuItem($home);
$mainmenu->addMenuItem($informatie);
//MAKE LOGIN FORM
$loginform = new LoginForm();
$left = new Position('left');
$left->appendModule($mainmenu);
$left->appendModule($loginform);
$tekst = new Tekst('Test test TEKST TEKST IPSUM DINGEN');
$content = new Position('content');
$content->appendModule($tekst);
$main = new Position('main');
$main->appendPosition($left);
$main->appendPosition($content);
//APPEND POSITIONS
$website->appendPosition($main);
echo $website->fetch();
?>
include_once("lib/Website.class.php");
include_once("lib/Position.class.php");
include_once("lib/Module.class.php");
include_once("lib/Database.class.php");
//MODULES
include_once("modules/Tekst.php");
include_once("modules/Menu.php");
include_once("modules/LoginForm.php");
//MAAK VERVINDING MET EEN DATABASE
Database::Connect("localhost","root","","social");
//START WEBSITE
$website = new Website('Dennis Sluijk - Home');
$website->addStylesheet('style/style.css');
$website->addJavascript('lib/javascript/jquery.js');
$website->addJavascript('lib/javascript/dynaload.js');
//MAKE MENU
$mainmenu = new Menu();
$home = new MenuItem('Home','index.php','');
$informatie = new MenuItem('Informatie','informatie.php','');
$informatiesub = new Menu();
$informatiesub->addMenuItem(new MenuItem('Honden','#',""));
$informatiesub->addMenuItem(new MenuItem('Katten','#',""));
$informatie->addMenu($informatiesub);
$mainmenu->addMenuItem($home);
$mainmenu->addMenuItem($informatie);
//MAKE LOGIN FORM
$loginform = new LoginForm();
$left = new Position('left');
$left->appendModule($mainmenu);
$left->appendModule($loginform);
$tekst = new Tekst('Test test TEKST TEKST IPSUM DINGEN');
$content = new Position('content');
$content->appendModule($tekst);
$main = new Position('main');
$main->appendPosition($left);
$main->appendPosition($content);
//APPEND POSITIONS
$website->appendPosition($main);
echo $website->fetch();
?>
Je kan natuurlijk het menu enzovoorts opslaan in een appart bestand die je dan bij de volgende pagina bijvoorbeeld cats.php alleen hoef te includen. Het uiteindelijke doel van het systeem is zodat je dingen kan hergebruiken
hier is een download link voor alle bestanden: download
Mij vraag is wat jullie er van vinden
Gewijzigd op 23/08/2011 12:19:28 door Dennis Sluijk
heb je ergens een voorbeeld online staan?
Nee. Ik heb geen hostingplekje
Wat is hiervan het voordeel ten opzichte van views? (met een parser zoals smarty)
Gewijzigd op 23/08/2011 12:42:29 door Dennis Sluijk
Zegmaar smarty?
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
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
<?php
class Template
{
public $vars;
public $file;
function __construct($file = null)
{
$this->file = $file;
}
function set($name,$value)
{
$this->vars[$name] = is_object($value) ? $value->fetch() : $value;
}
function fetch($file = null)
{
if(!$file) $file = $this->file;
if($this->vars) extract($this->vars);
ob_start();
include($file);
$content = ob_get_contents();
ob_end_clean();
return $content;
}
}
?>
class Template
{
public $vars;
public $file;
function __construct($file = null)
{
$this->file = $file;
}
function set($name,$value)
{
$this->vars[$name] = is_object($value) ? $value->fetch() : $value;
}
function fetch($file = null)
{
if(!$file) $file = $this->file;
if($this->vars) extract($this->vars);
ob_start();
include($file);
$content = ob_get_contents();
ob_end_clean();
return $content;
}
}
?>
Dit is het zelfde idee als smarty..
En wat word hier het voordeel van, bovenop smarty?
Elke klasse vertegenwoordigt een HTML element..
OT: Het ziet er goed uit. Lijkt een beetje op de java.awt klassen bibliotheek.
Gewijzigd op 23/08/2011 15:09:44 door Fabian M
function fetch($file = null)
neem ik aan dat er een extern bestand in word geladen.
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
54
55
56
57
58
59
60
61
62
63
64
65
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
54
55
56
57
58
59
60
61
62
63
64
65
<?php
class CachedTemplate extends Template
{
public $expireTime;
public $cached_id;
public $cached;
public function __construct($cached_id = null, $expireTime = 600) {
$this->expireTime = $expireTime;
$this->cached_id = 'cache/' . md5($cached_id);
}
public function is_cached() {
if($this->cached) return true;
if(!$this->cached_id) return false;
if(!file_exists($this->cached_id)) return false;
if(!($fmtime = filemtime($this->cached_id))) return false;
if(($fmtime + $this->expireTime) < time()) {
@unlink($this->cache_id);
return false;
}
else {
$this->cached = true;
return true;
}
}
public function fetch_cache($file) {
if($this->is_cached()) {
$filehandle = fopen($this->cached_id, 'r');
$data = fread($filehandle, filesize($this->cached_id));
fclose($filehandle);
return $data;
}
else {
$data = parent::fetch($file);
$filehandle = fopen($this->cached_id, 'w');
fwrite($filehandle, $data);
fclose($filehandle);
return $data;
}
}
public function dump() {
if($this->is_cached()) {
@unlink($this->cache_id);
}
}
}
?>
class CachedTemplate extends Template
{
public $expireTime;
public $cached_id;
public $cached;
public function __construct($cached_id = null, $expireTime = 600) {
$this->expireTime = $expireTime;
$this->cached_id = 'cache/' . md5($cached_id);
}
public function is_cached() {
if($this->cached) return true;
if(!$this->cached_id) return false;
if(!file_exists($this->cached_id)) return false;
if(!($fmtime = filemtime($this->cached_id))) return false;
if(($fmtime + $this->expireTime) < time()) {
@unlink($this->cache_id);
return false;
}
else {
$this->cached = true;
return true;
}
}
public function fetch_cache($file) {
if($this->is_cached()) {
$filehandle = fopen($this->cached_id, 'r');
$data = fread($filehandle, filesize($this->cached_id));
fclose($filehandle);
return $data;
}
else {
$data = parent::fetch($file);
$filehandle = fopen($this->cached_id, 'w');
fwrite($filehandle, $data);
fclose($filehandle);
return $data;
}
}
public function dump() {
if($this->is_cached()) {
@unlink($this->cache_id);
}
}
}
?>
hiermee kan je templates mee cachen
Gewijzigd op 23/08/2011 20:40:17 door Dennis Sluijk
En wat is überhaupt het voordeel van het genereren van html (zeker als je DOM niet dynamisch is).
PS. De bovenste 2 klassen Template en CachedTemplate zijn voorbeelden die ongeveer het zelfde doen als Smarty.
Toevoeging op 23/08/2011 20:41:11:
SLOTJE graag
Hebben jullie ooit weleens de broncode die smarty genereert bekeken?
Als ik van zo`n soort cms de broncode weergeef is die over de 4000 regels!
Kan iemand mij de beste manier van programmeren vertellen?
Smarty maakt de broncode precies zoals je zelf zegt dat ze moeten worden.
Jacco Brandt op 23/08/2011 22:40:47:
Smarty maakt de broncode precies zoals je zelf zegt dat ze moeten worden.
Jah ik vond ook al zo raar :S
Dus een eigen template-parser vind ik in dat opzicht zeker een meerwaarde. Ik zou er dus zeker mee verder gaan. Maar overdrijf niet...
Code (php)
1
2
3
2
3
$website->addStylesheet('style/style.css');
$website->addJavascript('lib/javascript/jquery.js');
$website->addJavascript('lib/javascript/dynaload.js');
$website->addJavascript('lib/javascript/jquery.js');
$website->addJavascript('lib/javascript/dynaload.js');
Waarom? Gewoon in een header.tpl standaard inzetten. Evt zou je bepaalde stukjes script kunnen uitschakelen door een IF-structuur in je template-parser te bouwen.
{$IF_JS}
laat wat script in
{/$IF_JS}
addIf('if_js', true);
Maar kan de extra waarde op de site wel echt kwaad, de hoofdzakelijke snelheid zit in dit geval toch in het 'downloaden' van de site, iets waarvoor het minifien toch nog wel nut heeft?
Jacco Brandt op 24/08/2011 12:30:13:
Hmm, ik heb het nagekeken, en smarty zorgt inderdaad voor een extra hoeveelheid code. Ik zal deze parser dus toch eventjes gaan doorspreken met mijn collega.
Maar kan de extra waarde op de site wel echt kwaad, de hoofdzakelijke snelheid zit in dit geval toch in het 'downloaden' van de site, iets waarvoor het minifien toch nog wel nut heeft?
Maar kan de extra waarde op de site wel echt kwaad, de hoofdzakelijke snelheid zit in dit geval toch in het 'downloaden' van de site, iets waarvoor het minifien toch nog wel nut heeft?
Jah idd veel zal het niet uitmaken.
Maargoed in combinatie met ZendFramework vindt ik Smarty minder een succes.