framework maken met classes

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jojo

jojo

13/01/2009 16:36:00
Quote Anchor link
Ik probeer een framework te maken met classes. probleem is dat er echt van alles mis gaat.
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)
PHP script in nieuw venster Selecteer het PHP script
1
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);
    }
?>


in {command}.php zit dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
class controller extends page
{
    function
page_info()
    {

        print_r($this);
        $this->add_css('style_topic_view.css');
    }
}

?>


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
 
PHP hulp

PHP hulp

26/04/2024 19:34:24
 
Jojo

jojo

13/01/2009 16:37:00
Quote Anchor link
Niet Bumpen::
Twee of meer keer achter elkaar in een topic posten heet bumpen. Bumpen is pas na 24 uur toegestaan en kan een reden zijn voor de admins en moderators om een topic te sluiten. Gebruik indien nodig de Afbeelding knop om je tekst aan te passen.

SanThe.
Gewijzigd op 01/01/1970 01:00:00 door jojo
 
Cees St

Cees St

13/01/2009 17:03:00
Quote Anchor link
Wat je hier wil werkt wel, maar waarom het nu niet doet wat je verwacht is niet aanwijsbaar omdat de informatie onvolledig is.
$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.
 
Jojo

jojo

13/01/2009 23:25:00
Quote Anchor link
Ik heb een class, daarin zit de variable $this->command met de waarde forum. forum is dan de class die ik wil extenden in mijn 1e class.

Zo gaat het script te werk:

ik heb een index.php die de eerste class(genaamd page) aanroept;

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
require('lib/page.class.php');
$page = new page;
$page->init();
?>


In de class page voer ik de init uit.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$this
->settings();
$this->url();
$this->controller();
?>


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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
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)
PHP script in nieuw venster Selecteer het PHP script
1
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>';
}

?>


Zo bouw ik dus de <Head> van een pagina op.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
function head()
{

    echo join("\n", $this->render_head);
}

?>


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
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.