Login

Login: Password:

Languages

Nyelvválasztás jön majd ide

Menu

Articles
Gallery
Home

Articles

Directory Driven Solution (DDS)

Directory Driven Solution (DDS) for PHP

avagy egy

hierarchikus szervezésű programmegoldás PHP –re

 

 

Pár évvel ezelőtt kezdtem PHP-val foglalkozni, és mint mindenki, magam is a Net-en bogarásztam állandóan, tanulmányozandó, ki, hogyan csinálja. Próbálgattam a megoldásokat, keresve a leginkább megfelelőt, így akadtam a PhpClasses-on Colin Sandy Pittendrigh: RoboPage megoldására, amely azonnal megfogott. A RoboPage úgy működik, hogy adva van a root könyvtár, ahol ott van minden fájl, ami részt vesz a programban. Az index fájl beilleszti (include) az osztályt, és a létrehozott RoboPage objektum megvizsgálja a könyvtárban lévő fájlokat, majd a fájlnevekből elkészíti a program menüjét. Ennyi az egész. Lenyűgözött, hogy milyen egyszerű, és mégis működik. Tetszett, hogy bemásoltam a könyvtárba egy jpeg fájlt, és a frissítés után a kép címe már benne is volt a menűben, azonnal beépült a kép a programba. A Robo Page ma is elérhető a PhpClasses-on, és egy egyszerű rendszerre figyelembe vehető alternatíva.

Miután, rövidesen rájöttem, többre van szükségem, kapóra jött ismét egy megoldás, szintén a PhpClasses-on. Ez volt Ilya Nemihin: DeepDir osztálya, amely a megadott könyvtár alatti teljes könyvtárszerkezetet kezeli tömb formában. Így aztán a szereplők lassan kezdtek összejönni, és néhány kisebb próbálkozás után rögtön látszott, egy használható megoldás körvonalazódik.

A rendszer bemutatására a legjobb, ha megnézünk egy egyszerű portál programot, amely a DDS-t alkalmazza. Ime a könyvtárstruktúra:

 

_css                 // stílus lapok

dds.css

_init                  // az inicializációs állományok

config.php

class.deepdir.php

            box.php

            index.php

_include                      // egyéb fájlok

            bottom.php

            top.php

_image             // képfájlok

            logo.jpg

left                   // a portál bal oldala

            menu.php

            language.php

            index.php

middle              // a portál középső hasábja

articles.php       

            gallery.php

home.php

index.php

right                 // a portál jobb oldali hasábja

            poll.php

            login.php

            index.php

index.php            // a fő index fájl

 

Rövid útmutatás szükséges. A kiterjesztés nélküliség könyvtárat jelöl, a behúzás pedig a hierarchia szintet. Az aláhúzással kezdődő könyvtárak a rendszerfájloké (a Total Commander-ben így fölül látszódnak), a "left", "middle" és "right" már a működtető szerkezet.

 

A fő index fájlban egy html tábla van, amely a megjelenő oldalt definiálja:

 

<?php include ("_init/index.php"); ?>

<html>

<head>

<title><?php echo $title ?></title>

<link rel="stylesheet" href="_css/dds.css">

</head>

 

<body>

            <?php include ("_include/top.php"); ?>

            <table><tr>

            <td width="139" valign="top"><?php include ("left/index.php");?></td>

            <td width="100%"  valign="top"><?php include ("middle/index.php")?></td>

            <td width="139" valign="top"><?php include ("right/index.php")?></td>

            </tr></table>

            <?php include ("_include/bottom.php"); ?>

</body>

</html>

 

Nézzük most meg, mit is csinál az első sorban beillesztett "init/index.php":

 

<?php

include "_init/class.deepdir.php";

$dir = new DeepDir();

$dir->setDir( '_init' );

$dir->load();

foreach( $dir->files as $n => $pathToFile ){

if ((strpos($pathToFile, 'index') === false)and

     (strpos($pathToFile, 'deep') === false)){

include ($pathToFile);

}

}

?>

 

Most alkalmaztuk először a DeepDir-t, és ez mindjárt egy valódi DDS. Miről is van szó?

