kerepesi lászló - szakdolgozat

38
SZAKDOLGOZAT Kerepesi László NYÍREGYHÁZA 2009

Upload: kero85

Post on 11-Jun-2015

1.581 views

Category:

Documents


4 download

DESCRIPTION

Szerző: Kerepesi LászlóCím: Saját fejlesztésű cms létrehozásaNyíregyházi Főiskola 2009

TRANSCRIPT

Page 1: Kerepesi László - Szakdolgozat

SZAKDOLGOZAT

Kerepesi László

NYÍREGYHÁZA 2009

Page 2: Kerepesi László - Szakdolgozat

Saját fejlesztésű CMS létrehozása Kerepesi László

2

NYÍREGYHÁZI FŐISKOLA TERMÉSZETTUDOMÁNYI ÉS INFORMATIKAI KAR

SAJÁT FEJLESZTÉSŰ CMS LÉTREHOZÁSA

Témavezető: Készítette: Falucskai János Kerepesi László főiskolai docens programtervező informatikus alapszakos (BA/BSc) hallgató

Nyíregyháza, 2009.

Page 3: Kerepesi László - Szakdolgozat

Saját fejlesztésű CMS létrehozása Kerepesi László

3

Tartalomjegyzék

1. Bevezetés ...............................................................................................................................4

1.1 A tartalomkezelők főbb jellemzői .......................................................................................5

1.2 Drupal ................................................................................................................................7

1.3 Joomla! ..............................................................................................................................8

1.4 WordPress ..........................................................................................................................8

2. Tervezés ............................................................................................................................... 12

3. Megvalósítás ........................................................................................................................ 14

3.1 Index.php ......................................................................................................................... 15

3.2 Regisztrálás ...................................................................................................................... 17

3.3 Login ................................................................................................................................ 20

3.4 Hírek ................................................................................................................................ 22

3.5 Galéria ............................................................................................................................. 25

3.6 Fórum .............................................................................................................................. 30

3.7 Adminisztráció.................................................................................................................. 35

4. Összegzés ............................................................................................................................. 37

Irodalomjegyzék .......................................................................................................................... 38

Page 4: Kerepesi László - Szakdolgozat

Saját fejlesztésű CMS létrehozása Kerepesi László

4

1. Bevezetés

Napjainkban az internet rengeteg információt nyújt a használóik számára. A televízióban a

legtöbb reklám végén láthatunk egy olyan sort, mely www-vel kezdődik, s melyből

megtudhatjuk, hogy az adott termékről milyen webcímen tudhatunk meg többet. Sőt, már a

rádióban hallhatóak között is egyre több olyat fedezhetünk fel, amelyben webcímre

hivatkoznak, ha további információkra lenne szükségünk. Viszont ezek az oldalak, ahogy

az internet oldalainak legtöbbjére igaz, igen nehéz munka gyümölcsei. Web programozók

hada szerkeszti, frissíti szerte a világon a portálokat a nap 24 órájában, hiszen egy portál

sikere és hatékonysága nagyban függ attól, hogy mennyire naprakész az adott oldal.

Ahogy olvasói vagyunk az internet információinak, néhány akár nem hozzáértő emberben

is felmerülhet, hogy vajon tudna-e ő is ilyen oldalakat tervezni, melyen megoszthatja

kollégáival, barátaival a közös kirándulásokon készített fotókat, élményeit leírhatja egy

blog-ban, vagy netán egy adott témában fórumot is indíthat, hogy megvitassák a főiskolai

vizsgák előtti utolsó tippeket.

Nem csak magánszemélyek, hanem kis-, és nagyvállalatok számára is igen hasznos, sőt

jövedelmező, ha van saját honlapjuk, hisz nemcsak saját maguk szolgáltatásait tudják

reklámozni, hanem akár egy web-shop segítségével egyből meg is tudják a vásárolni a

termékeiket a látogatóik.

Sajnos igazán szép, mutatós weblapokat nem könnyű megfelelő felkészültség nélkül

szerkeszteni, és ezek hátterében (forrásában) megtekinthető HTML nyelv a mindennapi

felhasználó számára ijesztően hathat. Igaz, vannak HTML szerkesztő programok, melyek

megkönnyítik az egyes űrlapelemek elhelyezését, képek beszúrását, a háttér színezését,

linkek elhelyezését, viszont komolyabb oldalakat, mint például egy webshop, már elég

nehéz velük megszerkeszteni, valamint a karbantartásukra is viszonylag sok időt kell

szánni.

Mi lenne, ha lenne egy olyan eszköz, amivel könnyen, egyszerűen, arra figyelve, hogy mit

szeretnék megjeleníteni, - nem arra, hogy hogyan, - megalkothatnánk a kívánt weblapot,

mindenféle mély szakmai tudás elsajátítása nélkül? Már egyből a webes felületen fel is

tölthetnénk azt, a számunkra fontos hírekkel, képekkel, tartalmakkal, mindenféle nehéz

programozási ismeret nélkül, csupán „kattintgatva” az oldalon.

Page 5: Kerepesi László - Szakdolgozat

Saját fejlesztésű CMS létrehozása Kerepesi László

5

A fejlesztők is gondoltak erre az igényre, így az évek során kitaláltak egy rendszert, mely a

„mezei” felhasználók fentebb említett igényeit kielégítik, sőt túl is mutat rajtuk. Ez az

eszköz a tartalomkezelő rendszer, röviden CMS (Content Management System).

A WIKIPEDIA szerint: „A tartalomkezelő rendszerek (angolul Content Management

System, CMS) olyan szoftverrendszer, amely nem strukturált információk, mint például az

internetes portálok akár több felhasználó általi elkészítését, kezelését, és tárolását segíti.

Továbbá gondoskodik a tartalmak strukturált megjelenítéséről, statisztikák készítéséről,

kiegészítő funkciók integrálásáról.” „Olyan, általában web alapú program, amely lehetővé

teszi változatos adatok általában hypertext formátumban való dinamikus publikálását

programozói tudás nélkül. A szó egyébként mindenféle rendszerezett, decentralizált

publikálási feladatot ellátó programrendszerre vonatkozik. Ilyen értelemben véve tehát egy

vállalati /egyetemi/ bármilyen közösségi használatú számítógépes felület.”[Wikipedia®,

2009. január 8.]

A szakdolgozat célja a tartalomkezelő rendszerek általános bemutatása, valamint egy saját

fejlesztésű CMS részletes működésének prezentálása.

1.1 A tartalomkezelők főbb jellemzői

A tartalomkezelő rendszer működése a következőben leírtak alapján foglalható össze: a

rendszer felhasználói a frissíteni kívánt adatokat (szövegeket, képeket, egyéb fájlokat) egy

adminisztrációs felületen feltöltik a CMS rendszer adatbázisába. Ezek után a rendszer

frissíti az oldalt és beteszi a feltöltött tartalmat az előre kiválasztott sablonba, így a

következő látogatásnál már az új tartalmat kaphatja meg, aki felkeresi a honlapot.

„Tartalomnak (content) nevezzük azon információtöredékek halmazát, amelyet összerakva

összefüggő, felismerhető „dolgot” kapunk. Ilyen például egy újságcikk, mely a címből,

rövid összefoglalóból, a cikk törzséből és szerzőjéből állhat. Emellett tartalmazhat például

képeket, referenciákat, kitérőket, hivatkozásokat, amelyek hozzáadnak valamit, gazdagítják

