Az első két fejezetben bemutattuk hogyan kell elkészíteni egy MVC komponenst. Egy nézetünk volt, amely megjelenítette a modell adatait (amelyet a 2. fejezetben hoztunk létre). Ebben a részben a modellel fogunk foglalkozni. A modellbe ágyazott statikus szöveg helyett a modell az adatbázisból fogja venni az adatokat.
Ez a leírás bemutatja, hogyan kell használni a JDatabase osztályt az adatok adatbázisból való átadásához.
Tartalomjegyzék |
A modellünknek jelenleg egy metóedusa van: getGreeting(). Ez a metódus nagyon egyszerű - mindösszesen a statikusan beágyazott szöveget adja vissza.
A dolgok még érdekesebbé tételéhez az üdvözlést az adatbázisból fogjuk betölteni. Később bemutatjuk majd, hogyan készítsünk egy SQL fájlt és adjuk hozzá a megfelelő kódot az XML fájlhoz, tehát hogy az adatbázis tábla, valamint a mintaadatok a komponens telepítésével együtt jöjjenek létre. Most viszont csak egyszerűen lecseréljük a return parancsot néhány sornyi kóddal, amely az üdvözlést az adatbázisból adja át.
Az első lépés az adatbázis objektum referenciájának létrehozása. Mivel a Joomla! a működéséhez az adatbázist használja, ezért az adatbázis kapcsolat már létezik, tehát nem kell a sajátunkat létrehozni. A meglévő adatbázis referenciájának létrehozásához használjuk a következő kódot:
$db =& JFactory::getDBO();
A JFactory egy statikus osztály, amelyet arra használunk, hogy hozzáférjünk a különböző rendszer objektumokhoz. További infomáció az API dokumentációban található erről az osztályról.
A metódus neve (getDBO) a 'get DataBase Object' szavak rövidítése, könnyű és fontos megjegyezni.
Most hogy már rendelkezünk az adatbázis objektum referenciájával, megkaphatjuk az adatainkat. Ezt két lépésben végezzük:
Az új getGreeting() metódusunk tehát így néz ki:
function getGreeting()
{$db =& JFactory::getDBO();
$query = 'SELECT greeting FROM #__hello';
$db->setQuery( $query );
$greeting = $db->loadResult();
return $greeting;
}A 'hello' az adatbázis táblának a neve, amelyet később hozunk létre, a 'greeting' pedig a mező neve, amely az üdvözlést tartalmazza.
A $db->loadResult() metódus végrehajtja az eltárolt kérést és visszaadja a kimenet első sorának első mezőjét. Bővebb információért nézzük meg a JDatabase API referenciáját a további JDatabase metódusokért.
A Joomla! telepítője rendelkezik azzal a képességgel, hogy kéréseket hajt végre a komponenens telepítése során. Az összes ilyen kérés egy egyszerű szöveges fájlban található, melynek az admin könyvtárban kell lennie.
Három kérés lesz a mi telepítő fájlunkban: az első eldobja a táblát ha már létezik, a második létrehozza a táblát a megfelelő mezőkkel, a harmadik pedig beilleszti az adatokat.
Tehát a mi kéréseink:
DROP TABLE IF EXISTS `#__hello`;
CREATE TABLE `#__hello` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`greeting` varchar(25) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
INSERT INTO `#__hello` (`greeting`) VALUES ('Hello, World!'),
('Bonjour, Monde!'),
('Ciao, Mondo!');
A tábla előtagját elég furának találhatjuk. A Joomla! lecseréli ezt az előtagot a telepített rendszer által használt előtaggal. A legtöbb telepítés esetén ez a tábla a jos_hello nevet kapja. Ezzel lehetőségünk van több Joomlát telepíteni ugyanannak az adatbázisnak a használatával, valamint megelőzi a más alkalmazásokkal való összeütközést, amelyek ugyanazt a táblenevet használják (pl. két alkalmazás lehet ugyanabban az adatbázisban, de mindkettőnek lehet egy 'users' táblája).
Két mezőt hoztunk létre az adatbázisunkban. Az első mező az id, amely egy elsődleges kulcs. Egy tábla elsődleges kulcsa az a mező, amely egyértelműen beazonosítja a rekordot. Ezt gyakran használják sorok megtalálására. A másik mező a greeting. Ez az a mező, amely tárolja az üdvözléseket és amelynek az értéke a fent használt kéréssel átadódik.
Egy install.utf.sql nevű fájlba mentjük el a kéréseinket.
Habár azt gondolhatjuk, hogy az emberek soha sem fogják eltávolítani a komponensünket, fontos, hogy ha mégis megteszik, ne hagyjunk magunk után semmit. A Joomla! elvégzi a fájlok és könyvtárak törlését, amelyek a telepítés során jöttek létre, de az adatbázis eltávolításához maunálisan kell elhelyezni a kódot. Mivel csak egy táblát készítettünk, egy kérésre lesz szükségünk:
DROP TABLE IF EXISTS `#__hello`;
Ezt a kérést egy uninstall.utf.sql nevű fájlba mentjük.
Néhány dolgot meg kell változtatnunk a telepítő fájlban. Először hozzá kell adnunk a két új fájlunkat a telepítendő fájlok listájához. Az SQL telepítő fájlnak az admin könyvtárban kell lennie. Másodszor, meg kell mondanunk a telepítőnek, hogy hajtsa végre a kéréseket telepítésnél és eltávolításnál.
Az új fájlunk így néz ki:
<?xml version="1.0" encoding="utf-8"?><!DOCTYPE install SYSTEM "http://www.joomla.org/xml/dtd/1.5/component-install.dtd"><install type="component" version="1.5.0"><name>Hello</name>
<!-- The following elements are optional and free of formatting conttraints --><creationDate>2007 02 22</creationDate>
<author>John Doe</author>
<authorEmail>john.doe@example.org</authorEmail>
<authorUrl>http://www.example.org</authorUrl>
<copyright>Copyright Info</copyright>
<license>License Info</license>
<!-- The version string is recorded in the components table --><version>Component Version String</version>
<!-- The description is optional and defaults to the name --><description>Description of the component ...</description>
<!-- Site Main File Copy Section --> <files folder="site"><filename>index.html</filename>
<filename>hello.php</filename>
<filename>controller.php</filename>
<filename>views/index.html</filename>
<filename>views/hello/index.html</filename>
<filename>views/hello/view.html.php</filename>
<filename>views/hello/tmpl/index.html</filename>
<filename>views/hello/tmpl/default.php</filename>
<filename>models/hello.php</filename>
<filename>models/index.html</filename>
</files> <install> <sql><file charset="utf8" driver="mysql">install.sql</file>
</sql> </install> <uninstall> <sql><file charset="utf8" driver="mysql">uninstall.sql</file>
</sql> </uninstall> <administration> <!-- Administration Menu Section --><menu>Hello World!</menu>
<!-- Administration Main File Copy Section --> <!-- Note the folder attribute: This attribute describes the folder to copy FROM in the package to install therefore files copied in this section are copied from /admin/ in the package --> <files folder="admin"><filename>index.html</filename>
<filename>admin.hello.php</filename>
<filename>install.sql</filename>
<filename>uninstall.sql</filename>
</files> </administration></install>Észrevehetjük, hogy a <file> tagnak két attributúma létezik: charset és driver. A charset a használni kívánt karakterkódolás. Az egyetlen érvényes karakterkódolás az utf8. Ha nem utf8 adatbázishoz kívánunk telepítő fájlt készíteni, akkor hagyjuk figyelmen kívül ezt az attribútumot.
A driver attribútum azt határozza meg, hogy milyen adatbázishoz készült a kérés. Jelenleg ez csak mysql lehet, de a Joomla! későbbi verzióban további adatbázisok is választhatók lesznek.
Most már van egy komponensünk, amely kihasználja mind a Joomla! MVC keretrendszer, mind pedig a JDatabase osztály előnyeit. Most már képesek vagyunk egy MVC komponens megírására, amely kapcsolatban áll az adatbázissal és a telepítőt használja adatbázis táblák létrehozására és felöltésére.
A leírásban szereplő com_hello komponens letöltése.
A cikk forrása: Joomla! Documentation