You are on page 1of 57

Object Oriented Programming in Joomla 2.

Peter Martin Joomladagen.nl Zondag 22 april 2011

Overzicht Presentatie
Introductie OOP 1.

Module zonder MVC met 2 bestanden 2. Module met MVC 3. Module uitbreidingen Vragen
>>> Sheets digitaal beschikbaar <<<

Peter Martin joomladagen.nl 21+22 april 2012

OOP (Object Oriented Programming)

Peter Martin joomladagen.nl 21+22 april 2012

OOP
Object

Oriented Programming

Een programma wordt opgebouwd uit objecten Een object bevat een blauwdruk (Class) met variabelen en functie(s) (methode) De objecten worden aangeroepen (geinstantieerd) en kunnen dan gebruikt worden

Voordelen:

Informatie verbergen Overerven Modulariteit

Peter Martin joomladagen.nl 21+22 april 2012

OOP
OOP

analogie met auto


van de motor?

Informatie verbergen
Werking

Overerven
Versnellingsbak?

Modulariteit
Accu

vervangen?

Peter Martin joomladagen.nl 21+22 april 2012

OOP
Analogie:

Informatie verbergen
Database

object

Overerven
Joomla's

core controllers & models

Modulariteit
Gebruik

van eenzelfde module op verschillende plaatsen

Peter Martin joomladagen.nl 21+22 april 2012

OOP ModelViewController
MVC

architectuur:

Model zorgt voor de data View zorgt voor de weergave Controller zorgt voor de besturing

CRUD Create Read Update Delete

Peter Martin joomladagen.nl 21+22 april 2012

OOP Voorbeeld: PDF genereren

Peter Martin joomladagen.nl 21+22 april 2012

OOP Voorbeeld: PDF genereren


Download

PDF Class, bijv van www.fpdf.org

Lees documentatie / bekijk voorbeelden

Class

opvragen: instantieren: gebruiken:

require_once 'fpdf.php';
Object Object

