【问题标题】:Joomla 2.5 hello world module developmentJoomla 2.5 hello world 模块开发
【发布时间】:2012-08-03 18:01:04
【问题描述】:

我是 Joomla 2.5 模块开发的新手,所以我阅读了 This 教程并复制并粘贴了所有内容而没有更改,当我在服务器端安装一切正常但在前端显示此错误时:

1) 严格标准:非静态方法 modUserDataHelper::getData() 不应在第 16 行的 C:\xampp\htdocs\joomla\modules\mod_userdata\mod_userdata.php 中静态调用

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>

【问题讨论】:

  • 您打开了“严格标准”,由于代码是为(可能)php 5.3 而不是 5.4 编写的,因此会引发一些错误。看起来一个对象正在被实例化或通过引用分配(&amp;new MyClass,而不是new MyClass)和modUserDataHelper::getData(),它没有被定义为static,它被称为static
  • 那该怎么办?我不能让它在我的 php 版本上工作,或者我应该改变什么?
  • 您可以做两件事:关闭严格的标准(这相当于在地毯下扫尘的代码)或修复错误的代码。在这种情况下,调用modUserDataHelper::getData() 是不好的形式。它需要从实例化对象中调用,而不是从 static 上下文中调用。创建它的一个实例($tempObj 或类似的东西)然后从该对象调用方法($tempObj-&gt;getData();)。
  • 非常感谢我修复了它。我所做的是: [code]$tempObj = new modUserDataHelper; $list = $tempObj->getData($params);[/code] 并将 [code]$db =& JFactory::getDBO();[/code] 更改为 [code]$db = JFactory::getDBO() ;[/code] 我明白第一个问题是什么,但你能解释一下为什么 = 对这种情况有效而 =& 不是吗?附言如何更改代码bg颜色?
  • See this post on SO 回答您关于=&amp; 的问题。至于更改 HTML 输出的背景颜色(?),可以使用级联样式表或通过内联 css 完成。

标签: php database joomla module joomla2.5


【解决方案1】:

您启用了“严格标准”,这会引发一些错误,因为代码是为(可能)php 5.3 而不是 5.4 编写的。看起来一个对象正在通过引用(&amp;new MyClass 而不是new MyClass)和modUserDataHelper::getData()(未定义为静态)被实例化或分配,就像static 一样被调用。

您可以做两件事:关闭严格的标准(这相当于在地毯下扫尘的代码)或修复错误的代码。在这种情况下,调用modUserDataHelper::getData() 是不好的形式。它需要从实例化对象中调用,而不是从静态上下文中调用。创建它的一个实例($tempObj 或类似的东西),然后从该对象调用方法($tempObj-&gt;getData();)。

【讨论】:

    猜你喜欢
    • 2023-04-11
    • 2013-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    • 1970-01-01
    • 2012-10-05
    • 1970-01-01
    相关资源
    最近更新 更多