SlideShare a Scribd company logo
Vishwash Gaur

                  © 2012 Vishwash Gaur. All rights reserved.
All registered trademarks, logos, products and service names belong to their
                              respective owners.
       Image Credit: http://ayadipro.com/blog/high-tech-education/25-improvements-in-joomla-2-5/
Disclaimer: Images used on this slide are for representative purposes only and belong to their respective owners.
   Basic knowledge of HTML, PHP and MySQL
   Interest in MVC and CMS frameworks to reduce development
    time
   A web server with PHP/MySQL installed on it
   Joomla! 2.5 package downloaded and installed
    ◦ it can be downloaded from http://www.joomla.org/download.html


   NOTE: This presentation is focused for the beginners in Joomla! and would
    cover only a basic overview due to limited time. Further details can be
    discussed separately later.
Hands on workshop to
develop a basic Joomla!
Module and component
   Let’s create a module called “Reviews” for this
    workshop which will display customer reviews
    on the web page
   It will allow us to display a simple text in a
    pre-defined Joomla module position
   Once this is done, we will fetch data for the
    module from DB
   modules>mod_reviews
    ◦   mod_reviews.php
    ◦   mod_reviews.xml
    ◦   helper.php
    ◦   index.html
    ◦   tmpl/default.php
    ◦   tmpl/index.html
<?php
//license details here

// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );

// Include the syndicate functions only once
require_once( dirname(__FILE__).DS.'helper.php' );

//load helper class and function
$reviews = modReviewsHelper::getReviews( $params );

//load the layout file from template views
require( JModuleHelper::getLayoutPath( 'mod_reviews' ) );
?>
// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );

As it suggests, this line checks to make sure that this
   file is being included from the Joomla! application.
It is necessary to prevent variable injection and other
   potential security concerns.
// Include the syndicate functions only once
require_once( dirname(__FILE__).DS.'helper.php' );
The helper class is defined in our helper.php file.
   This file is included with a require_once statement.
It allows to include necessary functions for the
   module functionality. Helper file may include basic
   calculations, DB connection and query code.
//load helper class and function
$reviews = modReviewsHelper::getReviews( $params );

This line allows to invoke the appropriate helper class method
  to retrieve the data.
Currently, we do not use any parameters but it is allowed in this
  module for future extensibility.
//load the layout file from template views
require( JModuleHelper::getLayoutPath( 'mod_reviews' ) );

This line includes the template to display the output.
<?xml version="1.0" encoding="utf-8"?>
<extension
  type="module"
  version="2.5"
  client="site"
  method="upgrade">
  <name>Reviews</name>
  <author>Vishwash Gaur</author>
  <version>2.5.0</version>
  <description>An review module.</description>
  <files>
     <filename module="mod_reviews">mod_reviews.php</filename>
     <filename>index.html</filename>
     <filename>helper.php</filename>
         <folder>tmpl</folder>
         <filename>mod_reviews.xml</filename>
  </files>
</extension>

                        This file is used to specify which files the installer needs to copy
                        and is used by the Module Manager to determine which
                        parameters are used to configure the module.
<extension type="module“ version="2.5“
 client="site“ method="upgrade">

This line tells to Joomla! that selected
 extension type is module and compatible with
 Joomla version 2.5.
Extension type is also defined for site which
 means it will be available for front-end.
<name>Reviews</name>
<author>Vishwash Gaur</author>
<version>2.5.0</version>
<description>An review module.</description>
<files>
      <filename
  module="mod_reviews">mod_reviews.php</filename>
      <filename>index.html</filename>
      <filename>helper.php</filename>
       <folder>tmpl</folder>
       <filename>mod_reviews.xml</filename>
  </files>
<?xml version="1.0" encoding="utf-8"?>
<install type="module" version="1.5.0">
  <name>Hello, World!</name>
  <author>John Doe</author>
  <version>1.5.0</version>
  <description>A simple Hello, World! module.</description>
  <files>
     <filename>mod_reviews.xml</filename>
     <filename module="mod_reviews">mod_reviews.php</filename>
     <filename>index.html</filename>
     <filename>helper.php</filename>
     <filename>tmpl/default.php</filename>
     <filename>tmpl/index.html</filename>
  </files>
  <params>
  </params>
