Digitale renovaties - Congres 2008 - V-ICT-OR

25
Nieuwe technologieën Propel, patForms en Ext Jan Fabry – [email protected] V-ICT-OR Shopt IT 2008

description

Lithium is looking ahead when using new techologies in our webprojects

Transcript of Digitale renovaties - Congres 2008 - V-ICT-OR

Page 1: Digitale renovaties - Congres 2008 - V-ICT-OR

Nieuwe technologieën

Propel, patForms en Ext

Jan Fabry – [email protected] V-ICT-OR Shopt IT 2008

Page 2: Digitale renovaties - Congres 2008 - V-ICT-OR

Introductie

Ext (Javascript-library)

patForms (Formulieren)

Propel (DB-toegang)

Page 3: Digitale renovaties - Congres 2008 - V-ICT-OR

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

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

Propel

http://propel.phpdb.org

Page 6: Digitale renovaties - Congres 2008 - V-ICT-OR

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

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

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

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

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

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

patForms

http://trac.php-tools.net/patForms

Page 13: Digitale renovaties - Congres 2008 - V-ICT-OR

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

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

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

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

Voorbeeld

Page 18: Digitale renovaties - Congres 2008 - V-ICT-OR

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

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

Ext

http://extjs.com

Page 21: Digitale renovaties - Congres 2008 - V-ICT-OR

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

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

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

Voorbeelden

Page 25: Digitale renovaties - Congres 2008 - V-ICT-OR

Voorbeelden