WEBSITES MAKEN MET ZEND FRAMEWORK. (Geschreven en gepubliceerd door Stijn Leenknegt)

Maat: px
Weergave met pagina beginnen:

Download "WEBSITES MAKEN MET ZEND FRAMEWORK. (Geschreven en gepubliceerd door Stijn Leenknegt)"

Transcriptie

1 WEBSITES MAKEN MET ZEND FRAMEWORK (Geschreven en gepubliceerd door Stijn Leenknegt)

2 VOORWOORD & INLEIDING

3 Websites maken met Zend Framework is een pakket geschreven door mij (stijn leenknegt) voor de mensen die websites willen maken op een hoger niveau. Zend Framework is onlangs uit beta gegaan en men kan het framework dus nu volledig gebruiken voor applicaties te maken. In het pakket gaan we een kleine portfolio schrijven mbv Zend Framework (je kan ook ZF gebruiken). Om deze lessen te begrijpen moet je kennis hebben van enkele zaken. Eerst en vooral moet je het MVC model begrijpen (aangezien ZF gebruik maakt van het MVC model). Daarnaast moet je over een goede kennis Object Oriented Programming beschikken omdat de php code 90% OOP is. Er is niet echt kennis van Zend Framework nodig maar het is mooi meegenomen. is het werkgebied van dit pakket en zal veranderen van een error naar een "mooie" portfolio. Vragen of opmerkingen -> Veel leesplezier Stijn Leenknegt

4 DE FUNDERINGEN MAKEN

5 1. Webserver klaarmaken We hebben een webserver nodig met volgende configuratie: Apache (versie speelt geen rol) PHP of later MySQL (of een andere database programma, hier staat MySQL omdat in dit pakket MySQL gebruikt wordt). Zend Framework of later In de public_html, www of httpdocs map van Apache maken we een map met de naam portfolio. In deze map maken we opnieuw een map met de naam library. Hierin komen alle third party codes. In de map van Zend Framework staat een map Zend. Kopieer deze naar de map library van de map portfolio. Ziezo, nu staat alles klaar om te gebruiken. Volgend punt is de website structuur maken. 2. Website structuur Bij dit punt zal je denken: wat een overdreven structuur. Wel beste lezer, dit is nu MVC op zijn best! Hieronder vind je de map structuur die wij gaan gebruiken. De mappen die vet gekleurd zijn, zijn de mappen die wel al in punt 2 gemaakt hebben en die moet je dus niet meer maken../portfolio./application./controllers./models./views./helpers./filters./scripts./library./zend./public./styles./javascripts./media./images./flash In de map./public/media/ kan je allerlei media bestanden plaatsen zoals: afbeeldingen, filmpjes, flash filmpjes, PDF documenten,...

6 Als je deze structuur gemaakt hebt kunnen we nu overgaan naar het volgende punt. 3. Beveiliging van de structuur De mensen mogen de inhoud van de mappen niet kunnen bekijken, dus we moeten deze beveiligen. Hiervoor gaan we gebruik maken van.htaccess bestanden. Neem volgende code over en zet deze in een.htaccess bestand. deny from all Vervolgens zet je die.htaccess bestand in de mappen./application en./library. In de map./public niet omdat we anders geen publieke data kunnen toevoegen aan onze website (<img src=./public/media/images/help.gif > zal niet werken omdat deze geblokkeert zou worden door de.htaccess). De website maakt gebruik van nette URL's en dus zullen we gebruik maken van de Apache extensie mod_rewrite. Zet volgende code in een.htaccess bestand en zet dat.htaccess bestand in de map./portfolio.

7 RewriteEngine on RewriteRule.* index.php php_flag magic_quotes_gpc off php_flag register_globals off Het volgende probleem stelt zicht opnieuw voor in de map./public. Wanneer we terug <img src=./public/media/images/help.gif > zullen typen zal mod_rewrite dit niet begrijpen en zeggen dat hij de pagina niet kan vinden. Dus we maken een.htaccess aan in de map./public met volgende code: RewriteEngine off Nu is onze structuur beveiligd en kunnen we gebruik maken van nette URL's. Over naar punt De bootstrap De bootstrap klinkt onbekend maar met de bootstrap bedoelen we de index.php. Wanneer je naar een website gaat met de url?pagina=contact wordt in de bootstrap (index.php) de correct php ingeladen aan de hand van $_GET['pagina']. De bootstrap (begin): <?php //full error reporting error_reporting(e_all); set_include_path( '.'. PATH_SEPARATOR. './library/'. PATH_SEPARATOR. get_include_path() ); //include zend loader include_once('zend/loader.php'); //load the classes Zend_Loader::loadClass('Zend_Controller_Front');?> - set_include_path: zoals je ziet worden er 2 mappen toegevoegd aan de include path. De include path is het path waar include/require zal zoeken wanneer hij het bestand niet vindt. We hebben dus eerst onze portfolio map toegevoegd en daarna de map./library/. Deze laatste is belangrijk omdat we niet constant moeten./library/ typen als we iets van het Zend Framework of andere third party code willen includen. - include_once: we includen het bestand./library/zend/loader.php maar aangezien./library/ al staat in de include path moeten we die niet meer typen en typen we dus enkel Zend/Loader.php. Loader.php zorgt ervoor dat we makkelijk componenten en/of classes van het Zend Framework kunnen laden. Maar opgepast! Je kan hier ook je eigen classes mee inladen als je dat wenst. De Loader is slechts maar een component van het framework. Zend_Loader::loadClass(): Zend Loader kan je gebruiken zonder dat je een instance moet maken.

8 de static function loadclass kan je dus gebruiken om classen te laden. Hierin wordt de class Zend_Controller_Front geladen (werkt als include). Je denkt nu: er staat nergens een bestand Zend_Controller_Front ergens in me map en ook nergens in me library. De loadclass functie zal alle _ (underscores) vervangen door / (schuine strepen) en er.php aan toevoegen. Dus de code zal het volgende includen: Zend/Controller/Front.php en dat bestand vind je wel terug. De Zend_Front_Controller class wordt geladen omdat we die nodig hebben zodat Zend Framework de correct controller kan laden. De front controller maakt gebruik van een router class en zal door behulp van de url de correct controller class en action laden en deze uitvoeren. We gaan verder met onze bootstrap. Het enige wat nu nog moet gebeuren is het configureren van de Zend_Front_Controller. index.php: <?php //full error reporting error_reporting(e_all); set_include_path( '.'. PATH_SEPARATOR. './library/'. PATH_SEPARATOR. get_include_path() ); //include zend loader include_once('zend/loader.php'); //load the classes Zend_Loader::loadClass('Zend_Controller_Front'); //configure the front controller $controller = Zend_Controller_Front::getInstance(); $controller->setcontrollerdirectory('./application/controllers'); //run the conroller $controller->dispatch();?> We maken een instance van de front controller en daarna zeggen we waar de controllers van onze website staan. De dispatch functie zal de request, de URL, in stukken verdelen: Module Controller Action Toegevoegde parameters Aan de hand van de URL zal hij de juiste class inladen en de action uitvoeren. Wanneer de dispatcher de module, controller en action niet vind zal hij de default module, controller en/of action gebruiken. Dit is standaard index maar je kan deze wijzigen door de functies setdefaultmodule, setdefaultcontroller en setdefaultaction. Let op: hier gebruiken we geen modules dus hier moet je niet naar kijken.

9 DE CONTROLLERS

10 Deel 2 gaat verder waar deel 1 gestopt is. Het laatste wat we er gebeurt was is het configureren van de controllers en dus gaat deel 2 over Controllers. Meer info over controllers vind je in de tutorial over het MVC model. Controllers zorgen ervoor dat de input van de gebruiker (url, formulier data,...) correct verwerkt wordt (mbv Models) en dat er een correcte output op het scherm van de gebruiker komt te staan (mbv Views). De URL's gaan er altijd als volgt uitzien: / controller / action / 1. De eerste controller maken De eerste controller die we maken is de IndexController. Deze moet als eerste gemaakt worden omdat wanneer de andere controller niet gevonden kan worden deze kan worden aangeroepen. Ingewikkeld? Een voorbeeldje: Stel dat een bezoeker volgende URL intikt: deze controller bestaat niet en dus zal de controller automatisch de default controller tonen en dat is Hetzelfde geldt ook voor de action. Stel dat de action niet gevonden wordt maar wel de controller. Dan wordt de indexaction aangeroepen van de controller. Oké we gaan nu onze IndexController maken. We nemen een leeg PHP bestand en we nemen volgende code over: IndexController.php: <?php class IndexController extends Zend_Controller_Action public function indexaction() echo "Dit is de indexaction."; De naam van de controller is index en dus moet je bestand altijd zo heten: IndexController.php. Dus als je de controller gallery wilt heet je bestand GalleryController.php. Deze php bestanden zet je altijd in de map./application/controllers/, want dat is de locatie die we in de bootstrap geconfigureerd hebben.

11 De code uitleg: class IndexController extends Zend_Controller_Action: wat? denk je. Iedere controller is een class. Deze class krijgt dezelfde naam als de naam van je php bestand (nl. IndexController). Iedere controller class moet de class Zend_Controller_Action extenden omdat in de controller class de actions worden gemaakt (en andere controller functies). public function indexaction(): iedere action is een public function. Deze draagt altijd de naam indexaction. Dus wanneer je naar gaat dan wordt de action bewerkenaction() aangeroepen in de IndexController. Note:?> moet niet op het einde van het php bestand. Sommigen weten dat niet maar je moet enkel?> zetten in bestanden waar naast php code ook nog andere code staat (zoals html tags). Wanneer je nu gaat naar zal de default Controller en Action aangeroepen worden, maar je ziet opnieuw die error. Je doet niets verkeerd maar dit komt omdat we onze View gedeelte nog niet gemaakt hebben. Om dit op te lossen moeten we volgende code toevoegen aan onze configuratie van de front controller in de index.php (bootstrap bestand). $controller->setparam('noviewrenderer', true); Hiermee zeg je aan de controller dat er geen gebruik wordt gemaakt van de View. Wanneer je refresht zie je mooi de tekst van de indexaction op je scherm. 2. De controllers en actions bedenken Het is belangrijk om te weten welke pagina's je gaat maken en welke actions. Dit is de lijst met de controllers en actions die wij nu gaan maken. IndexController indexaction (de startpagina van onze portfolio) infoaction (hier komt wat informatie te staan) contactaction (een contact pagina) GalleryController indexaction (de startpagina van de gallery, hier wordt de volledige gallery getoont) viewaction (een item in detail bekijken) addaction (een item toevoegen aan de gallery) editaction (een item bewerken in de gallery) deleteaction (een item verwijderen van de gallery) Dat zijn niet zoveel controllers/actions maar bij een grote website kan dit al snel uitbreiden. In puntje 4 gaan we de eerste Controller verder afwerken.

12 3. De IndexController afwerken Als je de IndexController.php gesloten hebt moet je die opnieuw openen. We hebben al reeds de controller class gemaakt en de eerste indexaction. Nu moet je nog infoaction en contactaction toevoegen. Je kan terug volgende code overnemen of zelf eens proberen en daarna vergelijken. IndexController.php: <?php class IndexController extends Zend_Controller_Action public function indexaction() echo "Dit is de indexaction."; public function infoaction() echo "Dit is de infoaction."; public function contactaction() echo "Dit is de contactaction."; Wanneer je nu naar gaat dan zie je op je scherm: Dit is de infoaction. Hetzelfde gebeurt wanneer je de action verandert naar contact in de URL. Krijg je dit niet, kijk dan eens na of je geen fout hebt getypt, de juiste class hebt gemaakt,...

