logo   Boghandel - Framework - include_path




Første fase i opbygningen af et site bør være etableringen af et Framework. Frameworket omfatter etableringen af en mappestruktur til sitets filer og etableringen af en include_path med config.php.


Mappestruktur


Mappestrukturen for et site til E-handel kan se sådan ud:

Alle programmer uden suffix er PHP-programmer.

Der er p.t. ingen links fra fil-ikonerbe.


'i_p' indekerer de mapper, der i config.php indgår i arrayen "include_path".


        1. edit
        2. edited
        3. edited-failed
        1. add
        2. added
        3. added-failed
        4. edit
        5. edited
        6. edited-failed
        7. list
        8. remove
        1. edit
        2. edited
        3. edited-failed
        4. list
        5. remove
        1. edit
        2. edited
        3. edited-failed
        4. invoice
        5. list
        6. remove
        1. add
        2. added
        3. added-failed
        4. added-no-upload
        5. edit
        6. edited
        7. edited-failed
        8. edited-no-upload
        9. list
        10. remove
      1. business
      2. categories
      3. clients
      4. error
      5. index
      6. logout
      7. orders
      8. product
      1. _footer
      2. _header
    1. Index
      1. div. mapper og filer
    1. Admin
    2. Application
    3. Basket
    4. Business
    5. Catalogue
    6. Core
    7. Country
    8. Dbase
    9. Email
    10. Form
    11. Helper
    12. Login
    13. Order
    14. Paging
    15. PayPal
    16. Session
    17. Upload
    18. Url
    19. User
    20. Validation
    1. Core
    2. Invoice
    1. 1
    1. loadinfo.net
    2. sprite.png
    1. autoload
    2. config
    1. basket
    2. basket-old
    3. jquery-1.4.2.min
      1. div billeder
      2. unavailable
    1. basket
    2. basket_left
    3. basket_qty
    4. basket_remove
    5. basket_small_refresh
    6. basket_view
    7. paypal
    1. activate
    2. basket
    3. cancel
    4. catalogue
    5. catalogue-item
    6. checkout
    7. error
    8. index
    9. invoice
    10. ipn
    11. login
    12. logout
    13. orders
    14. registered
    15. registered-failed
    16. return
    17. summary
    1. _footer
    2. _header
  1. Index


Indholdet i de enkelte mapper kan kort beskrives således:


  • Admin
    Alle programmer til admin (backend)
  • classes
    Alle klasser til frontend og backend
  • css
    Diverse filer relateret til css
  • emails
    Tekster til automatisk sendte emails
  • images
    Billeder til systemdrift - "jeg arbejder"-gif. m.m.
  • inc
    Programmer til brug i Framework
  • js
    Diverse javascript-programmer. Til Ajax etc.
  • media
    Billeder til brug for varestamdata etc.
  • mod
    Programmer til modifikation af sider - ajax-rutiner etc.
  • pages
    Programmer knyttet til alle sider, der skal vises på sitet.
  • template
    Include-filer til opbygning af template for sider vist på sitet.
  • Index
    Sitets startside.


Konceptet bør - med tilpasninger - kunne danne grundlag for mappestrukturen i alle sites. Opdelingen i indhold i de enkelte mapper er væsentligere end deres navne.




include_path


En konsekvens af opdelingen i HTML- og KLASSE-filer er, at der mange gange skal skiftes til en anden mappe / fil. Det giver et stort arbejde med at holde styr på og angive, hvilken mappe den enkelte klasse / program findes i.


Ved at etablere en situationstilpasset include_path kan det arbejde i væsentligt omfang reduceres til, at man kan undgå hver gang at skulle anføre stien, men kan nøjes med filnavn.


include_path er et parameter i php.ini, der default er sat til:


Framework er den samlende betegnelse for det programmel der er nødvendigt for en automatiseret anvendelse af include_path.


Det er nødvendigt at alle programmer, der er knyttet til include_path, er navngivet unikt.


Ved kald til filer, der ikke indgår i include_path skal den nødvendige sti anføres.


Kald til / brug af include_path ude fra de enkelte programmer foretages med et URL-parameter(?page) og det program (uden suffix) der skal findes:

<a href="/?page=orders">Mine ordrer</a>


Opbygningen af include_path består af følgende 5 enheder:


index.php

Programmet er det eneste, der er placeret i projektets rod. Ved overholdelse af stier og navne kan programmet umiddelbart genbruges i andre projekter.

<?php
require_once('inc/autoload.php');
$core = new Core();
$core->run();


autoload.php

Programmet er placeret i mappen "inc". Ved overholdelse af stier og navne kan programmet umiddelbart genbruges i andre projekter.

<?php
require_once('config.php');
function __autoload($class_name) {
   $class = explode("_", $class_name);
   $path = implode("/", $class).".php";
   require_once($path);
}