</install>
<?php
//license details here

class modReviewsHelper
{
   /**
    * Retrieves the reviews
    *
    * @param array $params An object containing the module parameters
    * @access public
    */
   function getReviews( $params )
   {
      return 'I am a happy user!';
   }
}
?>
<html><body bgcolor="#FFFFFF"></body></html>

This file is included to prevent directory browsing. It can be
  event left blank and whenever someone will access the
  directory then this file will be default loaded.
<?php
// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );
//print user reviews
echo $reviews;
?>
<html><body bgcolor="#FFFFFF"></body></html>

This file is included to prevent directory browsing. It can be
  event left blank and whenever someone will access the
  directory then this file will be default loaded.
   Once a base module is ready, we can start using it
    immediately in Joomla.
   In Joomla 1.5, it was auto-detected but in Joomla
    2.5, we would need to discover a newly developed
    extension from admin panel.
   For this, please login to admin panel and go to Top
    menu>extensions>extension manager
   Click on the discover tab and refresh the data
Simple module Development in Joomla! 2.5
Go tot extension
manager
Click on the
discover button
to find newly
developed
extensions
If your programming is
correct, it will find your newly
developed extension.
Select the extension and click
on install button to setup the
extension.
Simple module Development in Joomla! 2.5
   Once a module is added in the Joomla! System, it
    has to be defined on a position using module
    manager.
   It will allow module to display in the front-end.
Go to module manager
and click on “New”
button
Select your newly
developed module
Define module
position in active
template and set
other parameters and
pages to display the
module.
I give it position 6 in
Beez_20 template.
Module successfully
saved, now move to
front-end to check this.
You can
see user
review
here
   I can’t see the module
    ◦ Check if you have selected correct position in the
      active template
   With the previous example, you can display one
    static customer review but what if there are many
    customer reviews which should be dynamically
    loaded on the page.
   Let’s do that!
   Using phpMyAdmin or any other DB management
    tool, create a table called __reviews in the Joomla
    DB
   Add required fields i.e. id, name, city and feedback
    in the table
   Kindly note this example is meant to be very basic
    for easy understanding
Create table and add
fields in the database.
Note: Ideally, it is the
part of component.
Simple module Development in Joomla! 2.5
I have done some entries in the DB directly
for the demo purpose. It should happen
via a back-end component in real
environment.
   Now, since we are not doing any static code
    and want to load reviews dynamically from
    the database, we need to make some changes
    in below files:
    ◦ mod_reviews.php – minor change
    ◦ helper.php – major change for DB connection and
      query
    ◦ tmpl/default.php – minor change
    ◦ tmpl/reviews.php – new template file added
<?php
//license details here

// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );

// Include the syndicate functions only once
require_once( dirname(__FILE__).DS.'helper.php' );

//load helper class and function
//$reviews = modReviewsHelper::getReviews( $params );
$rows = modReviewsHelper::getReviews( $params );


//load the layout file from template views
require( JModuleHelper::getLayoutPath( 'mod_reviews' ) );
?>
<?xml version="1.0" encoding="utf-8"?>
<extension
  type="module"
  version="2.5"
  client="site"
  method="upgrade">
  <name>Reviews</name>
  <author>Vishwash Gaur</author>
  <version>2.5.0</version>
  <description>An review module.</description>
  <files>
     <filename module="mod_reviews">mod_reviews.php</filename>
     <filename>index.html</filename>
     <filename>helper.php</filename>
         <folder>tmpl</folder>
         <filename>mod_reviews.xml</filename>
  </files>
</extension>
<?php
//license details here

class modReviewsHelper
{
   /**
    * Retrieves the reviews
    *
    * @param array $params An object containing the module parameters
    * @access public
    */
   function getReviews( $params )
   {
      return 'I am a happy user!';
   }
}
?>
<?php
//license details here


