Search code examples
phpdatabasejoomlamodulejoomla2.5

Joomla 2.5 hello world module development


I am new in Joomla 2.5 module development so I read This tutorial and copied and pasted everything without change, when I installed everything worked fine in server side but at the front end it showed this errors:

1) Strict Standards: Non-static method modUserDataHelper::getData() should not be called statically in C:\xampp\htdocs\joomla\modules\mod_userdata\mod_userdata.php on line 16

2) Strict Standards: Only variables should be assigned by reference in C:\xampp\htdocs\joomla\modules\mod_userdata\helper.php on line 24

so can you tell me what is wrong with my code?

Files:

mod_userdata.xml
mod_userdata.php
helper.php
index.html
tmpl/default.php
tmpl/index.html

mod_userdata.xml

<?xml version="1.0" encoding="UTF-8"?>
<extension type="module" version="1.7" client="site" method="upgrade">
 <name>User Data Module</name>
 <author>Minitek.gr</author>
 <creationDate>03/08/2011</creationDate>
 <copyright>Copyright (C) 2011. All rights reserved.</copyright>
 <license>http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL</license>
 <authorEmail>your_email</authorEmail>
 <authorUrl>www.minitek.gr</authorUrl>
 <version>1.7.1</version>
 <description>Users Data Module</description>
 <languages>
 </languages>
 <files>
  <filename module="mod_userdata">mod_userdata.php</filename>
  <filename>mod_userdata.xml</filename>
  <filename>helper.php</filename>
  <filename>index.html</filename>
  <folder>tmpl</folder>
 </files>
 <config>
  <fields name="params">
   <fieldset name="basic">
    <field name="moduleclass_sfx" type="text" default="" label="Module Class Suffix" description="Suffix for individual css styling" />
    <field name="limit" type="text" default="10" label="Limit Displayed Users" description="Limit Displayed Users" />
    <field name="user_id" type="radio" default="1" label="Display user ID" description="Display user ID">
     <option value="0">JNO</option>
     <option value="1">JYES</option>
    </field>
    <field name="user_name" type="radio" default="1" label="Display Name" description="Display Name">
     <option value="0">JNO</option>
     <option value="1">JYES</option>
    </field>
    <field name="user_username" type="radio" default="1" label="Display Username" description="Display Username">
     <option value="0">JNO</option>
     <option value="1">JYES</option>
    </field>
   </fieldset>
  </fields>
 </config>
</extension>

mod_userdata.php

<?php
/**
 * @package Joomla.Site
 * @subpackage  mod_userdata
 * @copyright   Copyright (C) 2005 - 2011 Open Source Matters, Inc. All rights reserved.
 * @license GNU General Public License version 2 or later; see LICENSE.txt
 */

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

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

// Get the user data
$list   = modUserDataHelper::getData($params);  // <-- ERROR IS HERE!!!

// Get the layout
require JModuleHelper::getLayoutPath('mod_userdata', $params->get('layout', 'default'));

helper.php

<?php
/**
 * @package     Joomla.Site
 * @subpackage  mod_userdata
 * @copyright   Copyright (C) 2005 - 2011 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

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

class modUserDataHelper
{
  function getData( &$params )
  {

   // Database query        
   $list = array();         
   $query = " SELECT id, name, username "               
   ." FROM #__users "
   ." WHERE block=0 "               
   ." ORDER BY id DESC "
   ." LIMIT " . $params->get( 'limit' );                
   $db =& JFactory::getDBO();   // <-- ERROR IS HERE!!!
   $db->setQuery( $query );     
   $rows = $db->loadObjectList();

   // Get list items
   if ($rows!=null)
   {
    $i=0;
    foreach ($rows as $row) 
    {               
     $list["users"][$i]["id"]=$row->id;
     $list["users"][$i]["name"]=$row->name;
     $list["users"][$i]["username"]=$row->username;
     $i++;      
    }
    return $list;
   }

  }
}

tmpl/default.php

<?php
/**
 * @package     Joomla.Site
 * @subpackage  mod_userdata
 * @copyright   Copyright (C) 2005 - 2011 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

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

<div class="moduletable<?php echo $params->get( 'moduleclass_sfx' ) ?>">

 <ul>
  <?php for ($i=0;$i< sizeof($list["users"]); $i++) { ?>    

     <li>
      <?php if ($params->get( 'user_id' )) { ?>
         <span><?php echo $list["users"][$i]["id"];?></span>
        <?php } ?>
        <?php if ($params->get( 'user_name' )) { ?>
         <span><?php echo $list["users"][$i]["name"];?></span>
        <?php } ?>
        <?php if ($params->get( 'user_username' )) { ?>
         <span><?php echo $list["users"][$i]["username"];?></span>
        <?php } ?>
     </li>

    <?php } ?>
 </ul>

</div>

Solution

  • You have "strict standards" turned on which is throwing some errors due to the code being written for (likely) php 5.3 rather than 5.4. Looks like an object is being instantiated or assigned by reference (&new MyClass as opposed to new MyClass) and modUserDataHelper::getData(), which is not defined as static is being called as though it were static.

    There are two things you can do: turn off strict standards (which is the code equivalent of sweeping dust under a rug) or fix the bad code. In this case, calling modUserDataHelper::getData() is bad form. It needs to be called from an instantiated object, not from a static context. Create an instance of it ($tempObj or something like that) then call the method from that object ($tempObj->getData();).