$pdf=new FPDF(); $pdf->AddPage(); $pdf->SetFont('Arial','',10); $pdf->Write(5,'Hallo Joomladag'); $pdf->Output('mijn-eigen-pdf-bestand.pdf, 'F');


9

Peter Martin joomladagen.nl 21+22 april 2012

OOP Voorbeeld: PDF genereren


fpdf.php

(1.700 regels!) bevat:

class FPDF { var $page; //current page number var $n; //current object number [..] function FPDF($orientation='P', $unit='mm', $format='A4') function SetMargins($left, $top, $right=null) function Cell($w, $h=0, $txt='', $border=0, $ln=0, $align='', $fill=false, $link='') etc.
Peter Martin joomladagen.nl 21+22 april 2012

10

1. Module zonder MVC met 2 bestanden

Peter Martin joomladagen.nl 21+22 april 2012

11

1. Module zonder MVC met 2 bestanden


Artikelen:

Voting / Rating (Waardering)

Peter Martin joomladagen.nl 21+22 april 2012

12

1. Module zonder MVC met 2 bestanden


Database:

Artikelen: #__content Artikel rating: #__content_rating

Peter Martin joomladagen.nl 21+22 april 2012

13

1. Module zonder MVC met 2 bestanden


Front-end

module om best gewaardeerde artikels te tonen:


/modules/mod_db8brc/

bestanden:
.xml voor installatie en parameters
/modules/mod_db8brc/mod_db8brc.xml

.php voor logica + HTML output


/modules/mod_db8brc/mod_db8brc.php

Peter Martin joomladagen.nl 21+22 april 2012

14

1. Module zonder MVC met 2 bestanden


.xml

voor installatie (en parameters)

/modules/mod_db8brc/mod_db8brc.xml
<?xml version="1.0" encoding="utf-8"?> <extension type="module" version="2.5" client="site" method="upgrade"> <name>db8BRC</name> <author>Peter Martin</author> <creationDate>April 2012</creationDate> <copyright>Copyright 2012 by Peter Martin / db8.nl.</copyright> <license>GNU/GPL</license> <authorEmail>joomla@db8.nl</authorEmail> <authorUrl>www.db8.nl</authorUrl> <version>j2.5-v1</version> <description>DB8BRC</description> </extension>

Peter Martin joomladagen.nl 21+22 april 2012

15

1. Module zonder MVC met 2 bestanden


.php

voor logica + HTML output

/modules/mod_db8brc/mod_db8brc.php
defined( '_JEXEC' ) or die; $db = Jfactory::getDbo(); // OOP! Instantieren van database object :-) $query = $db->getQuery(true); // Maak query string leeg $query->select('content.*, rating.rating_sum as sum, rating.rating_count as count'); $query->from('#__content_rating AS rating'); $query->leftJoin('#__content AS content ON content.id = rating.content_id'); $query->order('(sum/count) DESC'); $query->order('count DESC'); $db->setQuery($query->__toString()); $results = $db->loadObjectList(); echo "<ul>"; foreach ($results as $result){ echo "<li>$result->title (".($result->sum/$result->count).")</li>"; } echo "</ul>";

Peter Martin joomladagen.nl 21+22 april 2012

16

1. Module zonder MVC met 2 bestanden


Installatie:

Extension Manager > Discover

Peter Martin joomladagen.nl 21+22 april 2012

17

1. Module zonder MVC met 2 bestanden


Module

toewijzen: Module Manager > New

Peter Martin joomladagen.nl 21+22 april 2012

18

1. Module zonder MVC met 2 bestanden


Module

op voorzijde website

Peter Martin joomladagen.nl 21+22 april 2012

19

1. Module zonder MVC met 2 bestanden


Nadelen:

Template overrides niet mogelijk Logica + HTML Output door elkaar


Informatie

verbergen

Developer logica Designer HTML Output

Peter Martin joomladagen.nl 21+22 april 2012

20

2. Module met MVC

Peter Martin joomladagen.nl 21+22 april 2012

21

2. Module met MVC


Module

db8 Best Rated Content als MVC. In /modules/mod_db8bestratedcontent/ maken:


Modelhelper.php View/tmpl/default.php Controllermod_db8bestratedcontent.php, module heeft alleen view

Peter Martin joomladagen.nl 21+22 april 2012

22

2. Module met MVC


Model:

helper.php

defined('_JEXEC') or die; abstract class modDb8BestRatedContentHelper { public static function getBestRatedContent(&$params) { $db = Jfactory::getDbo(); $query = $db->getQuery(true); $query->select('content.*, rating.rating_sum as sum, rating.rating_count as count'); $query->from('#__content_rating AS rating'); $query->leftJoin('#__content AS content ON content.id = rating.content_id'); $query->order('(sum/count) DESC'); $query->order('count DESC'); $db->setQuery($query->__toString()); $results = $db->loadObjectList(); return $results; } }

Peter Martin joomladagen.nl 21+22 april 2012

23

2. Module met MVC


View:

/tmpl/default.php

defined('_JEXEC') or die; ?> <ul> <?php foreach ($results as $result){ ?> <li><?php echo $result->title." (".($result->sum/$result->count).")";?></li> <?php } ?> </ul>

Peter Martin joomladagen.nl 21+22 april 2012

24

2. Module met MVC


Controller:

mod_db8bestratedcontent.php

defined( '_JEXEC' ) or die; // Class opvragen (Include the helper file only once) require_once dirname(__FILE__).'/helper.php'; // instantieer object "results" $results = modDb8BestRatedContentHelper::getBestRatedContent($params); // Laat Joomla een layout file opvragen, 'default' = default.php require JModuleHelper::getLayoutPath('mod_db8bestratedcontent', $params->get('layout', 'default'));

Peter Martin joomladagen.nl 21+22 april 2012

25

2. Module met MVC


Installatie:

Extension Manager > Discover

Peter Martin joomladagen.nl 21+22 april 2012

26

2. Module met MVC


Module

toewijzen: Module Manager > New

Peter Martin joomladagen.nl 21+22 april 2012

27

2. Module met MVC


Module

op voorzijde website

Peter Martin joomladagen.nl 21+22 april 2012

28

2. Module met MVC Template Override


Map

voor template override: HTML output file van module

/templates/beez_20/html/mod_db8bestratedcontent/
Kopieer

/modules/mod_db8bestratedcontent/tmpl/default.php en plaats in template override map: /templates/beez_20/html/mod_db8bestratedcontent/d efault.php

Wijzig

die default.php override:

Verander <ul></ul> in <ol></ol>

Peter Martin joomladagen.nl 21+22 april 2012

29

3. Module uitbreidingen

Peter Martin joomladagen.nl 21+22 april 2012

30

3. Module uitbreidingen
Parameters

a)Vormgeving Module (moduleclass_sfx) b)Layout file (ul/ol keuze ipv template override) c) Lengte van lijst d)Toon alleen bepaalde categorie e)Cache functionaliteit
Taalbestand Distributie

Peter Martin joomladagen.nl 21+22 april 2012

31

3. Module: Parameters

Peter Martin joomladagen.nl 21+22 april 2012

32

3. Module: Parameters
Parameters

Instellingen Module In Module Manager > module [edit]

Peter Martin joomladagen.nl 21+22 april 2012

33

3a. Module Parameters: SFX


Vormgeving

van Module (moduleclass_sfx) 1/2 mod_db8bestratedcontent.xml