class modReviewsHelper
{
    /**
        * Retrieves the reviews
        * @param array $params An object containing the module parameters
        * @access public
                                                                            For the demonstration
        */
    function getReviews( $params )
                                                                            purpose, kindly understand
    {
          //return 'I am a happy user!';
                                                                            and note that Joomla! uses
             //limit the number of items to load from DB
             $items = $params->get('items', 10);
                                                                            it’s own code conventions
             //make DB connection
                                                                            to make DB connections and
             $db=& JFactory::getDBO();
             $result= null;
                                                                            to run a query. It allows in
             //run db query
             $query = 'SELECT * FROM #__reviews';
                                                                            less code and standardized
             $db->setQuery($query, 0, $items);
             $rows = $db->loadObjectList();
                                                                            approach.
             //display and handle error warning
             if ($db->getErrorNum()) {
             JError::raiseWarning( 500, $db->stderr(true) );
             }
             return $rows;
    }
/**
    * Function to display rating and reviews via views
    * @param array $params An object containing the module parameters
    * @access public
    */
  function renderReviews(&$reviews, &$params)
  {
      //variable to store db value of a particular record link to open in detailed view
      $link = JRoute::_('index.php?option=com_reviews&id='.$reviews->id.'&task=view');

      //call template view for display
      require(JModuleHelper::getLayoutPath('mod_reviews' , 'reviews'));
 }
}
?>




                                         This component doesn’t exists in the system but we have planned
                                         it for future use or next demo of component development.
<?php
// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );
//print user reviews
//echo $reviews;
foreach($rows as $row)
{
  modReviewsHelper::renderReviews($row, $params);
}
?>
<?php
// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' ); ?>
<table width="95%">
<tr><td>
<strong><?php echo ucwords(strtolower($reviews->name)); ?></strong>
<br />
<span style="font-size:9px; margin-top:-5px;">
<?php echo ucwords(strtolower($reviews->city));?></span><br />
</td>
</tr>
<tr>
<td><?php echo wordwrap($reviews->feedback,130, "<br />n");?></td>
</tr>
</table>
Dynamic
records from DB
   Get your XAMP, LAMP, MAMP or WAMP environment
    ready
   Install and experiment Joomla! Locally
   Checkout online references
   Get a book
   Visit Joomla! JED, Forums and user groups
   Help each other and learn from experiences
   I look forward to learn and share more with you in
    future too.

   I can be reached easily at my blog
    www.vishwashgaur.com and/or using twitter
    @vishwashgaur
   XAMP: http://www.apachefriends.org/en/xampp.html
   Joomla!: http://www.joomla.org/
   JED: http://extensions.joomla.org/
   Joomla! Forum: http://forum.joomla.org/
   Joomla! Magazine: http://magazine.joomla.org/authors/itemlist/user/65-Nicholas-G-Antimisiaris
   Joomla documentation: http://docs.joomla.org/
   Joomla 2.5 essential training: http://www.lynda.com/Joomla-tutorials/Joomla-Essential-Training/95699-2.html
   Joomla! For beginners guide 2012: http://www.danconia.com/joomla-for-beginners-guide-2012.html
   Joomla! Developers guide: http://cocoate.com/sites/cocoate.com/files/private/jdev.pdf

More Related Content

PDF
Whmcs addon module docs
PDF
Java server face tutorial
PDF
JSF2 Composite Components - Ian Hlavats
PPTX
Jsf presentation
PPTX
Introduction to jsf 2
PDF
Jsf Framework
PDF
Intro to Joomla Development
Whmcs addon module docs
Java server face tutorial
JSF2 Composite Components - Ian Hlavats
Jsf presentation
Introduction to jsf 2
Jsf Framework
Intro to Joomla Development

What's hot (18)