13 4. De GalleryController Nu mag je het zelf eens proberen. Volgende puntjes om je wat te helpen: Plaats het php bestand in de map./application/controllers/ De controller class extends de Zend_Controller_Action class. Voor de actions zie punt 3 van deze tutorial. En nu is het aan jou. Wil je weten of je code correct is? Klik dan op de volgende link, Als alles goed is zal een mooie tekst op het scherm toveren.

14 DE VIEWS

15 We hebben nu onze controllers al maar al wat we krijgen is een simpele tekst. In deel 3 gaan we een layout toevoegen en leer je de View van het MVC model wat beter kennen. Kennis van template parsers is goed meegenomen. Dankzij de gratis templates van moeten we niet te ver gaan zoeken achter een goed layout. Je kan hem downloaden door op de volgende link te klikken. Je vind er 4 bestanden (header.phtml, footer.phtml, menu.phtml en layout.css). De linken zijn al gelegd in het menu (zie deel 2: controllers). De extensie wordt in punt 2 uitgelegd. Over naar punt 1, hier gaan we de templates bouwen en juist plaatsen. 1. Templates bouwen en organiseren Laat me eerst beginnen met de extensie. Het view gedeelte van Zend framework gebruikt de extensie phtml om aan te tonen dat het gaat om een template. phtml is een samenvoegsel van php en html. Dit gaat later héél duidelijk worden waarom. Het eerste wat er gebeurt is een nieuwe map maken. Iedere controller krijgt zijn eigen map waarin de templates komen voor de verschillende acties. Als je naar de map./application/views/ gaat zie je 3 mappen staan (zie deel 1). Open de map scripts. Hierin maak je een nieuwe map. Deze geef je de naam index. Dat is de naam van de controller (let op de schrijfwijze: kleine letters). Je maakt ook een map aan voor de GalleryController. We hebben nu 2 mappen in de map scripts (index en gallery). Je hebt de 4 bestanden gedownload en uitgepakt ergens op je computer (of server). Volgende lijst bevat het bestand en de locatie waar dat bestand moet staan: layout.css: /public/styles/ header.phtml: /application/views/scripts/ footer.pthml: /application/views/scripts/ menu.phtml: /application/views/scripts/ We gaan nu onze eerste pagina maken. De eerste pagina is de indexaction van IndexController. Dus we gaan onze code opslaan in de map./application/views/scripts/index/ en geven de template de naam index.phtml (de naam van de action, kleine letters!). index.phtml: <?php echo $this->render('header.phtml');?> <?php echo $this->render('menu.phtml');?> <div id="pagecontent"> <h1><?php echo $this->titel;?></h1> <p class="block">

16 tekst... </p> </div> <?php echo $this->render('footer.phtml');?> Nu snap je waarom de extensie.phtml is. code uitleg: $this->render(...): de bestanden die we zonet in de /scripts/ map geplaatst hebben worden in de template toegevoegd en weergeven op het scherm. De functie render zorgt ervoor dat we daadwerkelijk iets op het scherm te zien zullen krijgen. echo $this->titel: net zoals andere template parsers kan je variablen plaatsen in je templates. In templatepower is dit zo: titel en in zend framework zijn dit php variablen. $this is een instantie van de View class in zend framework. Je gaat in het volgende punt hier meer van verstaan. In de templates kan je dus dynamische content plaatsen. Je kan gebruik maken van alle code syntacs. Je kan while lussen maken, voorwaarden maken met if/else,... (een template parser in zijn eenvoud maar o zo goed). Onze template is gebouwd maar wat nu? In punt 2gaan we de templates leven inblazen. 2. De controllers laten de views leven We hebben nog maar één template voor de indexaction in de IndexController. We gaan de IndexController.php openen. We voegen volgende functie toe aan onze IndexController class. IndexController.php: public function init() $this->initview(); De init functie wordt altijd aangeroepen alvoors de action functie wordt aangeroepen. Hierin kunnen we objecten maken of initialiseren. We initialiseren nu het View gedeelte van Zend framework. Je kan het ook moeilijker maken en via Zend_Loader:loadClass('Zend_View'); de class inladen en daarna een instantie maken in iedere actie. Jij verkiest, maar deze manier is toch handiger en korter. In de bestanden header, footer en menu.phtml staan ook template variablen. Wanneer je de templates opent vind je volgende variablen terug: paginatitel stylespath url Omdat we die maar één keer willen schrijven, schrijven we ze direct in de init functie. Je init functie zal er nu zo uitzien (uitleg staat eronder):

17 IndexController.php: public function init() $this->initview(); //variablen declaren in header,menu en footer $this->view->url = $this->_request->getbaseurl(); $this->view->stylespath = $this->view->url. 'public/styles/'; code uitleg: In de templates staat er echo $this >url. Nu zei ik al dat $this een instantie is van de view component. Wanneer we de view initialiseren in de controller dan is $this >view ook een instantie van de view component. Dit betekend dat ze beide naar dezelfde class verwijzen. Dus wanneer je een variable $this >mijnvariable; zet in een template dan moet je in je controller $this >view >mijnvariable gebruiken om inhoud te geven aan die variable of om de variable inhoud te veranderen. Note: de template variable paginatitel is niet toegevoegd in de init functie omdat deze verschilt per action (zie volgend punt) De indexaction() Nu gaan we de andere variablen declareren en de template op het scherm toveren. In de indexaction() staat nu een echo. Deze mag je weg doen en volgende code plakken/typen in de plaats. IndexController.php: public function indexaction() $this->view->paginatitel = 'Startpagina'; $this->view->titel = 'Welkom op mijn portfolio :]'; $this->render(); code uitleg: De variablen declareren is niets nieuws meer voor jou. $this >render(): je moet hier niet index.phtml of iets anders in plaatsen. De view component zal automatisch de index.phtml vinden in de./application/views/scripts/index/ map. Hiermee wordt de complete layout getoont op het scherm. Wanneer je nu naar je website gaat, zie je dat de layout mooi op je scherm staat. Zijn er foutmeldingen of wordt de layout niet mooi weergegeven? Kijk of je template variable url correct ingevuld is (de / niet vergeten op het einde). Staan je templates correct?

18 Werkt het nog steeds niet? Zet dan de noviewrenderer parameter op false in de bootstrap. 3. Helpers In de views map staan er ook nog andere twee mappen: filters en helpers. De map filters blijft voor mij nog een groot vraagteken omdat hier niets over geschreven wordt in het framework manual. Er is wel een Filter component en misschien dat dit een locatie is waar je eigen gemaakte filters in kan opslaan (bij mij werkte dit niet echt goed). Helpers daarentegen maken het ontwikkelen echt een plezier. Weg met al dat HTML getyp, leve de helpers. Helpers helpen je templates sneller schrijven. Een voorbeeld: <?php echo $this->render('header.phtml');?> <?php echo $this->render('menu.phtml');?> <div id="pagecontent"> <h1><?php echo $this->escape( $this->titel );?></h1> <p class="block"> Welkom op mijn portfolio. </p> </div> <?php echo $this->render('footer.phtml');?> Zoals je ziet wordt de template variable titel ge escaped, dus wordt \. De functie escape is een Helper. Hieronder staat een lijst met alle beschikbare Helpers en de uitleg: declarevars(): hiermee kan je template variablen declareren zonder dat ze al een inhoud hebben. formbutton($name, $value, $attribs): maak een formulier knop. $attribs is een array. formcheckbox($name, $value, $attribs, $options): maak een checkboxelement. $options is een array waarin de eerste value een vinkje (waarde: 1) krijgt. formfile($name, $value, $attribs): maak een file element. formhidden($name, $value, $attribs): maak een hidden element. formlabel($name, $value, $attribs): maak een label element. formpassword($name, $value, $attribs): maak een password element. formradio($name, $value, $attribs, $options): maak een radio element. formreset($name, $value, $attribs): maak een reset knop. formselect($name, $value, $attribs, $options): maak een select element. $options zijn de options. formsubmit($name, $value, $attribs): maak een submit knop. formtext($name, $value, $attribs): maak een text element. formtextarea($name, $value, $attribs): maak een textarea element.

19 url($urloptions, $name, $reset): maakt een link. $urloptions zijn de link attributen. htmllist($items, $ordered, $attribs): maakt een lijst, als $ordered true is dan wordt er een OL gemaakt anders een UL. $items is een array en kan geneste items bevatten Schrijf je eigen Helper Je kan naast de standaard Helpers ook je eigen Helpers schrijven. Bijvoorbeeld een alert Helper of een colortext Helper. Als voorbeeld gaan we eens een colortext Helper schrijven. Hiermee kan je een kleur geven aan de tekst. Neem een nieuwe php bestand en neem volgende code over: ColorText.php: <?php class Zend_View_Helper_TextColor public function textcolor( $tekst, $color = '#000000' ) return '<span style="color:'.$color.';">'. $tekst. '</span>'; code uitleg: Je maakt een class aan die begint met Zend_View_Helper_ daarna de naam van je Helper (let op de hoofdletters!), zo krijgen we Zend_View_Helper_TextColor. De class heeft minstens één functie en die heeft de naam van je Helper (let op de hoofdletters!), zo krijg je dus public function textcolor. Het aantal parameters kan je zelf kiezen. Er wordt nooit echo of print geplaatst enkel een return. Je slaat deze op als TextColor.php (let op de hoofdletters!) in de map helper. Deze Helper gebruik je nu als volgt: <?php echo $this->render('header.phtml');?> <?php echo $this->render('menu.phtml');?> <div id="pagecontent"> <h1><?php echo $this->textcolor( $this->titel, '#FF0000' );? ></h1> <p class="block"> Welkom op mijn portfolio. </p> </div>

20 <?php echo $this->render('footer.phtml');?> Zend Framework zal alle Helpers in de map Helpers automatisch laden, dus hier hoef je niet extra's te schrijven in de controllers of dergelijke. En zo kan je nu verder gaan uitbreiden en meer Helpers schrijven. 4. De andere templates bouwen We gaan nu andere templates bouwen. Volgende templates moeten nog gemaakt worden: index info.phtml contact.phtml gallery index.phtml view.phtml add.phtml edit.phtml delete.phtml Vergeet geen map gallery te maken in de map./application/views/scripts/ omdat we dit een andere controller is!!! info.phtml: <?php echo $this->render('header.phtml');?> <?php echo $this->render('menu.phtml');?> <div id="pagecontent"> <h1><?php echo $this->titel;?></h1> <p class="block"> Hier vind je wat meer informatie over mijzelf en over mijn werkwijze. </p> </div> <?php echo $this->render('footer.phtml');?>

21 contact.phtml: <?php echo $this->render('header.phtml');?> <?php echo $this->render('menu.phtml');?> <div id="pagecontent"> <h1><?php echo $this->titel;?></h1> <form method="post"> <p class="block"> Naam: <br> <?php echo $this->formtext('naam', '', array('size' => 30) );?> <br><br> adres: <br> <?php echo $this->formtext(' ', '', array('size' => 30) );?><br><br> Bericht: <br> <?php echo $this->formtextarea('bericht', '', array('rows' => 10, 'cols' => 40) );?></textarea><br><br> <?php echo $this->formsubmit('submit', 'Versturen' );? > </p> </form> </div> <?php echo $this->render('footer.phtml');?> We passen de actions opnieuw aan en je IndexController zou er nu zo moeten uitzien: <?php class IndexController extends Zend_Controller_Action public function init() $this->initview(); //variablen declaren in header,menu en footer $this->view->url = $this->_request->getbaseurl(); $this->view->stylespath = $this->view->url. 'public/styles/'; public function indexaction()