Udfører config.php og vil derefter automatisk kalde den specifikke klasse. Uanset hvilken klasse der kaldes, vil der automatisk blive foretaget require_once af den fil, der indeholder den pågældende klasse.


Core()

Klassen placeres i klasse-mappen "classes". Ved overholdelse af stier og navne kan programmet umiddelbart genbruges i andre projekter.

<?php
class Core {
   public function run() {
      ob_start();
      require_once(Url::getPage());
      ob_get_flush();
   }
}

Anvender funktionen "getPage" i klassen "URL" til at vise anfordret ny side.


URL()

Funktionen er en blandt adskillige i klassen "URL" i klasse-mappen. Ved overholdelse af stier og navne kan programmet umiddelbart genbruges i andre projekter.

    public static function getPage() {
       $page = self::$_folder.DS.self::cPage().".php";
       $error = self::$_folder.DS."error.php";
       return is_file($page) ? $page : $error;
   }


config.php

config.php anvendes til at opbygge en "include_path" tilpasset boghandelen. En del af programmet kan umiddelbart genbruges i andre projekter.


include_path

Når PHP skal finde et stykke programmel for at udføre det, kigger det (også) i "include_path". Include_path er (forenklet) en brugeretableret array, der i hvert element som "name" indeholder navnet på det stykke programmel, der skal anvendes, og som "value" indeholder stien dertil. Det betyder at brugeren, når den nødvendige include_path er etableret og på plads, i sin kode kan nøjes med at angive navnet på det stykke programmel, der skal anvendes. PHP vil herefter selv finde frem til det.

Med mange programmer og klasser i et OOP-projekt kan det være hensigtsmæssigt at placere dem i et antal grupperende mapper. Koden nedenfor er en af måderne, hvorpå man kan opbygge og ibrugtage en include_path.


Opbygningen af include_path er snævert knyttet til den mappestruktur, der benyttes for sitet og admin. Det er derfor hensigtsmæssigt allerede tidligt i projektforløbet at have et godt overblik over den endelige struktur for mapper til programmer.


<?php
// 1. Opretter $_SESSION
if(!isset($_SESSION)) {
   session_start();
}

// 2. etablerer site-URL. F.eks: "http://www.webdok.dk"
defined("SITE_URL")
   || define("SITE_URL", "http://".$_SERVER['SERVER_NAME']);

// 3. etablerer mappe separator (directory separator) for aktuelt OS
defined("DS")
   || define("DS", DIRECTORY_SEPARATOR);

// 4. etablerer sti til rodmappen
defined("ROOT_PATH")
   || define("ROOT_PATH", realpath(dirname(__FILE__) . DS."..".DS));

// 5. mappenavn pages directory
defined("PAGES_DIR")
   || define("PAGES_DIR", "pages");

// 5. mappenavn classes folder
defined("CLASSES_DIR")
   || define("CLASSES_DIR", "classes");

// 5. mappenavn modules folder
defined("MOD_DIR")
   || define("MOD_DIR", "mod");

// 5. mappenavn inc folder
defined("INC_DIR")
   || define("INC_DIR", "inc");

// 5. mappenavn templates folder
defined("TEMPLATE_DIR")
   || define("TEMPLATE_DIR", "template");

// 6. sti og mappe til emails path
defined("EMAILS_PATH")   
   || define("EMAILS_PATH", ROOT_PATH.DS."emails");

// 7. sti og mappe til catalogue images path
defined("CATALOGUE_PATH")
   || define("CATALOGUE_PATH", ROOT_PATH.DS."media".DS."catalogue");

// 8. add all above directories to the include path
set_include_path(implode(PATH_SEPARATOR, array(

   realpath(ROOT_PATH.DS.CLASSES_DIR),
   realpath(ROOT_PATH.DS.PAGES_DIR),
   realpath(ROOT_PATH.DS.MOD_DIR),
   realpath(ROOT_PATH.DS.INC_DIR),
   realpath(ROOT_PATH.DS.TEMPLATE_DIR),
   get_include_path()
)));


  1. $_SESSION
    Starter $_SESSION. Skal altid være over al anden kode.
  2. SITE_URL
    Etablerer konstant med navnet på sitet.
  3. DS
    Etablerer konstant med mappe-separator tilpasset aktuelt operativ system.
  4. ROOT_PATH
    Konstant med sti til sitets rod-mappe. Med udgangspunkt i __FILE__ gås et niveau baglæns fra 'inc' til den mappe, hvori boghandel-programmerne er placerede.
  5. XXX_DIR
    Konstanter for alle de mapper med site-programmer, der indeholder xx.php programmer. (bortset fra email).
  6. EMAILS_PATH
    Konstant med sti til programmet "1.php".
  7. CATALOGUE_PATH
    Sti til mappe med 1 billede af hver bog.
  8. set_include_path / get_include_path
    set_include_path opbygger include_path for de mapper, der er angivet under "5" ovenfor.get_include_path tilføjer den oprindelige path til den nye.




















x
x