ODP
A Complete Tour of JSF 2
PDF
Alfredo-PUMEX
PDF
Java server faces
PPT
Struts Introduction Course
PPTX
Building and managing java projects with maven part-III
PDF
Securing JSF Applications Against the OWASP Top Ten
PPT
Jsp ppt
PDF
Modular applications with montage components
PPT
JSF basics
PPTX
Jsp Introduction Tutorial
PDF
Jsf intro
PPTX
Spring Web Views
PDF
Spring Web Service, Spring JMS, Eclipse & Maven tutorials
PDF
GIDS 2012: Java Message Service 2.0
PPT
Spring talk111204
KEY
Django Admin: Widgetry & Witchery
PDF
Working with Servlets
PDF
Javabeans .pdf
A Complete Tour of JSF 2
Alfredo-PUMEX
Java server faces
Struts Introduction Course
Building and managing java projects with maven part-III
Securing JSF Applications Against the OWASP Top Ten
Jsp ppt
Modular applications with montage components
JSF basics
Jsp Introduction Tutorial
Jsf intro
Spring Web Views
Spring Web Service, Spring JMS, Eclipse & Maven tutorials
GIDS 2012: Java Message Service 2.0
Spring talk111204
Django Admin: Widgetry & Witchery
Working with Servlets
Javabeans .pdf
Ad

Viewers also liked (12)

PPT
Ed. Technology Council Open Source Presentation
PDF
Permanent hosting at Joomla.com
PPTX
Joomla Hosting Done the Right Way
KEY
Advanced Akeeba Backup (Joomla! Day Denmark 2012)
PPTX
Website Localization Made Easy - Proz.com webinar presentation by Balazs Benedek
PPTX
Joomla! security jday2015
KEY
Joomla! Day Poland 2012 - Advanced Akeeba Backup - Beyond just backing up you...
PDF
Windows server 2012 - installing active directory domain server
PPT
Joomla Presentations
PPTX
Install Windows Server 2012 Step-by-Step
PDF
Active Directory Domain Services Installation & Configuration - Windows Ser...
PPTX
Install Windows Server 2008 Step-by-Step
Ed. Technology Council Open Source Presentation
Permanent hosting at Joomla.com
Joomla Hosting Done the Right Way
Advanced Akeeba Backup (Joomla! Day Denmark 2012)
Website Localization Made Easy - Proz.com webinar presentation by Balazs Benedek
Joomla! security jday2015
Joomla! Day Poland 2012 - Advanced Akeeba Backup - Beyond just backing up you...
Windows server 2012 - installing active directory domain server
Joomla Presentations
Install Windows Server 2012 Step-by-Step
Active Directory Domain Services Installation & Configuration - Windows Ser...
Install Windows Server 2008 Step-by-Step
Ad

Similar to Simple module Development in Joomla! 2.5 (20)

PPTX
Installing Extensions in Joomla! 2.5
PPT
Joomla Day Austin Part 4
PPTX
Techgig Webinar: Joomla Introduction and Module Development June 2012
PPT
Core Php Component Presentation
PPT
Corephpcomponentpresentation 1211425966721657-8
PDF
Joomla 1.5 modules - Joomla!Days NL 2009 #jd09nl
PPTX
Overview of CMS and Joomla!
PPTX
Modules and Components Introduction in Joomla! 2.5
KEY
Developing Joomla! 1.5 Extensions, Explained
PPTX
Joomla! Day Chicago 2011 Presentation - Steven Pignataro
PDF
Turbocharging your extension // Joomla //
PPTX
Jd gr-2012-workshop
PDF
Joomla Online Training
PPTX
FAQ's in Joomla 2.5
PDF
Basics of Joomla!
PDF
presentation
PDF
Add-On Development: EE Expects that Every Developer will do his Duty
PDF
Joomla! Components - Uma visão geral
PDF
Joomla2 5-afirstlook-120214054019-phpapp01
PPTX
Joomla Tutorial: Joomla 2.5 a first look
Installing Extensions in Joomla! 2.5
Joomla Day Austin Part 4
Techgig Webinar: Joomla Introduction and Module Development June 2012
Core Php Component Presentation
Corephpcomponentpresentation 1211425966721657-8
Joomla 1.5 modules - Joomla!Days NL 2009 #jd09nl
Overview of CMS and Joomla!
Modules and Components Introduction in Joomla! 2.5
Developing Joomla! 1.5 Extensions, Explained
Joomla! Day Chicago 2011 Presentation - Steven Pignataro
Turbocharging your extension // Joomla //
Jd gr-2012-workshop
Joomla Online Training
FAQ's in Joomla 2.5
Basics of Joomla!
presentation
Add-On Development: EE Expects that Every Developer will do his Duty
Joomla! Components - Uma visão geral
Joomla2 5-afirstlook-120214054019-phpapp01
Joomla Tutorial: Joomla 2.5 a first look