22 $this->view->paginatitel = 'Startpagina'; $this->view->titel = 'Welkom op mijn portfolio :]'; $this->render(); public function infoaction() $this->view->paginatitel = 'Informatie'; $this->view->titel = 'Informatie pagina :]'; $this->render(); public function contactaction() $this->view->paginatitel = 'Contact'; $this->view->titel = 'Neem contact met ons op :]'; $this->render(); De gallery views en controller staan op de volgende links (beetje te veel om te posten): index.phtml: view.phtml: add.phtml: edit.phtml: delete.phtml: GalleryController.php:

23 DE MODELS

24 In de gallery kunnen we projecten toevoegen, bewerken en verwijderen. We hebben al de formulieren gemaakt (zie deel 3). We moeten nu nog de data hebben. Deze data moet ergens opgeslagen worden. Dit kan via een file of een database gebeuren. Omdat het model (de M van MVC) meer database gericht is gaan we ook via deze manier gebruik maken. In deze vierde tutorial gaan we onze tabellen opzetten, templates wat aanpassen en de model schrijven. Note: kennis van PDO is niet vereist, je moet gewoon weten dat Zend Db de PDO technologie gebruikt. Note 2: als je server geen PDO ondersteund zal je helaas een andere opslag type moeten zoeken zoals XML of andere file type. Klaar? Here we go! 1. Tabellen maken MySQL is het meest gebruikte databasemodel in de php wereld en dus klinkt het niet abnormaal dat we hier voor mysql kiezen als databasemodel. De tabellen maken is simpel. Neem volgende query over en voer deze uit in je phpmyadmin. CREATE TABLE `portfolio_projects` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, `titel` VARCHAR( 255 ) NOT NULL, `omschrijving` TEXT NOT NULL, `status` VARBINARY( 50 ) NOT NULL ) ; 2. Verbinding maken met de database We gaan verbinding maken met de database in onze bootstrap (index.php). Open deze en voeg volgende code toe onder lijn 11 (Zend_Loader::loadClass...): index.php: Zend_Loader::loadClass('Zend_Db'); Zend_Loader::loadClass('Zend_Db_Table'); //configure the database $options = array( 'host' => 'localhost', 'username' => 'root', 'password' => '********', 'dbname' => 'database' );

25 $db = Zend_Db::factory( 'PDO_MYSQL', $options ); Zend_Db_Table::setDefaultAdapter( $db ); code uitleg: Eerst laden we de twee classes die we gebruiken. Zend_Db_Table moeten we niet gebruiken maar gebruiken we toch om models te schrijven en omdat je veel sneller queries kan schrijven. Als je enkel Zend_Db gebruikt moet je dan het PDO model gebruiken. Zend_Db_Table gebruikt het PDO model ook maar indirect. Je zal wel zien hoe en waarom. $options: om wat overzicht te houden zettten we alle login gegevens in een array. De keys van de array moeten host, username, password en dbname zijn (anders krijg je error). $db = Zend_Db...: met Zend_Db maken we verbinding met onze database. Zend_Db_Table kan dit niet omdat Zend_Db de hoofdclass is en die alle queries direct met de database uitvoert. Zend_Db_Table gebruikt Zend_Db in zijn functies. We hebben dus 2 parameters. De eerste is het type van database. We gebruiken mysql dus typen we PDO_MYSQL. Als je Sqlite zou gebruiken type je PDO_SQLITE. De tweede parameter is de login gegevens die in de array $options staan. Zend_Db_Table...: zoals gezegt gebruikt Zend_Db_Table de Zend_Db class in zijn functies om queries uit te voeren. Als we geen adapter zetten kan Zend_Db_Table geen queries uitvoeren. Je index.php zou er nu ongeveer zo moeten uitzien: 3. Models schrijven en resultaten ophalen Een model schrijven is het simpelste wat je maar kan doen. Voor iedere tabel moet je een model schrijven. Wij hebben één tabel (portfolio_projects) en dus hebben we ook één model voor onze site. Stel dat je 10 tabellen hebt dan zal je 10 modellen moeten schrijven. Neem volgende code over in een nieuwe php bestand: projects.php: <?php class Projects extends Zend_Db_Table protected $_name = 'portfolio_projects'; Sla deze code op als projects.php in de map./application/models/. De naam van de php doet er niet echt aan toe en die van de class ook niet. Geef ze een duidelijke naam zodat iedere ontwikkelaar weet waarover dit model gaat.

26 code uitleg: extends Zend_Db_Table: iedere model maakt gebruik van de class Zend_Db_Table zodat we de query functies kunnen gebruiken en onze data kunnen ophalen/bewerken/verwijderen. protected $_name...: deze variable moet je in iedere model defineren zodat Zend_Db_Table weet over welke tabel het hier gaat Gegevens ophalen (meerdere rijen en één rij) Onze model is geschreven en nu gaan we beginnen met de functies van Zend_Db_Table te gebruiken om gegevens op te halen. Open de GalleryController.php want net zoals in de View wordt de communicatie tussen de user (input) en de database (model) in de controllers geschreven. Aangezien iedere actie in de class GalleryController dezelfde tabel gebruiken moeten we de include van ons model maar op één plaats schrijven, nl onze init() functie. Voeg volgende code toe aan de init functie en plaats die onder de initview(); GalleryController.php: //load the model include './application/models/projects.php'; In de indexaction() worden alle projects opgehaalt en weergegeven. Zend_Db_Table heeft hier een functie voor genaamd fetchall(). Onze indexaction() zal er zo uit gaan zien: GalleryController.php: public function indexaction() $projects = new Projects(); //get the results and show them on the screen $this->view->projects = $projects->fetchall(); $this->view->paginatitel = 'Gallery'; $this->view->titel = 'Overzicht van alle projecten :]'; $this->render(); code uitleg: We maken dus een instance van ons model. De functie fetchall(); hebben we niet gemaakt in onze model maar deze staat al geschreven in de class Zend_Db_Table (als je verder kijkt zoals ik deed dan weet je dat het Zend_Db_Table_Abstract is want Zend_Db_Table is maar een extend ervan). We moeten de resultaten op ons scherm hebben en dus gaan we de resultaten ( fetchall() returnt een array) in onze index template moeten schrijven. Open dus index.phtml van de map./views/gallery/ en neem volgende code over (alleen het toegevoegde deel moet je overnemen, ¾ van de code staat al in

27 de index.phtml). index.phtml: <?php echo $this->render('header.phtml');?> <?php echo $this->render('menu.phtml');?> <div id="pagecontent"> <h1><?php echo $this->titel;?></h1> <p class="block"> <?php foreach( $this->projects as $row ) :?> <a href="<?php echo $this->url;?>/gallery/view/id/<?php echo $row->id;?>"><?php echo $row->titel;?></a> <br /> <?php endforeach;?> </p> </div> <?php echo $this->render('footer.phtml');?> code uitleg: Deze manier van foreach schrijven is wat onbekend maar deze bestaat in php. Zo is het overzichtelijker om php in html te schrijven. Zoals al gezegt bevat $this >projects de array met resultaten. $row is niet zomaar een waarde van die array maar is een instantie van een object, namelijk een instantie van Zend_Db_Table_Rowset. Rowset wordt ingeschakeld als het gaat om meerdere rijen (dit kan ook 1 zijn maar het kunnen er altijd meer zijn). Je kan nu de waarden weergeven op het scherm door $row >kolom te echoën in je template. We hebben nu alle projecten op ons scherm staan met een mooi linkje errond. Nu gaan we in plaats van meerdere rijen, één rij ophalen. Namelijk de rij van het geselecteerde project. Volgende code voegen we toe aan onze viewaction(). GalleryController.php: public function viewaction() $projects = new Projects(); //get id and fetch the record of the database $id = (int) $this->_request->getparam('id'); $row = $projects->fetchrow('id = '. $id); $this->view->paginatitel = $row->titel; $this->view->id = $row->id; $this->view->titel = $row->titel; $this->view->omschrijving = $row->omschrijving; $this->view->status = $row->status; $this->render();

28 code uitleg: $id = (int)...: in onze template index.phtml hebben we /id/record id toegevoegd aan onze link. Dit is nu een parameter. Je haalt deze parameter op met $this >_request >getparam(...) en tussen haakjes schrijf je de naam van de parameter, hier is dat dus id. fetchrow(): we moeten maar één rij ophalen en dus gebruiken we de functie fetchrow() maar nu moeten we een WHERE opdracht meegeven. Normaal is dit WHERE id = $id in een gewone query en dus vullen we tussen haakjes id = $id in. fetchrow() is ook weer een functie van de Zend_Db_Table class. Ook hier moet het resultaat op het scherm komen. Dus open view.phtml en neem volgende code over: view.phtml: <?php echo $this->render('header.phtml');?> <?php echo $this->render('menu.phtml');?> <div id="pagecontent"> <h1><?php echo $this->titel. '('. $this->status. ')';?></h1> <p class="block"> <i><h5> (<a href="<?php echo $this->url;?>/gallery/edit/id/<?php echo $this->id;?>">bewerken</a> - <a href="<?php echo $this->url;? >/gallery/delete/id/<?php echo $this->id;?>">verwijderen</a>) </h5></i> <br> <?php echo $this->omschrijving;?> </p> </div> <?php echo $this->render('footer.phtml');?> Deze vereist geen verdere uitleg. Je zou deze code al zelf kunnen geschreven hebben en zekers al moeten begrijpen. We kunnen nu al onze database uitlezen. Nu nog updaten, inserten en deleten.

29 4. Gegevens toevoegen We hebben al een formulier gemaakt (zie deel 3) om projecten toe te voegen. We gaan nu de code schrijven om het formulier te verwerken en om de data in de database te stoppen. De action addaction() krijgt nu volgende code. GalleryController.php: public function addaction() if( $this->_request->ispost() ) //call model $projects = new Projects(); $data = array( 'titel' => $this->_request->getpost('titel'), 'omschrijving' => $this->_request- >getpost('omschrijving'), 'status' => $this->_request->getpost('status') ); //data invoegen en de persoon redirecten $projects->insert( $data ); $this->_redirect( './gallery/' ); else $this->view->paginatitel = 'Project toevoegen'; $this->view->titel = 'Voeg een project toe :]'; $this->render(); code uitleg: $this >_request >ispost(): hiermee controleer je of het formulier verstuurd is of niet. Deze functie returnt een boolean met true als het formuulier gepost is. $data =...: we maken nu een array met de data. De keys van de array zijn de kolomnamen van de mysql tabel en de values zijn de gegevens die ingevuld zijn in het formulier. $this >_request >getpost(...): met deze functie kan je de waarde ophalen van een formulier element. Hetgeen tussen de haakjes is de name van het formulier element. $projects >insert( $data ): met de insert functie kan je dus records toevoegen aan je tabel. $data is de array die je zonet hebt gemaakt. Meer is er niet aan. Zie je wel dat Zend_Db_Table het scripten makkelijk/sneller maakt. $this >_redirect(...): je kan een tekst op het scherm zetten maar je kan ook de gebruiker direct zijn resultaat laten zien door hem terug te sturen naar alle projecten.

