0

我是 Joomla 的新手!也是组件开发的新手。

我想创建一个能够在 2 个表之间链接的组件。

joomla v 1.6:

表的结构:

CREATE TABLE `#__a` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;

B表的结构:

CREATE TABLE `#__b` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;

AB表的结构:

CREATE TABLE `#__ab` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`id_a` int(11) NOT NULL,
`id_b` int(11) NOT NULL,
PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;

假设我们已经使用 MVC 为 A 和 B(从 hello world 组件创建)创建了基本的创建、编辑页面和删除操作。从hello world教程中我们可以清楚地知道文件和文件夹结构以及组件的代码,但是在教程中只有1个表,但这里有2个表和新的id id表。

所以这意味着在我们在这里开发的组件中,有 2 个子菜单。

在编辑或新页面中

  1. 有一个细节块,我们可以填写名称。(从教程完成)

  2. 有B链接块,我们可以选择B(选择选项,可以选择超过1个)添加到A中,并显示我们添加的B列表。在列表中的每个项目中,它都有一个删除按钮或链接,用于取消 A 和 B 之间的链接。

请问有什么办法吗?

感谢和最好的问候朋友,

里西

4

1 回答 1

0

首先,您需要一些将结果保存在参考表中的逻辑,第二部分是检索要在用户端显示的数据。你需要一个模型:

class CompControllerA extends JControllerForm { 
   // Here put your save code
   //....
   function save() {
     $formData = JRequest::getVar('jform');
     $bRecords = $formData['bRecords'];
     $aRecordId = $formData['id'];
     $referenceModel->delete($aRecordId); // Delete all records that has same ID as current record
     foreach($bRecords as $row) {
        $data['id']=0;
        $data['a_id']=$aRecordId;
        $data['b_id']=(int)$row;
        $bModel->save($data);
     }

     // dont forget to call parent method
     parent::save();
   }
}

下一步是当您创建 for 时,只需从参考表中获取结果并在表单中显示正确的结果。

这是我构建的组件的一些示例代码。

class IbookModelExtra extends JModelAdmin
{
    protected function loadFormData()
    {
        $db =& $this->getDbo();
        $query = $db->getQuery(true);
        $query->select('b_id')->from('#__table_a_b')->where('a_id='.$data->id);
        $db->setQuery((string)$query);
        $data->b = $db->loadResultArray();
    }
} 
于 2011-07-06T22:27:24.807 回答