Recently uploaded (20)

PDF
Spectral efficient network and resource selection model in 5G networks
PDF
Empathic Computing: Creating Shared Understanding
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
Machine learning based COVID-19 study performance prediction
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
KodekX | Application Modernization Development
PPTX
Cloud computing and distributed systems.
PDF
cuic standard and advanced reporting.pdf
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
DOCX
The AUB Centre for AI in Media Proposal.docx
Spectral efficient network and resource selection model in 5G networks
Empathic Computing: Creating Shared Understanding
Mobile App Security Testing_ A Comprehensive Guide.pdf
20250228 LYD VKU AI Blended-Learning.pptx
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Network Security Unit 5.pdf for BCA BBA.
Machine learning based COVID-19 study performance prediction
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Building Integrated photovoltaic BIPV_UPV.pdf
Per capita expenditure prediction using model stacking based on satellite ima...
Encapsulation_ Review paper, used for researhc scholars
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Diabetes mellitus diagnosis method based random forest with bat algorithm
KodekX | Application Modernization Development
Cloud computing and distributed systems.
cuic standard and advanced reporting.pdf
NewMind AI Weekly Chronicles - August'25 Week I
The Rise and Fall of 3GPP – Time for a Sabbatical?
Dropbox Q2 2025 Financial Results & Investor Presentation
The AUB Centre for AI in Media Proposal.docx

