joomla 1.6,组件:如何在2个表与m2m之间链接的组件和编辑页面中的显示列表?

时间:2011-04-01 10:35:07

标签: joomla joomla-extensions

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

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

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 for A和B(created from the hello world component)创建了基本的创建,编辑页面和删除操作。从hellow world教程我们可以清楚地了解文件和文件夹结构以及组件的代码,但是在教程中只有1个表,但是这里有2个表和新的id id表。

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

在编辑或新页面

  1. 我们可以填写名称的详细信息块。(从教程中完成)

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

  3. 任何想法怎么做?

    谢谢和最诚挚的朋友,

    Rithy

1 个答案:

答案 0 :(得分: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();
    }
}