azt, több értéket nyújtva az olvasónak.” [http://cms.whysoft.hu/mi_a_cms.html]

A következőkben pontokba foglalva szeretném a CMS rendszerek főbb jellemzőit

kiemelni:

Page 6: Kerepesi László - Szakdolgozat

Saját fejlesztésű CMS létrehozása Kerepesi László

6

• Dinamizmus: A tartalmat, valamint annak megjelenését megfelelő jogosultság

esetén bármikor, bárhonnan meg lehet változtatni. Akár naponta lehet az adatokat

frissíteni, mint például egy blog esetén.

• Egyszerűség: tehát a tartalomkezelő rendszerek jellemzője az egyszerű, laikusok

által is könnyen elsajátítható működtetés. A cél, hogy ne csak a szakavatottak

legyenek képesek mutatós és összetett weboldalak elkészítésére

• Platform függetlenség: vagyis nem számít, hogy milyen operációs rendszer

fut a szerveren, valamint milyen böngészővel tekintjük meg a tartalmat. Lehet ez

akár valamilyen Linux disztribúció, Windows (98/NT/2000/XP) verziók egyike,

vagy akár egyéb más rendszer. Természetesen mindegyik platformon

elengedhetetlen a megfelelő PHP értelmező és adatbázis-kezelő.

• Multiuser rendszerek: vagyis egyszerre többen böngészhetk,szerkeszthetik a

tartalmakat, telepíthetnek kiegészítőket, illetve további a rendszer működését segítő

beállításokat végezhetnek. A kiegészítő modulok segítségével az azonos CMS

alapokon nyugvó honlapok is teljes mértékben testre szabhatók.

A CMS – mint általában a szoftvervilág – két nagy csoportra bomlik: nyílt forráskódú (free

source), illetve zárt forráskódú (proprietary) megoldásokra.

A nyílt forráskódot szokták GPL licenc-nek is nevezni: ez azt tartalmazza, hogy a szoftver

szabadon terjeszthető (akár pénzért is), és szabadon módosítható, de a terjesztései és a

módosítások kötelezően szintén GPL licenc alatt kell, hogy megjelenjenek, így biztosítva,

hogy a szabad tartalmakból készült bármilyen származékos szoftver is szabad maradjon.

Ilyen szoftverek például: Drupal, Joomla, vagy a WordPress.

A CMS szoftverek között, mind az alap funkciók, mind pedig a bővíthetőség terén sok

különbség van. Hazánkban is egyre nagyobb népszerűségnek örvendenek a GPL licens-es

CMS-ek, ennek ékes bizonyítéka, hogy magyar nyelvű támogatói oldallal is rendelkeznek:

Page 7: Kerepesi László - Szakdolgozat

Saját fejlesztésű CMS létrehozása Kerepesi László

7

A következőkben a három Magyarországon is népszerű CMS rendszert szeretném egy pár

mondatban bemutatni

1.2 Drupal

A Drupal Cms rendszert Dries Buytaert írta meg elsőként, majd az évek során - mint

megannyi nyílt forráskódú szoftvert - rengeteg „közösségi” fejlesztésen esett át. Bárki

javasolhat módosításokat, amelyeket a fejlesztő közösség véleményez, de a forráskódba

ezeket csak néhány kiemelt személy építheti be. Ezzel biztosítja, hogy az itt található

kódok mindig korrektek és használhatóak.

A rendszer több funkciót is magában foglal:

Ø Tartalomkezelő rendszer (CMS - Content Management System)

Ø Tartalomkezelő keretrendszer (CMF - Content Management Framework)

Ø Web alkalmazásfejlesztő keretrendszer (WAF - Web Application Framework)

A Drupal széles palettáról kínál bővítő modulokat, melyek lehetővé teszik a rendszer

szolgáltatásainak kiterjesztését. Ezen a modulok ingyenesen letölthetőek a következő

oldalról: http://drupal.org/project/Modules .

A Drupal legfontosabb jellemzői:

Ø Többféle, könnyen testre szabható sablon rendszer támogatása

Ø Blogger API

Ø Naplózás és elérési statisztikák készítése

Ø Automatikus védelem túlterhelés esetén

Ø Kiváló bővíthetőség

Ø Beágyazott adminisztrációs felület

Ø Könnyen megjegyezhető URL álnevek támogatása

Ø Csoportos, tartalom szintű jogosultság kezelés

Ø Többféle beviteli formátum (pl. BBCode, Textile, ...)

Ø Verziókezelés

Ø Beépített súgó

Ø Rengeteg beépített tartalom típus (oldal, fórum, blog, szavazás, ...)

Ø Űrlapok

Page 8: Kerepesi László - Szakdolgozat

Saját fejlesztésű CMS létrehozása Kerepesi László

8

Ø Szálkövető hozzászólások

Ø Vitafórumok

Ø Saját tartalom típusok kialakításának lehetősége

Ø Indexelt keresés

1.3 Joomla!

„A Joomla! egy olyan tartalomkezelő rendszer (CMS), amit ugyanazok a programozók

készítettek, mint akik a díjnyertes Mambo rendszert is. Tulajdonképpen a két rendszer

ugyanaz, vagy legalábbis a Joomla a Mambo újabb verziójának tekinthető, ezt bizonyítja,

hogy a legutóbbi Mambo (4.5.2-es) verzióhoz való kiegészítők többnyire a Joomla-ra is

telepíthetők. A Joomla! szó a szuhaéli eredetű "Jumla" szó fonetikus kiejtése, mely annyit

jelent, hogy "mindenki együtt" vagy "egy egészként".” [Lovászi Nándor Zsolt: A Joomla!

tartalomkezelő rendszer bemutatása 2007]

„Az interneten a honlapok karbantartását arra feljogosított adminisztrátorok vagy

felhasználók végzik. A Mambo alapú honlapokon, egyszerre akár több ember is kezelheti a

tartalmat. Nem szükséges a HTML nyelv ismerete a honlap frissítéséhez, mivel a

WYSIWYG típusú szövegszerkesztő segítségével a Word-höz hasonlóan formázhatja meg

a szöveget, szúrhat be képeket. Nincs szükség a dokumentumok FTP-n keresztüli

feltöltésére. Csak el kell menteni a begépelt szöveget, majd publikálni és a weboldal máris

elérhető, megtekinthető bárki számára a világon.” [Lovászi Nándor Zsolt: A Joomla!

tartalomkezelő rendszer bemutatása 2007]

1.4 WordPress

„A WordPress egy elegáns, jó felépítésű személyes publikálási rendszer PHP és MySQL

alapokon építve, a GPL licenc alatt kiadva. A b2/cafelog hivatalos utódja. A WordPress

egy viszonylag új portálmotor, de gyökerei, és fejlesztése egészen 2001-ig visszanyúlik. A

WordPress tartalomkezelő helyes működéséhez legalább 4.2-es verziószámú PHP

szerverre és minimum 3.23-as verziójú MySQL szerverre van szükség.” [Mondovics

Mihály: A WordPress tartalomkezelő rendszer bemutatása 2007 Pécs]

Page 9: Kerepesi László - Szakdolgozat

Saját fejlesztésű CMS létrehozása Kerepesi László

9

„A WordPress tartalomkezelő rendszer fájljai egy jól strukturált és egyszerű

könyvtárszerkezetben találhatóak. Itt funkcióik szerint vannak különválasztva a fájlok.

A struktúra a következő:

• wp-admin

• wp-content

o plugins

o themes

o uploads

• wp-includes

Wp-admin:

Ebben a mappában az adminisztrációhoz szükséges rendszerfájlok és függvényleírások

találhatóak.

Wp-content:

A felhasználó mappája. Itt találhatóak a pluginek, sablonok és a feltöltött állományok is.

A helyes működés érdekében erre a mappára írási jogot kell adnunk.

Wp-includes:

Az oldal működéséhez szükséges függvények definícióit tartalmazó fájlok lelőhelye.”

[Mondovics Mihály: A WordPress tartalomkezelő rendszer bemutatása 2007 Pécs]

1.5 PHP

A PHP elterjedt nyílt forráskódú szerveroldali programozási nyelv, mely kifejezetten a

dinamikus weboldalak programozásra használják. Szintaktikája leginkább a C

programozási nyelvéhez hasonlít. A nyelvet 1994-ben Rasmus Lerdorf kezdte el fejleszteni

először, majd 1995. június 8-án adta ki a PHP első nyílt forráskódú változatát, hogy a

programnyelv hibáinak keresése minél hatékonyabb legyen.

Két évvel később 1997-ben Zeev Suraski és Andi Gutmans, két izraeli fejlesztő újraírta az

értelmezőt.

A PHP szó jelentése PHP Hypertext Preprocessor kifejezésből ered. (A név eredeti

jelentése az angol Personal Home Page, azaz a személyes honlap kifejezés rövidítése volt.)

Mára a Zend Technologies (Zeev Suraski és Andi Gutmans) a PHP mögött álló első

számú céget, a PHP alapjainak készítői alapították.

Az értelmezőt támogató kereskedelmi termékeket fejlesztenek, terméktámogatással. A

honlapjukon található referenciák egyértelművé teszik a PHP egyre szélesedő

Page 10: Kerepesi László - Szakdolgozat

Saját fejlesztésű CMS létrehozása Kerepesi László

10

elfogadottságát a magasabb üzleti szektorban is. A PHP továbbra is ingyenes termék,

minden feladatra elérhetőek általa költségmentes megoldások.

„A PHP egy szerver-oldali szkript nyelv. A válaszlap formátumát leíró utasítások egy

HTML dokumentumba ágyazva helyezkednek el. A Web-szerver a meghívott

dokumentum URL-jéből ismeri fel, hogy a kérést a PHP szervernek kell feldolgoznia. A

minta dokumentum HTML utasításai változtatás nélkül átkerülnek a válaszlapra, a PHP

specifikus elemeket a PHP végrehajtja, és a generált válasz kerül be az eredménylapra.

Ugyan a PHP leíró nyelve nem adatbázis orientált, hanem a C általános programozási

nyelvre épül, mégis tartalmaz adatbázis kapcsolódási kiegészítő modult, amely lehetővé

teszi, hogy elérhessük, és a válaszlapon megjeleníthessük a legkülönbözőbb

adatbázisokban tárolt adatokat is.” [Révész György: A PHP nyelv Pécs, 2004. december

22.] (1. ábra)

1. ábra

A PHP nagyszerűen alkalmas olyan feladatok ellátására, mint például a bejelentkezés, az

adatbázis kezelés, fájlkezelés, kódolás, adategyeztetés, kapcsolatok létrehozása, e-mail

küldése, adatfeldolgozás, dinamikus listakészítés (stb.), melyre a kliens oldali szkriptek

nem alkalmasak. Azokban az esetekben, ahol nagyszámú ismétlődő feladatsort kell

végrehajtani, mint például képek listázása és linkelése, listakészítés stb., szintén kiválóan

alkalmazható. Mindezek mellett a PHP nagyon jól dokumentált nyelv, melyet eddig

számos könyv is magas szinten taglal, valamint több hazai portál is fő témájának

választott.

Page 11: Kerepesi László - Szakdolgozat

Saját fejlesztésű CMS létrehozása Kerepesi László

11

„A PHP specifikus utasítások a HTML utasítások közé beillesztve, beágyazva

foglalnak helyet. A HTML utasításoktól való egyértelmű és könnyen kezelhető

szétválasztás érdekében az egyes PHP specifikus utasításokat keretbe foglaljuk. Az

elhatárolás az alábbi változatok valamelyikével lehetséges:

hagyományos : <?php PHP elemek ?>

szkript stílusú : <script language="php"> PHP elemek</script>

rövid : <? PHP elemek ?>

ASP stílusú : <% PHP elemek %>

A fenti kezdő- ill. záró elemek közül az utolsó kettő használatát a php.ini fájlban

engedélyezni kell a short_open_tag=on ill. az asp_tags=on beállításokkal.

A PHP elemek a C nyelvi kifejezésekhez hasonló formátumot öltenek. Egy tagolt rész

több elemi PHP kifejezést, utasítást is tartalmazhat. Ekkor az egyes PHP utasításokat

pontosvesszővel határoljuk el egymástól:

<?php

PHP utasítás1;

PHP utasítás2;

?>

A fenti példából is látható, hogy a tagolási rész és a PHP elemi utasítás is, több forrássoron

keresztül is folytatódhat, a sorvégjel nem jelent utasítás határt.

Mivel a HTML fájlok egyszerű szöveges fájlok, bármilyen szövegszerkesztő segítségével

írhatjuk a PHP kódokat is. A HTML-szerkesztők általában viszont nyújtanak valamilyen

különleges támogatást PHP-szerkesztéshez is, ilyenek például a kódszínezés, a kifejezés

szerkesztő vagy a tesztelő.” [Révész György: A PHP nyelv Pécs, 2004. december 22.] Egy

egyszerű program például:

<?php echo "Helló világ!"; // a kiírandó szöveg ?>

Page 12: Kerepesi László - Szakdolgozat

Saját fejlesztésű CMS létrehozása Kerepesi László

12

2. Tervezés

Először is, mint minden program fejlesztését gondos tervezésnek kell megelőznie. Fel kell

mérni, hogy milyen képességekkel kell felruházni az oldalunkat, hogy a célnak

megfeleljen.

Esetemben egy képzeletbeli kis vállalat (Reflex Kft.) intranetén futó hírportált terveztem,

amelyet több kitüntetett alkalmazott frissíthet mindig aktuális hírekkel és a vállalat életéről

készült képeket, fel tudja tölteni egy galériába, melyet aztán mindenki kedve szerint

megnézhet. Valamint egy fórumot, melyben a dolgozók tehetnek fel kérdéseket a

vezetőségnek, és azok válaszolhatnak rájuk. Természetesen továbbra is fontos szempont az

egyszerű kezelhetőség és a testreszabhatóság.

Tehát két működési módja kell, hogy legyen az oldalnak: az egyik a „nézegető” mód, a

másik a „szerkesztő” mód. Szerkesztő módban lehet az adatbázis adatait frissíteni,

megfelelő jogosultság birtokában, új híreket beírni, vagy régieket törölni, képeket feltölteni

a galériába illetve törölni őket onnan. A nézegető mód viszont csak az adatok

megtekintésére szolgál. A fórumban regisztrált és bejelentkezett felhasználók írhatnak

majd hozzászólést, viszont nézegető módban megtekinthetőek a témák és azok részletei.

A portál megvalósítása közben, olyan technikákat is alkalmazni fogok, mint például a CSS,

mellyel egy HTML oldal stílusát, kinézetét lehet változtatni globálisan, vagy a JavaScript,

mellyel kisebb beágyazott programokat lehet futtatni az oldalon, annak használatának

kényelmesebbé tétele érdekében.

Az adatok tárolására MySQL adatbázist fogok használni, mert könnyen lehet a PHP

kódból kapcsolódni hozzá és SQL parancsokat (Select, Insert, Delete, Update) lehet

futtatni. Különböző adattáblákat kell létrehozni az egyes funkciók adatainak a tárolása

érdekében: Users, Forum, Hirek, Galeria, stb.

Page 13: Kerepesi László - Szakdolgozat

Saját fejlesztésű CMS létrehozása Kerepesi László

13

Az elkészítendő portál látványterve: (2. ábra)

2. ábra

A ’Hírek’, ’Galéria’, ’Fórum’ linkekre kattintva a belső rész változik és megjelenik a

kívánt felület alapértelmezetten csak olvasására, mindig a legfrissebb információ van az

oldal tetején. Ha bejelentkezünk és van megfelelő jogosultságunk, akkor frissíteni is lehet a

tartalmat.

Az oldal működéséhez hozzátartozik, hogy ha a cégnek szüksége lesz egy új modulra,

akkor ne kelljen feltétlenül a program fejlesztő a régi rendszerbe való beillesztésére, hanem

elég legyen egy - két kattintás az új modul (plugin) beillesztésére. Ezt a műveletet, akár a

cég egyik alkalmazottja is megtehesse.

A felhasználók jogosultságai a következőképpen alakul majd, erősségileg emelkedő

sorrendben:

• Sima felhasználó (híreket tud olvasni, képeket tud nézni a galériából és

letölteni, valamint a fórumból megtekintheti a témákat és a hozzászólásokat,

valamint hozzászólásokat tud írni)

• Admin (kiemelt felhasználó, aki tud híreket beírni, módosítani, kategóriákat

létrehozni, törölni és képeket feltölteni, törölni a galériából, valamint a

fórumban új témát indítani)

Page 14: Kerepesi László - Szakdolgozat

Saját fejlesztésű CMS létrehozása Kerepesi László

14

• Főadmin (a legmagasabb szintű felhasználó, aki a „Sima felhasználó”-t

előléptetheti „Admin” jogosultságúvá, illetve visszaminősítheti ismét „Sima

felhasználóvá”, felhasználók adatait (elfelejtett jelszó) tudja módosítani,

híreket törölni, kategóriákat törölni, fórum témákat törölni, design

beállításokat átállítani, menük nevét elhelyezkedését állítani, és új modult

tud illeszteni a renszerhez stb.)

3. Megvalósítás

A rendszer fejlesztéséhez és futtatásához, ahogy azt már korábban is említettem szükség

van egy webszerverre és egy php értelmezőre, valamint egy mysql adatbázis kezelő

szoftverre. Ezt a hármast kell összehangolni, hogy futtatni lehessen a rendszert, ezt meg

lehet tenni manuálisan is (ez nem mindig könnyű feladat), vagy lehet egy keretrendszert

használni, ami tartalmazza ezen összetevőket összehangolva munkára készen. Én az

utóbbit választottam.

Ilyen free szoftver pl: a XAMPP, ami a http://www.apachefriends.org/en/xampp.html

oldalról lehet letölteni. Ez a programcsomag tartalmaz még egy phpMyADMIN nevű

programot, mellyel könnyen lehet kezelni a mysql adatbázisokat.

A XAMPP-ot célszerű biztonsági szempontból egy külön partícióra telepíteni az operációs

rendszertől. Ennek megfelelően Windows platformon a php programrészek a

„D:\xampp\htdocs\reflex\” mappába kerülnek. Ezen belül szerveződnek az egyes program

modulok mappái a következő módon: (3. ábra)

3. ábra

Az adatbázis is hasonlóképpen tagolódik fel, minden funkcióhoz egy külön tábla

tartozik.(4. ábra)

Page 15: Kerepesi László - Szakdolgozat

Saját fejlesztésű CMS létrehozása Kerepesi László

15

4. ábra

Az egyes táblák szerkezetével bemutatásával az egyes funkciók ismertetésekor fogok

részletesebben is foglalkozni.

3.1 Index.php

Az oldal az index.php értelmezésével kezdődik.

<? session_start(); ob_start(); include('config.php'); //adatbázis kapcsolat include('head.php'); //head beállítások

Itt indul a SESSION kezelés, ami biztosítja bizonyos változók jelenlétét az oldalról való

kijelentkezésig, melynek segítségével, többek között, könnyebben lehet az oldalon

navigáló felhasználó jogosultságait megállapítani. Majd beolvasódik a config.php és a

head.php is, amelyek az adatbázishoz való kapcsolódást, néhány általános függvényt és az

oldal fejlécének beállításait, illetve a stílusokat meghatározó CSS fájl beolvasását

tartalmazzák.

CONFIG.PHP

$sqlserver="localhost"; $sqlhost="intranet"; $sqlpassword="Gtu97lKj34"; $sqldb="laci"; $kapcsolat=@mysql_connect($sqlserver,$sqlhost,$sqlpassword); @mysql_select_db($sqldb); @mysql_query('SET NAMES utf8 COLLATE utf8_general_ci'); ...

Látható, hogy az adatbázishoz nem „root” felhasználóval kapcsolódunk, hanem „intranet”

felhasználóval, aminek az a biztonsági előnye, hogy ha valaki sikeresen feltörné az oldalt,

Page 16: Kerepesi László - Szakdolgozat

Saját fejlesztésű CMS létrehozása Kerepesi László

16

akkor az adatbázis kezelőhöz csak az „intranet” felhasználó jogosultságaival férhet hozzá,

nem pedig adminisztrátorként minden adatbázishoz, amit a szerver éppen tárol.

$sql_settings = 'SELECT * FROM `settings` LIMIT 1'; $query_settings=mysql_query($sql_settings); print mysql_error(); while($data_page=mysql_fetch_assoc($query_settings)) { if ($data_page['service']=='0') { print 'Sajnos az oldal eppen karbantartas alatt all. Megerteset koszonjuk.'; } else {

Az oldalnak van egy olyan funkciója, hogy ha valamilyen karbantartási műveletet hajtunk

végre, azt jelezni lehet a felhasználók számára egy rövid üzenettel. Amennyiben nem,

akkor megkeződik a fő oldal táblázatokra bontása. Az oldalunk a tervnek megfelelően 5

nagyobb részre lesz szétbontva: Logó, felső menüsor, baloldali menüsor, középső rész és a

jobb oldali menüsor.

Korábban már megkülönböztetnünk három módot, ahogyan hozzáférhetnek a felhasználók

az oldalhoz, ebből a háromból, egy magasabb szintű és kettő alacsonyabb szintű

hozzáférést különböztethetünk meg annak függvényében, hogy milyen menüpontok

lesznek számukra elérhetőek. Ezért két külön táblában tároljuk a „Sima felhasználók” és az

„Adminok” számára megjelenő adatokat,mint a „Főadmin” számára megjelenő adatokat.

Rögtön az elején az indexben el kell dönteni, hogy a felhasználó, milyen táblából fog

dolgozni:

if($_GET['mode'] == 'admin') //adatbázis kiválasztása { $db = 'admin_menus'; } else { $db = 'page'; }

Mindkét táblában az ALIGN a HREF és a PAGE mezők határozzák meg, hogy az oldalon

HOVÁ, MI és milyen MÓDBAN kerüljenek kiíratásra. (5. ábra)

5. ábra

Page 17: Kerepesi László - Szakdolgozat

Saját fejlesztésű CMS létrehozása Kerepesi László

17

Például az index módban a fenti bejegyzések alapján a Down menü balra, a News középre

és a Login menü jobbra fog kerülni, ami a böngészőben a következőképpen jelenik meg:

(6. ábra)

6. ábra

Ahogy azt láthattuk, minden egyes funkciónak külön php fájl felel meg, ami a HREF

mezőben található linkelt fájlból hívódik meg a táblázat megfelelő részébe.

3.2 Regisztrálás

Az egyik legfontosabb modul a login menü, ami a felhasználók azonosítására és

hitelesítésére szolgál. Ha még nincsen felhasználónevünk, akkor csak nézegetni tudunk a

rendszerben, semmilyen bejegyzést nem tudunk tenni. Regisztrálni magunkat a Login

menü alján lévő „regisztráljon” linkre kattintva lehet, ami meghívja a

D:\xampp\htdocs\reflex\login_system\reg.php –t az oldal közepére. Itt négy adatot

szükséges megadnunk és eltárolnunk változókba:

• Felhasználónév - $adatok[’nick’]

• E-mial cím - $adatok[’email’]

• Jelszó - $adatok[’pass1’]

• Jelszó mégegyszer - $adatok[’pass2’]

Ezeket természetesen ellenőrizni kell, mielőtt az adatbázisba bármilyen bejegyzést

tennénk:

function reg_check($adatok){ if($adatok['nick'] == "" | $adatok['email'] == "" | $adatok['pass1'] == "") { return '<div align="center" style="error"><span style="font-weight: bold;">Minden mező kitöltése kötelező!</div>';

Page 18: Kerepesi László - Szakdolgozat

Saját fejlesztésű CMS létrehozása Kerepesi László

18

break; }

Meg kell néznünk, hogy minden mező ki lett-e töltve. elseif(!ereg('^[a-zA-Z\-\_áéíóöüóûà ÉÍÓÖÜÕÛ0123456789]+$', $adatok['nick' ])) { return '<div align="center" style="error"> <span style="font-weight: bold;">A felhasználónévben csak a magyar ABC kis- és nagybetűi, illetve a _ és - jelek engedélyezettek!</div>'; break; }

Meg kell néznünk, hogy a felhasználónév mező nem tartalmaz-e különleges nem engedélyezett karaktereket. elseif($adatok['email'] == (!eregi("^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,6}$",$adatok['email']))) { return '<div align="center" style="error"> <span style="font-weight: bold;">Hibás e - mail cím!</span></div>'; break; }

Meg kell győződnünk arról, hogy a mail cím helyes formátumban lett-e megadva. (Ezt a linux-ból is mert szabályos (reguláris) kifejezések segítségével tehetjük meg.) elseif(mysql_num_rows(mysql_query("SELECT nick FROM users WHERE (nick='".$adatok['nick']."')")) > 0) { return '<div align="center" style="error"> <span style="font-weight: bold;">Már regisztráltak ezzel a felhasználónévvel!</div>'; break; }

Meg kell győződnünk arról, hogy az adatbázis nem tartalmaz már egy ilyen felhasználónevet. elseif($adatok['pass1'] !== $adatok['pass2']) { return '<div align="center" style="error"> <span style="font-weight: bold;">A két jelszó nem egyezik meg!</div>'; break; }

Valamint, hogy a két beírt jelszó megegyezik. else { return "rendben"; } } Ha minden adatot helyesen megadott a felhasználó és azok megfeleltek a feltételeknek,

akkor a függvény értéke „rendben” lesz és bekerül a USER táblába egy INSERT INTO

paranccsal:

if (reg_check($_POST) == rendben) { $sql = "INSERT INTO users (id,nick,pass,email,host,regip,regtime) "; $sql.= "VALUES('','".$_POST['nick']."','"; $sql.= md5($_POST['pass1'].'laci')."','".$_POST['email']."','".$_SERVER['HTTP_HOST']."','".$_SERVER['REMOTE_ADDR']."','".time()."')"; $query = mysql_query($sql); if(!mysql_errno())

Page 19: Kerepesi László - Szakdolgozat

Saját fejlesztésű CMS létrehozása Kerepesi László

19

{ header('Location: index.php?page=reg&status=ok'); } else { header('Location: index.php?page=reg&status=no'); }

Ahogy az a kódban lehet látni (md5($_POST['pass1'].'laci')), a felhasználó jelszava már a

tároláskor MD5 algoritmussal lesz titkosítva, valamint minden regisztrált felhasználó

jelszavának a végéhez hozzáillesztjük a „laci” szót, ezzel is növelve a biztonságot. Ha

valaki megszerzi a felhasználó jelszavát, és betitkosítja, mert azt is tudja, hogy MD5-el

vannak az oldalon a jelszavak titkosítva, akkor sem egyezik meg a két HASH mert a

támadó próbálkozásához nincs hozzáfűzve a „laci” szó. Ám erre a későbbiekben a

jelszómódosításnál, illetve az admin módban való jelszóadásnál oda kell-e figyelni.

A felhasználónév és a jelszó mellett még a SERVER['HTTP_HOST']." és a

".$_SERVER['REMOTE_ADDR']." változók, valamint az aktuális idő is tárolva lesznek a

felhasználóhoz tartozó rekordban. Minden felhasználóról a következő adatokat tároljuk az

adatbázisban: (7. ábra)

7. ábra

Regisztrálás után (mivel sem az „ADMIN” sem az „ADMINF” mező nem kapott értéket)

az új user „Sima felhasználó”-nak lesz rangsorolva.

Észre vehető, hogy a REGTIME mezőben leírt dátum a „time()” függvény eredménye,

melyet kiíratáskor a CONFIG.PHP-ben található „datum()” függvénnyel alakítunk át:

function datum($time) { $ma = mktime(0, 0, 0, date("m"), date("d"), date("Y")); $tegnap = $ma-(60*60*24); if($time > $ma && $time < $ma + 24*60*60) { $datum = "Ma, " . date("H:i",$time); } elseif($ma > $time AND $time > $tegnap) { $datum = "Tegnap, " . date("H:i",$time); } else { $datum = date("Y.m.d. H:i",$time); } return $datum; }

Page 20: Kerepesi László - Szakdolgozat

Saját fejlesztésű CMS létrehozása Kerepesi László

20

Előfordulhat, hogy valamelyik felhasználót ki szeretnénk tiltani a rendszer használatából

valamilyen oknál fogva. Két szempont alapján lehet ezt megtennünk:

• felhasználói név

• regisztrációnál letárolt ip cím

A tiltás műveletet csak Főadmin jogosultsággal lehet végrehajtani. Azáltal, hogy a usert

felvesszük a tiltó listára, mely a BANNLIST nevű táblában van nyilvántartva. Ezekről, az

adminisztrációs műveletekről később még esik szó.

3.3 Login

Most, hogy megismertük a regisztrációt, és a tiltásokat, nézzük meg, hogy hogyan épül fel

a Login folyamat. Ez a modul a D:\xampp\htdocs\reflex\login_system\login.php –ben van

megvalósítva. Az elején létre hozunk egy login osztályt és beállítjuk a belső változóit:

class login { var $nick; var $pass; var $true; var $bann; var $bann_nick; var $bann_ip; function login() { $this->nick = $_POST['nick']; $this->pass = $_POST['pass'].'laci'; $this->true = 1;

Ezután jöhetnek az ellenőrzések:

$sql_bann="SELECT * FROM `bannlist` WHERE `nick`='".$_POST['nick']."' OR `ip`='".$_SERVER['REMOTE_ADDR']."'"; $query_bann=mysql_query($sql_bann); if(mysql_num_rows($query_bann)) { $this->bann_nick = true; $_SESSION['bann'] = true; $sql_comment="SELECT * FROM `bannlist` WHERE `nick`='".$_POST['nick']."' OR `ip`='".$_SERVER['REMOTE_ADDR']."'"; $query_comment=mysql_query($sql_comment); while($banncomment=mysql_fetch_assoc($query_comment)) { ?> <script language="javascript"> alert('Sajnáljuk de az oldalról letiltottunk.\nA leiltás oka: <?= $banncomment['comment'] ?>'); </script> <? } } Ezt a programrész mindenekelőtt megnézi, hogy a felhasználó neve vagy az IP címe

rajtavan-e a tiltó listán, ha nincs, továbbmegy.

Page 21: Kerepesi László - Szakdolgozat

Saját fejlesztésű CMS létrehozása Kerepesi László

21

$sql = "SELECT * FROM `users` WHERE pass='".md5($this->pass)."' AND nick='".mysql_real_escape_string($this->nick)."'"; $query = mysql_query($sql) or die('<div align="center" class="error">Az ellenorzĂ©s során hiba lĂ©pett fel!</div>' ); if(mysql_num_rows($query) > 0) { Majd ellenőrzi, hogy a megadott jelszónak a HASH-e szerepel-e az adatbázisban és, ha

igen, akkor megfelel-e hozzá a felhasználónév is. Azért először a jelszót ellenőrizzük, mert

azt nehezebb próbálgatással eltalálni és így a WHERE feltételnek már rögtön az első része

nem teljesül, így nem vizsgálja meg a második feltételt sem (gyorsabb a kiértékelés). Az

mysql_real_escape_string() függvény, pedig kivesz mindenféle speciális karaktert a

felhasználónévből, nehogy SQL injection támadás áldozataivá váljunk.

Ha a megadott felhasználónév, jelszó páros megegyezik az adatbázisban tárolttal, akkor

elkezdődik a SESSION változók beállítása:

$_SESSION['nick'] = addslashes($this->nick); $_SESSION['login'] = true; $user_azonosito=mysql_query("$sql"); while ($user=mysql_fetch_assoc($user_azonosito)) if($user['adminf'] == $this->true) { $_SESSION['rang'] = "Adminf"; $_SESSION['bann'] = 0; $_SESSION['id'] = $user['id']; } elseif($user['admin'] == $this->true) { $_SESSION['rang'] = "Admin"; $_SESSION['bann'] = 0; $_SESSION['id'] = $user['id']; } else { $_SESSION['rang'] = "Sima felhasználó"; $_SESSION['id'] = $user['id']; }

Az addslashes() megtisztítja felhasználónevet a speciális karakterektől, hogy az kerüljön a

session változóba. Most már rendelkezünk SESSION változókkal, amelyekre a program

futása során bárhol hivatkozhatunk a kijelentkezésig. Ezek a változók kulcs szerepet

játszanak a jogosultsági feltételekben.

if($_GET['page'] != "logout") { header('Location:'.$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING']); }

Ezzel visszairányítjuk az oldalt arra a modulra, ahonnan érkezett, immár bejelentkezve.

else { header('Location: index.php?page=index'); }

A kijelentkezett felhasználót ismét a főoldalra lesz irányítva

Page 22: Kerepesi László - Szakdolgozat

Saját fejlesztésű CMS létrehozása Kerepesi László

22

} else { print '<br><div align="center" class="error">Hiba! Rossz felhasználó név vagy jelszó!</div>'; } }

Végül, ha a felhasználónév jelszó páros nem egyezett meg, akkor egy hibaüzenet értesíti a

felhasználót, hogy a bejelentkezési folyamat nem sikerült.

Most, hogy a SESSION változók már élnek a jogosultságoknak megfelelően lehet kiíratni

a login menü elemeit:

if($_SESSION['login'] == true) { print 'Üdv '.$_SESSION['nick'].'!'.'<br>'; print 'Jogosultság:'.$_SESSION['rang'].'<br>'; if($_SESSION['rang'] == 'Adminf') { print '<a href="index.php?mode=admin&page=admin_menu">Adminisztráció</a><br>'; print '<a href="index.php?page=taglist">Felhasználók listája</a><br>'; } if($_SESSION['rang'] == 'Admin') { print '<a href="index.php?page=taglist"> Felhasználók listája</a><br>'; } print '<a href="index.php?page=profil&id='.$_SESSION['id'].'">Profil</a><br>'; print '<a href="index.php?page=user_edit">Adatmódodítás</a><br>'; print '<a href="index.php?page=logout">Kijelentkezés</a>'; } A megfelelő linkek átnavigálják a felhasználót a középső részben megjelenő kisebb -

nagyobb adminisztratív feladatok ellátására melyet, mindenki saját jogosultságának

megfelelően megtehet, vagy sem. Ezeket a funkciókat, még később érinteni fogjuk.

A login folyamat párja a logout, mely során kiléptetjük a felhasználót az oldalról és az

összes rá vonatkozó session változót megszüntetjük. Ez a következőképpen megy végbe:

<?php unset($_SESSION['login']); unset($_SESSION['nick']); unset($_SESSION['id']); unset($_SESSION['rang']); unset($_SESSION['bann']); print '<div align="center" style="ok">Sikeresen kiléptél</div>'; ?>

Ezen két technikai művelet után rátérhetünk az oldal funkcionális részeire, úgyismint:

Hírek, Galéria és Fórum.

3.4 Hírek

Elsőként a Hírek modult szeretném bemutatni, ami arra szolgál, hogy egy jogosult

felhasználó a vállalat miden napjait érintő információkat tehessen közzé a belső portálon.

Page 23: Kerepesi László - Szakdolgozat

Saját fejlesztésű CMS létrehozása Kerepesi László

23

A híreknek két módja van az egyik a hír olvasása, amelyet mindenki meg tud tenni, tehát

akár belépés nélkül vagy „Sima felhasználó” jogkörben is meg tudunk tenni, a másik a

szerkesztő mód, amelyhez szükséges a bejelentkezés és legalább az „Admin” jogkör.

Ahhoz, hogy megértsük a modul működését, jó, ha átlátjuk az NEWS tábla felépítését: (8.

ábra)

8. ábra

A Hír olvasása a következő módon történik:

<? class news_index {var $id; var $title; var $text; var $from; var $from_id; var $time;

A belső változók létrehozása. function news($news_id) ... <? if($_GET['mode'] == 'all_news') {$sql_news="SELECT * FROM `news` WHERE id='".$news_id."' ORDER BY time"; } else {$sql_news="SELECT * FROM `news` ORDER BY time DESC LIMIT 1"; }

A lekérdezés kiválasztása, hogy csak az utolsó hírt lássuk, vagy az összest. $query_news=mysql_query($sql_news); while($news_data=mysql_fetch_assoc($query_news)) {$this->id = $news_data['id']; $this->title = $news_data['title']; $this->text = $news_data['text']; $this->from = $news_data['from']; $this->from_id = $news_data['from_id']; $this->time = $news_data['time']; ?>

A változók feltöltése a lekérdezésből. <table width="100%" border="0" align="center"> <tr> <td width="75%" class="cmenu_bg"><?= html_entity_decode($this->title) ?></td> <td width="25%" class="cmenu_bg"><div align="right"><?= datum($this->time) ?></div></td> </tr> <tr> <td colspan="2" class="cmenu_bg"><?= html_entity_decode($this->text) ?></td> </tr> <tr>

Page 24: Kerepesi László - Szakdolgozat

Saját fejlesztésű CMS létrehozása Kerepesi László

24

<td colspan="2" class="cmenu_bg">A hírt küldte: <?= html_entity_decode($this->from) ?></td> </tr> <tr> <td colspan="2" class="cmenu_bg"><div align="right"><a href="index.php?page=news&mode=all_news">Összes</a> <?if($_SESSION['rang'] == "Admin" OR $_SESSION['rang'] == "Adminf") { print '| <a href="index.php?mode=admin&page=news&news_mode=news_confirm&confirm_page=confirm&news_id='.$this->id.'">Modosítás</a>'; } if($_SESSION['rang'] == "Adminf") { print '| <a href="index.php?mode=admin&page=news&news_mode=news_remove&id='.$this->id.'">Törlés</a>'; } ?> </div></td> </table> <? } ?>

Ebben a részben történik a változók táblázatba való kiíratása, ami magát hírt szövegét is

tartalmazza a $this->text változóban. A html_entity_decode() függvény arra szolgál, hogy az

adatbázisban tárolt szövegben elhelyezkedő ékezetes karaktereket, visszakódolja

számunkra is olvasható ékezetes betűkké. Ha az olvasó „Admin”, akkor az ”Összes” link

mellett, a „Módosítás”, ha „Főadmin”, akkor a „Törlés” link is feltűnik, melyek

átirányítanak a szerkesztő oldalra.

A szerkesztő oldalon két funkció érhető el az „Admin” jogosultságú felhasználóknak ezek:

Új hír küldése, korábbi hír módosítása, valamint a törlés a „Főadmin” számára.

<? class news { var $title; var $text; function news_send() { ...

A program első része kirajzolja a form beviteli mezejét, létrehozza a $text és $title

változókat és megjeleníti a Küldés gombot. Majd kezdődnek az ellenőrzések, hogy

mindent helyesen töltöttünk-e ki:

<? if($_POST['send']) { if($_POST['title']) { if($_POST['text']) { $sql_new_news="INSERT INTO `news` (`title`, `text`, `from`, `time`) VALUES ('".addslashes(htmlentities($_POST['title']))."', '".addslashes(htmlentities($_POST['text']))."',

Page 25: Kerepesi László - Szakdolgozat

Saját fejlesztésű CMS létrehozása Kerepesi László

25

'".addslashes(htmlentities($_SESSION['nick']))."', '".time()."')"; mysql_query($sql_new_news);

Ha minden ki lett töltve helyesen, akkor új bejegyzés kerül az adatbázisba, figyelve az

esetleges támadások ellenei védelemre.

A törléskor, a már fentebb említett linkre kattintva az alábbi programrész hívódik meg:

if($_GET['id'] AND $_SESSION['rang']=='Adminf') { $sql_remove_news="DELETE FROM `news` WHERE `id`='".$_GET['id']."' "; $query_remove_news=mysql_query($sql_remove_news); ... } A módosítás funkció form-ja és kódja nagyon hasonlít az új hír bevitelekor használt form-

hoz és kódhoz, szinte csak az SQL parancsban különböznek egymástól:

$sql_update="UPDATE `laci`.`news` SET `news`.`title`='".addslashes(htmlentities($_POST['title']))."', `news`.`text`='".addslashes(htmlentities($_POST['text']))."' WHERE `news`.`id`='".$_GET['news_id']."'"; mysql_query($sql_update);

Továbbra is ki kell emelni, hogy a felhasználó által beírt minden egyes adatot meg kell

„tisztítani” az addslashes(htmlentities()) függvényekkel, nehogy SQL parancsokat illesszenek

be és ezzel megtámadják a MySQL szervert.

3.5 Galéria

A következőkben a Galéria modul működését szeretném bemutatni, melynek célja, hogy az

arra jogosult kiemelt felhasználók könnyedén tudjanak kategóriákba sorolva képeket

megosztani a munkahelyi portálon.

A legfontosabb fájl a D:\xampp\htdocs\reflex\plugins\gallery\pictures.php, amely a képtár

működéséhez szükséges programkódot tartalmazza.

A D:\xampp\htdocs\reflex\plugins\gallery\pic\ könyvtárból nyíló, a kategória „id”-nak

megfelelő mappába kerülnek, a feltöltött fájlok.

Az adatbázisban, két táblában valósul meg a képek neveinek és hivatkozásainak, illetve a

kategóriáknak a tárolása. Az egyik a GALLERY_CAT a másik a GALLERY_FILES.

Nézzük, hogy épülnek föl ezek a táblák:

GALLERY_CAT: itt tárolódnak a kategóriák nevei és a könyvtárak elérési útjai. (9. ábra)

9. ábra

Page 26: Kerepesi László - Szakdolgozat

Saját fejlesztésű CMS létrehozása Kerepesi László

26

GALLERY_FILES: ebben tárolódnak a fájlok nevei és az elérési útjaik. (10. ábra)

10. ábra

A két tábla a gallery_cat.gallery_cat_id és a gallery_file.gall_id mezők alapján vannak

összekapcsolva 1:N típusú kapcsolattal. A képtár használatakor mindkét táblán kell

lekérdezéseket futtatni.

Galéria kezdőlapján felsoroljuk a már létrehozott kategóriákat – melyekből linket

készítünk – és, hogy hány darab kép van bennük.

function gallery_cat() { $sql_cat="SELECT * FROM `gallery_cat`"; $query_cat=mysql_query($sql_cat); ?> <table width="100%" border="0" cellspacing="0" cellpadding="0" align="center" class="table_down"> <tr> <td class="cmenu_bg"><div align="center">Kategória neve</div></td> <td class="cmenu_bg"><div align="center">Képek száma</div></td> </tr> <? while($cat=mysql_fetch_assoc($query_cat)) { ?> <tr> <td class="cmenu_bg"><div align="center"><a href="index.php?page=gallery&mode=gallery_page&cat_id=<?= $cat['gallery_cat_id'] ?>"><?= $cat['cat_title'] ?></div></td> <td class="cmenu_bg"> <? $sql_pic_num=mysql_query("SELECT COUNT( * ) AS picture_num FROM `gallery_files` WHERE gall_id=".$cat['gallery_cat_id'] ); $pic_num=mysql_fetch_assoc($sql_pic_num); ?> <div align="center"><?print $pic_num['picture_num']; ?> </div></td> ...

Ezek után, a számunkra szimpatikus kategória linkjére kattintva megtekinthetjük a képek

miniatűrjeit.

function gallery_page() { ?> <table width="100%" border="0" cellspacing="0" cellpadding="0" align="center"> <? $sql_recnum="SELECT COUNT(`id`) FROM `gallery_files` WHERE `gall_id` = '".$_GET['cat_id']."'"; $query_recnum=mysql_query($sql_recnum);

Page 27: Kerepesi László - Szakdolgozat

Saját fejlesztésű CMS létrehozása Kerepesi László

27

$recnum=end(mysql_fetch_row($query_recnum)); mysql_free_result($query_recnum);

Ez a lekérdezés az oldalszámozó függvénynek olvassa ki, hogy hány kép van az adott

kategóriában.

$pnum=new pagenumbers; $pnum->set($_GET['page_num'],$recnum); $sql_page="SELECT * FROM `gallery_files` WHERE `gall_id` = '".$_GET['cat_id']."'".$pnum->mysql_limit_string; $sql_path="SELECT `href` FROM `gallery_cat` WHERE `gallery_cat_id` = '".$_GET['cat_id']."'"; $query_path=mysql_query($sql_path); $query_page=mysql_query($sql_page); $path=mysql_fetch_assoc($query_path);

A lekérdezések a képek megjelenítéséhez. $i=2; while($file=mysql_fetch_assoc($query_page)) { $pictures=$file['file_name']; $ext = end(explode('.',$pictures)); $pictures = basename($pictures,'.'.$ext); $pictures =$pictures.'.'.$ext.'_th.jpeg';

A két nevének és kiterjesztésének szétválasztása a linkekhez. print ($i % 4 == 1) ? '<tr>' : ''; print '<td class="cmenu_bg"><a href="'.$path['href'].$file['file_name'].'" target="_blank"><img src="'.$path['href'].'th/'.$pictures.'" border="0" width="150" hight="150"></a>';

A miniatűr kép beillesztése linkként. if($_SESSION['rang'] == "Admin" OR $_SESSION['rang'] == "Adminf") { print '<div align="center"><a href="index.php?page=gallery&mode=pictures&id='.$file['id'].'&mode=delete">[Törlés]</a></div>'; } print '</td>'; print ($i % 4 == 0) ? '</tr>' : ''; $i++; } ?>

A „Törlés” linkek beillesztése „Admin” és „Főadmin” jogosultságúak számára.

Tehát, ezzel a folyamattal ki tudjuk listázni a képek miniatűrjeit, és ha a felhasználó rájuk

kattint, akkor egy új ablakban megjelennek azok, eredeti méretükben.

Ahhoz, hogy képeket tudjunk feltölteni, először kategóriákat kell létrehozni:

function gall_cat_add() { ... if($_POST['send']) { $sql_cat_add="INSERT INTO `gallery_cat` (`cat_title`) VALUES ('".$_POST['cat_name']."')"; $query_cat=mysql_query($sql_cat_add); if(mysql_errno()) { print mysql_error(); }

Beillesztjük a gallery_cat táblába az új kategória nevet.

Page 28: Kerepesi László - Szakdolgozat

Saját fejlesztésű CMS létrehozása Kerepesi László

28

else { $id=mysql_insert_id(); // utolsó ID $dirname="plugins/gallery/pic/".$id."/"; $sql_cat_set_href="UPDATE `gallery_cat` SET `href` = '".$dirname."' WHERE `gallery_cat_id`='".$id."'";

Majd módosítjuk a href mezőbe a könyvtár nevét, ahova a kategóriába tartozó képek

kerülnek majd.

$query_cat_href=mysql_query($sql_cat_set_href) if(mysql_errno()) { print mysql_error(); } else { if(mkdir($dirname) && mkdir($dirname.'th/')) { ?> <div align="center" class="ok">A kategória létre lett hozva.</div> <? }

Végül megpróbálja létrehozni a kategóia könyvtárait, és ha sikerül, akkor biztosítja a

felhasználót a művelet sikeréről.

Most nézzük meg a kép feltöltés folyamatát!

function picture_upload() $sql_upload_image_cat="SELECT * FROM `gallery_cat`"; $query_upload_image_cat=mysql_query($sql_upload_image_cat); ?> ... <select name="cat_list" size="1"> <? while($cat_set=mysql_fetch_assoc($query_upload_image_cat)) { ?> <option selected value="<?= $cat_set['gallery_cat_id'] ?>"><?= $cat_set['cat_title'] ?></option> <? }?> </select>

A feltöltendő képeket a már meglévő kategóriákból kiválasztva lehet majd beszúrni a

gallery_file táblába, innen tudjuk, hogy melyik kategóriába tartozik.

... <input type="hidden" name="MAX_FILE_SIZE" value="30000000">

A feltöltendő kép max méretének beállítása bájtokban.

... if($_POST['send']) { $sql_upload_image_href="SELECT * FROM `gallery_cat` WHERE `gallery_cat_id` = '".$_POST['cat_list']."'"; $query_input_href=mysql_query($sql_upload_image_href); $image_href=mysql_fetch_assoc($query_input_href); $filename=$_FILES['up_file']['name']; $tempname=$_FILES['up_file']['tmp_name']; $up_file_size=$_FILES['up_file']['size']; $dirname=$image_href['href'];

Page 29: Kerepesi László - Szakdolgozat

Saját fejlesztésű CMS létrehozása Kerepesi László

29

A szükséges változók beállítása, mint például, hogy milyen href hivatkozás kerüljön a

táblába a „HREF” mezőbe.

if (!in_array( end(explode('.',$filename)) , array('jpg','jpeg','bmp','png','gif','JPG','JPEG','BMP','PNG','GIF') )) { print '<div align="center" class="error">Hiba! Csak jpg, bmp, png és gif állományok feltültése engedélyezett.</div>'; return; }

A kiterjesztések vizsgálata, hogy biztos, hogy megjeleníthető képformátumot tölthessenek

fel. Ha nem kép formátum a kiterjesztés, akkor hibaüzenetet jelenít meg, ha viszont

megfelel, akkor beindul a feltöltendő fájl új nevének generátora, hogy biztos legyen, hogy

egyedi neve lesz a feltöltött fájlnak. Ez több lépésből tevődik össze:

else {

Beállítjuk a véletlen szám generátort, hogy 0-9 között generáljon számokat.

$chars = array_merge(array('gall_'),range(0,9)); @srand((double) microtime() * 1000000);

Majd elkezdődik a prefix összeállítása:

do { $prefix_id = array_rand($chars,8); $prefix = ''; foreach($prefix_id as $key=>$id) {$prefix .= $chars[$id]; } $prefix .= '_'; $type = end(explode('.',$filename)); $name = basename($filename); $new_name = $prefix.preg_replace('/([^a-z0-9.,_])/i','_',$name); $new_name .= '.'.$type; } while(file_exists($upload_dir.'/'.$new_name));

Ha a generált fájlnév szerepel már a célkönyvtárban, akkor újragenerálja, ha még nem,

akkor továbbmegy és elvégzi a fájlműveleteket.

$movie=move_uploaded_file($tempname,$dirname.$new_name); $filename=$new_name; if($movie) { $sql_input_up_pic="INSERT INTO `gallery_files` (`gall_id`, `file_name`, `href`) VALUES ('".$_POST['cat_list']."', '".$filename."', '".$dirname."')"; $query_i_u_f=mysql_query($sql_input_up_pic);

Amennyiben sikerült a fájlt a célkönyvtárba helyezni, akkor be is illesztjük az új rekordot a

gallery_files táblába. Esetlegesen a felmerülő hiba esetén, üzenetet küldünk a

felhasználónak, hogy tudja, melyik műveletnél akadt el a feltöltés.

Kép törlése a képtárból a következőképpen történik:

function delete_image() { $sql_delete="SELECT * FROM `gallery_files` WHERE `id`='".$_GET['id']."'"; $query_delete=mysql_query($sql_delete); $del=mysql_fetch_assoc($query_delete);

Page 30: Kerepesi László - Szakdolgozat

Saját fejlesztésű CMS létrehozása Kerepesi László

30

$pictures=$del['file_name']; $ext = end(explode('.',$pictures)); $pictures = basename($pictures,'.'.$ext); $pictures =$pictures.'.'.$ext.'_th.jpeg'; $delete = unlink($del['href'].$del['file_name']); $delete_th = unlink($del['href']."th/".$pictures);

A kép adatainak kiolvasása a táblából és törlése fizikailag a fájlrendszerből.

if($delete AND $delete_th) { $sql_remove="DELETE FROM `gallery_files` WHERE `id` = '".$_GET['id']."'"; $query_remove=mysql_query($sql_remove);

Ha a képet és a miniatűrt is sikeresen töröltük, akkor az adatbázisból is törölni kell a rá

volnatkozó rekordot, majd a művelet kimeneteléről értesítjük a felhasználót.

3.6 Fórum

A következőkben az oldalon szereplő fórumot szeretném bemutatni. A fórum a vállalat

életében megvalósíthatja a kommunikációt a dolgozók és a vezetők között. A fórum

témáihoz, csak bejelentkezet felhasználóknak van lehetősége hozzászólni, hogy nevesítve

legyenek a vélemények, a válaszok, valamint azok időpontjai is.

Teremészetesen a fórum is MySQL táblákat használ:

FORUM_TOPICS: ebben tárolódnak a témák (11. ábra)

11. ábra

FORUM_HSZ: ebben tárolódnak a témákhoz való hozzászólások (12. ábra)

12. ábra

A két táblát a forum_topic.topic_id és a forum_hsz.topic_id mezőkön keresztül kapcsoljuk

össze 1:N kapcsolattal.

Mindenekelőtt témaköröket kell létrehozni, hogy aztán hozzászólásokat tudjunk hozzájuk

fűzni. Ezt a következő függvénnyel tehetjük meg:

function topic_add_and_edit($mode) { if($mode == "edit")

Page 31: Kerepesi László - Szakdolgozat

Saját fejlesztésű CMS létrehozása Kerepesi László

31

{ $sql_edit_topic="SELECT * FROM `forum_topics` WHERE `topic_id` = '".$_GET['topic_id']."'"; $query_edit_topic=mysql_query($sql_edit_topic); $topic_edit=mysql_fetch_assoc($query_edit_topic); } ... if($_POST['send']) { if($mode == "edit") { $topic_title=mysql_real_escape_string($_POST['new_topic']); $sql_new_topic="UPDATE `forum_topics` SET `topic_title` = '".$topic_title."' WHERE `topic_id` = '".$_GET['topic_id']."'"; $query_sql=mysql_query($sql_new_topic); } else { $topic_title=mysql_real_escape_string($_POST['new_topic']); $sql_new_topic="INSERT INTO `forum_topics` (`topic_title`) VALUES ('".$topic_title."')"; $query_sql=mysql_query($sql_new_topic); }

Ha a szerkesztő módban hívják meg a metódust, akkor módosítja a kiválasztott témakör

nevét, ha nem, akkor csak létrehozza az új bejegyzést a „forum_topics” táblába.

A kezdő oldal, amivel a felhasználó először találkozik az a fórum témáinak a listája:

function topic_list() { ?> <table align="center" width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td class="cmenu_bg" width="50%">Téma</td> <td class="cmenu_bg" width="25%"><div align="center">Hozzászólások száma</div></td> <td class="cmenu_bg" width="25%"><div align="center">Utolsó hozzászóló</div></td> </tr> <? $sql_topic_list="SELECT * FROM `forum_topics`"; $query_list=mysql_query($sql_topic_list); while($topics=mysql_fetch_assoc($query_list)) { $sql_hsz_numb="SELECT COUNT( * ) AS hsz_numb FROM `forum_hsz` WHERE `topic_id`='".$topics['topic_id']."'"; $sql_old_user="SELECT * FROM `forum_hsz` WHERE `topic_id`=".$topics['topic_id']." ORDER BY `date` DESC LIMIT 1"; $query_numb=mysql_query($sql_hsz_numb); $query_user=mysql_query($sql_old_user); $numb=mysql_fetch_assoc($query_numb); $old_user=mysql_fetch_assoc($query_user); ?> <tr> <td class="cmenu_bg" width="50%"> <div> <a href="index.php?page=forum&mode=hsz_read&topic_id=<?= $topics['topic_id'] ?>"> <?= htmlspecialchars($topics['topic_title']) ?></a> </div>

Táblázatos formában kiíratjuk a témákat, úgy hogy közben linkeket formálunk belőle.

<? if($_SESSION['rang'] == "Adminf" OR $_SESSION['rang'] == "Admin") {

Page 32: Kerepesi László - Szakdolgozat

Saját fejlesztésű CMS létrehozása Kerepesi László

32

?> <div align="left" style="margin-left:5px;" <font size="1"><a href="index.php?page=forum&mode=topic_edit&topic_id=<?= $topics['topic_id'] ?>">Szerkeztés</a> | <? if($_SESSION['rang'] == "Adminf") { ?> <a href="index.php?page=forum&mode=topic_delete&topic_id=<?= $topics['topic_id'] ?>">Törlés</a></font> </div> ...

Ha a bejelentkezett felhasználó rendelkezik magasabb jogosultságokkal, akkor megjelenik

számára a „Szerkesztés” funkció linkje, illetve Főadmin esetén még a „Törlés” is.

<td class="cmenu_bg" width="25%"><div align="center"><?= $numb['hsz_numb'] ?></div></td> <td class="cmenu_bg" width="25%"><div align="center"><a href="index.php?page=profil&mode=see&id=<?= $old_user['from_id'] ?>"> <?= $old_user['from'] ?></a></div></td>

A megfelelő oszlopba kiíratjuk a témához tartozó, már korábban küldött hozzászólások

számát, illetve az utolsó hozzászólást küldő felhasználó nevét.

Amikor valaki rákattint a számára szimpatikus témára, akkor megnyílik a témakörhoz

tartozó összes már korábban tárolt hozzászólás. Ehhez a hsz_read() metódust használjuk.

function hsz_read() { $sql_read="SELECT * FROM `forum_hsz` WHERE `topic_id`='".$_GET['topic_id']."' AND `recent_hsz_id` = '0' ORDER BY `date` DESC"; $query_read=mysql_query($sql_read);

Kilistázzuk a témához tartozó összes hozzászólást, időrendi sorrendben fordítva.

if($_SESSION['login']) { ?> <div align="center"><a href="index.php?page=forum&mode=hsz_add&topic_id=<?= $_GET['topic_id'] ?>">Hozzászólás küldése</a></div> <? } else { print '<div align="center" class="error">Hiba! Jelenkezzen be, ha hozzászólást kíván küldeni. </div>'; }

Ha be vagyunk jelentkezve, akkor megjeleni a link a „Hozzászólás küldése”-ről szóló link

ellenben figyelmeztetés, hogy jelentkezzen be a felhasználó.

while($hsz_data=mysql_fetch_assoc($query_read)) { ?> <table align="center" width="100%" cellpadding="0" cellspacing="0" border="0" class="forum_hsz_table"> <tr> <td width="35%"><b><?= htmlspecialchars($hsz_data['from']) ?></b></td> <td colspan="2" width="65%"><div align="right"><?= datum($hsz_data['date']) ?></div></td> </tr> <tr> <td colspan="3" width="100%"> <?= htmlspecialchars($hsz_data['hsz']) ?>

Page 33: Kerepesi László - Szakdolgozat

Saját fejlesztésű CMS létrehozása Kerepesi László

33

<? $sql_replace="SELECT * FROM `forum_hsz` WHERE `recent_hsz_id` = '".$hsz_data['id']."'"; $query_replace=mysql_query($sql_replace); if(mysql_num_rows($query_replace) > 0) { while($replace=mysql_fetch_assoc($query_replace)) { ?> <table align="left" width="100%" cellpadding="0" cellspacing="0" border="0" class="forum_hsz_replace_table"> <tr> <td><?= htmlspecialchars($replace['hsz']) ?></td> </tr> </table> <?

Majd kilistázzuk a felhasználó nevét, a hozzászólás dátumát, magát a hozzászólásokat és a

hozzászólásra érkezett választ, az utóbbit eltérő CSS beállításokkal.

... <a href="index.php?page=forum&mode=hsz_edit&hsz_id=<?= $hsz_data['id'] ?>&topic_id=<?= $_GET['topic_id'] ?>">Szerkeztés</a> | <? if($_SESSION['rang'] == 'Admin' OR $_SESSION['rang'] == 'Adminf') { ?> <a href="index.php?page=forum&mode=hsz_replace&topic_id=<?= $_GET['topic_id'] ?>&hsz_id=<?= $hsz_data['id'] ?>">Válasz</a> | <? if($_SESSION['rang'] == 'Adminf') { ?> <a href="index.php?page=forum&mode=hsz_delete&hsz_id=<?= $hsz_data['id'] ?>">Törlés</a> <? } } ?>

Mindenki tudja szerkeszteni a saját hozzászólását, és lehetőség van az „Admin” és

„Főadmin” jogosultsággal rendelkező felhasználóknak „Válasz” írására is, de

hozzászólásokat, csak a „Főadmin” tud törölni.

A hozzászólások a szerkesztése a következő módon történik:

function hsz_edit()

{...

if($_SESSION['id'] == $edit['from_id'] OR $_SESSION['rang'] == "Adminf") {...

Ha van jogunk a hozzászólást szerkeszteni (saját hozzászólásunk vagy „Főadmin” jogunk

van), akkor tovább megy, és a már korábban megadott adatokat (...) rögzíti az

adatbázisban:

if($_POST['send']) { $hsz_edited=mysql_real_escape_string($_POST['edit_hsz']);

Page 34: Kerepesi László - Szakdolgozat

Saját fejlesztésű CMS létrehozása Kerepesi László

34

$sql_edit="UPDATE `forum_hsz` SET `hsz` = '".$hsz_edited."' WHERE `id`='".$_GET['hsz_id']."'"; $query_edit=mysql_query($sql_edit);

Választ a hsz_add() függvényen keresztül adhatunk.

function hsz_add($mode) { ... if($_POST['send']) { if($mode="replace") { $hsz=mysql_real_escape_string($_POST['new_hsz']); $sql_input_hsz="INSERT INTO `forum_hsz` (`topic_id`,`hsz`,`from`,from_id,`date`, `recent_hsz_id`) VALUES ('".$_GET['topic_id']."','".$hsz."','".$_SESSION['nick']."','".$_SESSION['id']."','".time()."','".$_GET['hsz_id']."')"; $query_input=mysql_query($sql_input_hsz); } else { $sql_input_hsz="INSERT INTO `forum_hsz` (`topic_id`,`hsz`,`from`,`date`) VALUES ('".$_GET['topic_id']."','".$hsz."','".$_SESSION['nick']."', '".time()."')"; $query_input=mysql_query($sql_input_hsz); }

Ha választ írunk, akkor a „recent_hsz_id” mező is ki lesz töltve a rekordban, ha csak sima

hozzászólás, akkor erre a bejegyzésre nincs szükség, és e nélkül rögzítődik az új rekord.

A hozzászólás törlése csak a Főadmin privilégiuma:

function hsz_delete() { if($_SESSION['rang'] == "Adminf") { $sql_delete="DELETE FROM `forum_hsz` WHERE `id`='".$_GET['hsz_id']."'"; $query_delete=mysql_query($sql_delete); } }

A témakör törlése ugyancsak a Főadmin privilégiuma:

function topic_delete() { if($_SESSION['rang'] == "Adminf") { $sql_delete="DELETE FROM `forum_topics` WHERE `topic_id` = '".$_GET['topic_id']."'"; $query_delete=mysql_query($sql_delete); ... } else { print '<div align="center" class="error">Témát törölni csak a Főadmin tud.</div>'; } }

Ezzel be is fejeződtek a funkcionális modulok (Hírek, Galéria, Fórum) bemutatásai. Jöjjön

tehát az a modul, amelyet csak a Főadmin joggal érhető el!

Page 35: Kerepesi László - Szakdolgozat

Saját fejlesztésű CMS létrehozása Kerepesi László

35

3.7 Adminisztráció

A Főadminisztrátor munkáját megkönnyítve, minden felhasználónak lehetősége van saját

adatainak (e-mail cím, jelszó) megváltoztatására

function data_set() { $sql_set="UPDATE users SET email='".addslashes(htmlentities($_POST['email']))."', WHERE id='".$_SESSION['id']."'"; $query_set=mysql_query($sql_set); ... } function new_pass() { if($_POST['pass1'] === $_POST['pass2']) { $sql = "UPDATE `users` SET `jelszo` = '".md5($_POST['pass1'].'laci')."' WHERE id='".$_SESSION['id']."'"; mysql_query($sql); print '<div align="center" style="ok">A jelszavad sikeresen megváltoztattuk!</div>'; } else { print '<div align="center" style="error">A két jelszó nem eggyezik!</div>'; } }

Az e-mail címét és a jelszavát ezzel a két függvénnyel állíthatja be magának a felhasználó

A „Főadmin”-nak is van lehetősége a felhasználók adatainak a változtatására a

D:\xampp\htdocs\reflex\admin\users.php segítségével.

Itt lehetőség van a Név, E-mail cím, Rang illetve a Tiló listán való szereplés módosítására

is. Az utóbbi a következő SQL parancsokkal tehetjük meg:

if($_POST['bann_add']) { $sql_bann_add="INSERT INTO `bannlist` (`user_id`,`nick`,`ip`,`banntime`,`comment`) VALUES ('".$this->id."','".$this->nick."','".$this->regip."', '".time()."', '".$_POST['bann_comment']."')"; $query_bann_add=mysql_query($sql_bann_add); ... } if($_POST['bann_remove']) { $sql_bann_remove="DELETE FROM `bannlist` WHERE nick='".$this->nick."'"; $query_bann_remove=mysql_query($sql_bann_remove); ... }

Továbbá a „Főadmin” a beépülő program modulokat is menedzselheti a Plugin kezelőben.

Itt lehet megadni, hogy az egyes modulok, hogyan szerepeljenek a PAGE táblában,

ahonnan az INDEX.PHP kiolvassa a hivatkozásokat, mikor felépíti az oldalt. Ezen eszköz

segítségével, egyszerűen lehet beilleszteni új modulokat, különösebb programozói tudás

nélkül is.

Page 36: Kerepesi László - Szakdolgozat

Saját fejlesztésű CMS létrehozása Kerepesi László

36

A Plugin kezelő oldal tetején lehetőség van a SETTINGS tábla adatainak

megváltoztatására is, mint például „az oldal szerkesztője”, a „cég neve”, amelyik az oldalt

használja valamit, hogy az oldal éppen karbantartás alatt áll-e.

Az oldalon megjelenő menük feliratát, az egyes menüpontok hivatkozását és

elhelyezkedését, az adminisztrációs menüből nyíló „Menük” hivatkozás segítségével lehet

megváltoztatni a következő SQL paranccsal:

$sql_update_menu="UPDATE `menus` SET `name` = '".$_POST['name']."', `href` = '".$_POST['href']."', align =

'".$where."' WHERE id='".$_GET['menuid']."'";

Ugyan erről a helyről lehet új menüt létrehozni és törölni is:

$sql_input_menu="INSERT INTO `menus` (`name`,`href`,`align`) VALUES

('".mysql_real_escape_string(htmlspecialchars($_POST['name']))."','".mysql_real_escape_string($_POST['href'])."','".$wh

ere."')";

$sql_delete="DELETE FROM `menus` WHERE id='".$_GET['menuid']."'";

Mindezen műveleteket a „Főadmin” webes kezelő felületről teheti meg, és így nem kell

adatbázis szinten ismernie a rendszert, hogy megváltoztathassa a menük sorrendjét vagy

hivatkozását.

Még egy menüpontra szükség van, hogy az oldal kinézetét, stílusát is lehessen egy új CSS

fájl beolvasásával megváltoztatni. Ez a menüpont a Témakezelő, itt lehet váltani a több

eltérő színbeállítással, háttérrel rendelkező design beállítások között. (13. ábra)

13. ábra

Page 37: Kerepesi László - Szakdolgozat

Saját fejlesztésű CMS létrehozása Kerepesi László

37

4. Összegzés

Néhány éve már természetes, hogy az internet bárki számára elérhető. Már nem számít

különlegességnek az, hogy bárki passzívan csak használója legyen a világhálónak. Ennek

köszönhetően az aktív részvétel is egyre jobban előtérbe kerül. Így már nem csak

használjuk az internetet, hanem aktív részesei vagyunk a tartalom előállításának.

Ezen dolgok tükrében már természetes az, hogy minden szervezetnek és vállalkozásnak

van saját weboldala. Az általam fejlesztett portál célja, hogy egy vagy több kiemelt

felhasználó tudja szerkeszteni az oldal tartalmát különösebb programozási tudás nélkül is.

Ez úgy valósulhat meg, hogy minden funkcióra külön kezelőfelületet kell biztosítani, hogy

ezek a kiemelt „Admin” szintű felhasználók csak „kattintgatva” tudjanak beállításokat

végrahajtani az oldalon. Akár a hírekről, akár képek feltöltéséről, vagy a fórumról legyen

szó, mindegyik esetben igyekeztem egyszerű megoldást találni a funkciók kezelésére.

Természetesen mielőtt a felhasználók birtokba vennék a rendszert, lehetőségeink szerint

tesztelnünk kell különféle szélsőséges bemeneti paraméterekkel is, hogy lássuk mennyire

stabil a program. Valamint egy dokumentációt (képekkel és magyarázattal), a felhasználók

rendelkezésére kell bocsátani, hogy tudják, hogy az egyes funkciókat, hogyan kell

használni. Ugyanígy megfelelő oktatás kell a Főadmin részére is, a tisztában legyen az

említett adminisztratív feladatokkal. Ezeken felül a fejlesztő elérhetőségét is meg kell adni,

hogy a későbbiekben előforduló üzemzavarok, anomáliák, vagy további fejlesztési igény

esetén legyen kihez fordulni.

Az Adminisztráción belül plugin kezelővel és menük dinamikus változtathatóságával

elértük, hogy egyszerűen változtathassuk kedvünkre az oldal külalakját és funkcionalitását

egyaránt. Ezen eszközök igazán rugalmassá teszik az oldalt, és így nem kell magas szintű

programozói felkészültség, hogy egyénileg testre szabhassuk az oldalt, és ez a CMS

oldalak sikerének titka.

Page 38: Kerepesi László - Szakdolgozat

Saját fejlesztésű CMS létrehozása Kerepesi László

38

Irodalomjegyzék

Zandstra, Matt: Tanuljuk meg a PHP4 használatát 24 óra alatt

(2000 Kiskapu Kft.)

Peter Moulding: PHP haladóknak - Fekete Könyv

(2002 ComputerBooks Kft.)

Webvilág - A PHP, a MySQL és az Apache használata

(2003 Panem Kiadó Kft.)

http://hu.wikipedia.org/wiki/CMS

(2009. január 8. Volkov)

http://cms.whysoft.hu/mi_a_cms.html

(2007 WhySoft Hungary Kft.)

http://aeonline.hu/szakdolgozatom/wordpress_tartalomkezelo_bemutatasa.pdf

( 2007 Mondovics Mihály)

http://www.scribd.com/doc/7578164/A-Joomla-Tartalomkezel-Rendszer-Bemutatasa

(2007 Lovászi Nándor Zsolt)

http://www.scribd.com/doc/8451317/A-PHP-nyelv

(2004 Révész György)