Simple module Development in Joomla! 2.5

  • 1. Vishwash Gaur © 2012 Vishwash Gaur. All rights reserved. All registered trademarks, logos, products and service names belong to their respective owners. Image Credit: http://ayadipro.com/blog/high-tech-education/25-improvements-in-joomla-2-5/ Disclaimer: Images used on this slide are for representative purposes only and belong to their respective owners.
  • 2. Basic knowledge of HTML, PHP and MySQL  Interest in MVC and CMS frameworks to reduce development time  A web server with PHP/MySQL installed on it  Joomla! 2.5 package downloaded and installed ◦ it can be downloaded from http://www.joomla.org/download.html  NOTE: This presentation is focused for the beginners in Joomla! and would cover only a basic overview due to limited time. Further details can be discussed separately later.
  • 3. Hands on workshop to develop a basic Joomla! Module and component
  • 4. Let’s create a module called “Reviews” for this workshop which will display customer reviews on the web page  It will allow us to display a simple text in a pre-defined Joomla module position  Once this is done, we will fetch data for the module from DB
  • 5. modules>mod_reviews ◦ mod_reviews.php ◦ mod_reviews.xml ◦ helper.php ◦ index.html ◦ tmpl/default.php ◦ tmpl/index.html
  • 6. <?php //license details here // no direct access defined( '_JEXEC' ) or die( 'Restricted access' ); // Include the syndicate functions only once require_once( dirname(__FILE__).DS.'helper.php' ); //load helper class and function $reviews = modReviewsHelper::getReviews( $params ); //load the layout file from template views require( JModuleHelper::getLayoutPath( 'mod_reviews' ) ); ?>
  • 7. // no direct access defined( '_JEXEC' ) or die( 'Restricted access' ); As it suggests, this line checks to make sure that this file is being included from the Joomla! application. It is necessary to prevent variable injection and other potential security concerns.
  • 8. // Include the syndicate functions only once require_once( dirname(__FILE__).DS.'helper.php' ); The helper class is defined in our helper.php file. This file is included with a require_once statement. It allows to include necessary functions for the module functionality. Helper file may include basic calculations, DB connection and query code.
  • 9. //load helper class and function $reviews = modReviewsHelper::getReviews( $params ); This line allows to invoke the appropriate helper class method to retrieve the data. Currently, we do not use any parameters but it is allowed in this module for future extensibility.
  • 10. //load the layout file from template views require( JModuleHelper::getLayoutPath( 'mod_reviews' ) ); This line includes the template to display the output.
  • 11. <?xml version="1.0" encoding="utf-8"?> <extension type="module" version="2.5" client="site" method="upgrade"> <name>Reviews</name> <author>Vishwash Gaur</author> <version>2.5.0</version> <description>An review module.</description> <files> <filename module="mod_reviews">mod_reviews.php</filename> <filename>index.html</filename> <filename>helper.php</filename> <folder>tmpl</folder> <filename>mod_reviews.xml</filename> </files> </extension> This file is used to specify which files the installer needs to copy and is used by the Module Manager to determine which parameters are used to configure the module.
  • 12. <extension type="module“ version="2.5“ client="site“ method="upgrade"> This line tells to Joomla! that selected extension type is module and compatible with Joomla version 2.5. Extension type is also defined for site which means it will be available for front-end.
  • 14. <files> <filename module="mod_reviews">mod_reviews.php</filename> <filename>index.html</filename> <filename>helper.php</filename> <folder>tmpl</folder> <filename>mod_reviews.xml</filename> </files>
  • 15. <?xml version="1.0" encoding="utf-8"?> <install type="module" version="1.5.0"> <name>Hello, World!</name> <author>John Doe</author> <version>1.5.0</version> <description>A simple Hello, World! module.</description> <files> <filename>mod_reviews.xml</filename> <filename module="mod_reviews">mod_reviews.php</filename> <filename>index.html</filename> <filename>helper.php</filename> <filename>tmpl/default.php</filename> <filename>tmpl/index.html</filename> </files> <params> </params> </install>
  • 16. <?php //license details here class modReviewsHelper { /** * Retrieves the reviews * * @param array $params An object containing the module parameters * @access public */ function getReviews( $params ) { return 'I am a happy user!'; } } ?>
  • 17. <html><body bgcolor="#FFFFFF"></body></html> This file is included to prevent directory browsing. It can be event left blank and whenever someone will access the directory then this file will be default loaded.
  • 18. <?php // no direct access defined( '_JEXEC' ) or die( 'Restricted access' ); //print user reviews echo $reviews; ?>
  • 19. <html><body bgcolor="#FFFFFF"></body></html> This file is included to prevent directory browsing. It can be event left blank and whenever someone will access the directory then this file will be default loaded.
  • 20. Once a base module is ready, we can start using it immediately in Joomla.  In Joomla 1.5, it was auto-detected but in Joomla 2.5, we would need to discover a newly developed extension from admin panel.  For this, please login to admin panel and go to Top menu>extensions>extension manager  Click on the discover tab and refresh the data
  • 23. Click on the discover button to find newly developed extensions
  • 24. If your programming is correct, it will find your newly developed extension. Select the extension and click on install button to setup the extension.
  • 26. Once a module is added in the Joomla! System, it has to be defined on a position using module manager.  It will allow module to display in the front-end.
  • 27. Go to module manager and click on “New” button
  • 29. Define module position in active template and set other parameters and pages to display the module. I give it position 6 in Beez_20 template.
  • 30. Module successfully saved, now move to front-end to check this.
  • 32. I can’t see the module ◦ Check if you have selected correct position in the active template
  • 33. With the previous example, you can display one static customer review but what if there are many customer reviews which should be dynamically loaded on the page.  Let’s do that!
  • 34. Using phpMyAdmin or any other DB management tool, create a table called __reviews in the Joomla DB  Add required fields i.e. id, name, city and feedback in the table  Kindly note this example is meant to be very basic for easy understanding
  • 35. Create table and add fields in the database. Note: Ideally, it is the part of component.
  • 37. I have done some entries in the DB directly for the demo purpose. It should happen via a back-end component in real environment.
  • 38. Now, since we are not doing any static code and want to load reviews dynamically from the database, we need to make some changes in below files: ◦ mod_reviews.php – minor change ◦ helper.php – major change for DB connection and query ◦ tmpl/default.php – minor change ◦ tmpl/reviews.php – new template file added
  • 39. <?php //license details here // no direct access defined( '_JEXEC' ) or die( 'Restricted access' ); // Include the syndicate functions only once require_once( dirname(__FILE__).DS.'helper.php' ); //load helper class and function //$reviews = modReviewsHelper::getReviews( $params ); $rows = modReviewsHelper::getReviews( $params ); //load the layout file from template views require( JModuleHelper::getLayoutPath( 'mod_reviews' ) ); ?>
  • 40. <?xml version="1.0" encoding="utf-8"?> <extension type="module" version="2.5" client="site" method="upgrade"> <name>Reviews</name> <author>Vishwash Gaur</author> <version>2.5.0</version> <description>An review module.</description> <files> <filename module="mod_reviews">mod_reviews.php</filename> <filename>index.html</filename> <filename>helper.php</filename> <folder>tmpl</folder> <filename>mod_reviews.xml</filename> </files> </extension>
  • 41. <?php //license details here class modReviewsHelper { /** * Retrieves the reviews * * @param array $params An object containing the module parameters * @access public */ function getReviews( $params ) { return 'I am a happy user!'; } } ?>
  • 42. <?php //license details here class modReviewsHelper { /** * Retrieves the reviews * @param array $params An object containing the module parameters * @access public For the demonstration */ function getReviews( $params ) purpose, kindly understand { //return 'I am a happy user!'; and note that Joomla! uses //limit the number of items to load from DB $items = $params->get('items', 10); it’s own code conventions //make DB connection to make DB connections and $db=& JFactory::getDBO(); $result= null; to run a query. It allows in //run db query $query = 'SELECT * FROM #__reviews'; less code and standardized $db->setQuery($query, 0, $items); $rows = $db->loadObjectList(); approach. //display and handle error warning if ($db->getErrorNum()) { JError::raiseWarning( 500, $db->stderr(true) ); } return $rows; }
  • 43. /** * Function to display rating and reviews via views * @param array $params An object containing the module parameters * @access public */ function renderReviews(&$reviews, &$params) { //variable to store db value of a particular record link to open in detailed view $link = JRoute::_('index.php?option=com_reviews&id='.$reviews->id.'&task=view'); //call template view for display require(JModuleHelper::getLayoutPath('mod_reviews' , 'reviews')); } } ?> This component doesn’t exists in the system but we have planned it for future use or next demo of component development.
  • 44. <?php // no direct access defined( '_JEXEC' ) or die( 'Restricted access' ); //print user reviews //echo $reviews; foreach($rows as $row) { modReviewsHelper::renderReviews($row, $params); } ?>
  • 45. <?php // no direct access defined( '_JEXEC' ) or die( 'Restricted access' ); ?> <table width="95%"> <tr><td> <strong><?php echo ucwords(strtolower($reviews->name)); ?></strong> <br /> <span style="font-size:9px; margin-top:-5px;"> <?php echo ucwords(strtolower($reviews->city));?></span><br /> </td> </tr> <tr> <td><?php echo wordwrap($reviews->feedback,130, "<br />n");?></td> </tr> </table>
  • 47. Get your XAMP, LAMP, MAMP or WAMP environment ready  Install and experiment Joomla! Locally  Checkout online references  Get a book  Visit Joomla! JED, Forums and user groups  Help each other and learn from experiences
  • 48. I look forward to learn and share more with you in future too.  I can be reached easily at my blog www.vishwashgaur.com and/or using twitter @vishwashgaur
  • 49. XAMP: http://www.apachefriends.org/en/xampp.html  Joomla!: http://www.joomla.org/  JED: http://extensions.joomla.org/  Joomla! Forum: http://forum.joomla.org/  Joomla! Magazine: http://magazine.joomla.org/authors/itemlist/user/65-Nicholas-G-Antimisiaris  Joomla documentation: http://docs.joomla.org/  Joomla 2.5 essential training: http://www.lynda.com/Joomla-tutorials/Joomla-Essential-Training/95699-2.html  Joomla! For beginners guide 2012: http://www.danconia.com/joomla-for-beginners-guide-2012.html  Joomla! Developers guide: http://cocoate.com/sites/cocoate.com/files/private/jdev.pdf

Editor's Notes

  • #2: Hi, I am Vishwash Gaur. Today, I am going to present a beginner series webinar on the topic of Component and Module development in Joomla 2.5
  • #3: There would be an added benefit if you have downloaded, installed and used Joomla! a little bit in prior.In reducing the procedural code issues i.e. lack of code reusability, higher debugging time and more