<description>DB8BESTRATEDCONTENT</description> <config> <fields name="params"> <fieldset name="advanced"> <field name="moduleclass_sfx" type="text" label="COM_MODULES_FIELD_MODULECLASS_SFX_LABEL " description="COM_MODULES_FIELD_MODULECLASS_SFX_D ESC" /> </fieldset> </fields> </config> </extension>
Peter Martin joomladagen.nl 21+22 april 2012

34

3a. Module Parameters: SFX


Vormgeving

van Module (moduleclass_sfx) 2/2 mod_db8bestratedcontent.php


// Get moduleclass_sfx parameter $moduleclass_sfx = htmlspecialchars($params->get('moduleclass_sfx')); // For Joomla to select one of the layout files, 'default' = default.php require JModuleHelper::getLayoutPath('mod_db8bestratedcontent', $params->get('layout', 'default'));

/tmpl/default.php

verander <ul> in: <ul class="db8bestratedcontent<?php echo $moduleclass_sfx; ?>">

Peter Martin joomladagen.nl 21+22 april 2012

35

3a. Module Parameters: SFX

HTML Output <ul class="db8bestratedcontent"> <li>Professionals (5)</li> <li>Search (5)</li> <li>Water is H<sub>2</sub>O (4)</li> <li>Content (4)</li> <li>Beginners (3.2)</li> </ul>

HTML Output met Module Class Suffix = jd <ul class="db8bestratedcontentjd">

Peter Martin joomladagen.nl 21+22 april 2012

36

3b. Module Parameters: Layout file


Layout

file (ul/ol keuze ipv template override) mod_db8bestratedcontent.xml


<fieldset name="advanced"> <field name="layout" type="modulelayout" label="JFIELD_ALT_LAYOUT_LABEL" description="JFIELD_ALT_MODULE_LAYOUT_DESC" />
Kopieer

/tmpl/default.php /tmpl/ordered.php

En verander <ul></ul> in <ol></ol>

Peter Martin joomladagen.nl 21+22 april 2012

37

3b. Module Parameters: Layout file


Layout

file (ul/ol keuze ipv template override) Joomla genereert automatisch dropdown box op basis van bestanden in /tmpl/

Peter Martin joomladagen.nl 21+22 april 2012

38

3c. Module Parameters: Count


Lengte

van lijst mod_db8bestratedcontent.xml


<fieldset name="basic"> <field name="count" type="text" default="5" label="MOD_BEST_RATED_CONTENT_FIELD_COUNT_LABEL" description="MOD_BEST_RATED_CONTENT_FIELD_COUNT_DESC" />

helper.php

Verander $db->setQuery($query->__toString());
$db->setQuery($query->__toString(), 0, $params->get('count'));

Peter Martin joomladagen.nl 21+22 april 2012

39

3c. Module Parameters: Count


Lengte

van lijst

Peter Martin joomladagen.nl 21+22 april 2012

40

3d. Module Parameters: Category


Toon

alleen bepaalde categorie 1/2 mod_db8bestratedcontent.xml


<fieldset name="basic"> <field name="catid" type="category" extension="com_content" multiple="true" size="10" default="" label="JCATEGORY"

description="MOD_BEST_RATED_CONTENT_FIELD_CATEGORY_DESC" >

<option value="">JOPTION_ALL_CATEGORIES</option> </field>

Peter Martin joomladagen.nl 21+22 april 2012

41

3d. Module Parameters: Category


Toon

alleen bepaalde categorie 2/2 helper.php


$catid = $params->get('catid'); if(is_array($catid)){ if($catid[0] != null){ $catid = implode(',', $catid); $query->where('content.catid IN ( '.$catid.')'); } }

Peter Martin joomladagen.nl 21+22 april 2012

42

3d. Module Parameters: Category


Toon

alleen bepaalde categorie

Peter Martin joomladagen.nl 21+22 april 2012

43

3e. Module Parameters: Cache


Joomla's

cache functie mod_db8bestratedcontent.xml


<fieldset name="advanced"> <field name="cache" type="list" default="1" label="COM_MODULES_FIELD_CACHING_LABEL" description="COM_MODULES_FIELD_CACHING_DESC"> <option value="1">JGLOBAL_USE_GLOBAL</option> <option value="0">COM_MODULES_FIELD_VALUE_NOCACHING</option> </field> <field name="cache_time" type="text" default="900" label="COM_MODULES_FIELD_CACHE_TIME_LABEL" description="COM_MODULES_FIELD_CACHE_TIME_DESC" /> <field name="cachemode" type="hidden" default="static"> <option value="static"></option> </field>

Peter Martin joomladagen.nl 21+22 april 2012

44

3e. Module Parameters: Cache


Joomla's

cache functie