30 5. Gegevens bewerken Gegevens bewerken is bijna hetzelfde als gegevens toevoegen. Het enige verschil is dat je data uit de tabel moet halen en het verwerken van het formulier is net hetzelfde als gegevens toevoegen. Het verschil zit hem in de functie. Maar laten we eerst onze template edit.tpl veranderen. Schrijf volgende code over in edit.tpl. edit.phtml: <?php echo $this->render('header.phtml');?> <?php echo $this->render('menu.phtml');?> <div id="pagecontent"> <h1><?php echo $this->titel;?></h1> <form method="post" action="<?php echo $this->url;? >/gallery/edit/id/<?php echo $this->id;?>"> <p class="block"> Project titel: <br> <?php echo $this->formtext('titel', $this->ptitel, array('size' => 30) );?> <br><br> Project omschrijving: <br> <?php echo $this->formtextarea('omschrijving', $this- >omschrijving, array('rows' => 10, 'cols' => 40) );?> <br><br> Project status: <br> <?php echo $this->formselect('status', '', array(), array( 'Afgewerkt' => 'Afgewerkt', 'In ontwikkeling' => 'In ontwikkeling') );?> <br><br> <?php echo $this->formsubmit('submit', 'Versturen' );? > </p> </form> </div> <?php echo $this->render('footer.phtml');?> Zoals je ziet hebben we nu waarden toegevoegd aan de Helpers en is er een action bijgekomen bij ons formulier. Nu gaan we over naar het schrijven van de editaction. Neem volgende code over, de uitleg staat zoals gewoonlijk eronder. GalleryController.php: public function editaction() //call model $projects = new Projects();

31 //formulier if( $this->_request->ispost() ) $data = array( 'titel' => $this->_request->getpost('titel'), 'omschrijving' => $this->_request- >getpost('omschrijving'), 'status' => $this->_request->getpost('status') ); //data invoegen en de persoon redirecten $projects->update( $data, 'id = '. (int) $this->_request- >getparam('id') ); $this->_redirect( './gallery/' ); else //data ophalen $row = $projects->fetchrow('id = '. (int) $this->_request- >getparam('id') ); $this->view->paginatitel = 'Project '. $row->titel. ' bewerken'; $this->view->titel = 'Bewerk '. $row->titel; $this->view->id = $row->id; $this->view->ptitel = $row->titel; $this->view->omschrijving = $row->omschrijving; $this->render(); code uitleg: $projects >update(... ): als je records wilt wijzigen moet je de update functie gebruiken. Deze heeft 2 parameters. De eerste ken je, deze is hetzelfde als voor de functie insert(). De tweede is WHERE parameter. Hij moet weten welk record er moet verandert worden. Deze ken je ook van punt 4.1. De rest van de code ken je ook al of zou je toch al moeten begrijpen. Het enige wat ons nog rest is de deleteaction.

32 6. Gegevens wissen We gaan eerst onze template wat veranderen omdat we een confirmatie willen. Open delete.phtml en zet volgende code erin: delete.phtml: <?php echo $this->render('header.phtml');?> <?php echo $this->render('menu.phtml');?> <div id="pagecontent"> <h1><?php echo $this->titel;?></h1> <p class="block"> Verwijder project <?php echo $this->ptitel;?>? <br><br> <?php echo $this->formbutton('yes', 'Verwijder project', array('onclick' => "location.href='".$this- >url."/gallery/delete/id/". $this->id. "/confirm/1';") );?> <?php echo $this->formbutton('no', 'Annuleren', array('onclick' => "location.href='".$this- >url."/gallery/index';") );?> </p> </div> <?php echo $this->render('footer.phtml');?> De template is gewijzigd en nu gaan we de code schrijven voor deleteaction(). GalleryController.php: public function deleteaction() //call model $project = new Projects(); //delete if( $this->_request->getparam('confirm') == 1 ) $project->delete( 'id = '. $this->_request- >getparam('id') ); $this->_redirect( './gallery/' ); else $row = $project->fetchrow( 'id = '. $this->_request- >getparam('id') ); $this->view->paginatitel = 'Project verwijderen'; $this->view->titel = 'Project verwijderen'; $this->view->id = $row->id; $this->view->ptitel = $row->titel; $this->render();

33 code uitleg: $project >delete(...): de delete() functie zal dus een record wijzigen. Die heeft maar één parameter en dat is de WHERE. Deze ken je, dus niets nieuws meer. Verdere uitleg heeft deze code niet nodig, aangezien jij nu een bijna volleert ZF'er bent.

34 ZF COMPONENTEN GEBRUIKEN

35 Je hebt nu alle kennis om een website te maken volgens het MVC model met behulp van een framework (Zend Framework). Dit laatste deel gaat over het gebruik van andere componenten in je website. Maar eerst gaan we de contact pagina maken. 1. De contactpagina Hier gaan we al direct een component gebruiken van het framework, namelijk Zend Mail. Je kan componenten op twee manieren inladen: 1. Inladen in de bootstrap, maar dit wordt op iedere pagina ingeladen en misschien gebruik je het maar 3 keer. 2. Inladen in de action zelf, maar dan moet je het iedere keer opnieuw typen in andere actions als je het nog eens wilt gebruiken. Omdat we maar één action hebben die dit component gebruik, kiezen we voor manier 2. Open je IndexController.php en neem volgende code over. IndexController.php: public function contactaction() $this->view->paginatitel = 'Contact'; $this->view->titel = 'Neem contact met ons op :]'; //formulier if( $this->_request->ispost() ) //load mail component Zend_Loader::loadClass('Zend_Mail'); $mail = new Zend_Mail(); //mail configureren $bericht = nl2br( $this->_request->getpost('bericht') ); $mail->setbodyhtml( $bericht ); $mail->setfrom( $this->_request->getpost(' '), $this- >_request->getpost('naam') ); $mail->addto( ' adres@server.com', 'Jou naam' ); $mail->setsubject('contactpagina portfolio'); if( $mail->send() ) $this->view->succes = true; //render $this->render();

36 code uitleg: new Zend_Mail(): we maken een instantie van de mail component. setbodyhtml(): omdat we <br /> kunnen hebben in ons bericht versturen we de mail als een HTML mail. Als je een gewone tekst mail wilt versturen vervang je setbodyhtml() in setbodytext(); setfrom(): de geadresseerde defineren. addto(): de ontvanger van de mail. Je kan zoveel keer addto() gebruiken om meerdere ontvangers toe te voegen. Je kan ook addcc() en addbcc() gebruiken. setsubject(): het onderwerp instellen. send(): met deze actie wordt de mail verstuurd. Ik heb de contact.phtml wat aangepast zodat je een bericht krijgt op je scherm als het bericht verstuurd is. Open contact.phtml en verander de code met die van hieronder. contact.phtml: <?php echo $this->render('header.phtml');?> <?php echo $this->render('menu.phtml');?> <div id="pagecontent"> <h1><?php echo $this->titel;?></h1> <?php if( isset( $this->succes ) ) :?> <p class="block"> <?php echo $this->textcolor('je mail werd succesvol verstuurd. Een reactie wordt zo snel mogelijk verstuurd.', '#FF0000');?> </p> <?php endif;?> <form method="post"> <p class="block"> Naam: <br> <?php echo $this->formtext('naam', '', array('size' => 30) );?> <br><br> adres: <br> <?php echo $this->formtext(' ', '', array('size' => 30) );?><br><br> Bericht: <br> <?php echo $this->formtextarea('bericht', '', array('rows' => 10, 'cols' => 40) );?><br><br> > <?php echo $this->formsubmit('submit', 'Versturen' );?

37 </p> </form> </div> <?php echo $this->render('footer.phtml');?> Ziezo je contact pagina is nu ook gemaakt en je hebt kennis gemaakt met een component van het framework. Moeilijk? Nee! 2. Veiligheid voor alles! Zoals je wel ziet is er nergens veiligheid gebruikt. Iedereen kan HTML tags schrijven en er wordt niet gecontroleert of de velden data heeft. Daarvoor bestaat er Zend Filter en Zend Validate. We gaan maar beginnen met Zend Filter Zend Filter gebruiken in /gallery/add Een filter is net zoals je koffiefilter. Je hebt de input (koffie bonen) en de output is dan de koffie. We gaan de Zend Filter inladen volgens manier 1 omdat we filters meerdere malen gebruiken op een website. In /gallery/add kan je een project titel en omschrijving invullen, deze mag geen HTML tags bevatten. Daarbovenop gooien we nog eens htmlentities om mogelijke SQL injections tegen te gaan. Eerst gaan we de Filter component laden in onze bootstrap. Zet volgende code onder de laatste Zend_Loader. index.php: Zend_Loader::loadClass('Zend_Filter'); Zend_Loader::loadClass('Zend_Filter_HtmlEntities'); Zend_Loader::loadClass('Zend_Filter_StripTags'); Open nu GalleryController.php en voeg volgende code toe. GalleryController.php: public function addaction() if( $this->_request->ispost() ) //call model $projects = new Projects(); //call filter $filter = new Zend_Filter(); $filter->addfilter( new Zend_Filter_StripTags() ) ->addfilter( new Zend_Filter_HtmlEntities() );

38 $data = array( 'titel' => $filter->filter( $this->_request- >getpost('titel') ), 'omschrijving' => $filter->filter( $this- >_request->getpost('omschrijving') ), 'status' => $this->_request->getpost('status') ); //data invoegen en de persoon redirecten $projects->insert( $data ); $this->_redirect( './gallery/' ); else $this->view->paginatitel = 'Project toevoegen'; $this->view->titel = 'Voeg een project toe :]'; code uitleg: $this->render(); new Zend_Filter: een instantie maken van de Filter component. addfilter(... ): een filter toevoegen. Als je een filter toevoegt maak je een nieuwe instantie van die filter. Er moet geen ; staan na de eerste addfilter() omdat addfilter $this returnt waardoor we oneindig filters kunnen toevoegen. filter(...): de filters worden toegepast op de ingevulde elementen. Note: gebruik htmlentites als laatste filter omdat htmlentities de andere filters kan storen. Naast HtmlEntities en StripTags zijn er nog andere standaard filters. Hier een lijstje. Alnum Alpha BaseName Digits Dir HtmlEntities Input Int RealPath StringToLower StringToUpper StringTrim StripTags

39 De volgende code toont hoe je één filter kan toepassen. Dit is gewoon een voorbeeld. voorbeeld: <?php /** * Manier 1 */ //bootstrap (index.php) Zend_Loader::loadClass('Zend_Filter'); //in de code zelf $input = Zend_Filter::get( $input, 'StripTags'); $input = Zend_Filter::get( $input, 'HtmlEntities' ); /** * Manier 2 */ //bootstrap (index.php) Zend_Loader::loadClass('Zend_Filter_HtmlEntities'); Zend_Loader::loadClass('Zend_Filter_StripTags'); //in de code zelf $striptags = new Zend_Filter_StripTags(); $input = $striptags->filter( $input ); $htmlentities = new Zend_Filter_HtmlEntities(); $input = $htmlentities->filter( $input ); 2.2. Zend Validate gebruiken in /gallery/add Een validator kijkt of de input voldoet aan de voorwaarden van die specifieke validator. Deze returnt altijd een boolean. Wanneer deze false is kan je kijken wat er niet aan de voorwaarden voldoet via een ingebouwde functie. Een voorbeeld met ons contact formulier. Open IndexController.php en voeg volgende code toe. IndexController.php: public function contactaction() $this->view->paginatitel = 'Contact'; $this->view->titel = 'Neem contact met ons op :]'; //formulier if( $this->_request->ispost() )

