digitale renovaties - congres 2008 - v-ict-or
DESCRIPTION
Lithium is looking ahead when using new techologies in our webprojectsTRANSCRIPT
![Page 2: Digitale renovaties - Congres 2008 - V-ICT-OR](https://reader034.vdocuments.us/reader034/viewer/2022051817/548135f85906b5046d8b460e/html5/thumbnails/2.jpg)
Introductie
Ext (Javascript-library)
patForms (Formulieren)
Propel (DB-toegang)
![Page 3: Digitale renovaties - Congres 2008 - V-ICT-OR](https://reader034.vdocuments.us/reader034/viewer/2022051817/548135f85906b5046d8b460e/html5/thumbnails/3.jpg)
Eigenschappen
Open source software transparantie, goedkoop, mogelijkheden
Aparte onderdelen, maar werken mooi samen patForms heeft Propel-ondersteuning (naast andere) Ext is overal te integreren (servertaal-onafhankelijk, dus ook met PHP (of
ASP, Java, Cobol…)) Ext werkt ook samen met Prototype+script.aculo.us, JQuery of YUI
![Page 4: Digitale renovaties - Congres 2008 - V-ICT-OR](https://reader034.vdocuments.us/reader034/viewer/2022051817/548135f85906b5046d8b460e/html5/thumbnails/4.jpg)
Wanneer gebruiken?
Altijd Nieuwe projecten
Uiteraard analyse van alle mogelijkheden maken Anders werken voor wie ervaring heeft met PHP, maar zeker doenbaar
Bestaande projecten Ideaal als je al met bestaande code zit, en een bestaande databank Die willen we uiteraard behouden Maar bestaande “fouten” willen we maskeren Lithium heeft voor dit trio gekozen bij start eGo v3
![Page 5: Digitale renovaties - Congres 2008 - V-ICT-OR](https://reader034.vdocuments.us/reader034/viewer/2022051817/548135f85906b5046d8b460e/html5/thumbnails/5.jpg)
Propel
http://propel.phpdb.org
![Page 6: Digitale renovaties - Congres 2008 - V-ICT-OR](https://reader034.vdocuments.us/reader034/viewer/2022051817/548135f85906b5046d8b460e/html5/thumbnails/6.jpg)
Wat is Propel? Object-Relational Mapping (ORM) framework voor PHP5 Database als objecten
Geen gedoe met connecties, escaping, type-casting, … Werk met objecten, niet met queries Gegenereerde klassen die uitbreidbaar zijn voor eigen implementaties
Geen SQL meer “Criteria”-objecten worden opgebouwd Volgt complexe business-logica Maar wel nog mogelijk indien gewenst
Database-onafhankelijk MySQL, Oracle, PostgreSQL, SQLite, en MS SQL Server Maskeert DB-specifieke dialecten (LIMIT, AUTO_INCREMENT…) DB-schema in XML-formaat
![Page 7: Digitale renovaties - Congres 2008 - V-ICT-OR](https://reader034.vdocuments.us/reader034/viewer/2022051817/548135f85906b5046d8b460e/html5/thumbnails/7.jpg)
Voorbeeld
INSERT INTO author (first_name, last_name) VALUES ('Jack', 'London');
$author = new Author();$author->setFirstName("Jack");$author->setLastName("London");$author->save();
Voordeel?
![Page 8: Digitale renovaties - Congres 2008 - V-ICT-OR](https://reader034.vdocuments.us/reader034/viewer/2022051817/548135f85906b5046d8b460e/html5/thumbnails/8.jpg)
Voorbeeld (uitgebreid) $method = ', opsturen='.$_REQUEST['FDELIVERY'];if ( ctype_digit( $_REQUEST['FADATE'] ) ){ $method .= ', afhaling_date="'.strftime( '%Y-%m-%d’, $_REQUEST['FADATE'] ) . '"';}
mysql_query ("INSERT loket SET doc='$ID', var1='$VAR1', var2='$VAR2', var3='$VAR3', var4='$VAR4', var5='$VAR5', var6='$VAR6', var7='$VAR7', var8='$VAR8', var9='$VAR9', var10='$VAR10', var11='$VAR11', var12='$VAR12', var13='$VAR13', var14='$VAR14', var15='$VAR15', var16='$VAR16', var17='$VAR17', var18='$VAR18', var19='$VAR19', var20='$VAR20', date='$DATUM', name='$FNAME', gebdate='$GEBDATE', tel='$FTEL', organisation='$datadoc->organisation', department='$datadoc->organisation', user='$datadoc->user', users='$datadoc->users', user_level='$datadoc->user_level', email='$FEMAIL', forms_advanced_submission_id=$FORMS_ADVANCED_SUBMISSION_ID".$method.$rijksregister);
![Page 9: Digitale renovaties - Congres 2008 - V-ICT-OR](https://reader034.vdocuments.us/reader034/viewer/2022051817/548135f85906b5046d8b460e/html5/thumbnails/9.jpg)
Voorbeeld (uitgebreid) $loket = new Loket();$loket->setDoc( $record->getId() );$loket->setDate( time() );foreach ( $standardFields as $field => $value ){ if ( isset( $value ) ) { $loket->setByName( $field, $value ); }}$loket->setFormsAdvancedSubmissionId( $faSid );$loket->setOrganisation( $record->getOrganisation() );$loket->setDepartment( $record->getDepartment() );$loket->setUser( $record->getUser() );$loket->setUsers( $record->getUsers() );$loket->setUserLevel( $record->getUserLevel() );if ( isset( $faDate ) ){ $loket->setOpsturen( 1 ); $loket->setAfhalingDate( $faDate );}$loket->save();
![Page 10: Digitale renovaties - Congres 2008 - V-ICT-OR](https://reader034.vdocuments.us/reader034/viewer/2022051817/548135f85906b5046d8b460e/html5/thumbnails/10.jpg)
Conversielaag public function getNameNl(){ return html_entity_decode( parent::getNameNl(), ENT_COMPAT, 'UTF-8' );}
public function getUsers(){ return explode( '@', parent::getUsers() );}
public function addToHistory( $message, $eGoUser ){ $history = $this->getHistory(); $history .= '[' . $eGoUser->eGoTitle() . '] ’; $history .= $message; $history .= date( ' (d/m/y - H:i)' ); $history .= "\n------------------------------\n"; $this->setHistory( $history );}
![Page 11: Digitale renovaties - Congres 2008 - V-ICT-OR](https://reader034.vdocuments.us/reader034/viewer/2022051817/548135f85906b5046d8b460e/html5/thumbnails/11.jpg)
Criteria-voorbeeld $curUserLevel = UsersLevelPeer::retrieveByPk( $GLOBALS['eGoUser']->getLevel() )->getLevel();$ulc = new Criteria();$ulc->add( UsersLevelPeer::LEVEL, $curUserLevel, Criteria::LESS_THAN );$uls = UsersLevelPeer::doSelect( $ulc );$ula = array();foreach ( $uls as $ul ){ $ula[] = $ul->getId();}$gridConfig['criteria']->add( ContactsPeer::LEVEL, $ula, Criteria::NOT_IN );
$gridConfig['criteria']->add( ContactsPeer::ID, $GLOBALS['eGoUser']->getId(), Criteria::NOT_EQUAL );
![Page 12: Digitale renovaties - Congres 2008 - V-ICT-OR](https://reader034.vdocuments.us/reader034/viewer/2022051817/548135f85906b5046d8b460e/html5/thumbnails/12.jpg)
patForms
http://trac.php-tools.net/patForms
![Page 13: Digitale renovaties - Congres 2008 - V-ICT-OR](https://reader034.vdocuments.us/reader034/viewer/2022051817/548135f85906b5046d8b460e/html5/thumbnails/13.jpg)
Wat is patForms? Form-abstractie Form-elementen als objecten
Geen gedoe met escaping, validatie, foutafhandeling… Werk met objecten, niet met $_POST Voorgedefinieerde klassen die uitbreidbaar zijn voor eigen implementaties Definitie herbruikbaar
Geen HTML meer “Element”-objecten worden opgebouwd Volgt complexe business-logica Maar wel nog mogelijk indien gewenst
Output-onafhankelijk HTML, maar evengoed XML, PDF, … Gedeelde code voor gedeelde functionaliteit
![Page 14: Digitale renovaties - Congres 2008 - V-ICT-OR](https://reader034.vdocuments.us/reader034/viewer/2022051817/548135f85906b5046d8b460e/html5/thumbnails/14.jpg)
Voorbeeld $elementsDefinition = array( 'username' => array( 'type' => 'String', 'attributes' => array( 'required' => 'yes', 'label' => 'Username', 'description' => 'Enter your username here.', 'maxlength' => '15', 'minlength' => '4', 'title' => 'Username’, ), ),);
$form =& patForms::createForm( $elementsDefinition, array( 'name' => 'myForm' ) );
$renderer =& patForms::createRenderer( "Array" );
$form->setRenderer( $renderer );
$form->setAutoValidate( 'save' );
$elements = $form->renderForm();
![Page 15: Digitale renovaties - Congres 2008 - V-ICT-OR](https://reader034.vdocuments.us/reader034/viewer/2022051817/548135f85906b5046d8b460e/html5/thumbnails/15.jpg)
Elementen tonen (Renderers) Gewoon in HTML plaatsen
Beetje onhandig, maar het werkt Nodige code (tags, labels) zit in eenvoudige array Goed voor integratie in bestaande code
Templating-systeem gebruiken Code gescheiden van layout Meer, maar simpele bestanden Eenvoudig onafhankelijk aan te passen (en door verschillende personen) Smarty is meest gekend, en ondersteund door patForms
![Page 16: Digitale renovaties - Congres 2008 - V-ICT-OR](https://reader034.vdocuments.us/reader034/viewer/2022051817/548135f85906b5046d8b460e/html5/thumbnails/16.jpg)
Voorbeeld {panelForm title="$formTitle" id="form" icon="$iconModule"} {formRow e=Author} {foreach from=$allLanguages item=lang} {formRow e="Title`$lang`" lang=$lang} {/foreach} {formRow e=UserPublish} <div id="upt" style="display:none"> {formRow e=UserPublishText} </div> {if isset( $forms.$mainForm.elements.ChiefPublish )} {formRow e=ChiefPublish} {/if}{/panelForm}
![Page 17: Digitale renovaties - Congres 2008 - V-ICT-OR](https://reader034.vdocuments.us/reader034/viewer/2022051817/548135f85906b5046d8b460e/html5/thumbnails/17.jpg)
Voorbeeld
![Page 18: Digitale renovaties - Congres 2008 - V-ICT-OR](https://reader034.vdocuments.us/reader034/viewer/2022051817/548135f85906b5046d8b460e/html5/thumbnails/18.jpg)
Koppeling met Propel Database-informatie zit in Propel
Namen, datatypes, eventueel relaties Automatisch formulier aanmaken
Juiste velden voor datatypes (INT, DATE, …) Eventueel aanpassen voor speciale elementen (afbeeldingen…)
Automatisch formulier opslaan Geen extra code nodig patForms converteert naar standaard php-datatypes, Propel kan deze
inlezen
![Page 19: Digitale renovaties - Congres 2008 - V-ICT-OR](https://reader034.vdocuments.us/reader034/viewer/2022051817/548135f85906b5046d8b460e/html5/thumbnails/19.jpg)
Voorbeeld $definition = patForms_Definition_Propel::create( $params );$form = &patForms::createCreator( 'Definition' )->create( $definition );
$form->setValues( array( 'Id' => $ID ) );
$storage = patForms::createStorage( 'Propel' );$storage->setStorageLocation( $form->attributes['name'].'Peer' );$form->setStorage( $storage );
![Page 20: Digitale renovaties - Congres 2008 - V-ICT-OR](https://reader034.vdocuments.us/reader034/viewer/2022051817/548135f85906b5046d8b460e/html5/thumbnails/20.jpg)
Ext
http://extjs.com
![Page 21: Digitale renovaties - Congres 2008 - V-ICT-OR](https://reader034.vdocuments.us/reader034/viewer/2022051817/548135f85906b5046d8b460e/html5/thumbnails/21.jpg)
Wat is Ext? Cross-browser Javascript library Verderzetting (extension) van de Yahoo! UI Library
Sterke UI-widgets Aanpasbaar en uitbreidbaar Voorgedefinieerde klassen die uitbreidbaar zijn voor eigen implementaties
Geen geprul meer Verschillen tussen browsers worden weggewerkt Ontwikkelen op hoog niveau mogelijk Maar “gewone” Javascript is natuurlijk nog altijd mogelijk
Goede ondersteuning “Ext, LLC” is een bedrijf dat betaalde ondersteuning geeft Grote gemeenschap met vrij te krijgen voorbeelden, uitbreidingen…
![Page 22: Digitale renovaties - Congres 2008 - V-ICT-OR](https://reader034.vdocuments.us/reader034/viewer/2022051817/548135f85906b5046d8b460e/html5/thumbnails/22.jpg)
Voorbeeld var myDiv = document.getElementById('myDiv');myDiv.className += ' red’;
Ext.onReady(function() { var myDiv = Ext.get('myDiv'); myDiv.addClass('red’); myDiv.highlight(); myDiv.center(); myDiv.setOpacity(.25);});
Ext.onReady(function() { var myDiv = Ext.get('myDiv'); myDiv.addClass('red’);});
![Page 23: Digitale renovaties - Congres 2008 - V-ICT-OR](https://reader034.vdocuments.us/reader034/viewer/2022051817/548135f85906b5046d8b460e/html5/thumbnails/23.jpg)
Koppeling met server-code Ext is een Javascript-library, en kan dus gekoppeld
worden aan eender welke server-side configuratie Meest gebruikte dataprotocol is JSON
Eenvoudige structuur Standaard-functies in PHP, maar ook in vele andere talen Communicatie is standaard over HTTP, dus geen server-requirements
(wordt wel eens vergeten bij het kijken naar voorbeelden)
Binnen Lithium: eGo patForms: Handige user interface voor formulier-elementen Propel: krachtige configuratie voor overzichtspagina’s Eenvoudig om standaard overal beveiliging op te plakken
![Page 24: Digitale renovaties - Congres 2008 - V-ICT-OR](https://reader034.vdocuments.us/reader034/viewer/2022051817/548135f85906b5046d8b460e/html5/thumbnails/24.jpg)
Voorbeelden
![Page 25: Digitale renovaties - Congres 2008 - V-ICT-OR](https://reader034.vdocuments.us/reader034/viewer/2022051817/548135f85906b5046d8b460e/html5/thumbnails/25.jpg)
Voorbeelden