Peter Martin joomladagen.nl 21+22 april 2012

45

3. Module uitbreidingen:Taalbestand

Peter Martin joomladagen.nl 21+22 april 2012

46

3. Module uitbreidingen:Taalbestand
Per

taal eigen map:

/language/en-GB/ /language/nl-NL/

Taal

labels tijdens installatie

en-GB.mod_db8bestratedcontent.sys.ini nl-NL.mod_db8bestratedcontent.sys.ini

Taal

labels in back-end Module Manager

en-GB.mod_db8bestratedcontent.ini nl-NL.mod_db8bestratedcontent.ini

Peter Martin joomladagen.nl 21+22 april 2012

47

3. Module uitbreidingen:Taalbestand
en-GB.mod_db8bestratedcontent.sys.ini

MOD_DB8BESTRATEDCONTENT="db8 Best Rated Content" DB8BESTRATEDCONTENT="Installation of db8 Best Rated Content succeeded." MOD_DB8BESTRATEDCONTENT="db8 Best Rated Content" MOD_BEST_RATED_CONTENT_FIELD_CATEGORY_DESC="Selects Articles from one or more Categories. If no selection will show all categories as default" MOD_BEST_RATED_CONTENT_FIELD_COUNT_LABEL="Count" MOD_BEST_RATED_CONTENT_FIELD_COUNT_DESC="The number of Articles to display (the default is 5)"

en-GB.mod_db8bestratedcontent.ini

Peter Martin joomladagen.nl 21+22 april 2012

48

3. Module uitbreidingen: Distributie

Peter Martin joomladagen.nl 21+22 april 2012

49

3. Module uitbreidingen: Distributie


mod_db8bestratedcontent.xml

Bevat alle aanwijzingen (referenties naar bestanden) voor installatie: <files> & <languages> <files> <filename module=" mod_db8bestratedcontent"> mod_db8bestratedcontent.php</filename> <folder>tmpl</folder> <filename>helper.php</filename> <filename>index.html</filename> <filename>mod_db8bestratedcontent.xml </filename> </files>

Peter Martin joomladagen.nl 21+22 april 2012

50

3. Module uitbreidingen: Distributie


mod_db8bestratedcontent.xml

<languages folder="language">
<language tag="en-GB">en-GB/enGB.mod_db8bestratedcontent.ini</language> <language tag="en-GB">en-GB/enGB.mod_db8bestratedcontent.sys.ini</language> <language tag="nl-NL">nl-NL/nlNL.mod_db8bestratedcontent.ini</language> <language tag="nl-NL">nl-NL/nlNL.mod_db8bestratedcontent.sys.ini</language>

</languages>

Peter Martin joomladagen.nl 21+22 april 2012

51

3. Module uitbreidingen: Distributie


Distributie

bestand

Bestanden in Archive bestand plaatsen, bijv .zip Handige naam gebruiken, bijv mod_db8bestratedcontent_j25_v1.zip
modmodule db8bestratedcontent(developer) j25Joomla

+ naam extensie

versie (2.5) v1Versie van Extensie

Peter Martin joomladagen.nl 21+22 april 2012

52

Conclusie

Peter Martin joomladagen.nl 21+22 april 2012

53

Conclusie
Gebruik

OOP & MVC

Scheiding HTML Output (voor designers) en logica (developers) Template overrides Layout selectie

Opmerking

db8 Best Rated Content:

Nu bij tonen van artikels nog geen rekening met:


Publicatie

status (published/unpublished) artikel en categorie Toegangsniveau bezoeker & artikel en categorie Geen (SEF) hyperlinks naar artikelen

Peter Martin joomladagen.nl 21+22 april 2012

54

Vragen?

Peter Martin joomladagen.nl 21+22 april 2012

55

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

56

Gebruikte foto's

digital dreams - Flavio Takemoto, http://www.sxc.hu/photo/1160562 Home cinema setup 2 - "Ambrozjo", http://www.sxc.hu/photo/1361428 Home cinema setup 3 - "Ambrozjo", http://www.sxc.hu/photo/1361429 Remote Control - Asif Akbar, http://www.sxc.hu/photo/1025175 Code - Mario Alberto Magallanes Trejo, http://www.sxc.hu/photo/468319 ram Mohamed Riffath,http://www.sxc.hu/photo/487296 Blank E-Box for Software etc 6 - Przemyslaw Szczepanski, http://www.sxc.hu/photo/950048 digicity 1 - gerard79, http://www.sxc.hu/photo/1151540 switches - "trhaynes", http://www.sxc.hu/photo/56670 Bengali Keyborad - Mohammad Jobaed Adnan, http://www.sxc.hu/photo/676844 Box - Billy Alexander, http://www.sxc.hu/photo/1301543 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

57

You might also like