Simple module Development in Joomla! 2.5

28,637 views

Published on

This presentation covers developing a simple module for Joomla! 2.5.

Published in: Technology
9 Comments
9 Likes
Statistics
Notes
No Downloads
Views
Total views
28,637
On SlideShare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
928
Comments
9
Likes
9
Embeds 0
No embeds

No notes for slide
  • 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
  • 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
  • Simple module Development in Joomla! 2.5

    1. 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. 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. 3. Hands on workshop todevelop a basic Joomla!Module and component
    4. 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. 5.  modules>mod_reviews ◦ mod_reviews.php ◦ mod_reviews.xml ◦ helper.php ◦ index.html ◦ tmpl/default.php ◦ tmpl/index.html
    6. 6. <?php//license details here// no direct accessdefined( _JEXEC ) or die( Restricted access );// Include the syndicate functions only oncerequire_once( dirname(__FILE__).DS.helper.php );//load helper class and function$reviews = modReviewsHelper::getReviews( $params );//load the layout file from template viewsrequire( JModuleHelper::getLayoutPath( mod_reviews ) );?>
    7. 7. // no direct accessdefined( _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. 8. // Include the syndicate functions only oncerequire_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. 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. 10. //load the layout file from template viewsrequire( JModuleHelper::getLayoutPath( mod_reviews ) );This line includes the template to display the output.
    11. 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. 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.
    13. 13. <name>Reviews</name><author>Vishwash Gaur</author><version>2.5.0</version><description>An review module.</description>
    14. 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. 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. 16. <?php//license details hereclass 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. 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. 18. <?php// no direct accessdefined( _JEXEC ) or die( Restricted access );//print user reviewsecho $reviews;?>
    19. 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. 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
    21. 21. Go tot extensionmanager
    22. 22. Click on thediscover buttonto find newlydevelopedextensions
    23. 23. If your programming iscorrect, it will find your newlydeveloped extension.Select the extension and clickon install button to setup theextension.
    24. 24.  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.
    25. 25. Go to module managerand click on “New”button
    26. 26. Select your newlydeveloped module
    27. 27. Define moduleposition in activetemplate and setother parameters andpages to display themodule.I give it position 6 inBeez_20 template.
    28. 28. Module successfullysaved, now move tofront-end to check this.
    29. 29. You cansee userreviewhere
    30. 30.  I can’t see the module ◦ Check if you have selected correct position in the active template
    31. 31.  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!
    32. 32.  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
    33. 33. Create table and addfields in the database.Note: Ideally, it is thepart of component.
    34. 34. I have done some entries in the DB directlyfor the demo purpose. It should happenvia a back-end component in realenvironment.
    35. 35.  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
    36. 36. <?php//license details here// no direct accessdefined( _JEXEC ) or die( Restricted access );// Include the syndicate functions only oncerequire_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 viewsrequire( JModuleHelper::getLayoutPath( mod_reviews ) );?>
    37. 37. <?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>
    38. 38. <?php//license details hereclass modReviewsHelper{ /** * Retrieves the reviews * * @param array $params An object containing the module parameters * @access public */ function getReviews( $params ) { return I am a happy user!; }}?>
    39. 39. <?php//license details hereclass 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; }
    40. 40. /** * 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.
    41. 41. <?php// no direct accessdefined( _JEXEC ) or die( Restricted access );//print user reviews//echo $reviews;foreach($rows as $row){ modReviewsHelper::renderReviews($row, $params);}?>
    42. 42. <?php// no direct accessdefined( _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>
    43. 43. Dynamicrecords from DB
    44. 44.  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
    45. 45.  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
    46. 46.  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

    ×