Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireoJisse Reitsma ([email protected]) - Twitter @yireo
Joomla! pluginsontwikkelen
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
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
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
Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireoJisse Reitsma ([email protected]) - Twitter @yireo
Deel 1:Waarom een plugin?
Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireoJisse Reitsma ([email protected]) - Twitter @yireo
Joomla! extensies
Component
Modules
Plugins
Templates
Libraries
Taalbestanden
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]
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
Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireoJisse Reitsma ([email protected]) - Twitter @yireo
Plugin-groepen (3rd party)
VirtueMart [product, custom]
JomSocial [community]
K2 [fields]
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
Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireoJisse Reitsma ([email protected]) - Twitter @yireo
User-plugin events
onUserLogin
onUserLogout
onUserAuthenticate
onUserLoginFailure
onUserBeforeSave / onUserAfterSave
onUserBeforeDelete / onUserAfterDelete
Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireoJisse Reitsma ([email protected]) - Twitter @yireo
System-plugin events
onAfterInitialise
onAfterRoute
onAfterDispatch
onBeforeRender / onAfterRender
onBeforeCompileHead
Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireoJisse Reitsma ([email protected]) - Twitter @yireo
Deel 2:Een beetje code
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
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
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
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"
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
Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireoJisse Reitsma ([email protected]) - Twitter @yireo
index.html
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
Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireoJisse Reitsma ([email protected]) - Twitter @yireo
XML-manifest
<?xml version="1.0" encoding="utf8"?><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=”enGB”>enGB.plg_system_example.ini</language> <language tag=”enGB”>enGB.plg_system_example.sys.ini</language> </languages></extension>
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
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{}
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
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); }}
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
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); }}
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
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; }}
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
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') } }}
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
Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireoJisse Reitsma ([email protected]) - Twitter @yireo
Deel 3:Braindump
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
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.
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
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 }}
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);
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;
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;
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; }}
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();}
Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireoJisse Reitsma ([email protected]) - Twitter @yireo
tweet @yireo