SlideShare una empresa de Scribd logo
1 de 25
Descargar para leer sin conexión
Nieuwe technologieën
Propel, patForms en Ext


                          Jan Fabry – jan.fabry@lithium.be
                                  V-ICT-OR Shopt IT 2008
Introductie

    Ext   (Javascript-library)

  patForms       (Formulieren)


    Propel     (DB-toegang)
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
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
Propel


http://propel.phpdb.org
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
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?
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);
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();
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 );	
}
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 );
patForms


http://trac.php-tools.net/patForms
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
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();
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
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}
Voorbeeld
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
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 );
Ext


http://extjs.com
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…
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);	
});
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
Voorbeelden
Voorbeelden

Más contenido relacionado

Similar a Digitale renovaties - Congres 2008 - V-ICT-OR

Cursus Zend Framework - 1
Cursus Zend Framework - 1Cursus Zend Framework - 1
Cursus Zend Framework - 1bartjeukendrup
 
Html5 jeugdwerknet
Html5 jeugdwerknetHtml5 jeugdwerknet
Html5 jeugdwerknetHans Rossel
 
Zelf je Joomla! template bouwen voor beginners
Zelf je Joomla! template bouwen voor beginnersZelf je Joomla! template bouwen voor beginners
Zelf je Joomla! template bouwen voor beginnersRachel Walraven
 
PHP & Wordpress event - cursus php voor beginners
PHP & Wordpress event - cursus php voor beginnersPHP & Wordpress event - cursus php voor beginners
PHP & Wordpress event - cursus php voor beginnersEduvision Opleidingen
 
Richard van Velzen - JavaScript: mooi onder de rotzooi
Richard van Velzen - JavaScript: mooi onder de rotzooiRichard van Velzen - JavaScript: mooi onder de rotzooi
Richard van Velzen - JavaScript: mooi onder de rotzooiPFCongres
 
Afstudeerpresentatie
AfstudeerpresentatieAfstudeerpresentatie
Afstudeerpresentatiechiel
 
Linux Nijmegen - Webserver (LAMP stack) opzetten met VirtualbBox & Vagrant
Linux Nijmegen - Webserver (LAMP stack) opzetten met VirtualbBox & VagrantLinux Nijmegen - Webserver (LAMP stack) opzetten met VirtualbBox & Vagrant
Linux Nijmegen - Webserver (LAMP stack) opzetten met VirtualbBox & VagrantPeter Martin
 
Bart Lageweg - Ansible/Cobbler
Bart Lageweg - Ansible/CobblerBart Lageweg - Ansible/Cobbler
Bart Lageweg - Ansible/CobblerSplend
 

Similar a Digitale renovaties - Congres 2008 - V-ICT-OR (15)

Javascript Dhtml
Javascript DhtmlJavascript Dhtml
Javascript Dhtml
 
Beginnen met PHP
Beginnen met PHPBeginnen met PHP
Beginnen met PHP
 
Cursus Zend Framework - 1
Cursus Zend Framework - 1Cursus Zend Framework - 1
Cursus Zend Framework - 1
 
Cooking Cake
Cooking CakeCooking Cake
Cooking Cake
 
PHP
PHPPHP
PHP
 
Html5 jeugdwerknet
Html5 jeugdwerknetHtml5 jeugdwerknet
Html5 jeugdwerknet
 
PHP theorie
PHP theoriePHP theorie
PHP theorie
 
Zelf je Joomla! template bouwen voor beginners
Zelf je Joomla! template bouwen voor beginnersZelf je Joomla! template bouwen voor beginners
Zelf je Joomla! template bouwen voor beginners
 
PHP & Wordpress event - cursus php voor beginners
PHP & Wordpress event - cursus php voor beginnersPHP & Wordpress event - cursus php voor beginners
PHP & Wordpress event - cursus php voor beginners
 
