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?
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
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
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
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
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;