You are on page 1of 45

Joomla aanpassen zonder core hacks

Peter Martin Joomladagen.nl Zaterdag 21 april 2011

Overzicht Presentatie
Introductie Core

Hack 1. Template overrides 2. Module klonen 3. Gebruik van Plugins 4. Component met eigen controller Vragen
>>> Sheets digitaal beschikbaar <<<

Peter Martin joomladagen.nl 21+22 april 2012

Core Hack

Peter Martin joomladagen.nl 21+22 april 2012

Core Hack
Joomla

= Open Source licentie GNU GPL

Bescherming van vrijheid van gebruikers Broncode = openbaar Je mag en kan alle Joomla code wijzigen

Nadeel

van wijziging in core code

Onderhoudbaarheid: Code kan worden overschreven bij upgrade Mogelijke problemen bij samenwerking 3rd party extensies

Peter Martin joomladagen.nl 21+22 april 2012

Core Hack
Voorbeeld:

Joomla's contact formulier

Bezoekers

IP adres niet in e-mail


5

Peter Martin joomladagen.nl 21+22 april 2012

Core Hack
IP

adres laten meesturen:


/components/com_contact/controllers/contact.php private function _sendEmail($data, $contact), in gedeelte onder // Prepare email body $mail->setBody($body); wordt: $mail->setBody("IP adres: ".$_SERVER['REMOTE_ADDR']. "\n\n".$body);

Peter Martin joomladagen.nl 21+22 april 2012

Core Hack
Resultaat

tot de volgende Joomla upgrade:

Date: Sat, 21 Apr 2012 15:30:00 +0200 From: Afzender van Website <info@example.com> Reply-To: [Naam bezoeker] <[email adres bezoeker]> To: [e-mail adres SuperAdmin Website] IP adres: 127.0.0.1 Dit is een e-mailbericht via http://www.example,com/ van: [Naam bezoeker] <[email adres bezoeker]> [Bericht van bezoeker]

Peter Martin joomladagen.nl 21+22 april 2012

1. Template override

Peter Martin joomladagen.nl 21+22 april 2012

1. Template override
Template

Vormgeving ruimtes voor output van componenten & modules

Componenten

& Modules

leveren zelf hun HTML output aan de template

Template

overrides

sinds Joomla 1.5 Wijzig HTML output van componenten / modules zonder core hacks

Peter Martin joomladagen.nl 21+22 april 2012

Voorbeeld 1 Latest News module


Module

toont lijstje recentste artikelen Latest News


Beginners Getting Help Getting Started Joomla! Options

Change

request: Klant wil datum erbij!

Peter Martin joomladagen.nl 21+22 april 2012

10

Voorbeeld 1 Latest News module


1a.

Template override:

Maak eventueel in /templates/jouw_template/ nieuwe override map aan: /templates/beez_20/html/ Maak nieuwe map aan voor module override /templates/beez_20/html/mod_articles_latest/ Kopieer HTML output bestand uit de /tmpl/ map van de module:
/modules/mod_articles_latest/tmpl/default.php naar /templates/beez_20/html/mod_articles_latest/default.php

Peter Martin joomladagen.nl 21+22 april 2012

11

Voorbeeld 1 Latest News module


1b.

/templates/beez_20/html/mod_articles_latest/default.php Voeg tekst toe & controleer zichtbaarheid op website

Test template override

1c.

Toon bruikbare variabelen met print_r:

<ul class="latestnews<?php echo $moduleclass_sfx; ?>"> <?php foreach ($list as $item) : ?> <li><?php print_r($item);?> <a href="<?php echo $item->link; ?>"> <?php echo $item->title; ?></a> </li> <?php endforeach; ?> </ul> 12

Peter Martin joomladagen.nl 21+22 april 2012

Voorbeeld 1 Latest News module