Richard van Velzen - JavaScript: mooi onder de rotzooi
Richard van Velzen - JavaScript: mooi onder de rotzooiRichard van Velzen - JavaScript: mooi onder de rotzooi
Richard van Velzen - JavaScript: mooi onder de rotzooi
 
Afstudeerpresentatie
AfstudeerpresentatieAfstudeerpresentatie
Afstudeerpresentatie
 
Linux Nijmegen - Webserver (LAMP stack) opzetten met VirtualbBox & Vagrant
Linux Nijmegen - Webserver (LAMP stack) opzetten met VirtualbBox & VagrantLinux Nijmegen - Webserver (LAMP stack) opzetten met VirtualbBox & Vagrant
Linux Nijmegen - Webserver (LAMP stack) opzetten met VirtualbBox & Vagrant
 
Ldap
LdapLdap
Ldap
 
Bart Lageweg - Ansible/Cobbler
Bart Lageweg - Ansible/CobblerBart Lageweg - Ansible/Cobbler
Bart Lageweg - Ansible/Cobbler
 
Symfony and Angularjs
Symfony and AngularjsSymfony and Angularjs
Symfony and Angularjs
 

Más de Bart Gysens

Agoria en het onderwijs
Agoria en het onderwijsAgoria en het onderwijs
Agoria en het onderwijsBart Gysens
 
Tago communicatie 2.0
Tago communicatie 2.0Tago communicatie 2.0
Tago communicatie 2.0Bart Gysens
 
WASCO - Webs & Apps Standaarden voor de Converserende Overheid
WASCO - Webs & Apps Standaarden voor de Converserende OverheidWASCO - Webs & Apps Standaarden voor de Converserende Overheid
WASCO - Webs & Apps Standaarden voor de Converserende OverheidBart Gysens
 
Keynote Inspiratiedag 2011
Keynote Inspiratiedag 2011Keynote Inspiratiedag 2011
Keynote Inspiratiedag 2011Bart Gysens
 
Ondernemersloket - Sint-Truiden
Ondernemersloket - Sint-TruidenOndernemersloket - Sint-Truiden
Ondernemersloket - Sint-TruidenBart Gysens
 
BNS 20 jaar viering
BNS 20 jaar vieringBNS 20 jaar viering
BNS 20 jaar vieringBart Gysens
 
FeWeb on Tour - PHL
FeWeb on Tour - PHLFeWeb on Tour - PHL
FeWeb on Tour - PHLBart Gysens
 
Kortom - leidraad: Sociale media in crisiscommunicatie
Kortom - leidraad: Sociale media in crisiscommunicatieKortom - leidraad: Sociale media in crisiscommunicatie
Kortom - leidraad: Sociale media in crisiscommunicatieBart Gysens
 
Lancering mobiele app - stad hasselt
Lancering mobiele app - stad hasseltLancering mobiele app - stad hasselt
Lancering mobiele app - stad hasseltBart Gysens
 
Digitale media in crisissituaties - Kortom
Digitale media in crisissituaties - KortomDigitale media in crisissituaties - Kortom
Digitale media in crisissituaties - KortomBart Gysens
 
Mid-office days on tour - Interactie dankzij mid-office
Mid-office days on tour - Interactie dankzij mid-officeMid-office days on tour - Interactie dankzij mid-office
Mid-office days on tour - Interactie dankzij mid-officeBart Gysens
 
Making mobile apps with Drupal data
Making mobile apps with Drupal dataMaking mobile apps with Drupal data
Making mobile apps with Drupal dataBart Gysens
 
City of Manor (whitepaper) - QR-code use
City of Manor (whitepaper) - QR-code useCity of Manor (whitepaper) - QR-code use
City of Manor (whitepaper) - QR-code useBart Gysens
 
Competence Center Social Media @ SAGA
Competence Center Social Media @ SAGACompetence Center Social Media @ SAGA
Competence Center Social Media @ SAGABart Gysens
 
Studiedag Cijfers-Beleid-Communicatie
Studiedag Cijfers-Beleid-CommunicatieStudiedag Cijfers-Beleid-Communicatie
Studiedag Cijfers-Beleid-CommunicatieBart Gysens
 