40 //load mail component Zend_Loader::loadClass('Zend_Mail'); $mail = new Zend_Mail(); //load validator Zend_Loader::loadClass('Zend_Validate_ Address'); $valid = new Zend_Validate_ Address(); //mail configureren $bericht = nl2br( $this->_request->getpost('bericht') ); $mail->setbodyhtml( $bericht ); //setfrom only when is valid! $ = $this->_request->getpost(' '); if( $valid ->isvalid( $ ) ) $mail->setfrom( $ , $this->_request- >getpost('naam') ); else $this->view->validerror = $valid ->getmessages(); ); //mail conifgureren $mail->addto( 'stijnleenknegt@gmail.com', 'Stijn Leenknegt' $mail->setsubject('contactpagina portfolio'); if( $mail->send() ) $this->view->succes = true; //render $this->render(); code uitleg: new Zend_Validate_ Address: hiermee wordt de validator aangeroepen. Er zijn meerdere validators (zie lijst verder). isvalid(...): met deze functie controleer je of de input een adres is en voldoet aan de eisen van de validator. getmessages(): wanneer deze niet voldoet komen de fouten op het scherm. (aangezien de from header niet echt nodig is om een mail te sturen moeten we de mail actie niet stopzetten). Er is een view stukje bijgekomen, dus open contact.phtml en voeg volgende code toe. contact.phtml: <?php echo $this->render('header.phtml');?> <?php echo $this->render('menu.phtml');?>

41 <div id="pagecontent"> <h1><?php echo $this->titel;?></h1> <?php if( isset( $this->succes ) ) :?> <p class="block"> <?php echo $this->textcolor('je mail werd succesvol verstuurd. Een reactie wordt zo snel mogelijk verstuurd.', '#FF0000');?> </p> <?php endif;?> <?php if( isset( $this->validerror ) ) :?> <p class="block"> <?php foreach( $this->validerror as $error ) echo $this->textcolor( $error. '<br />', '#FF0000');?> </p> <?php endif;?> <form method="post"> <p class="block"> Naam: <br> <?php echo $this->formtext('naam', '', array('size' => 30) );?> <br><br> adres: <br> <?php echo $this->formtext(' ', '', array('size' => 30) );?><br><br> Bericht: <br> <?php echo $this->formtextarea('bericht', '', array('rows' => 10, 'cols' => 40) );?><br><br> <?php echo $this->formsubmit('submit', 'Versturen' );? > </p> </form> </div> <?php echo $this->render('footer.phtml');?> Naast de lijst met beschikbare Zend Filters is er ook een lijst met standaard Zend Validators. Alnum Alpha Between Ccnum Date

42 Digits Address Float GreaterThan Hex Hostname InArray Int Interface Ip LessThan NotEmpty Regex StringLength Ook zijn er weer verschillende manieren om een validator te gebruiken. Een voorbeeld. voorbeeld: <?php /** * Manier 1 */ //bootstrap (index.php) Zend_Loader::loadClass('Zend_Validate'); //in de code zelf if(! Zend_Validate::is( $input, ' Address' ) ) var_dump( Zend_Validate::getMessages() ); /** * Manier 2 */ //bootstrap (index.php) Zend_Loader::loadClass('Zend_Validate'); //in de code zelf $validator = new Zend_Validate(); $validator->addvalidator(' _address') ->addvalidator('notempty'); $validator->isvalid( $input );

43 3. Objecten registreren Dit is het laatste puntje die ik graag had uitgelegt aan jullie. Zend Framework heeft een component genaamd Zend Registry. Hierin kan je variablen opslaan met verschillende inhoud (array, strings, integers, objecten,...). Dit is handig als je objecten aanmaakt in de bootstrap en verder wilt gebruiken in een ander bestand (bijvoorbeeld in een action). Een voorbeeld: in onze bootstrap hebben we Zend Filter ingeladen. Omdat we niet telkens een nieuwe instantie van Zend_Filter willen maken gaan we onze instantie registeren zodat we diezelfde instantie ook nog ergens anders kunnen gebruiken. Dit zou dan de index.php worden. index.php: <?php // full error reporting error_reporting(e_all); set_include_path( '.'. PATH_SEPARATOR. './library/'. PATH_SEPARATOR. get_include_path() ); //includes include_once('zend/loader.php'); //load the classes Zend_Loader::loadClass('Zend_Controller_Front'); Zend_Loader::loadClass('Zend_Db'); Zend_Loader::loadClass('Zend_Db_Table'); Zend_Loader::loadClass('Zend_Filter'); Zend_Loader::loadClass('Zend_Filter_HtmlEntities'); Zend_Loader::loadClass('Zend_Filter_StripTags'); Zend_Loader::loadClass('Zend_Registry'); //configure the registry $registry = new Zend_Registry(); Zend_Registry::setInstance( $registry ); //configure the filter $filter = new Zend_Filter(); $filter -> addfilter( new Zend_Filter_StripTags() ) -> addfilter( new Zend_Filter_HtmlEntities() ); $registry->set( 'filter', $filter ); //configure the database $options = array( 'host' => 'localhost', 'username' => 'deb4964_mindios', 'password' => 'Pe3rlH4rbOr', 'dbname' => 'deb4964_mindios' ); $db = Zend_Db::factory( 'PDO_MYSQL', $options ); Zend_Db_Table::setDefaultAdapter( $db );

44 //configure the front controller $controller = Zend_Controller_Front::getInstance(); $controller->setparam('noviewrenderer', true); $controller->setcontrollerdirectory( './application/controllers'); //run the conroller $controller->dispatch(); code uitleg: setinstance(): we registreren $registry zodat we die later overal kunnen oproepen. set(...): de set functie heeft twee parameters. De eerste is de label van de variable en de tweede de inhoud. Hier is dat dus een object. Ons filter object is nu geregistreerd en nu kunnen we die makkelijk toepassen in onze addaction(). GalleryController: public function addaction() if( $this->_request->ispost() ) //call model $projects = new Projects(); //call filter $filter = Zend_Registry::get('filter'); $data = array( 'titel' => $filter->filter( $this->_request- >getpost('titel') ), 'omschrijving' => $filter->filter( $this- >_request->getpost('omschrijving') ), 'status' => $this->_request->getpost('status') ); //data invoegen en de persoon redirecten $projects->insert( $data ); $this->_redirect( './gallery/' ); else $this->view->paginatitel = 'Project toevoegen'; $this->view->titel = 'Voeg een project toe :]'; $this->render();

Een website maken met databasetoegang.

Een website maken met databasetoegang. Hoofdstuk 5 Een website maken met databasetoegang. In dit hoofdstuk gaan we het weblog dat je in hoofdstuk 4 hebt gemaakt verder uitbreiden. Een belangrijk onderdeel wordt toegevoegd aan de applicatie,

Nadere informatie

Object Oriented Programming

Object Oriented Programming Object Oriented Programming voor webapplicaties Door Edwin Vlieg Waarom OOP? Basis uitleg over OOP Design Patterns ActiveRecord Model View Controller Extra informatie Vragen OOP Object Oriented Programming

Nadere informatie

Formulieren en waarden posten naar een view

Formulieren en waarden posten naar een view Hoofdstuk 4 Formulieren en waarden posten naar een view Waarden posten naar een view in een Zend-project gaat heel anders dan dat je gewend bent. Om dit mechanisme te leren, kunnen we het beste een eenvoudige

Nadere informatie

Formulieren maken met Dreamweaver CS 4/CS 5

Formulieren maken met Dreamweaver CS 4/CS 5 Formulieren maken met Dreamweaver CS 4/CS 5 In deze handleiding leer je om een formulier en elementen die je binnen een formulier kunt gebruiken, te ontwerpen met Dreamweaver. Het uitgangspunt is dat dit

Nadere informatie

Controllers, actions en views

Controllers, actions en views Hoofdstuk 3 Controllers, actions en views In het vorige hoofdstuk is het MVC-pattern ter spraken gekomen. In dit hoofdstuk gaan we eens na hoe dit pattern in een Zend-project geïmplementeerd is. Om enig

Nadere informatie

Les 15 : updaten van gegevens in de database (deel2).

Les 15 : updaten van gegevens in de database (deel2). Les 15 : updaten van gegevens in de database (deel2). In de volgende reeks lessen zal alle vorige leerstof uitgebreid aan het bod komen. Zie ook de vorige lessen en documenten om informatie op te zoeken

Nadere informatie

Domein API Handleiding

Domein API Handleiding Domein API Handleiding Versie 1.6 Datum: 16-07-2014 1 Inhouds opgave 2 Inleiding 3 Result codes 4 Api functies 5 Api helpers 2 Inleiding: De API van 123 Hosting Service kan worden gebruikt om te registreren

Nadere informatie

Formulierbeheer Importeren bestaand (model)formulier... 2 Wat is exporteren/importeren eigenlijk?... 3 Formulier aanpassen/opbouwen...

Formulierbeheer Importeren bestaand (model)formulier... 2 Wat is exporteren/importeren eigenlijk?... 3 Formulier aanpassen/opbouwen... Formulierbeheer Importeren bestaand (model)formulier... 2 Wat is exporteren/importeren eigenlijk?... 3 Formulier aanpassen/opbouwen... 4 Bewerken formulier in formulierbeheer... 4 Bewerken formulier -

Nadere informatie

Inhoudsopgave Disclaimer... 3 Voorwoord... 4 Inleiding... 5 Het downloaden van XAMPP... 7 Het installeren van XAMPP... 8 Joomla installeren op

Inhoudsopgave Disclaimer... 3 Voorwoord... 4 Inleiding... 5 Het downloaden van XAMPP... 7 Het installeren van XAMPP... 8 Joomla installeren op 1 Inhoudsopgave Disclaimer... 3 Voorwoord... 4 Inleiding... 5 Het downloaden van XAMPP... 7 Het installeren van XAMPP.... 8 Joomla installeren op XAMPP... 15 Handige links... 16 2 Disclaimer Bij de samenstelling

Nadere informatie

Kies File>New>Blank Page>PHP. Je kunt eventueel nog een stylesheet koppelen. Definieer nu eerst een site! Dat betekent: Site>New Site

Kies File>New>Blank Page>PHP. Je kunt eventueel nog een stylesheet koppelen. Definieer nu eerst een site! Dat betekent: Site>New Site Kies File>New>Blank Page>PHP Je kunt eventueel nog een stylesheet koppelen. Definieer nu eerst een site! Dat betekent: Site>New Site Geef de site een passende naam. Kies ook de juiste map voor de webdocumenten.

Nadere informatie

Dynamische Websites. Week 2

Dynamische Websites. Week 2 Dynamische Websites Week 2 AGENDA Labo 1 GET, POST Navigatie, etc Varia 1 2

Nadere informatie

Koppeling met een database

Koppeling met een database PHP en MySQL Koppeling met een database 11.1 Inleiding In PHP is het eenvoudig om een koppeling te maken met een database. Een database kan diverse gegevens bewaren die met PHP aangeroepen en/of bewerkt

Nadere informatie

En hoe gaan ze dit allemaal terugvinden?

En hoe gaan ze dit allemaal terugvinden? En hoe gaan ze dit allemaal terugvinden? Taak 1.2.10 Thomas Muller Paul van der Linden MT1A Tutor: van Griensven Docent: van den Biggelaar Gemaakt door Thomas Muller en Paul van der Linden Pagina 1 van

Nadere informatie

LES 11: VAN LOKAAL NAAR ONLINE. Lesoverzicht: Aan de slag Domeinnaam Web hosting FTP gegevens FTP programma s Database exporteren Samenvatting

LES 11: VAN LOKAAL NAAR ONLINE. Lesoverzicht: Aan de slag Domeinnaam Web hosting FTP gegevens FTP programma s Database exporteren Samenvatting LES 11: VAN LOKAAL NAAR ONLINE Lesoverzicht: Aan de slag Domeinnaam Web hosting FTP gegevens FTP programma s Database exporteren Samenvatting Tijd: 10 minuten Doel: Aan het einde van de les kun je de lokale

Nadere informatie

TECHNICAL DESIGN DOCUMENT

