Thursday, October 18, 2012

J1.7 : How to create a database driven Joomla module

How to create a database driven Joomla module

Wednesday, 03 August 2011 12:46 In this tutorial we will create a fresh new module for Joomla 1.7 that is driven by a MySQL database.
The process is very fast and easy and if you follow the guidelines below you will get the hang of it very quickly.

The features:

In this module we will use the table jos_users to retrieve the id, name and username of the registered users.

In the module parameters we will be able to control the user data we want to display.

Step 1

The file structure


Create the file structure that you see below, using your favorite file editor.
Tip: I am using a great free text / code editor called HTML-Kit. You can download it for free here.
1.mod_userdata.xml
2.mod_userdata.php
3.helper.php
4.index.html
5.tmpl/default.php
6.tmpl/index.html
This is the most basic file structure for a database driven module.

Step 2

The files


Now let's populate our files.
1. Open the file mod_userdata.xml and insert this code
01.<?xml version="1.0" encoding="UTF-8"?>
02.<extension type="module" version="1.7" client="site" method="upgrade">
03.<name>User Data Module</name>
04.<author>Minitek.gr</author>
05.<creationDate>03/08/2011</creationDate>
06.<copyright>Copyright (C) 2011. All rights reserved.</copyright>
07.<license>http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL</license>
08.<authorEmail>your_email</authorEmail>
09.<authorUrl>www.minitek.gr</authorUrl>
10.<version>1.7.1</version>
11.<description>Users Data Module</description>
12.<languages>
13.</languages>
14.<files>
15.<filename module="mod_userdata">mod_userdata.php</filename>
16.<filename>mod_userdata.xml</filename>
17.<filename>helper.php</filename>
18.<filename>index.html</filename>
19.<folder>tmpl</folder>
20.</files>
21.<config>
22.<fields name="params">
23.<fieldset name="basic">
24.<field name="moduleclass_sfx" type="text" default="" label="Module Class Suffix" description="Suffix for individual css styling" />
25.<field name="limit" type="text" default="10" label="Limit Displayed Users" description="Limit Displayed Users" />
26.<field name="user_id" type="radio" default="1" label="Display user ID" description="Display user ID">
27.<option value="0">JNO</option>
28.<option value="1">JYES</option>
29.</field>
30.<field name="user_name" type="radio" default="1" label="Display Name" description="Display Name">
31.<option value="0">JNO</option>
32.<option value="1">JYES</option>
33.</field>
34.<field name="user_username" type="radio" default="1" label="Display Username" description="Display Username">
35.<option value="0">JNO</option>
36.<option value="1">JYES</option>
37.</field>
38.</fieldset>
39.</fields>
40.</config>
41.</extension>
This is the typical structure of a module xml file for Joomla 1.7.

2. Open the file mod_userdata.php and insert this code
01.<?php
02./**
03.* @package Joomla.Site
04.* @subpackage  mod_userdata
05.* @copyright   Copyright (C) 2005 - 2011 Open Source Matters, Inc. All rights reserved.
06.* @license GNU General Public License version 2 or later; see LICENSE.txt
07.*/
08. 
09.// no direct access
10.defined('_JEXEC') or die;
11. 
12.// Include the syndicate functions only once
13.require_once dirname(__FILE__).'/helper.php';
14. 
15.// Get the user data
16.$list   = modUserDataHelper::getData($params);
17. 
18.// Get the layout
19.require JModuleHelper::getLayoutPath('mod_userdata', $params->get('layout', 'default'));
3. Now let's move on to the file helper.php. This is the file that retrieves the data from the MySQL table.
Open the file helper.php and insert this code
01.<?php
02./**
03.* @package     Joomla.Site
04.* @subpackage  mod_userdata
05.* @copyright   Copyright (C) 2005 - 2011 Open Source Matters, Inc. All rights reserved.
06.* @license     GNU General Public License version 2 or later; see LICENSE.txt
07.*/
08. 
09.// no direct access
10.defined('_JEXEC') or die;
11. 
12.class modUserDataHelper
13.{
14.function getData( &$params )
15.{
16. 
17.// Database query       
18.$list = array();        
19.$query = " SELECT id, name, username "              
20.." FROM #__users "
21.." WHERE block=0 "              
22.." ORDER BY id DESC "
23.." LIMIT " . $params->get( 'limit' );            
24.$db =& JFactory::getDBO();
25.$db->setQuery( $query );     
26.$rows = $db->loadObjectList();
27. 
28.// Get list items
29.if ($rows!=null)
30.{
31.$i=0;
32.foreach ($rows as $row)
33.{              
34.$list["users"][$i]["id"]=$row->id;
35.$list["users"][$i]["name"]=$row->name;
36.$list["users"][$i]["username"]=$row->username;
37.$i++;     
38.}
39.return $list;
40.}
41. 
42.}
43.}
In this file, we firstly request the id, name and username from the table jos_users where the users are not blocked (block=0). Then we order the results by id and finally we limit the results to the limit that is defined in the module backend parameters. Let's move on to our template file.

4. Our template file is responsible for displaying the results.
Open the file tmpl/default.php and insert this code
01.<?php
02./**
03.* @package     Joomla.Site
04.* @subpackage  mod_userdata
05.* @copyright   Copyright (C) 2005 - 2011 Open Source Matters, Inc. All rights reserved.
06.* @license     GNU General Public License version 2 or later; see LICENSE.txt
07.*/
08. 
09.// no direct access
10.defined('_JEXEC') or die; ?>
11. 
12.<div class="moduletable<?php echo $params->get( 'moduleclass_sfx' ) ?>">
13. 
14.<ul>
15.<?php for ($i=0;$i< sizeof($list["users"]); $i++) { ?>  
16. 
17.<li>
18.<?php if ($params->get( 'user_id' )) { ?>
19.<span><?php echo $list["users"][$i]["id"];?></span>
20.<?php } ?>
21.<?php if ($params->get( 'user_name' )) { ?>
22.<span><?php echo $list["users"][$i]["name"];?></span>
23.<?php } ?>
24.<?php if ($params->get( 'user_username' )) { ?>
25.<span><?php echo $list["users"][$i]["username"];?></span>
26.<?php } ?>
27.</li>
28. 
29.<?php } ?>
30.</ul>
31. 
32.</div>
5. Open the file index.html as well as the file tmpl/index.html and insert this code
1.<html><body bgcolor="#FFFFFF"></body></html>
This will prevent unauthorized directory browsing.
Now we are ready to pack our files and install the new module.

Step 3

Let's pack the files and install


Zip all the files we created in an archive called mod_userdata.zip. Now go to Joomla Administration -> Extension Manager and install the package. When the installation is complete, go to Module Manager, open the module, enable it and configure the parameters.
Go to frontend and check out what you have created! Have fun!

No comments:

Post a Comment