CMS rendszer készítése PHP nyelven 1.

| | , , ,

2 és fél éves bejegyzésmentes időszak után egy hosszabb lélegzetvételű cikksorozatba kezdenék, ezzel pótolva az elmúlt időszakot (és talán beindítva az oldalt). A sorozat első tagjaként felvázolnám, hogy nagyjából mi is lenne a célom ezzel a cikksorozattal, valamint szót ejtek a CMS fejlesztésének legelső lépéseiről (aki nem tudná, hogy egy CMS mire való, annak javaslom a Wikipedia ide vonatkozó szócikkét).

Mint minden nagyobb lélegzetvételű rendszer, program készítése előtt, egy CMS készítésekor is szükség van specifikációra. A specifikáció fejlesztési modelltől függően kezdetben lehet bővebb, vagy szűkebb szavú. Én nem vagyok híve a "sokat tervezek, majd egyben lekódolok mindent" elvnek, így a CMS tervezésekor a specifikáció csak egy képlékeny vázlat, ami a fejlesztés során többször változik. Ennek megfelelően a cikksorozat egy folyamatosan bővülő CMS fejlesztését mutatja be a kezdeti lépésektől a "kulcsra kész" állapotig, beleértve a programozást, tervezést, design megvalósítást.

Első lépés: A specifikálás

Mivel hosszútávon a célom egy komplex, jól bővíthető, konfigurálható és nem utolsó sorban jól skálázható WCMS készítése, így kezdeti specifikációnak indítsunk az alábbiakkal:

  • moduláris felépítés
  • minden állítható legyen admin felületről, a kódhoz csak fejlesztés során kelljen kézzel hozzányúlni
  • skálázható legyen a CMS: a fontosabb részek (adatbázis, megjelenítés) külön rétegekben helyezkedjenek el, a rétegek egymás között egy jól definiált API-n keresztül kommunikáljanak
  • bővíthetőség: rendelkezzen egy jól definiált plugin API-val

Mint látható, maga a specifikáció elég tömör, viszont ennyi bőven elég egy XP típusú programozáshoz. Mivel a kezdeti feltételek megvannak, így kezdődhet a specifikáció alapján a tervezés.

Második lépés: A tervezés

A kezdeti tervek a megvalósításra hasonlóan egyszerűek, mint a specifikáció:

  • egy index.php fájl lesz az, ami kiszolgálja az oldalt
  • egy .MAINTENANCE fájllal a gyökérben jelezzük, hogy karbantartás üzemmódban vagyunk
  • a karbantartási üzemmódhoz hasonlóan egy .DEBUG fájllal jelezzük, hogy fejlesztés üzemmódban vagyunk
  • a karbantartás jelző maintenance.html elkészítése
  • alap könyvtárstruktúra elkészítése: themes; uploads; logs; js; functions -> admin, ajax, database, request, security; checksums; configs

Harmadik fázis: Az első fájlok létrehozása

A fejlesztéshez létrehozzuk a tervezés során meghatározott könyvtárstruktúrát az index.php, maintenance.html, .DEBUG, .MAINTENANCE fájlokkal együtt az alábbiak szerint:

/
│
├─themes
│
├─uploads
│
├─logs
│
├─js
│
├─functions
│  │
│  ├─admin
│  │
│  ├─ajax
│  │
│  ├─database
│  │
│  ├─request
│  │
│  └─security
│
├─checksums
│
├─configs
│
├─.DEBUG
│
├─.MAINTENANCE
│
├─maintenance.html
│
└─index.php

A .DEBUG, illetve .MAINTENANCE fájlok egyszerű szöveges fájlok, tartalmuk nincs, ennek következtében mindegy hogy milyen karakterkódolásúak, mivel csak a létezőségüket fogjuk vizsgálni.

A maintenance.html tartalma jelenleg az alábbi egyszerű html kód lesz utf-8-as kódolásban, BOM nélkül:

html5<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  </head>
  <body>
    <p>Site is under maintenance...</p>
  </body>
</html>

A későbbiekben ezt majd még szépítjük, viszont jelenleg a funkcionalitás a fő szempont, aminek ez az alap HTML5-ös fájl meg is felel.

Következzen az index.php, ami az egész CMS lelke lesz, az összes html kérést ez dolgozza fel, éppen ezért alkalmas lesz a karbantartás és fejlesztés módok kezelésére.

A tartalma pedig az alábbi lesz, amit később részletezek:

php<?php
if(file_exists(".MAINTENANCE")){
  include("maintenance.html");
  exit(0);
}

if(file_exists('.DEBUG')){
  error_reporting(E_ALL | E_STRICT);
  ini_set('display_errors','On');
}
else{
  error_reporting(0);
  ini_set('display_errors','Off');
}
?>

A fenti kód működése nagyon egyszerű. Először megvizsgáljuk a file_exists függvénnyel, hogy létezik-e a .MAINTENANCE fájl. Ha létezik, akkor az include segítségével betöltjük a maintenance.html fájlunk tartalmát és az exit(0)-val megszakítjuk a kódunk futását, így gyakorlatilag kiírattuk a maintenance.html tartalmát.

Következő lépésben megnézzük, hogy a .DEBUG fájlunk létezik-e. Ha létezik, akkor bekapcsoljuk a php hibakijelzését, ha nem, akkor minden hibajelzést kikapcsolunk.

Ezzel végeztünk is az első résszel, a következő részben tovább finomítjuk a kódot, specifikációt kibővítjük és megoldjuk azt is, hogy a site administrátora karbantartás üzemmódban is elérjen minden funkciót.

A cikkben található könyvtárstruktúra és vonatkozó fájlok megtalálhatók a cms-1.zip fájlban

A cikksorozat további részei

CMS rendszer készítése PHP nyelven 2.

CMS specifikáció

Folyamatosan bővülő CMS specifikáció

0 hozzászólás

Még nem érkezett hozzászólás...

Hozzászólás küldéshez jelentkezz be!

Download Vivaldi Today!

Hasznos oldalak, linkek

Warning: DOMDocument::load(): php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution in /mnt/www/sites/fefy.info/tld/content/content_functions.php on line 184 Warning: DOMDocument::load(http://feeds.feedburner.com/tutorialhu): failed to open stream: php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution in /mnt/www/sites/fefy.info/tld/content/content_functions.php on line 184 Warning: DOMDocument::load(): I/O warning : failed to load external entity "http://feeds.feedburner.com/tutorialhu" in /mnt/www/sites/fefy.info/tld/content/content_functions.php on line 184 Fatal error: Call to a member function getElementsByTagName() on a non-object in /mnt/www/sites/fefy.info/tld/content/content_functions.php on line 195