我正在研究Joomla 3.3.1和一个名为JTAG成员目录的组件(有点旧版本)。当我尝试输入组件的Display Options
部分时,我遇到以下错误:
Fatal error: Declaration of TableDisplayOptions::load() must be compatible with that of JTableInterface::load() in /home1/nm534555/public_html/mywebsite.org/administrator/components/com_jtagmembersdirectory/tables/displayoptions.php on line 139
当我打开这个文件并找到第139行时,我只能看到右括号}
,如下面的代码所示(整个displayoptions.php文件):
<?php
defined('_JEXEC') or die('Restricted access');
class TableDisplayOptions extends JTable
{
var $id;
var $display_phone_no;
var $display_facebook_page;
var $display_twitter_page;
var $display_in_frontend;
var $display_nr_email;
var $display_nr_country;
var $display_nr_city;
var $display_nr_state;
var $display_nr_phone_no;
var $display_nr_facebook;
var $display_nr_twitter;
//end
/**
* Contains user data from joomla users table
*
* @var array $userdata
*/
var $display;
/**
* Collection of custom fields objects. If custom fields are less than allowed array is filled with TableCustomFields objects
*
* @var array Collection of custom fields rows
*/
var $custom_fields;
/**
* Number of custom fields allowed.
*/
const CF_ALLOWED = 10;
function __construct(&$db)
{
parent::__construct('#__jtmb_display_options', 'id', $db);
// $this->_retrieveOptions();
$this->_retrieveCustomFields();
}
function load($oid=null)
{
parent::load($oid);
$this->_retrieveCustomFields();
}
function bind($from, $ignore = array())
{
//checkboxes workaround
// if(!isset($from['display_last_name'])) $from['display_last_name'] = 0;
if(!isset($from['display_city'])) $from['display_city'] = 0;
if(!isset($from['display_phone_no'])) $from['display_phone_no'] = 0;
if(!isset($from['display_facebook_page'])) $from['display_facebook_page'] = 0;
if(!isset($from['display_twitter_page'])) $from['display_twitter_page'] = 0;
if(!isset($from['cat_id'])) $from['cat_id'] = 0;
//added by Pratik Munot
if(!isset($from['display_nr_email'])) $from['display_nr_email'] = 0;
if(!isset($from['display_nr_country'])) $from['display_nr_country'] = 0;
if(!isset($from['display_nr_city'])) $from['display_nr_city'] = 0;
if(!isset($from['display_nr_state'])) $from['display_nr_state'] = 0;
if(!isset($from['display_nr_phone_no'])) $from['display_nr_phone_no'] = 0;
if(!isset($from['display_nr_facebook'])) $from['display_nr_facebook'] = 0;
if(!isset($from['display_nr_twitter'])) $from['display_nr_twitter'] = 0;
//end
if(!isset($from['display_gallery'])) $from['display_gallery'] = 0;
if(isset($from['auto_sync'])) $from['auto_sync'] = 1;
parent::bind($from, $ignore);
$this->_retrieveCustomFields();
}
function _retrieveOptions()
{
$query = 'SELECT * FROM `#__jtmb_display_options';
$this->_db->setQuery($query);
$this->display = $this->_db->loadObject();
}
function _retrieveCustomFields()
{
// $fields = array();
// $k = $this->_tbl_key;
// if ($this->$k)
// {
$query = 'SELECT field_name, field_label, display_nr_cf FROM #__jtmb_custom_fields LIMIT '.self::CF_ALLOWED;
$this->_db->setQuery($query);
$fields = $this->_db->loadObjectList();
//}
if (count($fields) < self::CF_ALLOWED)
{
require_once 'customfields.php';
while (count($fields) < self::CF_ALLOWED)
{
$fields[] = new TableCustomFields($this->_db);
}
}
$this->custom_fields = $fields;
}
function delete()
{
$query = 'DELETE FROM `#__jtmb_display_options';
$this->_db->setQuery($query);
$this->_db->loadObject();
}
} -----------------------------> This is line 139
?>
我无法弄清楚,我试图在不同的论坛找到解决方案,但无济于事。有人可以帮我解决这个问题吗?感谢。
答案 0 :(得分:1)
您的班级TableDisplayOptions
实现了接口JTableInterface
(通过JTable
类,TableDisplayOptions
扩展了该类。此接口使用某些参数声明方法load
。因为它是一个接口,你必须接受与接口定义的相同的参数。
由于JTable
类已经实现了界面,只需将TableDisplayOptions::load()
更改为接受JTable::load()
所有参数,并将其传递给父级方法。