Gå til innhold

Dine PHP koder


Anbefalte innlegg

Videoannonse
Annonse
  • 2 uker senere...

Har laget en tråd med info og diskutering angående hvordan man burde eller kan sette opp en side basert på inkludering og klassebruk (objektorientert). Hvis du føler for å diskutere koden eller hva som er best osv., vennligst ta det i tråden. Hadde vært flott med andres synspunkter/tilbakemeldinger på oppsettet, særlig siste posten med index-fil.

 

Her er en kode for oppsett av side med klassebruk og inkludering (www.example.com?p=foo). Med få modifikasjoner burde du klare å ta denne i bruk uten store problemer. Igjen, ved spørsmål bruk tråden min.

 

index.php

<?php
   require("classes/index.php");

   $index = new Index();

   // inkluderer klasser, case sensitive
   $classes = array('DB_Connect', 'IPLog', 'Cart', 'Project'); 

   // skriver inn hvilke ?f= som er godtatt (dvs. som ikke gir 404)
   $fAllow = array();

   // skriver inn hvilke ?p= som er godtatt
   $pAllow = array('foo', 'bar'); 

   $session = false; // lagt opp til bruk av sessions for seinere bruk, se klasse

   // ender til slutt opp i <title><?= $this->title; ?></title>
   $title = "A cat is fine too"; 
   $titleArray = array('foo' => "Foo the foo",
                       'bar' => "Bar the bar"); // brukes for å endre tittel

   // sender med all nødvendig info til klassen index, etter det her er siden ferdig    
   $index->init($classes, $fAllow, $pAllow, $session, $title, $titleArray);
?>

 

classes/index.php

<?php 
   class Index
   {
       // lister opp interne variabler, brukes på tvers av funksjoner,
       // og må derfor bruke $this->foo
       public $title;
       private $titleArray;
       private $db_connect, $iplog;

       public function init($classes, $fAllow, $pAllow, $session, 
                                         $title, $titleArray)
       {
           error_reporting(E_ALL ^ E_NOTICE); // error-konfigurering
           header("Content-Type: text/html; charset=UTF-8"); // force UTF8 

           $this->classes($classes); // inkluderer og oppretter klassene

           // legger tittel og titleArray i $this-> pga. brukes i flere funksjoner
           $this->title = $title;
           $this->titleArray = $titleArray;

           $pAllow[] = '404'; // legger til 404 som standard

           if($session) // hvis man vil bruke sessions
           {
               session_start();
           }

           // eksempel på hvor man kan plassere ip-logging
           $this->iplog->logIP();

           $this->page($fAllow, $pAllow); // går videre til å faktisk opprette siden
       }

       private function classes($classes)
       {
           foreach($classes as $class)
           {
               // merk strtolower pga. den er sendt inn med casesensitive
               // !!! mangler en sjekk på om fil eksisterer, har ikke laget enda !!!
               require("classes/" . strtolower($class) . ".php");
           }

           foreach($classes as $class)
           {
               // ikke optimal løsning enda, krever manuell innskriving 
               // av klasser i toppen av filen, tanken er at det skal være 
               // mer eller mindre kun avhengig av parameter (fremtidsrettet!)
               $tempClass = strtolower($class);

               // $this->$tempClass vil gi f. eks $this->iplog
               $this->$tempClass = new $class();
           }
       }

       private function page($fAllow, $pAllow)
       {
           // henter ?f= og ?p=
           $f = $_GET['f'];
           $p = $_GET['p'];

           // home.php er forsideteksten, 
           // kan derfor like godt redirectes til DocumentRoot
           if($p == 'home')
           {
               header("Location: /");
           }
           else if(!empty($f)) // test for fil i mappe
           {
               if(in_array($f, $fAllow)) // mappe godtatt? hvis ikke 404
               {
                   if(!empty($p))
                   {
                       if(in_array($p, $pAllow)) // side er godtatt, hvis ikke 404
                       {
                           if(file_exists($f."/".$p.".php")) // finnes filen?
                           {
                               // manipulerer tittel etter hva som er hentet
                               $this->title($p, $f);

                               // henter fil $p i mappe $f
                               $require = $f."/".$p;
                           }
                           else
                           {
                               $require = '404';
                           }
                       }
                       else
                       {
                           $require = '404';
                       }
                   }
                   else
                   {
                       $require = "home";
                   }
               }
               else
               {
                   $require = '404';
               }
           }
           else if(!empty($p)) // test for kun fil
           {
               if(in_array($p, $pAllow))
               {
                   if(file_exists($p . ".php"))
                   {
                       $this->title($p);
                       $require = $p;
                   }
               }
               else
               {
                   $require = '404';
               }
           }
           else // ingenting satt, skriver forside
           {
               $require = "home";
           }

           // <html>, <head>, start på <body>, nav/header
           require("includes/head.php"); 

           // sidecontent
           require($require . ".php"); 

           // footer, slutt på <body> og <html>
           require("includes/footer.php"); 
       }

       private function title($page)
       {
           // isset() er faktisk raskere enn array_key_exists()
           // gir FALSE hvis array['foo'] == NULL
           // ikke et problem for oss, da vi selv har laget arrayen
           if(isset($this->titleArray[$page]))
           {
               $this->appendTitle($this->titleArray[$page]);
           }
       }

       private function appendTitle($prestring)
       {
           if(!empty($prestring))
           {
               // legger til noe á 'Foo the foo' foran hovedtittel
               $this->title = $prestring . " - " . $this->title;
           }
       }
   }
?>

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...