A program számára szükséges "include" fájlok beillesztése történik meg központilag és dinamikusan. Tehát, ha szükséges, hogy valami be legyen illesztve, ezt most már központilag lehet intézni. Csak annyit kell tennünk, hogy a fájlt belökjük az "_init" könyvtárba, és kész. A program minden végrehajtáskor automatikusan behúzza az összes fájlt ebből a könyvtárból. Lehet, ez így első hallásra soknak tűnik, és talán nem is annyira egyértelmű, de menjünk csak tovább. A végére remélhetően összeáll a kép.

 

A fő index fájlt tovább böngészve, jön egy include a "top" megjelentetéséhez. Ez egy egyszerű tábla, amiben egy fő cím és egy oldal logó van. Ebben semmi érdekes. A "left/index.php" már annál inkább:

 

<?php

$dir = new DeepDir();

$dir->setDir( 'left' );

$dir->load();

foreach( $dir->files as $n => $pathToFile ){

if (strpos($pathToFile, 'index') === false){

include ($pathToFile);

}

}

?>

 

Ez már megint egy szép DDS. Talán sokaknak magától értetődő, miről van szó, de lehet, kapóra jön néhányunknak egy kis magyarázat, mi is történik a foreach-ben. Tehát, a $dir objektum beolvassa a "left" könyvtár teljes tartalmát, majd meg kell vizsgálni, az adott fájlnév tartalmazza-e az "index" kifejezést. Amennyiben nem index fájlról van szó, beilleszti (include).

Ez a "left" könyvtárnál a következőt jelenti.

-         beilleszti a "menu.php"-t, amely előállítja a menüt és megjelenteti,

-         beilleszti a "language.php"-t, amely egy nyelvválasztó panelt jelentet meg.

 

Maradjunk egy kicsit itt a bal oldalon. Mint az várható is volt, a "menu.php" is egy DDS:

 

<?php

$menu = '';

$dir = new DeepDir();

$dir->setDir( 'middle' );

$dir->load();

foreach( $dir->files as $n => $pathToFile ){

if (strpos($pathToFile, 'index') === false){

$fn = basename($pathToFile, ".php");

$menu .= ' <a href="index.php?action='.$fn.'">'.$fn.'</a><br>';

}

}

box('Menu', $menu, "100%");

?>

 

Itt a "middle" könyvtár PHP fájljai vannak kiválogatva és a fájlnevekből egy-egy link képezve, amelyet egy dobozban jelenítünk meg. Értelemszerűen az index fájlt ebből a fölsorolásból megint kizártuk.

 

Jelen demo programunkban a "language.php" csak egy szöveget jelentet meg, semmilyen valós funkciója nincsen.

 

Tovább tanulmányozva a könyvtárainkat, a "middle" a következő, amely szintén nem túl érdekes, hiszen az itt lévő index fájl csak kapcsolgat a megjeleníthető fájlok között.

 

A jobb oldali hasáb működése ugyanaz, mint a bal oldali. Olyannyira, hogy a különböző funkcionalitásokat tartalmazó PHP modulok szabadon cserélgethetők egymás között. Így lehet megváltoztatni, hogy az egyes modulok melyik oldalon jelenjenek meg.

 

Összegezve a DDS használatával kapcsolatos tapasztalatokat, kedvező, hogy nagyon gyorsan összeállítható egy teljes funkcionalitású webes program a segítségével. Bármilyen bővítés egyszerűen megvalósítható, az időnként szükséges változtatások gyorsan végrehajthatók. Hierarchikus menürendszer beépítésével tetszőleges bonyolultságú program könnyedén, jól áttekinthetően kezelhető.

 

Hátránya, hogy a programrendszer adminisztrációjára nincs felhasználóbarát megoldás. Minden módosítás fájlrendszer változtatással jár, és az FTP műveletek gondosságot és egy bizonyos szintű szakértelmet is igényelnek.

 

Hasznos linkek:

·        demó program tesztelhető:  www.sitkei.com/DDS

·        demó program letölthető:  www.sitkei.com/DDS/demo.zip

·        egy éles megvalósítás: www.drawface.hu

·        érdeklődők, kritikai megjegyzések számára: sitkei.pal@itport.hu

 

 

 

Sitkei Pál

2005. szeptember 30.

 

 

Poll

Nem nagyon használható
Érdekes, de nem túl hatékony
Tetszik, én is alkalmazni fogom
Nagyon jó, pont ezt kerestem