TECHNICAL DESIGN DOCUMENT TECHNICAL DESIGN DOCUMENT BACHELORPROJECT IN3405 John Ciocoiu 1358227 Elwin Dokter 1275909 TECHNISCHE UNIVERSITEIT DELFT FACULTEIT EWI WOENSDAG 28 APRIL 2010 VERSIE 1 COMMISSIE: Ing. D.J. van Roest (opdrachtgever)

Nadere informatie

Inhoud. Pagina 2 van 13

Inhoud. Pagina 2 van 13 Code Conventie Inhoud PHP algemeen... 3 Namen van variabelen... 3 Enkele of dubbele aanhalingstekens... 3 Globale variabelen... 3 Namen van functies... 3 Argumenten van functies... 3 Formattering... 4

Nadere informatie

Formulier maken en opvangen met php

Formulier maken en opvangen met php Welkom bij mijn PHP tutorial (Deel 2) Ik ga in deze delen PHP uitleggen, dit doe ik in het programma notepad++ (gratis) deze kunt u downloaden van www.richard3332.nl/downloads.php Als u beschikt over dreamweaver

Nadere informatie

Foutcontrole met Javascript

Foutcontrole met Javascript Foutcontrole met Javascript Pol Van Dingenen Yannick Van Hauwe INLEIDING Het controleren van de gegevens die ingevuld zijn in formulieren is heel erg belangrijk. In de praktijk is enkel en alleen controle

Nadere informatie

ideal Betaal Formulier (Ondersteund o.a. ideal, MisterCash, Direct E-Banking en Credit Card)

ideal Betaal Formulier (Ondersteund o.a. ideal, MisterCash, Direct E-Banking en Credit Card) Script: Versie: 0.5 Licentie: ideal Betaal Formulier (Ondersteund o.a. ideal, MisterCash, Direct E-Banking en Credit Card) Gratis te gebruiken door (erkende) goede doelen. 200,00 excl. BTW voor aanschaf

Nadere informatie

PHP & MySQL. Studievaardigheden 2013. Frank Takes (ftakes@liacs.nl) LIACS, Universiteit Leiden

PHP & MySQL. Studievaardigheden 2013. Frank Takes (ftakes@liacs.nl) LIACS, Universiteit Leiden PHP & MySQL Studievaardigheden 2013 Frank Takes (ftakes@liacs.nl) LIACS, Universiteit Leiden Inleiding Voorkennis: geen Stof: dit college, www.w3schools.com en www.php.net Opdracht: maak een uitgebreide*

Nadere informatie

Formulieren maken met Dreamweaver CS 4

Formulieren maken met Dreamweaver CS 4 Formulieren maken met Dreamweaver CS 4 In deze handleiding leer je om een formulier en elementen die je binnen een formulier kunt gebruiken, te ontwerpen met Dreamweaver. Het uitgangspunt is dat dit zoveel

Nadere informatie

Les 10 : Aanmaken van een database (deel2).

Les 10 : Aanmaken van een database (deel2). Les 10 : Aanmaken van een database (deel2). Wat is een database? Een centrale opslagruimte voor gegevens. Alle informatie wordt centraal opgeslagen en kan door iedereen geraadpleegd worden. Voordelen van

Nadere informatie

Midi PDF Bladmuziek lezer

Midi PDF Bladmuziek lezer Inleiding. Ruim 20 ordners aan bladmuziek, meeste daarvan uitgeprint van een PDF. Even snel een nummer opzoeken wil dan ook niet, terwijl ik alles wel op alfabetische volgorde heb. Dat was het niet helemaal

Nadere informatie

Handleiding RS Form! 1.0.4

Handleiding RS Form! 1.0.4 Handleiding RS Form! 1.0.4 Inhoud 1. Controlepaneel... 3 2. Forms Manager... 4 2.1 Nieuwe form aanmaken... 4 2.2 Nieuwe fields toevoegen... 7 2.3 Wijzigen/verwijderen bestaande Forms, Fields... 10 Versie

Nadere informatie

Hoe bouw ik een component? Drs. Arjan Burger

Hoe bouw ik een component? Drs. Arjan Burger Hoe bouw ik een component? Drs. Arjan Burger Zelf bouwen in Joomla! Veel standaard componenten aanwezig Zelf bouwen: meer mogelijkheden Maatwerk (redelijke tot grondige) PHP kennis vereist Meeliften op

Nadere informatie

Achtergrond en lettertype Opmaak Achtergrond Opmaak Achtergrond Afbeelding in achtergrond

Achtergrond en lettertype Opmaak Achtergrond Opmaak Achtergrond Afbeelding in achtergrond Frontpage Express is het meest eenvoudige programma voor het maken van je homepage. Is het programma niet geïnstalleerd op je PC, dan is het te downloaden en daarna te installeren. We zullen nu een aantal

Nadere informatie

TaskCentre Web Service Connector: Creëren van requests in Synergy Enterprise

TaskCentre Web Service Connector: Creëren van requests in Synergy Enterprise TaskCentre Web Service Connector: Creëren van requests in Synergy Enterprise Inhoudsopgave 1. Voorbereiding... 4 2. Web Service Connector tool configuratie... 5 3. TaskCentre taak voor het aanmaken van

Nadere informatie

Naam project Lost And Found Animals Lokaal gehost Percentage van het totaal geleverde werk 1 Cindy Jansen 50% 2 Eline Steyvers 50%

Naam project Lost And Found Animals Lokaal gehost Percentage van het totaal geleverde werk 1 Cindy Jansen 50% 2 Eline Steyvers 50% Naam project Lost And Found Animals Url Lokaal gehost Groepsleden Percentage van het totaal geleverde werk 1 Cindy Jansen 50% 2 Eline Steyvers 50% 1. Beveiliging in de toepassing Naam gebruiker Wachtwoord

Nadere informatie

Handleiding Joomla! Frontend, content en gallery. september 2014 versie 1.0

Handleiding Joomla! Frontend, content en gallery. september 2014 versie 1.0 Handleiding Joomla! Frontend, content en gallery. september 2014 versie 1.0 1 Inhoudsopgave Toevoegen nieuw artikel, of wijzigen...3 Extra web-functionaliteit...4 toevoegen van een foto/plaatje...4 toevoegen

Nadere informatie

VKblog-importer : De gebruiksaanwijzing.

VKblog-importer : De gebruiksaanwijzing. VKblog-importer : De gebruiksaanwijzing. deze gebruiksaanwijzing beschrijft versie 0.1.2 VKblog-importer is een plugin voor WordPress die bedoeld is om blogs van VKblog te importeren in WordPress. Posts

Nadere informatie

v.1.11 Verenigingenweb Plus Handleiding Website in gebruik nemen

v.1.11 Verenigingenweb Plus Handleiding Website in gebruik nemen v.1.11 Verenigingenweb Plus Handleiding Website in gebruik nemen Inhoud Algemene informatie...3 Voor wie is deze handleiding?...3 Voordat u begint...3 Pagina beheer...4 Pagina aanmaken...4 Pagina wijzigen...4

Nadere informatie

Templates maken voor Joomla! Hoe maak je zelf een template voor je Joomla! website

Templates maken voor Joomla! Hoe maak je zelf een template voor je Joomla! website Templates maken voor Joomla! Hoe maak je zelf een template voor je Joomla! website Wat we gaan doen 1. Wie ben ik? 2. Voor- en nadelen bestaande templates en eigen templates 3. Eigen template op basis

Nadere informatie

Sparse columns in SQL server 2008

Sparse columns in SQL server 2008 Sparse columns in SQL server 2008 Object persistentie eenvoudig gemaakt Bert Dingemans, e-mail : info@dla-os.nl www : http:// 1 Content SPARSE COLUMNS IN SQL SERVER 2008... 1 OBJECT PERSISTENTIE EENVOUDIG

Nadere informatie

Javascript oefenblad 1

Javascript oefenblad 1 Leer de basis van Javascript. Javascript oefenblad 1 Niels van Velzen Javascript oefenblad 1 Pagina 2 Inleiding Javascript is niet altijd even makkelijk. Vooral aan het begin is het even wennen hoe de

Nadere informatie

Inhoudsopgave... 1 Disclaimer... 3 Voorwoord... 3 Inleiding... 5 Het downloaden van XAMPP... 7 Het installeren van XAMPP... 8 Joomla installeren op

Inhoudsopgave... 1 Disclaimer... 3 Voorwoord... 3 Inleiding... 5 Het downloaden van XAMPP... 7 Het installeren van XAMPP... 8 Joomla installeren op 1 Inhoudsopgave... 1 Disclaimer... 3 Voorwoord... 3 Inleiding... 5 Het downloaden van XAMPP... 7 Het installeren van XAMPP... 8 Joomla installeren op XAMPP... 14 Handige links... 15 2 Disclaimer Bij de

Nadere informatie

Op de Virtual Appliance is MySQL voorgeïnstalleerd. MySQL is momenteel de meest gebruikte database op het internet.

Op de Virtual Appliance is MySQL voorgeïnstalleerd. MySQL is momenteel de meest gebruikte database op het internet. Het installeren van WordPress Nu je een volledig werkende virtuele server hebt is het tijd om er een applicatie op te installeren. We beginnen met de blogtool WordPress. De database De eerste stap is het

Nadere informatie

Icoon/Icon Betekenis Description. Change scheduling Online. Gaat offline op (datum/tijd) Online. Going offline on (date/time)

Icoon/Icon Betekenis Description. Change scheduling Online. Gaat offline op (datum/tijd) Online. Going offline on (date/time) Algemeen/General Gepubliceerd maar gewijzigd Published but changed Meer acties op geselecteerde content More actions on selected content Gepubliceerd en niet gewijzigd Published and not changed Terugdraaien

Nadere informatie

Open SQL Server Management Studio en log in als Administator. Je ziet dan wat je in figuur 2.1 ziet.

Open SQL Server Management Studio en log in als Administator. Je ziet dan wat je in figuur 2.1 ziet. Hoofdstuk 2 Een ASP.NET applicatie met ADO.NET opzetten In dit hoofdstuk ga je een eenvoudige website opzetten, waarbij je een aantal gegevens uit een database ophaalt. Je moet je kennis van ADO.NET dus

Nadere informatie

Les 9: formulier controle met javascript.

Les 9: formulier controle met javascript. Les 9: formulier controle met javascript. Javascript is erg veel gebruikt bij internet toepassingen. In tegenstelling tot PHP, wat een server side scripting is, is java client side scripting. Dwz, niet

Nadere informatie

Technische nota AbiFire Rapporten maken via ODBC

Technische nota AbiFire Rapporten maken via ODBC Technische nota AbiFire Rapporten maken via ODBC Laatste revisie: 23 januari 2018 Inhoudsopgave 1 Inleiding... 2 2 Systeeminstellingen in AbiFire... 3 2.1 Aanmaken extern profiel... 3 2.2 Toewijzing extern

Nadere informatie

Handleiding: Whitelabel Customersite

Handleiding: Whitelabel Customersite ARGEWEB B.V. Handleiding: Whitelabel Customersite Controlportal.nl Argeweb Support 8-1-2009 Handleiding voor het gebruik maken van de Whitelabel Customersite op controlportal.nl, door Resellers van Argeweb.

Nadere informatie

PHP & MySQL. Studievaardigheden 2014. Jan van Rijn (j.n.van.rijn@liacs.leidenuniv.nl) LIACS, Universiteit Leiden

PHP & MySQL. Studievaardigheden 2014. Jan van Rijn (j.n.van.rijn@liacs.leidenuniv.nl) LIACS, Universiteit Leiden PHP & MySQL Studievaardigheden 2014 Jan van Rijn (j.n.van.rijn@liacs.leidenuniv.nl) LIACS, Universiteit Leiden Inleiding Voorkennis: geen Stof: dit college, www.w3schools.com en www.php.net Opdracht: maak

