Your SlideShare is downloading. ×
Digitale renovaties - Congres 2008 - V-ICT-OR
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Digitale renovaties - Congres 2008 - V-ICT-OR

336
views

Published on

Lithium is looking ahead when using new techologies in our webprojects

Lithium is looking ahead when using new techologies in our webprojects

Published in: Technology

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
336
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Nieuwe technologieën Propel, patForms en Ext Jan Fabry – jan.fabry@lithium.be V-ICT-OR Shopt IT 2008
  • 2. Introductie Ext (Javascript-library) patForms (Formulieren) Propel (DB-toegang)
  • 3. 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
  • 4. 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
  • 5. Propel http://propel.phpdb.org
  • 6. 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
  • 7. Voorbeeld INSERT INTO author (first_name, last_name) VALUES ('Jack', 'London'); $author = new Author(); $author->setFirstName(quot;Jackquot;); $author->setLastName(quot;Londonquot;); $author->save(); Voordeel?
  • 8. Voorbeeld (uitgebreid) $method = ', opsturen='.$_REQUEST['FDELIVERY']; if ( ctype_digit( $_REQUEST['FADATE'] ) ) { $method .= ', afhaling_date=quot;'.strftime( '%Y-%m-%d’, $_REQUEST['FADATE'] ) . 'quot;'; } mysql_query (quot;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_IDquot;.$method. $rijksregister);
  • 9. 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();
  • 10. 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 .= quot;n------------------------------nquot;; $this->setHistory( $history ); }
  • 11. 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 );
  • 12. patForms http://trac.php-tools.net/patForms
  • 13. 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
  • 14. 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( quot;Arrayquot; ); $form->setRenderer( $renderer ); $form->setAutoValidate( 'save' ); $elements = $form->renderForm();
  • 15. 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
  • 16. Voorbeeld {panelForm title=quot;$formTitlequot; id=quot;formquot; icon=quot;$iconModulequot;} {formRow e=Author} {foreach from=$allLanguages item=lang} {formRow e=quot;Title`$lang`quot; lang=$lang} {/foreach} {formRow e=UserPublish} <div id=quot;uptquot; style=quot;display:nonequot;> {formRow e=UserPublishText} </div> {if isset( $forms.$mainForm.elements.ChiefPublish )} {formRow e=ChiefPublish} {/if} {/panelForm}
  • 17. Voorbeeld
  • 18. 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
  • 19. 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 );
  • 20. Ext http://extjs.com
  • 21. 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…
  • 22. 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); });
  • 23. 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
  • 24. Voorbeelden
  • 25. Voorbeelden