Intelligent data en open overheid
Intelligent data en open overheidIntelligent data en open overheid
Intelligent data en open overheidBart Gysens
 
Knowledge center - A Drupal Tourisme database
Knowledge center - A Drupal Tourisme databaseKnowledge center - A Drupal Tourisme database
Knowledge center - A Drupal Tourisme databaseBart Gysens
 

Más de Bart Gysens (20)

Genz+byod
Genz+byodGenz+byod
Genz+byod
 
Agoria en het onderwijs
Agoria en het onderwijsAgoria en het onderwijs
Agoria en het onderwijs
 
Tago communicatie 2.0
Tago communicatie 2.0Tago communicatie 2.0
Tago communicatie 2.0
 
WASCO - Webs & Apps Standaarden voor de Converserende Overheid
WASCO - Webs & Apps Standaarden voor de Converserende OverheidWASCO - Webs & Apps Standaarden voor de Converserende Overheid
WASCO - Webs & Apps Standaarden voor de Converserende Overheid
 
5 trends 2013
5 trends 20135 trends 2013
5 trends 2013
 
Wasco kick off
Wasco kick offWasco kick off
Wasco kick off
 
Keynote Inspiratiedag 2011
Keynote Inspiratiedag 2011Keynote Inspiratiedag 2011
Keynote Inspiratiedag 2011
 
Ondernemersloket - Sint-Truiden
Ondernemersloket - Sint-TruidenOndernemersloket - Sint-Truiden
Ondernemersloket - Sint-Truiden
 
BNS 20 jaar viering
BNS 20 jaar vieringBNS 20 jaar viering
BNS 20 jaar viering
 
FeWeb on Tour - PHL
FeWeb on Tour - PHLFeWeb on Tour - PHL
FeWeb on Tour - PHL
 
Kortom - leidraad: Sociale media in crisiscommunicatie
Kortom - leidraad: Sociale media in crisiscommunicatieKortom - leidraad: Sociale media in crisiscommunicatie
Kortom - leidraad: Sociale media in crisiscommunicatie
 
Lancering mobiele app - stad hasselt
Lancering mobiele app - stad hasseltLancering mobiele app - stad hasselt
Lancering mobiele app - stad hasselt
 
Digitale media in crisissituaties - Kortom
Digitale media in crisissituaties - KortomDigitale media in crisissituaties - Kortom
Digitale media in crisissituaties - Kortom
 
Mid-office days on tour - Interactie dankzij mid-office
Mid-office days on tour - Interactie dankzij mid-officeMid-office days on tour - Interactie dankzij mid-office
Mid-office days on tour - Interactie dankzij mid-office
 
Making mobile apps with Drupal data
Making mobile apps with Drupal dataMaking mobile apps with Drupal data
Making mobile apps with Drupal data
 
City of Manor (whitepaper) - QR-code use
City of Manor (whitepaper) - QR-code useCity of Manor (whitepaper) - QR-code use
City of Manor (whitepaper) - QR-code use
 
Competence Center Social Media @ SAGA
Competence Center Social Media @ SAGACompetence Center Social Media @ SAGA
Competence Center Social Media @ SAGA
 
Studiedag Cijfers-Beleid-Communicatie
Studiedag Cijfers-Beleid-CommunicatieStudiedag Cijfers-Beleid-Communicatie
Studiedag Cijfers-Beleid-Communicatie
 
Intelligent data en open overheid
Intelligent data en open overheidIntelligent data en open overheid
Intelligent data en open overheid
 
Knowledge center - A Drupal Tourisme database
Knowledge center - A Drupal Tourisme databaseKnowledge center - A Drupal Tourisme database
Knowledge center - A Drupal Tourisme database
 

Digitale renovaties - Congres 2008 - V-ICT-OR

  • 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
  • 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 );
  • 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}
  • 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 );
  • 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