Nadere informatie

EBUILDER HANDLEIDING. De Ebuilder is een product van EXED internet www.exed.nl. info@exed.nl EXED CMS UITLEG

EBUILDER HANDLEIDING. De Ebuilder is een product van EXED internet www.exed.nl. info@exed.nl EXED CMS UITLEG EBUILDER HANDLEIDING De Ebuilder is een product van EXED internet www.exed.nl info@exed.nl 1 INHOUDSOPGAVE Inleiding Een korte introductie over het Ebuilder» Navigatie» Snelnavigatie Pagina s Hier vind

Nadere informatie

ez Mailing Manager - Create your First Campaign

ez Mailing Manager - Create your First Campaign Knowledge base article 19/10/09 Support ez Mailing Manager - Create your First Campaign Document Information Creator Tags Document Language Security Class Status Version Information 14/10/09 Jurgen Verhelst

Nadere informatie

Handleiding Word Press voor de bewoners Westerkaap 1

Handleiding Word Press voor de bewoners Westerkaap 1 1 Handleiding Word Press voor de bewoners Westerkaap 1 Inhoud: Inloggen Pagina 1 Algemeen Pagina 2 Berichten Pagina 2 Bericht bewerken, Linken Pagina 3-4 Plaatje toevoegen bericht Pagina 5-6 Bericht publiceren

Nadere informatie

8. Koppeling met een database

8. Koppeling met een database PHP7 en MySQL 8. Koppeling met een database 8.1 Inleiding In PHP is het eenvoudig om een koppeling te maken met een database. Een database kan diverse gegevens bewaren die met PHP aangeroepen en/of bewerkt

Nadere informatie

Installeer Apache2: Landstede februari 2009 versie 3 1 Bertil Hoentjen

Installeer Apache2: Landstede februari 2009 versie 3 1 Bertil Hoentjen Installeer Apache2: Deze howto gaat over name based virtual hosting onder Apache 2.x., en is getest onder OpenSUSE 11 maar is in feite ook van toepassing op de andere distributies. Alleen Debian en afgeleide

Nadere informatie

SQL manipulatietaal. We kunnen er data mee toevoegen, wijzigen en verwijderen uit een database.

SQL manipulatietaal. We kunnen er data mee toevoegen, wijzigen en verwijderen uit een database. SQL manipulatietaal We kunnen er data mee toevoegen, wijzigen en verwijderen uit een database. Basiscommando's: INSERT : toevoegen van gegevens DELETE : verwijderen van gegevens UPDATE : wijzigen van gegevens

Nadere informatie

Die vraag krijg ik regelmatig. De meest voorkomende situaties zijn deze:

