致命错误:TableDisplayOptions :: load()的声明必须与JTableInterface :: load()的声明兼容

时间:2014-06-27 07:31:57

标签: php joomla3.0

我正在研究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

?>

我无法弄清楚,我试图在不同的论坛找到解决方案,但无济于事。有人可以帮我解决这个问题吗?感谢。

1 个答案:

答案 0 :(得分:1)

您的班级TableDisplayOptions实现了接口JTableInterface(通过JTable类,TableDisplayOptions扩展了该类。此接口使用某些参数声明方法load。因为它是一个接口,你必须接受与接口定义的相同的参数。

由于JTable类已经实现了界面,只需将TableDisplayOptions::load()更改为接受JTable::load()所有参数,并将其传递给父级方法。