Op het moment dat dit bericht is geschreven is de code nog niet compleet, aanpassingen zijn dus mogelijk!
In deze tutorial zullen we een package maken met de naam “menubuilder”, deze package gaat de verantwoordelijkheid krijgen om meerdere menu’s te creëren.
Packages en modules maken beide gebruik van dezelfde hoofdklasses. Door het gebruik van dezelfde library’s zal het ontwikkelen veel sneller verlopen.
We beginnen met het maken van een nieuwe map in “app/packages/”, de gekozen naam zal de package naam worden. De volgende mappen worden geplaatst in de package:
De package initialisatie bespreken we later, eerst gaan we een model defineren.
Map: Models
Alle bestanden in de map models hebben de verantwoordelijkheid om de database aan te spreken. De tabel die we willen aanspreken heet MOmenu, dit betekend dat we een bestand momenu.inc.php moeten maken.
De tabel ziet er zo uit:
Zoals je ziet zijn de velden: id, menuId, webpage, title gedefineerd in deze tabel. Om de model hiermee om te kunnen laten gaan moeten we van deze velden een property maken. In het meest simpele geval is dit dus voldoende code:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php
class MO_PACKAGE_Menubuilder_MODEL_MOmenu extends MO_LIB_Model {
public function __construct() {
parent::__construct($this);
}
public $id;
public $menuId;
public $webpage;
public $parent;
public $title;
}
?> |
De package
Mits de package over word geërfd door MO_LIB_Module (zoals het moet) zal het zelf al aangeven dat deze de functie init nodig heeft. In de init methode declareren we de models en views die we later gaan gebruiken. Models voegen we toe met de methode setModelList. Deze kunnen we later terugvragen met de methode getModel. Onderstaande code geeft aan hoe we een selectQuery uitvoeren, en deze teruggeven.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<?php
class MO_PACKAGE_Menubuilder extends MO_LIB_Module {
protected $menuModel;
public function __construct() {
parent::__construct();
}
protected function init() {
$this->setModelList('PACKAGE_Menubuilder', array('MOmenu'));
$this->menuModel = $this->getModel('MOmenu');
}
public function main() {
$result = $this->menuModel->selectQuery();
return '<pre>'.print_r($result,1).'</pre>';
}
}
?> |
De functie main is altijd de returnmethode die aangeroepen zal worden, ook deze functie wordt afgedwongen door het CMS.
Update:
Ondertussen werkt de paginaloader ook, deze geeft een iets betere indruk wat de modeler teruggeeft
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
protected function getPagina($paginaId) {
try {
$rs = $this->pageModel->selectQuery('id = '.$paginaId);
if(count($rs) == 1) {
$this->currentPage = $rs[0];
} else {
throw new MO_Exception('Pagina bestaat niet (paginaId'.$paginaId.')');
}
}
catch(MO_Exception $e) {
die('Gevraagde pagina bestaat niet');
}
}
public function main() {
return 'Bekijk pagina: '.$this->currentPage['title'];
} |