Die vraag krijg ik regelmatig. De meest voorkomende situaties zijn deze: Hoe verhuis je een WordPress website? Die vraag krijg ik regelmatig. De meest voorkomende situaties zijn deze: Iemand heeft een WordPress website en stapt over naar een andere webhost (meestal blijft het

Nadere informatie

Hoofdstuk 6. PHP Data Objects. Cursus PHP & MySQL Groep D

Hoofdstuk 6. PHP Data Objects. Cursus PHP & MySQL Groep D Hoofdstuk 6 PHP Data Objects Cursus PHP & MySQL Groep D Hoofdstuk 1: PHP Data Objects 1.1 Inleiding Tegenwoordig kun je er bij het ontwikkelen van een website bijna niet meer omheen: het gebruik van een

Nadere informatie

Handleiding Wordpress

Handleiding Wordpress Handleiding Wordpress V 1.0 Door Inhoud Inloggen op de website... 3 Het Dashboard... 4 Berichten... 5 Berichten aanmaken... 5 Berichten bewerken... 6 Pagina's... 7 Pagina's aanmaken... 7 Pagina's bewerken...

Nadere informatie

- Plan Zo kun je een. website bouwen!

- Plan Zo kun je een. website bouwen! - Plan Zo kun je een website bouwen! BoekjeHoeKanJeEenWebsiteBouwen.i1 1 8-7-2008 17:23:14 BoekjeHoeKanJeEenWebsiteBouwen.i2 2 8-7-2008 17:23:15 In dit boekje staat de uitgebreide versie van hoe je een

Nadere informatie

We moeten de accommodaties selecteren die 3 sterren hebben, en in land met ID 10 zitten.

We moeten de accommodaties selecteren die 3 sterren hebben, en in land met ID 10 zitten. MySQL talk Trage website? Het optimaliseren van een bestaande website die een MySQL database heeft is niet altijd even makkelijk. Het probleem kan namelijk op veel verschillende plekken zitten: de database

Nadere informatie

Handleiding DirectAdmin

Handleiding DirectAdmin Handleiding DirectAdmin Heeft uw hostingpakket het control panel DirectAdmin dan leest u in deze sectie hoe u uw pakket kunt beheren. Dat doet u via : http://www.uwdomein.nl:2222. 1 Inloggen Voordat u

Nadere informatie

Rapporten. Labels en Rapporten in Atlantis 1. Atlantis heeft twee manieren om output te genereren: 1. labels 2. rapporten (reports)

Rapporten. Labels en Rapporten in Atlantis 1. Atlantis heeft twee manieren om output te genereren: 1. labels 2. rapporten (reports) Labels en Rapporten in Atlantis 1 Atlantis heeft twee manieren om output te genereren: 1. labels 2. rapporten (reports) Rapporten Een rapport is eigenlijk altijd een tekst bestand, die vorm wordt gegeven

Nadere informatie

PHP-OPDRACHT SITE BOUWEN

PHP-OPDRACHT SITE BOUWEN PHP-OPDRACHT SITE BOUWEN PERIODE 4 LEERJAAR 1 Opleiding: Duur: Applicatieontwikkelaar 1 onderwijsperiode (4-8 weken) Voorkennis: Basiscursus PHP 5.4 Victor Peters (978 90 125 8499 9) Basiscursus XHTML,

Nadere informatie

SAN v3. Update document 2010. uitgebracht door OCEN

SAN v3. Update document 2010. uitgebracht door OCEN SAN v3 Update document 2010 uitgebracht door OCEN Inhoudsopgave. Inleiding...3 1 Navigatie...4 1.1 Navigatie: het menu...4 1.2 Navigatie: dashboard...4 1.3 Navigatie: kruimelpad...4 1.4 Navigatie: iconen

Nadere informatie

Ga naar http://www.domeinnaam.nl/wp-admin en log in met de gebruikersnaam en wachtwoord verkregen via mail.

Ga naar http://www.domeinnaam.nl/wp-admin en log in met de gebruikersnaam en wachtwoord verkregen via mail. INLOGGEN Ga naar http://www.domeinnaam.nl/wp-admin en log in met de gebruikersnaam en wachtwoord verkregen via mail. Vul hier je gebruikersnaam en wachtwoord in en klik op Inloggen. Bij succesvolle login

Nadere informatie

Handleiding wordpress

Handleiding wordpress Handleiding wordpress Wordpress versie 3.0.4 Handleiding versie 1.1 Auteur Website Geert Hoekzema www.geerthoekzema.nl www.geerthoekzema.nl geert@geerthoekzema.nl 1 Inhoudsopgave Inleiding... 3 Beginnen

Nadere informatie

Inloggen. In samenwerking met Stijn Berben.

Inloggen. In samenwerking met Stijn Berben. Inloggen Ga naar www.hetjongleren.eu. Heb je al een gebruikersnaam en wachtwoord, log dan in op deze pagina (klik op deze link ): Vul hier je gebruikersnaam en wachtwoord in en klik op Inloggen. Bij succesvolle

Nadere informatie

PHP en een MySQL database.

PHP en een MySQL database. mysql_php.doc 1/5 PHP en een MySQL database. Om informatie uit een MySQL database op te halen moet je de volgende stappen uitvoeren: 1. een verbinding maken met mysql; 2. een mysql database selecteren;

Nadere informatie

Test Joomla op je PC 1

Test Joomla op je PC 1 1 Disclaimer Bij de samenstelling van dit ebook is de grootst mogelijke zorg besteed aan de juistheid en correctheid van de informatie die in dit ebook wordt verstrekt. De auteur van dit ebook kan op geen

Nadere informatie

U ziet de progressie van de download aan de groene blokjes in het balkje helemaal onder aan de pagina.

U ziet de progressie van de download aan de groene blokjes in het balkje helemaal onder aan de pagina. Gegevens exporteren en bewerken vanuit GRIEL Stap 1. Selecteer de juiste gegevens en download deze 1. Stel het datumfilter in op de gewenste periode. Druk op ververs. 2. Maak met behulp van het filter

Nadere informatie

Een database gebruiken

Een database gebruiken Een database gebruiken In een vorige handleiding heb ik laten zien hoe je met Scratch soortgelijke gegevens kunt opslaan in een lijst om deze op een later moment weer op te halen. Als voorbeeld las ik

Nadere informatie

Trippeltrap Content Management System

Trippeltrap Content Management System Handleiding Trippeltrap Content Management System versie 2.4 Aanmelden Voordat u de tekst op uw webpagina kunt aanpassen, moet u zich eerst aanmelden. Bovenaan de pagina vindt u een link naar het intranet.

Nadere informatie

API...1 Identificatie...1 Opties...2 Acties...3 Webserver...6 Heartbeat...6 Buffer groottes...8

API...1 Identificatie...1 Opties...2 Acties...3 Webserver...6 Heartbeat...6 Buffer groottes...8 API API...1 Identificatie...1 Opties...2 Acties...3 Webserver...6 Heartbeat...6 Buffer groottes...8 Identificatie Alle programma's communiceren met elkaar door gebruik te maken van JSON objecten. Het normale

Nadere informatie

De plug-in is heel eenvoudig te installeren met een setup-programma. Waarna je een aantal menu opties in het tools menu er bij krijgt.

De plug-in is heel eenvoudig te installeren met een setup-programma. Waarna je een aantal menu opties in het tools menu er bij krijgt. Plsqldoc Genereer je documentatie Beeklaan 444 2562 BK Den Haag www.darwin-it.nl info@darwin-it.nl KvK 27283780 ING 65.35.40.663 Technical Architect Net als (vrijwel) elke ontwikkelaar vind ik het documenteren

Nadere informatie

Je gaat nu een Zend-Project maken in de map C:/wamp/www (de document root van de webserver) met behulp van Zend Tool..

Je gaat nu een Zend-Project maken in de map C:/wamp/www (de document root van de webserver) met behulp van Zend Tool.. Hoofdstuk 2 Een ZF project maken het Model-View-Controller pattern Je hebt nu ZF geïnstalleerd en geconfigureerd. We gaan aan de hand van een Zend-project onderzoeken of deze installatie en configuratie

Nadere informatie

Voor vragen: http://www.richard3332.nl/ of mail naar Richard3332@gmail.com

Voor vragen: http://www.richard3332.nl/ of mail naar Richard3332@gmail.com Welkom bij mijn PHP tutorial (Deel 1) Ik ga in deze delen PHP uitleggen, dit doe ik in het programma notepad++ (gratis) deze kunt u downloaden van www.richard3332.nl/downloads.php Als u beschikt over dreamweaver

Nadere informatie

Handleiding CMS EWall

Handleiding CMS EWall Handleiding CMS EWall Inhoud: 1. Inleiding 2 2. Hoe log ik in op mijn EWall account? 3 3. Werken in groepen 4 4. Hoe plaats ik tekst achter een tegel? 5 5. Hoe plaats ik een foto achter een tegel? 6 6.

Nadere informatie

Automatisering voor Financiële Dienstverleners. Werken met Queries en Merge Documenten. For more information visit our website at www.pyrrho.

Automatisering voor Financiële Dienstverleners. Werken met Queries en Merge Documenten. For more information visit our website at www.pyrrho. Automatisering voor Financiële Dienstverleners Werken met Queries en Merge Documenten For more information visit our website at www.pyrrho.com Date: Document Nr: 30 maart, 2007 UBizzMerge, Versie 4.0 Status:

Nadere informatie

Automatische Installatie op IIS server

Automatische Installatie op IIS server Automatische Installatie op IIS server In de map Web staat het installatiebestand : Je kan de install starten door het aanklikken van het msi bestand vanuit Verkenner. Na installatie is steeds een manuele

Nadere informatie

Dynamische Websites. Week 10

Dynamische Websites. Week 10 Dynamische Websites Week 10 INFO Feedback vraag het in de labo s als je feedback wilt op je code Lessen op 5/12 en 12/12 om 17.15 op 19/12 om 11.00 KLEURENCODE GROEN = zelf kunnen schrijven PAARS = code

Nadere informatie

Les 12 : database koppeling, opmaken van template, webstructuur en afdrukken van gegevens. (deel2).

Les 12 : database koppeling, opmaken van template, webstructuur en afdrukken van gegevens. (deel2). Les 12 : database koppeling, opmaken van template, webstructuur en afdrukken van gegevens. (deel2). In de volgende reeks lessen zal alle vorige leerstof uitgebreid aan het bod komen. Zie ook de vorige

Nadere informatie

Wat is er veranderd in Prezi?

Wat is er veranderd in Prezi? Wat is er veranderd in Prezi? Update voor Prezi voor kids januari 2014 Door: Hedwyg van Groenendaal Prezi zit niet stil en is constant bezig om de tool te verbeteren. Omdat het boek op sommige punten niet

Nadere informatie

Foto web applicatie documentatie

Foto web applicatie documentatie Foto web applicatie documentatie Marijn Stuyfzand M31T PHP31 David Schol 1 Inhoudsopgave APPLICATIESTRUCTUUR MAPPENSTRUCTUUR FUNCTIONALITEITSSTRUCTUUR DE BASIS VOOR ELKE PAGINA DATABASE SERVER- SIDE EN

Nadere informatie

XAMPP Web Development omgeving opzetten onder Windows.

XAMPP Web Development omgeving opzetten onder Windows. XAMPP Web Development omgeving opzetten onder Windows. Inhoudsopgave 1. Lees dit eerst... 2 2. Inleiding... 2 1 Xampp downloaden... 2 2 Installatie Xampp 1.7.4 op externe harddisk... 3 3 XAMPP herconfiguren...

Nadere informatie

Inhoudsopgave. versie 0.8

Inhoudsopgave. versie 0.8 JOOMLA! INSTALLATIE HANDLEIDING versie 0.8 Inhoudsopgave Stappenplan...3 Inrichten database...4 Configuratiecentrum cpanel...4 Aanmaken van een database gebruiker...5 Aanmaken van een database...6 Gebruiker

Nadere informatie

Mach3Framework 5.0 / Website

Mach3Framework 5.0 / Website Mach3Framework 5.0 / Website Handleiding Mach3Builders Inhoudsopgave 1 Inloggen...5 1.1 Ingelogd blijven...6 1.2 Wachtwoord vergeten...7 2 Applicatie keuzescherm...8 2.1 De beheeromgeving openen...9 3

Nadere informatie

Drupal. Handleiding voor medewerkers. Wim Hambrouck V1.1 (januari 2011)

Drupal. Handleiding voor medewerkers. Wim Hambrouck V1.1 (januari 2011) Drupal Handleiding voor medewerkers Wim Hambrouck V1.1 (januari 2011) * + INHOUDSTAFEL Inhoudstafel... 2 1. Inloggen... 3 2. Menu opties... 3 3. Inhoud aanmaken... 4 3.1 Algemene instellingen voor nieuwe

Nadere informatie

SEO plan. Bart Janssen Semester 4 Fontys ICT & Media Design

SEO plan. Bart Janssen Semester 4 Fontys ICT & Media Design SEO plan Bart Janssen Semester 4 Fontys ICT & Media Design Inleiding Mijn adviesplan heb ik geschreven voor mijn persoonlijke leerportfolio. Het leerportfolio staat online op http://www.bartjanssen.eu.

Nadere informatie

Handleiding voor het maken van een online enquête formulier. Google Drive toepassing

Handleiding voor het maken van een online enquête formulier. Google Drive toepassing Handleiding voor het maken van een online enquête formulier. Google Drive toepassing HOGESCHOOL VAN ARNHEM EN NIJMEGEN Januari 7 2014 Opgesteld door: Jan-Willem 1//2014 Handleiding voor het maken van een

Nadere informatie

Handleiding CMS. Auteur: J. Bijl Coldfusion Consultant

Handleiding CMS. Auteur: J. Bijl Coldfusion Consultant Handleiding CMS Auteur: J. Bijl Coldfusion Consultant Inhoudsopgave 1.0 Inleiding 3 2.0 Introductie CMS en websites 4 3.0 Inloggen in beheer 5 4.0 Dashboard 6 4.1 Bezoekers totalen 6 4.2 Bezoekers 7 4.3

Nadere informatie

Inhoudsopgave pag. 2

Inhoudsopgave pag. 2 www.hofdesign.nl 1 Inhoudsopgave pag. 2 Sblog: Beheerdersmenu pag. 3 Sblog: Berichten plaatsen pag. 4 Sblog: Berichten plaatsen (vervolg) pag. 5 Sblog: Afbeeldingen pag. 6 Sblog: Afbeeldingen (vervolg)

Nadere informatie

Xampp Web Development omgeving opzetten onder Windows.

Xampp Web Development omgeving opzetten onder Windows. Xampp Web Development omgeving opzetten onder Windows. Inhoudsopgave 1. Lees dit eerst... 2 2. Inleiding... 2 3. Installatie Xampp... 3 1.1 Installatie Xampp Launcher... 7 1.2 Controle geïnstalleerde bestanden...

Nadere informatie

Verder zijn er de nodige websites waarbij voorbeelden van objectgeoriënteerd PHP (of Objec Oriented PHP, OO PHP) te vinden zijn.

Verder zijn er de nodige websites waarbij voorbeelden van objectgeoriënteerd PHP (of Objec Oriented PHP, OO PHP) te vinden zijn. Objectgeoriënteerd PHP (versie 5) Kennisvereisten: Ervaring met programmeren in PHP met MySQL Je weet wat een class of klasse is Je weet wat een instantie van een klasse (een object) is Je weet wat een

Nadere informatie

Les Webform INLEIDING VOORBEREIDING

Les Webform INLEIDING VOORBEREIDING Les 4 1. Webform INLEIDING Webform is een zeer knappe module. De interface is zeer overzichtelijk en de het geheel is zeer goed gedocumenteerd. De mogelijkheden eindeloos. Naast Views wordt Webform gezien

Nadere informatie

Kleine cursus PHP5. Auteur: Raymond Moesker

Kleine cursus PHP5. Auteur: Raymond Moesker Kleine cursus PHP5 Auteur: Raymond Moesker Kleine cursus PHP PHP is platform en CPU onafhankelijk, open source, snel, heeft een grote userbase, het is object georiënteerd, het wordt omarmd door grote bedrijven

Nadere informatie

Handleiding DirectAdmin

Handleiding DirectAdmin Handleiding DirectAdmin Heeft uw hostingpakket het control panel DirectAdmin dan leest u in deze sectie hoe u uw pakket kunt beheren. Dat doet u via : http://www.uwdomein.nl:2222. Handleiding DirectAdmin

Nadere informatie

Handleiding configuratie en gebruik tekenmodule

Handleiding configuratie en gebruik tekenmodule Handleiding configuratie en gebruik tekenmodule B3Partners Inhoudsopgave 1 Inleiding...2 2 Configuratie tekenmodule...3 2.1 Database tabel...4 2.2 WMS Service...5 2.3 Gegevensbron en kaartlaag...6 2.4

Nadere informatie

16. Web Station. In dit hoofdstuk komen de volgende onderwerpen aan bod:

16. Web Station. In dit hoofdstuk komen de volgende onderwerpen aan bod: 16. Web Station U kunt uw QNAP NAS gebruiken om een website te hosten. U kunt zelf een website bouwen in HTML of gebruik maken van één van de vele content management systemen die beschikbaar worden gesteld

Nadere informatie

Puntjes op de I. Baris Firat

Puntjes op de I. Baris Firat Puntjes op de I Baris Firat 1 Functies en kritieke onderdelen in code (onderdelen die niet in één oogopslag te verklaren zijn) zijn voorzien van comments. Hierbij wordt er gebruikt gemaakt van geldende

Nadere informatie

Hosting. Aan de slag. WeFact B.V. Kuiper 7a 5521 DG Eersel Nederland. w: www.wefact.nl e: helpdesk@wefact.nl

Hosting. Aan de slag. WeFact B.V. Kuiper 7a 5521 DG Eersel Nederland. w: www.wefact.nl e: helpdesk@wefact.nl Hosting Aan de slag WeFact B.V. Kuiper 7a 5521 DG Eersel Nederland w: www.wefact.nl e: helpdesk@wefact.nl 1. Installatie WeFact Hosting installeren In ons e-mail bericht heeft u inloggegevens ontvangen

Nadere informatie

Zonnepanelen Hoe krijg je de data op je website?

Zonnepanelen Hoe krijg je de data op je website? Zonnepanelen Hoe krijg je de data op je website? Beste website-bezoeker, Omdat ik al heel wat vragen kreeg over het gedeelte zonne-energie op mijn website, heb ik besloten om de werkwijze die ik gevolgd

Nadere informatie

Verslag. Projectteam: 107 Datum: 16 oktober 2008 Project leden: Lennard Fonteijn Harish Marhe Nicoletta Saba Turgay Saruhan Robin Tummers

Verslag. Projectteam: 107 Datum: 16 oktober 2008 Project leden: Lennard Fonteijn Harish Marhe Nicoletta Saba Turgay Saruhan Robin Tummers Verslag SE Projectteam: 107 Datum: 16 oktober 2008 Project leden: Lennard Fonteijn Harish Marhe Nicoletta Saba Turgay Saruhan Robin Tummers In dit verslag zullen wij een beschrijving geven, over welke

Nadere informatie

HTML en CSS. Je website bestaat uit HTML. Dat is een taal die browsers (Internet explorer, Chrome, Safari) kunnen lezen.

HTML en CSS. Je website bestaat uit HTML. Dat is een taal die browsers (Internet explorer, Chrome, Safari) kunnen lezen. Terminologie HTML en CSS HTML: Hyper Markup language Je website bestaat uit HTML. Dat is een taal die browsers (Internet explorer, Chrome, Safari) kunnen lezen. CSS: Cascading StyleSheet stylesheet for

Nadere informatie

Hoe moet je een prachtige presentatie maken?

Hoe moet je een prachtige presentatie maken? Hoe moet je een prachtige presentatie maken? www.meestermichael.nl Geef de presentatie een titel. Klik dit vak aan om jouw presentatie een ondertitel te geven. Hier kun je je presentatie een titel geven

Nadere informatie

Handleiding Facultaire website Expression Engine

Handleiding Facultaire website Expression Engine Handleiding Facultaire website Expression Engine Inhoud 1. Opbouw 2. Inloggen 3. Home 4. Publish 5. Publish Form full item 6. Uitleg velden Publish Form Full item 7. Publish Form Half Page 8. Uitleg velden

Nadere informatie