2012-08-06 152 views
1

我是新的的Joomla 2.5模塊開發,所以我讀This教程和複製和粘貼一切都沒有改變,當我安裝一切都在服務器端運行良好,但在前端這表明這樣的錯誤:的Joomla 2.5的hello world模塊開發

1)嚴格的標準:非靜態方法modUserDataHelper ::的getData()不應該被靜態地用C稱爲:\ XAMPP \ htdocs中\的Joomla \模塊\ mod_userdata \ mod_userdata.php第16行

2)嚴格標準:只有變量應該在第24行的C:\ xampp \ htdocs \ joomla \ modules \ mod_userdata \ helper.php中通過引用進行分配。

所以你能告訴我我的代碼有什麼問題嗎?

文件:

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> 
+0

你有「嚴格的標準」打開,這是拋出一些錯誤,因爲代碼被寫入(可能)PHP 5.3而不是5.4。看起來好像一個對象正在被實例化或者被引用('new new MyClass',而不是'new MyClass')和'modUserDataHelper :: getData()',沒有被定義爲'static'被調用,就好像它是' static'。 – Matt 2012-08-06 18:31:34

+0

等等該怎麼辦?我不能讓它在我的PHP版本上工作,或者我應該改變什麼? – Irakli 2012-08-06 18:32:43

+0

您可以做兩件事:關閉嚴格的標準(這是代碼在地毯下掃除灰塵的代碼)或修復錯誤的代碼。在這種情況下,調用'modUserDataHelper :: getData()'是不好的形式。它需要從一個實例化對象中調用,而不是從'static'上下文中調用。創建一個實例('$ tempObj'或類似的東西),然後調用該對象的方法('$ tempObj-> getData();')。 – Matt 2012-08-06 18:34:44

回答

3

你必須「嚴格標準」接通相應地投擲由於代碼正在爲(可能)PHP 5.3,而不是5.4寫了一些錯誤。看起來像一個對象被實例化或通過引用(&new MyClass相對於new MyClass)和modUserDataHelper::getData(),以靜態正在被呼叫,就好像是static未限定分配。

有兩件事情可以做:關閉嚴格的標準(這是代碼相當於掃地除塵地毯下的),或者修復該錯誤代碼。在這種情況下,調用modUserDataHelper::getData()是不好的形式。它需要從實例化對象中調用,而不是從靜態上下文中調用。創建它的一個實例($tempObj或類似的東西),然後調用該對象的方法($tempObj->getData();)。