Php Joomla 2.5 hello world模块开发
我是Joomla 2.5模块开发新手,所以我阅读了教程,复制并粘贴了所有内容,没有任何更改,当我在服务器端安装时,所有内容都工作正常,但在前端显示了以下错误: 1) 严格的标准:不应在第16行的C:\xampp\htdocs\joomla\modules\mod_userdata\mod_userdata.php中静态调用非静态方法modUserDataHelper::getData() 2) 严格的标准:在第24行的C:\xampp\htdocs\joomla\modules\mod\u userdata\helper.php中,只能通过引用来分配变量 你能告诉我我的代码有什么问题吗 档案:Php Joomla 2.5 hello world模块开发,php,database,joomla,module,joomla2.5,Php,Database,Joomla,Module,Joomla2.5,我是Joomla 2.5模块开发新手,所以我阅读了教程,复制并粘贴了所有内容,没有任何更改,当我在服务器端安装时,所有内容都工作正常,但在前端显示了以下错误: 1) 严格的标准:不应在第16行的C:\xampp\htdocs\joomla\modules\mod_userdata\mod_userdata.php中静态调用非静态方法modUserDataHelper::getData() 2) 严格的标准:在第24行的C:\xampp\htdocs\joomla\modules\mod\u us
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>
用户数据模块
Minitek.gr
03/08/2011
版权所有(C)2011。版权所有。
http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
你的电子邮件
www.minitek.gr
1.7.1
用户数据模块
mod_userdata.php
mod_userdata.xml
helper.php
index.html
tmpl
JNO
JYES
JNO
JYES
JNO
JYES
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'));
您打开了“严格标准”,这会抛出一些错误,因为代码是为(可能)PHP5.3而不是5.4编写的。似乎正在通过引用实例化或分配对象(&new MyClass
,而不是new MyClass
),并且调用未定义为静态的modUserDataHelper::getData()
,就好像调用了静态的对象一样
您可以做两件事:关闭严格的标准(这相当于在地毯下扫灰尘的代码)或修复错误代码。在本例中,调用modUserDataHelper::getData()
是一种错误的形式。它需要从实例化对象调用,而不是从静态上下文调用。创建它的一个实例($tempObj
或类似的东西),然后从该对象调用该方法($tempObj->getData();
)。您启用了“严格标准”,这会引发一些错误,因为代码是为(可能是)PHP5.3而不是5.4编写的。看起来像是一个对象正在被引用实例化或赋值(&new MyClass
,而不是new MyClass
)和modUserDataHelper::getData()
,它没有定义为static
,被调用时就好像它是static
,那么该怎么办呢?我不能让它在我的php版本上工作,或者我应该改变什么?有两件事你可以做:关闭严格的标准(这相当于在地毯下扫灰尘的代码)或者修复坏代码。在本例中,调用modUserDataHelper::getData()
是一种错误的形式。它需要从实例化对象调用,而不是从静态
上下文调用。创建它的一个实例($tempObj
或类似的东西),然后从该对象调用该方法($tempObj->getData();
)。非常感谢我修复了它。我所做的是:[code]$tempObj=newmoduserdatahelper$list=$tempObj->getData($params);[/code]并更改了[code]$db=&JFactory::getDBO();[/code]到[code]$db=JFactory::getDBO();[/code]我理解第一个问题是什么,但是你能解释一下为什么=适用于这个案例而=&不适用吗?附:如何更改代码背景颜色?回答有关=&
的问题。至于更改HTML输出的背景色(?),这可以通过级联样式表或内联css来完成。
<?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;
}
}
}
<?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>