stdClass Object ( [id] => 8 [title] => Beginners [alias] => beginners [title_alias] => [introtext] => If this is your first Joomla! site or your first web site, you have come to the right place. Joomla will help you get your website up and running quickly and easily. Start off using your site by logging in using the administrator account you created when you installed Joomla. [checked_out] => 0 [checked_out_time] => 0000-00-00 00:00:00 [catid] => 19 [created] => 2011-01-01 00:00:01 [created_by] => 42 [created_by_alias] => Joomla! [modified] => 2011-12-27 11:10:49 [modified_by] => 42 [modified_by_name] => Super User [publish_up] => 2011-01-01 00:00:01 [publish_down] => 0000-00-00 00:00:00 [images] => {"image_intro":"","float_intro":"","image_intro_alt":"","image_intro_caption":"","image_fulltext":"","float_fulltext":"","ima ge_fulltext_alt":"","image_fulltext_caption":""} [urls] => {"urla":"","urlatext":"","targeta":"","urlb":"","urlbtext":"","targetb":"","urlc":"","urlctext":"","targetc":""} [attribs] => {"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_p arent_category":"","show_author":"","link_author":"","show_create_date":"","show_modify_date":"","show_publish_da te":"","show_item_navigation":"","show_icons":"","show_print_icon":"","show_email_icon":"","show_vote":"","show_hit s":"","show_noauth":"","alternative_readmore":"","article_layout":"","show_publishing_options":"","show_article_optio ns":"","show_urls_images_backend":"","show_urls_images_frontend":""} [metadata] => {"robots":"","author":"","rights":"","xreference":""} [metakey] => [metadesc] => [access] => 1 [hits] => 2 [xreference] => [featured] => 1 [readmore] => 1488 [state] => 1 [category_title] => Joomla! [category_route] => sample-dataarticles/joomla [category_access] => 1 [category_alias] => joomla [author] => Joomla! [author_email] => joomladagen@db8.nl [contactid] => [parent_title] => Sample Data-Articles [parent_id] => 14 [parent_route] => sample-data-articles [parent_alias] => sample-data-articles [rating] => [rating_count] => [published] => 1 [parents_published] => 1 [alternative_readmore] => [layout] => [params] => JRegistry Object ( [data:protected] => stdClass Object ( [article_layout] => _:default [show_title] => 1 [link_titles] => 1 [show_intro] => 1 [show_category] => 0 [link_category] => 0 [show_parent_category] => 0 [link_parent_category] => 0 [show_author] => 0 [link_author] => 0 [show_create_date] => 0 [show_modify_date] => 0 [show_publish_date] => 0 [show_item_navigation] => 0 [show_vote] => 0 [show_readmore] => 1 [show_readmore_title] => 1 [readmore_limit] => 100 [show_icons] => 0 [show_print_icon] => 0 [show_email_icon] => 0 [show_hits] => 0 [show_noauth] => 0 [show_publishing_options] => 1 [show_article_options] => 1 [show_urls_images_frontend] => 0 [show_urls_images_backend] => 1 [targeta] => 0 [targetb] => 0 [targetc] => 0 [float_intro] => left [float_fulltext] => left [category_layout] => _:blog [show_category_title] => []

Peter Martin joomladagen.nl 21+22 april 2012

13

Voorbeeld 1 Latest News module


1d.

Voeg in override $item->created toe:

<?php foreach ($list as $item) : ?> <li> <a href="<?php echo $item->link; ?>"> <?php echo $item->created." - ".$item->title; ?></a> </li> <?php endforeach; ?> Output: Latest News 2011-01-01 00:00:01 - Beginners
2011-01-01 00:00:01 - Getting Help 2011-01-01 00:00:01 - Getting Started 2011-01-01 00:00:01 - Joomla! 2011-01-01 00:00:01 - Options

Peter Martin joomladagen.nl 21+22 april 2012

14

Voorbeeld 1 Latest News module


1e.

datum/tijd in database = UTC formaat


$config = Jfactory::getConfig(); $user = Jfactory::getUser(); ?> <ul class="latestnews<?php echo $moduleclass_sfx; ?>"> <?php foreach ($list as $item) : $date = JFactory::getDate($item->created, 'UTC'); $date->setTimezone(new DateTimeZone($user>getParam('timezone', $config->get('offset')))); $item->format_created = $date->toFormat($params->get($item>created, '%A %d %B %Y, %H:%M:%S'), true, false); ?> <li> <a href="<?php echo $item->link; ?>"> <?php echo $item->format_created." - ".$item->title; ?></a> </li> <?php endforeach; ?> </ul>

Houd rekening met Server Time Zone

Peter Martin joomladagen.nl 21+22 april 2012

15

Voorbeeld 1 Latest News module


Output:

Latest News
zaterdag 01 januari 2011, 01:00:01 - Beginners zaterdag 01 januari 2011, 01:00:01 - Getting Help zaterdag 01 januari 2011, 01:00:01 - Getting Started zaterdag 01 januari 2011, 01:00:01 - Joomla! zaterdag 01 januari 2011, 01:00:01 - Options

Peter Martin joomladagen.nl 21+22 april 2012

16

2. Module klonen

Peter Martin joomladagen.nl 21+22 april 2012

17

2. Module klonen
Indien

template override mogelijk Voorbeeld: mod_quickicon

Peter Martin joomladagen.nl 21+22 april 2012

18

2. Module klonen
Toevoegen

eigen Quick Icon? Output van Quick Icon module:


/administrator/modules/mod_quickicon/tmpl/default.php $html = JHtml::_('icons.buttons', $buttons); ?> <?php if (!empty($html)): ?> <div class="cpanel"><?php echo $html;?></div> <?php endif;?>
Niet

mogelijk via template override...

Peter Martin joomladagen.nl 21+22 april 2012

19

2. Module klonen
2a.

kopieer module

/administrator/modules/mod_quickicon/ naar /administrator/modules/mod_quickicon2/


2b.

hernoem bestanden

mod_quickicon.php mod_quickicon2.php mod_quickicon.php mod_quickicon2.xml

Peter Martin joomladagen.nl 21+22 april 2012

20

2. Module clonen
2c.

edit mod_quickicon referenties

mod_quickicon2.php
$buttons = modQuickIcon2Helper::getButtons($params); require JModuleHelper::getLayoutPath('mod_quickicon2', $params->get('layout', 'default'));

mod_quickicon2.xml
<name>mod_quickicon2</name> <filename module="mod_quickicon2">mod_quickicon2.php</filename>

Peter Martin joomladagen.nl 21+22 april 2012

21

2. Module clonen
2d.

Toevoegen aan Joomla:

Extensions > Extension Manager > Discover

Peter Martin joomladagen.nl 21+22 april 2012

22

2. Module klonen
2e.

Toevoegen van module mod_quickicon2:

Extensions > Module Manager > Filter: administrator [New] > mod_quickicon2 Title: My own Quick Icons Position: icon

Peter Martin joomladagen.nl 21+22 april 2012

23

2. Module klonen
Oeps:

Fatal error: Cannot redeclare class modQuickIconHelper in /administrator/modules/mod_quickicon2/helper.p hp on line 18 edit helper.php
/administrator/modules/mod_quickicon2/helper.php verander de classname: abstract class modQuickIconHelper2

2f.

Peter Martin joomladagen.nl 21+22 april 2012

24

2. Module klonen
2g.

Voeg eigen array toe

/administrator/modules/mod_quickicon2/helper.php
array( 'link' => Jroute::_('index.php?option=com_search'), 'image' => 'header/icon-48-search.png', 'text' => Jtext::_('Search'), 'access' => array('core.manage', 'com_search') ),

Peter Martin joomladagen.nl 21+22 april 2012

25

2. Module klonen
2h.

Resultaat:

Peter Martin joomladagen.nl 21+22 april 2012

26

3. Gebruik van Plugins

Peter Martin joomladagen.nl 21+22 april 2012

27

3. Gebruik van Plugins


Joomla

verwijdert HTML opmaak

In artikel titels In menu item titels In breadcrumbs

Water

is H2O

Menu item H<sub>2</sub>O Water is H2O Artikel titel H<sub>2</sub>O Water is H2O Tekst in artikel H<sub>2</sub>O Water is H2O
28

Peter Martin joomladagen.nl 21+22 april 2012

3. Gebruik van Plugins


ReReplacer

Nonumber (Peter van Westen) Component + System Plugin


Download: http://www.nonumber.nl/extensions/rereplacer

Peter Martin joomladagen.nl 21+22 april 2012

29

3. Gebruik van Plugins


Start

subscript tag

Einde

subscript tag

Zoek #sub# Vervang door <sub>

Zoek #/sub# Vervang door </sub>

Peter Martin joomladagen.nl 21+22 april 2012

30

3. Gebruik van Plugins


Water

is H2O

Menu item H#sub#2#/sub#O Water is H2O Menu item, Browser Page Title! Water is H2O Artikel titel H#sub#2#/sub#O Water is H2O Tekst in artikel H<sub>2</sub>O Water is H2O NB: let op Menu/Artikel Alias!
31

Peter Martin joomladagen.nl 21+22 april 2012

4. Component met eigen controller

Peter Martin joomladagen.nl 21+22 april 2012

32

4. Component met eigen controller


Joomla's

contact component:

Toont contactgegevens Toont contactformulier Handelt contactformulier af (controleert input, verstuurd naar gespecificeerd e-mail adres)

Echter,

in e-mail ontbreekt het IP adres van degene die formulier heeft ingevuld
Template override: niet mogelijk Clonen: mogelijk, maar component = groot Plugin: mogelijk, maar welke? Eigen controller....
33

Peter Martin joomladagen.nl 21+22 april 2012

4. Component met eigen controller


Eigen

controller in bestaand component:

Eigen controller in bestaande /controllers/ map van component Template override: aanpassing van de controller zodat andere (eigen) controller wordt aangesproken

Voorbeeld:

Aanpassen van com_contact zonder corehack zodat IP adres in e-mail naar de beheerder wordt meegestuurd

Peter Martin joomladagen.nl 21+22 april 2012

34

4. Component met eigen controller

4a. Template override die eigen controller aanstuurt:

Kopieer het bestand dat het contact formulier genereert: /components/com_contact/views/contact/tmpl/default_form.php


<input type="hidden" name="option" value="com_contact" /> <input type="hidden" name="task" value="contact.submit" /> <input type="hidden" name="return" value="<?php echo $this->return_page;?>" /> <input type="hidden" name="id" value="<?php echo $this->contact->slug; ?>" />

Maak map /html/com_contact/contact/ aan + plak daarin het default_form bestand en wijzig: /templates/beez_20/html/com_contact/contact/default_form.php
<input type="hidden" name="task" value="mijn_eigen_controller.submit" />

Peter Martin joomladagen.nl 21+22 april 2012

35

4. Component met eigen controller


4b.

Eigen controller

Kopieer com_contact controller /components/com_contact/controllers/contact.php Geef eigen naam (= 'task' uit formulier van template override) /components/com_contact/controllers/mijn_eigen_controller.php

4c.

Pas code van eigen controller aan:

4c1. Classnaam aanpassen:


class ContactControllerContact extends JcontrollerForm

wordt:
class ContactControllerMijn_eigen_controller extends JControllerForm

Peter Martin joomladagen.nl 21+22 april 2012

36

4. Component met eigen controller


4C.

Pas code van eigen controller aan:


Fatal error: Call to a member function getItem() on a non-object in /components/com_contact/controllers/mijn_eigen_controller.php on line 38

4c2. Juiste model (Contact) met prefix aanroepen ter voorkoming van foutmelding

In methode: public function submit() $model = $this->getModel('Contact'); wordt: $model = $this->getModel('Contact','ContactModel');

Peter Martin joomladagen.nl 21+22 april 2012

37

4. Component met eigen controller


4C.

Pas code van eigen controller aan:

4c3. Eigen code toevoegen in methode private function _sendEmail($data, $contact), in gedeelte onder // Prepare email body $mail->setBody($body); wordt: $mail->setBody("IP address: ".$_SERVER['REMOTE_ADDR']. "\n\n".$body);

Peter Martin joomladagen.nl 21+22 april 2012

38

4. Component met eigen controller


4D.

Resultaat:

Date: Sat, 21 Apr 2012 15:30:00 +0200 From: Afzender van Website <info@example.com> Reply-To: [Naam bezoeker] <[email adres bezoeker]> To: [e-mail adres SuperAdmin Website] IP adres: 127.0.0.1 Dit is een e-mailbericht via http://www.example,com/ van: [Naam bezoeker] <[email adres bezoeker]> [Bericht van bezoeker]

Peter Martin joomladagen.nl 21+22 april 2012

39

Conclusie

Peter Martin joomladagen.nl 21+22 april 2012

40

Conclusie

Core Hack

= Aanpassen core bestanden = Aanpassen van kopie van HTML output bestand = Aanpassen van kopie van complete module

1. Template overrides

2. Module clonen

3. Gebruik van Plugins 4. Eigen controller


= Aanpassen van kopie van controller bestand + Aanpassen van kopie van HTML output bestand zodat het eigen controller bestand wordt aangestuurd.

Peter Martin joomladagen.nl 21+22 april 2012

41

Conclusie
Core

Hack niet doen overrides / klonen / eigen controller

Kan worden overschreven bij Joomla upgrade = Kopie van Joomla code Niet overschreven bij Joomla upgrade Nadeel: evt verbeteringen in Joomla's core bestanden worden niet doorgevoerd in het kopie...

Template

Plugins

Peter Martin joomladagen.nl 21+22 april 2012

42

Vragen?

Peter Martin joomladagen.nl 21+22 april 2012

43

Vragen?
Presentatie

beschikbaar via www.db8.nl

Peter Martin e-mail: info at db8.nl website: www.db8.nl

Peter Martin joomladagen.nl 21+22 april 2012

44

Gebruikte foto's

Axe - Peter Huys, http://www.sxc.hu/photo/808871 Photo Frame 9 Billy Alexander, http://www.sxc.hu/photo/1367198 HiSpeed copier 1 - Marcin Barowski, http://www.sxc.hu/photo/537037 usb - Vangelis Thomaidis, http://www.sxc.hu/photo/913590 Game pad - Michal Zacharzewski, http://www.sxc.hu/photo/957040 signs signs - Jason Antony, http://www.sxc.hu/photo/751034 Face - Questions - Bob Smith, http://www.sxc.hu/photo/418215

Peter Martin joomladagen.nl 21+22 april 2012

45

You might also like