Avatar billede findus88 Nybegynder
23. december 2008 - 23:36 Der er 13 kommentarer

OOP funktion load af indhold

Hej allesammen!

Jeg har en side som benytter et meget simpelt "template-system". Denne benytter jeg af den simple årsag at jeg har omkring 20 undersider, og jeg ikke ønsker at skal skrive doctype, metakode, links til css filer, js. med mere på hver top.

Mit problem er så nu, min "header" indeholder omkring 20 forskellige javascript filer.. og der er max 2-3 filer der har relevans for hver underside, således er det spild af loade dem alle.

Men hvordan kan jeg styre det? altså eksempelvis skrive $page->load_js("/js/fil.js");

Jeg er ikke god til OOP og jeg er kun nybegynder til PHP :)

Håber der er nogen der har nogle forslag, det ville varme meget :)))


class Page {
   
    private $pagename;

    public function __construct($pagename = null)    {
        $this->setPageName($pagename);
    }

    public function setPageName($pagename) {
       
        if(is_string($pagename) AND strlen($pagename)>1) {
            $this->pagename = $pagename;
            return true;

        } else {

            $this->pagename = 'Default page title';
            return true;
   
    }
    }

    public function getPageName() {
        return $this->pagename;
    }   

    public function header() {
    //output html starten på en side, indkludes mm.
    }
   
    public function footer() {
    //output al footer html
    }
}
Avatar billede arne_v Ekspert
23. december 2008 - 23:53 #1
En mulighed var at have en base class med en abstrakt metode (eller en metode
som ikke gør noget, hvis PHP ikke har abstrakte metoder - jeg er ikke super
PHP kyndig) og så subclasse den base class med en metode med de relevante
JS filer og bruge sublclassen på dine sider.
Avatar billede findus88 Nybegynder
23. december 2008 - 23:55 #2
Jeg er ked af at sige det, men det gav absolut ingen mening for mig :- ()
Avatar billede findus88 Nybegynder
23. december 2008 - 23:56 #3
Hvad jeg end vil loade, er det vil noget jeg skal bestemme før jeg printer min $page->header(), eftersom det er den der printer det
Avatar billede arne_v Ekspert
23. december 2008 - 23:57 #4
Ja.

Din header funktion kalder bare den metode som vi snakker om.

Men måske skal jeg bixe et lille eksempel.
Avatar billede findus88 Nybegynder
24. december 2008 - 00:00 #5
Det ville være dejligt :)
Avatar billede arne_v Ekspert
24. december 2008 - 00:02 #6
Stay tuned.

Det tager nok en times tid, fordi jeg skal også have noget mad.  :-)
Avatar billede findus88 Nybegynder
24. december 2008 - 00:08 #7
Det er helt iorden.. jeg mindes også jeg har noget svensk pølseret i køleren, som der hurtigt kan varmes ;- )
Avatar billede arne_v Ekspert
24. december 2008 - 00:27 #8
Her er et super simpelt eksempel (som ikke gør noget brugbart, men kun illusterer teknikken).

common.php
----------

<?php
abstract class AnyPage {
    private $title;
    public function __construct($title) {
        $this->$title = $title;
    }
    public function write_header() {
        echo "Some non-JS stuff<br>";
        $this->write_js();
    }
    public function write_trailer() {
        echo "Bla bla<br>";
    }
    protected abstract function write_js();
}
?>

page1.php
---------

<?php
require 'common.php';
class Page1 extends AnyPage {
    protected function write_js() {
        echo "This is JS for page 1<br>";
    }
}
$page = new Page1("This is page 1");
$page->write_header();
?>
<?php
$page->write_trailer();
?>
Avatar billede arne_v Ekspert
24. december 2008 - 00:29 #9
og en page2.php:

<?php
require 'common.php';
class Page1 extends AnyPage {
    protected function write_js() {
        echo "This is JS for page 2<br>";
    }
}
$page = new Page1("This is page 2");
$page->write_header();
?>
Some other text<br>
<?php
$page->write_trailer();
?>
Avatar billede findus88 Nybegynder
24. december 2008 - 00:36 #10
Puha. Jeg er stadig ikke sikker på at jeg forstår teknikken, kan man ikke bare skrive noget simpelt som $page-load_js("/sti/fil.js"); - og så kommer der automatisk ind i min header?
Avatar billede arne_v Ekspert
24. december 2008 - 00:56 #11
Du kunne angive et eller andet i argumenterne til enten constructor eller header.

Men så er vil ude af OOP og ovre i procedural programmering igen.
Avatar billede arne_v Ekspert
24. december 2008 - 00:57 #12
Ideen i abstract er at du lader base klassen kalde en funktion som du først
implementerer i en sub klasse.
Avatar billede arne_v Ekspert
19. januar 2009 - 02:07 #13
findus ?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester