Joomla! Plugins Programmeren [NL]

43
Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo Jisse Reitsma ([email protected]) - Twitter @yireo Joomla! plugins ontwikkelen

description

Presentatie "Joomla! Plugins Programmeren"

Transcript of Joomla! Plugins Programmeren [NL]

Page 1: Joomla! Plugins Programmeren [NL]

Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireoJisse Reitsma ([email protected]) - Twitter @yireo

Joomla! pluginsontwikkelen

Page 2: Joomla! Plugins Programmeren [NL]

Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireoJisse Reitsma ([email protected]) - Twitter @yireo

Ik ben Jisse Reitsma

Developer

Ondernemer

Eigenaar van Yireo

Joomla! & Magento

Extensies & development

Tutorials & blogs

Page 3: Joomla! Plugins Programmeren [NL]

Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireoJisse Reitsma ([email protected]) - Twitter @yireo

Plugins die ik geschreven heb

Language Domains

Auto Login IP

Demo Site

Fancybox

HTTP Authenticatie

New Relic

Piwik

WebP

ScriptMerge

SEF Test

SSL Redirection

Static Content

Trademark

32+ MageBridge plugins

10+ SimpleLists plugins

8+ Dynamic404 plugins

Page 4: Joomla! Plugins Programmeren [NL]

Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireoJisse Reitsma ([email protected]) - Twitter @yireo

Zelf Joomla! plugins ontwikkelen

Deel I - Waarom een plugin?

Deel II - Een beetje programmeercode

Deel III - Hmmm, braindump

Presentatie online: http://slideshare.net/yireo

Tweets: @yireo

Page 5: Joomla! Plugins Programmeren [NL]

Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireoJisse Reitsma ([email protected]) - Twitter @yireo

Deel 1:Waarom een plugin?

Page 6: Joomla! Plugins Programmeren [NL]

Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireoJisse Reitsma ([email protected]) - Twitter @yireo

Joomla! extensies

Component

Modules

Plugins

Templates

Libraries

Taalbestanden

Page 7: Joomla! Plugins Programmeren [NL]

Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireoJisse Reitsma ([email protected]) - Twitter @yireo

Definitie van een Joomla! plugin

“Een Joomla! extensie die functionaliteit biedt op basis van een trigger-event. De Joomla! core heeft een aantal standaard core-events, maar iedere Joomla! extensie kan extra events trigger.”

[vrije vertaling van docs.joomla.org]

Page 8: Joomla! Plugins Programmeren [NL]

Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireoJisse Reitsma ([email protected]) - Twitter @yireo

Plugin-groepen (core)

Authentication

Content

System

User

Editors

Editors Xtd

Search

Finder

CAPTCHA

Extension

Quickicon

Page 9: Joomla! Plugins Programmeren [NL]

Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireoJisse Reitsma ([email protected]) - Twitter @yireo

Plugin-groepen (3rd party)

VirtueMart [product, custom]

JomSocial [community]

K2 [fields]

Page 10: Joomla! Plugins Programmeren [NL]

Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireoJisse Reitsma ([email protected]) - Twitter @yireo

Plugin-groepen (yireo)

Dynamic404 Match Lookups

SimpleLists Link

MageBridge Product Sales Actions

MageBridge Newsletter Subscriptions

MageBridge event forwarding

Page 11: Joomla! Plugins Programmeren [NL]

Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireoJisse Reitsma ([email protected]) - Twitter @yireo

User-plugin events

onUserLogin

onUserLogout

onUserAuthenticate

onUserLoginFailure

onUserBeforeSave / onUserAfterSave

onUserBeforeDelete / onUserAfterDelete

Page 12: Joomla! Plugins Programmeren [NL]

Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireoJisse Reitsma ([email protected]) - Twitter @yireo

System-plugin events

onAfterInitialise

onAfterRoute

onAfterDispatch

onBeforeRender / onAfterRender

onBeforeCompileHead

Page 13: Joomla! Plugins Programmeren [NL]

Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireoJisse Reitsma ([email protected]) - Twitter @yireo

Deel 2:Een beetje code

Page 14: Joomla! Plugins Programmeren [NL]

Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireoJisse Reitsma ([email protected]) - Twitter @yireo

Redenen voor een custom plugin

HTML-code achteraf wijzigen

Document-headers een beetje tweaken

User-formulier uitbreiden

Extra authenticatie-type

... en nog veel

Page 15: Joomla! Plugins Programmeren [NL]

Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireoJisse Reitsma ([email protected]) - Twitter @yireo

System Plugin-bestanden

plugins/system/example/example.php

plugins/system/example/example.xml

plugins/system/example/index.html

administrator/languages/en-GB/en-GB.plg_system_example.ini

administrator/languages/en-GB/en-GB.plg_system_example.sys.ini

Page 16: Joomla! Plugins Programmeren [NL]

Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireoJisse Reitsma ([email protected]) - Twitter @yireo

System Plugin-bestanden

plugins/system/example/example.php

plugins/system/example/example.xml

plugins/system/example/index.html

administrator/languages/en-GB/en-GB.plg_system_example.ini

administrator/languages/en-GB/en-GB.plg_system_example.sys.ini

Page 17: Joomla! Plugins Programmeren [NL]

Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireoJisse Reitsma ([email protected]) - Twitter @yireo

Taal-bestand

PLG_SYSTEM_EXAMPLE="System ­ Example"PLG_SYSTEM_EXAMPLE_DESC="An example System Plugin"

Page 18: Joomla! Plugins Programmeren [NL]

Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireoJisse Reitsma ([email protected]) - Twitter @yireo

System Plugin-bestanden

plugins/system/example/example.php

plugins/system/example/example.xml

plugins/system/example/index.html

administrator/languages/en-GB/en-GB.plg_system_example.ini

administrator/languages/en-GB/en-GB.plg_system_example.sys.ini

Page 19: Joomla! Plugins Programmeren [NL]

Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireoJisse Reitsma ([email protected]) - Twitter @yireo

index.html

Page 20: Joomla! Plugins Programmeren [NL]

Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireoJisse Reitsma ([email protected]) - Twitter @yireo

System Plugin-bestanden

plugins/system/example/example.php

plugins/system/example/example.xml

plugins/system/example/index.html

administrator/languages/en-GB/en-GB.plg_system_example.ini

administrator/languages/en-GB/en-GB.plg_system_example.sys.ini

Page 21: Joomla! Plugins Programmeren [NL]

Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireoJisse Reitsma ([email protected]) - Twitter @yireo

XML-manifest

<?xml version="1.0" encoding="utf­8"?><extension version="3.0" type="plugin" group="content">  <name>PLG_SYSTEM_EXAMPLE</name>  <description>PLG_SYSTEM_EXAMPLE_DESC</description>  <version>0.0.1</version>  <files>    <filename plugin=”example”>example.php</filename>    <filename>index.html</filename>  </files>  <languages>    <language tag=”en­GB”>en­GB.plg_system_example.ini</language>    <language tag=”en­GB”>en­GB.plg_system_example.sys.ini</language>  </languages></extension>

Page 22: Joomla! Plugins Programmeren [NL]

Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireoJisse Reitsma ([email protected]) - Twitter @yireo

System Plugin-bestanden

plugins/system/example/example.php

plugins/system/example/example.xml

plugins/system/example/index.html

administrator/languages/en-GB/en-GB.plg_system_example.ini

administrator/languages/en-GB/en-GB.plg_system_example.sys.ini

Page 23: Joomla! Plugins Programmeren [NL]

Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireoJisse Reitsma ([email protected]) - Twitter @yireo

System Plugin (1/3)

<?phpdefined('_JEXEC') or die();jimport( 'joomla.plugin.plugin' );class plgSystemExample extends JPlugin{}

Page 24: Joomla! Plugins Programmeren [NL]

Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireoJisse Reitsma ([email protected]) - Twitter @yireo

Redenen voor een custom plugin

HTML-code achteraf wijzigen

Document-headers een beetje tweaken

User-formulier uitbreiden

Extra authenticatie-type

... en nog veel

Page 25: Joomla! Plugins Programmeren [NL]

Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireoJisse Reitsma ([email protected]) - Twitter @yireo

System Plugin (2/3)

<?phpdefined('_JEXEC') or die();jimport( 'joomla.plugin.plugin' );class plgSystemExample extends JPlugin{    public function onAfterRender()    {        $body = JResponse::getBody();        // @todo: Do something with the $body        JResponse::setBody($body);    }}

Page 26: Joomla! Plugins Programmeren [NL]

Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireoJisse Reitsma ([email protected]) - Twitter @yireo

Redenen voor een custom plugin

HTML-code achteraf wijzigen

Document-headers een beetje tweaken

User-formulier uitbreiden

Extra authenticatie-type

... en nog veel

Page 27: Joomla! Plugins Programmeren [NL]

Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireoJisse Reitsma ([email protected]) - Twitter @yireo

System Plugin (3/3)

<?phpdefined('_JEXEC') or die();jimport( 'joomla.plugin.plugin' );class plgSystemExample extends JPlugin{    public function onAfterDispatch()    {        $document = JFactory::getDocument();        $document­>setGenerator('drupal');        $document­>addScriptDeclaration($script);    }}

Page 28: Joomla! Plugins Programmeren [NL]

Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireoJisse Reitsma ([email protected]) - Twitter @yireo

Redenen voor een custom plugin

HTML-code achteraf wijzigen

Document-headers een beetje tweaken

User-formulier uitbreiden

Extra authenticatie-type

... en nog veel

Page 29: Joomla! Plugins Programmeren [NL]

Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireoJisse Reitsma ([email protected]) - Twitter @yireo

User Plugin (1/1)

<?phpdefined('_JEXEC') or die();jimport( 'joomla.plugin.plugin' );class plgUserExample extends JPlugin{    public function onContentPrepareForm($form, $data)    {        $form­>removeField('name', 'profile');        return true;    }}

Page 30: Joomla! Plugins Programmeren [NL]

Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireoJisse Reitsma ([email protected]) - Twitter @yireo

Redenen voor een custom plugin

HTML-code achteraf wijzigen

Document-headers een beetje tweaken

User-formulier uitbreiden

Extra authenticatie-type

... en nog veel

Page 31: Joomla! Plugins Programmeren [NL]

Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireoJisse Reitsma ([email protected]) - Twitter @yireo

Authenticatie Plugin (1/1)

<?phpdefined('_JEXEC') or die();jimport( 'joomla.plugin.plugin' );class plgAuthenticationExample extends JPlugin{  public function onUserAuthenticate($credentials, $options, &$response )  {    if ($credentials['password'] == 'joomla') {      $response­>status = JAuthentication::STATUS_SUCCESS;      $response­>error_message = '';    } else {      $response­>status = JAuthentication::STATUS_FAILURE;      $response­>error_message = JText::_('JGLOBAL_AUTH_INVALID_PASS')    }  }}

Page 32: Joomla! Plugins Programmeren [NL]

Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireoJisse Reitsma ([email protected]) - Twitter @yireo

Redenen voor een custom plugin

HTML-code achteraf wijzigen

Document-headers een beetje tweaken

User-formulier uitbreiden

Extra authenticatie-type

... en nog veel

Page 33: Joomla! Plugins Programmeren [NL]

Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireoJisse Reitsma ([email protected]) - Twitter @yireo

Deel 3:Braindump

Page 34: Joomla! Plugins Programmeren [NL]

Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireoJisse Reitsma ([email protected]) - Twitter @yireo

Aanroepen van content-event [1/2]

Eigen component biedt item met content aan ($item)

Doel is aanpassen van $item titel via extra plugins

Gebruik van content-event onPrepareContent

Voordeel: Alle $item-properties kunnen gewijzigd worden

Dispatch event in component-view

Bijvoorbeeld views/item/view.html.php

Page 35: Joomla! Plugins Programmeren [NL]

Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireoJisse Reitsma ([email protected]) - Twitter @yireo

Aanroepen van content-event [2/2]

JPluginHelper::importPlugin( 'content' );

$dispatcher = JDispatcher::getInstance();

$arguments = array(&$item, &$item_params, 0);

$results = $dispatcher­>trigger('onPrepareContent', $arguments

);

Let op: Referentie naar $item zelf met ampersand &.

Return-variabele $results bevat hooguit een event-status.

Page 36: Joomla! Plugins Programmeren [NL]

Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireoJisse Reitsma ([email protected]) - Twitter @yireo

Aanroepen van eigen event (1/3)

Eigen component?

components/com_example

Maak eigen plugin-groep-folder aan

plugins/custom

Maak eigen plugin aan

plugins/custom/example/example.php

plugins/custom/example/example.xml

plugins/custom/example/index.html

Page 37: Joomla! Plugins Programmeren [NL]

Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireoJisse Reitsma ([email protected]) - Twitter @yireo

Aanroepen van eigen event (2/3)

jimport( 'joomla.plugin.plugin' );class plgCustomExample extends JPlugin{    public function doSomething()    {

        // @todo: Do something    }}

Page 38: Joomla! Plugins Programmeren [NL]

Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireoJisse Reitsma ([email protected]) - Twitter @yireo

Aanroepen van eigen event (3/3)

Toevoegen op juiste plek in eigen component:JPluginHelper::importPlugin('custom');$dispatcher = JDispatcher::getInstance();$arguments = null;$results = $dispatcher­>trigger(

'doSomething', $arguments);

Page 39: Joomla! Plugins Programmeren [NL]

Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireoJisse Reitsma ([email protected]) - Twitter @yireo

Checks (1/2)

Handige variabelen:$app = JFactory::getApplication();$document = JFactory::getDocument();

Controleer of huidige applicatie de frontend is:if(!JFactory::getApplication()­>isSite()) return false;

Controleer of dit wel een HTML-document is:if (JFactory::getDocument()­>getType() != 'html') return false;

Page 40: Joomla! Plugins Programmeren [NL]

Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireoJisse Reitsma ([email protected]) - Twitter @yireo

Checks (2/2)

Negeer A JAX-requests:if (JRequest::getCmd('tmpl') == 'component') return false;if (JRequest::getCmd('format') == 'raw') return false;if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') return false;

Page 41: Joomla! Plugins Programmeren [NL]

Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireoJisse Reitsma ([email protected]) - Twitter @yireo

Parameters in J1.5 vs J2.5

private function getParams(){  jimport('joomla.version');  $version = new JVersion();  if(version_compare($version­>RELEASE, '1.5', 'eq')) {    $plugin = JPluginHelper::getPlugin('system','example');       $params = new JParameter($plugin­>params);    return $params;  } else {    return $this­>params;  }}

Page 42: Joomla! Plugins Programmeren [NL]

Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireoJisse Reitsma ([email protected]) - Twitter @yireo

Taalbestand inladen

public function __construct(& $subject, $config){  parent::__construct($subject, $config);  $this­>loadLanguage();}

Page 43: Joomla! Plugins Programmeren [NL]

Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireoJisse Reitsma ([email protected]) - Twitter @yireo

tweet @yireo