framework maken met classes
Mijn vraag is daarom of mijn denk wijze klopt.
Ik zal zo kort mogelijk laten zien wat ik van plan ben. Als het te ingewikkeld is kan je dat aangeven dan leg ik het beter uit :-).
Het systeem gebruikt routing urls dus command/parameter1/parameter2/
Met deze code open ik het bet bestand waar de functies inzitten voor het command dat opgevraagt word.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
function controller()
{
if($this->command)
{
require('controllers/'.$this->command.'.php');
$controller = new controller;
$controller->page_info();
}
}
function add_css($file, $command = 'dsd')
{
$this->render_head[] = '<link rel="stylesheet" href="'.$this->settings['basepath'] . $command . $file .'" />';
}
function head()
{
//echo join("\n", $this->render_head);
}
?>
function controller()
{
if($this->command)
{
require('controllers/'.$this->command.'.php');
$controller = new controller;
$controller->page_info();
}
}
function add_css($file, $command = 'dsd')
{
$this->render_head[] = '<link rel="stylesheet" href="'.$this->settings['basepath'] . $command . $file .'" />';
}
function head()
{
//echo join("\n", $this->render_head);
}
?>
in {command}.php zit dit:
Code (php)
Mijn command is bijvoorbeeld topic_view
In dat script daat deze code: $this->add_css('style_topic_view.css');
Zo moe ik dus voor verschillende commands verschillende <HEAD> kunnen opbouwen.
Het probleem is alleen dat dit niet werkt, ik kan zelf niet zo heel goed de fout opsporen, maar ik heb een vermoeden dat mijn denkwijze niet klopt.
Ik wou bijv van $command = 'dsd' $this->command hebben.
maar dan krijg ik php error heel rar
Iemand misschien enig idee?
Alvast bedankt.
Sorry voor de bump
Aanvullend bericht:
Owja, als ik in mijn 2de class (met extend) print_r($this) doe zijn alle gegevens verloren van mijn vorige class :-(
Gewijzigd op 01/01/1970 01:00:00 door Jojo
Niet Bumpen::
Gewijzigd op 01/01/1970 01:00:00 door jojo
$this->settings is waarschijnlijk in class "page" gedefinieerd
Ik wou bijv van $command = 'dsd' $this->command hebben.
is dus wel mogelijk, hoewel hier in ieder geval een punt vergeten is.
Dus of volledige info, anders wordt het niet eenvoudig te antwoorden.
Wel weet ik dat sommige PHP5 implementatie slecht met class extends omgaan.
Zo gaat het script te werk:
ik heb een index.php die de eerste class(genaamd page) aanroept;
In de class page voer ik de init uit.
Die voert weer deze funties uit.
1 (settings) defineert settings uit extent bestand, niet zo belangrijk
2 (url) parst de url, in mijn voorbeeld dus http://host.nl/forum
3 (controller) hier gaat het dus om. Deze functie opent de 2de class.
In mijn voorbeeld word forum geopend. Want dat is de funtionaliteit die ik wil gaan gebruiken op de pagina die aangevraagd word. Je moet het zien als ?page=forum
Zo ziet de class van forum eruit:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
class controller extends page
{
function page_info()
{
$this->add_js('blaat.js');
}
}
?>
class controller extends page
{
function page_info()
{
$this->add_js('blaat.js');
}
}
?>
Na dat deze classe is opgehaalt word meteen de functie page_info uitgevoert.
Code ervan:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
require('controllers/'.$this->command.'.php');
$controller = new controller;
$controller->page_info();
?>
require('controllers/'.$this->command.'.php');
$controller = new controller;
$controller->page_info();
?>
zoals je ziet voert die weer add_js() uit.
Deze functie is gefineerd in het 1e class (page).
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
function add_js($file, $command = 'hoi')
{
$this->render_head[] = '<script type="text/javascript" src="'.$this->settings['basepath'] . $command . $file .'"></script>';
}
?>
function add_js($file, $command = 'hoi')
{
$this->render_head[] = '<script type="text/javascript" src="'.$this->settings['basepath'] . $command . $file .'"></script>';
}
?>
Zo bouw ik dus de <Head> van een pagina op.
En nu hoef ik in mijn index.php alleen de functie head aan te roepen.
Wat nu misgaat is bijvoorbeeld. dat de $this->render_head niet meer bestaat in de head() functie
Deze waarde word gezet in de add_js(); functie
Het kan natuurlijk ook zijn dat mijn denkwijze niet klopt ;-)
Ik hoop dat ik het duidelijk heb uitgelegd. Wat ik probeer te maken is een mooie opbouw van een website (framework). Iemand misschien tips?
Bedankt.
Gewijzigd op 01/01/1970 01:00:00 door jojo