SlideShare a Scribd company logo
Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo
Jisse Reitsma (jisse@yireo.com) - Twitter @yireo
Joomla! plugins
ontwikkelen
Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo
Jisse Reitsma (jisse@yireo.com) - Twitter @yireo
Ik ben Jisse Reitsma
Developer
Ondernemer
Eigenaar van Yireo
Joomla! & Magento
Extensies & development
Tutorials & blogs
Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo
Jisse Reitsma (jisse@yireo.com) - 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/yireo
Jisse Reitsma (jisse@yireo.com) - 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/yireo
Jisse Reitsma (jisse@yireo.com) - Twitter @yireo
Deel 1:
Waarom een plugin?
Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo
Jisse Reitsma (jisse@yireo.com) - Twitter @yireo
Joomla! extensies
Component
Modules
Plugins
Templates
Libraries
Taalbestanden
Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo
Jisse Reitsma (jisse@yireo.com) - 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/yireo
Jisse Reitsma (jisse@yireo.com) - Twitter @yireo
Plugin-groepen (core)
Authentication
Content
System
User
Editors
Editors Xtd
Search
Finder
CAPTCHA
Extension
Quickicon
Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo
Jisse Reitsma (jisse@yireo.com) - Twitter @yireo
Plugin-groepen (3rd
party)
VirtueMart [product, custom]
JomSocial [community]
K2 [fields]
Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo
Jisse Reitsma (jisse@yireo.com) - 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/yireo
Jisse Reitsma (jisse@yireo.com) - Twitter @yireo
User-plugin events
onUserLogin
onUserLogout
onUserAuthenticate
onUserLoginFailure
onUserBeforeSave / onUserAfterSave
onUserBeforeDelete / onUserAfterDelete
Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo
Jisse Reitsma (jisse@yireo.com) - Twitter @yireo
System-plugin events
onAfterInitialise
onAfterRoute
onAfterDispatch
onBeforeRender / onAfterRender
onBeforeCompileHead
Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo
Jisse Reitsma (jisse@yireo.com) - Twitter @yireo
Deel 2:
Een beetje code
Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo
Jisse Reitsma (jisse@yireo.com) - 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/yireo
Jisse Reitsma (jisse@yireo.com) - 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/yireo
Jisse Reitsma (jisse@yireo.com) - 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/yireo
Jisse Reitsma (jisse@yireo.com) - Twitter @yireo
Taal-bestand
PLG_SYSTEM_EXAMPLE="System ­ Example"
PLG_SYSTEM_EXAMPLE_DESC="An example System Plugin"
Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo
Jisse Reitsma (jisse@yireo.com) - 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/yireo
Jisse Reitsma (jisse@yireo.com) - Twitter @yireo
index.html
Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo
Jisse Reitsma (jisse@yireo.com) - 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/yireo
Jisse Reitsma (jisse@yireo.com) - 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>
Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo
Jisse Reitsma (jisse@yireo.com) - 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/yireo
Jisse Reitsma (jisse@yireo.com) - Twitter @yireo
System Plugin (1/3)
<?php
defined('_JEXEC') or die();
jimport( 'joomla.plugin.plugin' );
class plgSystemExample extends JPlugin
{
}
Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo
Jisse Reitsma (jisse@yireo.com) - 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/yireo
Jisse Reitsma (jisse@yireo.com) - Twitter @yireo
System Plugin (2/3)
<?php
defined('_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/yireo
Jisse Reitsma (jisse@yireo.com) - 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/yireo
Jisse Reitsma (jisse@yireo.com) - Twitter @yireo
System Plugin (3/3)
<?php
defined('_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/yireo
Jisse Reitsma (jisse@yireo.com) - 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/yireo
Jisse Reitsma (jisse@yireo.com) - Twitter @yireo
User Plugin (1/1)
<?php
defined('_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/yireo
Jisse Reitsma (jisse@yireo.com) - 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/yireo
Jisse Reitsma (jisse@yireo.com) - Twitter @yireo
Authenticatie Plugin (1/1)
<?php
defined('_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/yireo
Jisse Reitsma (jisse@yireo.com) - 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/yireo
Jisse Reitsma (jisse@yireo.com) - Twitter @yireo
Deel 3:
Braindump
Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo
Jisse Reitsma (jisse@yireo.com) - 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/yireo
Jisse Reitsma (jisse@yireo.com) - 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/yireo
Jisse Reitsma (jisse@yireo.com) - 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/yireo
Jisse Reitsma (jisse@yireo.com) - 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/yireo
Jisse Reitsma (jisse@yireo.com) - 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/yireo
Jisse Reitsma (jisse@yireo.com) - 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/yireo
Jisse Reitsma (jisse@yireo.com) - Twitter @yireo
Checks (2/2)
Negeer AJAX-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/yireo
Jisse Reitsma (jisse@yireo.com) - 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/yireo
Jisse Reitsma (jisse@yireo.com) - Twitter @yireo
Taalbestand inladen
public function __construct(& $subject, $config)
{
  parent::__construct($subject, $config);
  $this­>loadLanguage();
}
Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo
Jisse Reitsma (jisse@yireo.com) - Twitter @yireo
tweet @yireo

More Related Content

PDF
Joomla!: phpMyAdmin voor Beginners (NL)
PDF
Joomla! Migratie (NL)
PPTX
Applicatie bouwen met chronoforms jd13nl
PDF
Meertalige website 25_30
PDF
JUGs Presentatie - #jd15nl
PDF
We are Joomlers! - Joomla World Conference 2014 #jwc14
PDF
Joomlaplatform en
PPTX
Tips & Tricks - Joomladagen NL 2015
Joomla!: phpMyAdmin voor Beginners (NL)
Joomla! Migratie (NL)
Applicatie bouwen met chronoforms jd13nl
Meertalige website 25_30
JUGs Presentatie - #jd15nl
We are Joomlers! - Joomla World Conference 2014 #jwc14
Joomlaplatform en
Tips & Tricks - Joomladagen NL 2015

Similar to Joomla! Plugins Programmeren [NL] (8)

PDF
Programmeren van Plugins voor Joomla 1.5
PPSX
Presentatie JUG plugin Merka
PDF
Expert Sessie: Joomla Usability: Plugins
PPTX
Mijn eerste Joomla! plugin
PPTX
The power of joomla!
PPTX
The power of joomla!
PPTX
Ontwikkeling Wordpress Plugins
PPT
Joomla licht gevorderd
Programmeren van Plugins voor Joomla 1.5
Presentatie JUG plugin Merka
Expert Sessie: Joomla Usability: Plugins
Mijn eerste Joomla! plugin
The power of joomla!
The power of joomla!
Ontwikkeling Wordpress Plugins
Joomla licht gevorderd
Ad

More from Yireo (20)

PDF
Faster Magento Integration Tests
PDF
Mage-OS Nederland
PDF
Modernizing Vue Storefront 1
PDF
Magento 2 Seminar - Peter-Jaap Blaakmeer - VR-webshop
PDF
Magento 2 Seminar - Toon van Dooren - Varnish in Magento 2
PDF
Magento 2 Seminar - Andra Lungu - API in Magento 2
PDF
Magento 2 Seminar - Roger Keulen - Machine learning
PDF
Magento 2 Seminar - Miguel Balparda - M2 with PHP 7 and Varnish
PPTX
Magento 2 Seminar - Maarten Schuiling - The App Economy
PDF
Magento 2 Seminar - Jisse Reitsma - Magento 2 techniek vertalen naar voordelen
PDF
Magento 2 Seminar - Sander Mangel - Van Magento 1 naar 2
PDF
Magento 2 Seminar - Arjen Miedema - Search Engine Optimisation
PPTX
Magento 2 Seminar - Tjitte Folkertsma - Beaumotica
PDF
Magento 2 Seminar - Jeroen Vermeulen Snelle Magento 2 Shops
PDF
Magento 2 Seminar - Christian Muench - Magerun2
PDF
Magento 2 Seminar - Anton Kril - Magento 2 Summary
PDF
Magento 2 Seminar - Daniel Genis - Magento 2 benchmarks
PDF
Magento 2 Seminar - Ben Marks - Keynote
PDF
Magento 2 Seminar - Community agenda
PDF
Magento 2 Seminar - Jisse Reitsma - Migratie Planning
Faster Magento Integration Tests
Mage-OS Nederland
Modernizing Vue Storefront 1
Magento 2 Seminar - Peter-Jaap Blaakmeer - VR-webshop
Magento 2 Seminar - Toon van Dooren - Varnish in Magento 2
Magento 2 Seminar - Andra Lungu - API in Magento 2
Magento 2 Seminar - Roger Keulen - Machine learning
Magento 2 Seminar - Miguel Balparda - M2 with PHP 7 and Varnish
Magento 2 Seminar - Maarten Schuiling - The App Economy
Magento 2 Seminar - Jisse Reitsma - Magento 2 techniek vertalen naar voordelen
Magento 2 Seminar - Sander Mangel - Van Magento 1 naar 2
Magento 2 Seminar - Arjen Miedema - Search Engine Optimisation
Magento 2 Seminar - Tjitte Folkertsma - Beaumotica
Magento 2 Seminar - Jeroen Vermeulen Snelle Magento 2 Shops
Magento 2 Seminar - Christian Muench - Magerun2
Magento 2 Seminar - Anton Kril - Magento 2 Summary
Magento 2 Seminar - Daniel Genis - Magento 2 benchmarks
Magento 2 Seminar - Ben Marks - Keynote
Magento 2 Seminar - Community agenda
Magento 2 Seminar - Jisse Reitsma - Migratie Planning
Ad

Joomla! Plugins Programmeren [NL]

  • 1. Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo Jisse Reitsma (jisse@yireo.com) - Twitter @yireo Joomla! plugins ontwikkelen
  • 2. Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo Jisse Reitsma (jisse@yireo.com) - Twitter @yireo Ik ben Jisse Reitsma Developer Ondernemer Eigenaar van Yireo Joomla! & Magento Extensies & development Tutorials & blogs
  • 3. Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo Jisse Reitsma (jisse@yireo.com) - 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
  • 4. Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo Jisse Reitsma (jisse@yireo.com) - 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
  • 5. Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo Jisse Reitsma (jisse@yireo.com) - Twitter @yireo Deel 1: Waarom een plugin?
  • 6. Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo Jisse Reitsma (jisse@yireo.com) - Twitter @yireo Joomla! extensies Component Modules Plugins Templates Libraries Taalbestanden
  • 7. Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo Jisse Reitsma (jisse@yireo.com) - 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]
  • 8. Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo Jisse Reitsma (jisse@yireo.com) - Twitter @yireo Plugin-groepen (core) Authentication Content System User Editors Editors Xtd Search Finder CAPTCHA Extension Quickicon
  • 9. Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo Jisse Reitsma (jisse@yireo.com) - Twitter @yireo Plugin-groepen (3rd party) VirtueMart [product, custom] JomSocial [community] K2 [fields]
  • 10. Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo Jisse Reitsma (jisse@yireo.com) - Twitter @yireo Plugin-groepen (yireo) Dynamic404 Match Lookups SimpleLists Link MageBridge Product Sales Actions MageBridge Newsletter Subscriptions MageBridge event forwarding
  • 11. Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo Jisse Reitsma (jisse@yireo.com) - Twitter @yireo User-plugin events onUserLogin onUserLogout onUserAuthenticate onUserLoginFailure onUserBeforeSave / onUserAfterSave onUserBeforeDelete / onUserAfterDelete
  • 12. Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo Jisse Reitsma (jisse@yireo.com) - Twitter @yireo System-plugin events onAfterInitialise onAfterRoute onAfterDispatch onBeforeRender / onAfterRender onBeforeCompileHead
  • 13. Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo Jisse Reitsma (jisse@yireo.com) - Twitter @yireo Deel 2: Een beetje code
  • 14. Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo Jisse Reitsma (jisse@yireo.com) - 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
  • 15. Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo Jisse Reitsma (jisse@yireo.com) - 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
  • 16. Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo Jisse Reitsma (jisse@yireo.com) - 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
  • 17. Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo Jisse Reitsma (jisse@yireo.com) - Twitter @yireo Taal-bestand PLG_SYSTEM_EXAMPLE="System ­ Example" PLG_SYSTEM_EXAMPLE_DESC="An example System Plugin"
  • 18. Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo Jisse Reitsma (jisse@yireo.com) - 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
  • 19. Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo Jisse Reitsma (jisse@yireo.com) - Twitter @yireo index.html
  • 20. Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo Jisse Reitsma (jisse@yireo.com) - 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
  • 21. Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo Jisse Reitsma (jisse@yireo.com) - 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>
  • 22. Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo Jisse Reitsma (jisse@yireo.com) - 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
  • 23. Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo Jisse Reitsma (jisse@yireo.com) - Twitter @yireo System Plugin (1/3) <?php defined('_JEXEC') or die(); jimport( 'joomla.plugin.plugin' ); class plgSystemExample extends JPlugin { }
  • 24. Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo Jisse Reitsma (jisse@yireo.com) - 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
  • 25. Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo Jisse Reitsma (jisse@yireo.com) - Twitter @yireo System Plugin (2/3) <?php defined('_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);     } }
  • 26. Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo Jisse Reitsma (jisse@yireo.com) - 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
  • 27. Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo Jisse Reitsma (jisse@yireo.com) - Twitter @yireo System Plugin (3/3) <?php defined('_JEXEC') or die(); jimport( 'joomla.plugin.plugin' ); class plgSystemExample extends JPlugin {     public function onAfterDispatch()     {         $document = JFactory::getDocument();         $document­>setGenerator('drupal');         $document­>addScriptDeclaration($script);     } }
  • 28. Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo Jisse Reitsma (jisse@yireo.com) - 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
  • 29. Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo Jisse Reitsma (jisse@yireo.com) - Twitter @yireo User Plugin (1/1) <?php defined('_JEXEC') or die(); jimport( 'joomla.plugin.plugin' ); class plgUserExample extends JPlugin {     public function onContentPrepareForm($form, $data)     {         $form­>removeField('name', 'profile');         return true;     } }
  • 30. Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo Jisse Reitsma (jisse@yireo.com) - 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
  • 31. Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo Jisse Reitsma (jisse@yireo.com) - Twitter @yireo Authenticatie Plugin (1/1) <?php defined('_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')     }   } }
  • 32. Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo Jisse Reitsma (jisse@yireo.com) - 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
  • 33. Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo Jisse Reitsma (jisse@yireo.com) - Twitter @yireo Deel 3: Braindump
  • 34. Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo Jisse Reitsma (jisse@yireo.com) - 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
  • 35. Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo Jisse Reitsma (jisse@yireo.com) - 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.
  • 36. Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo Jisse Reitsma (jisse@yireo.com) - 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
  • 37. Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo Jisse Reitsma (jisse@yireo.com) - Twitter @yireo Aanroepen van eigen event (2/3) jimport( 'joomla.plugin.plugin' ); class plgCustomExample extends JPlugin {     public function doSomething()     {         // @todo: Do something     } }
  • 38. Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo Jisse Reitsma (jisse@yireo.com) - 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 );
  • 39. Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo Jisse Reitsma (jisse@yireo.com) - 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;
  • 40. Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo Jisse Reitsma (jisse@yireo.com) - Twitter @yireo Checks (2/2) Negeer AJAX-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;
  • 41. Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo Jisse Reitsma (jisse@yireo.com) - 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;   } }
  • 42. Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo Jisse Reitsma (jisse@yireo.com) - Twitter @yireo Taalbestand inladen public function __construct(& $subject, $config) {   parent::__construct($subject, $config);   $this­>loadLanguage(); }
  • 43. Presentatie “Joomla! Plugins Ontwikkelen” - http://slideshare.net/yireo Jisse Reitsma (jisse@yireo.com) - Twitter @yireo tweet @yireo