我是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个子菜单。
在编辑或新页面
我们可以填写名称的详细信息块。(从教程中完成)
有B链接块,我们可以选择B(选择选项,可以选择多于1)添加到A 并显示我们添加的B列表。在列表中的每个项目中,它都有一个删除按钮或链接以取消A和B之间的链接。
任何想法怎么做?
谢谢和最诚挚的朋友,
Rithy
答案 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();
}
}