我已经完成了http://docs.joomla.org/Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!1.7_-_Part_06的组件开发教程。
虽然代码很棒 - 我觉得他们遗漏了一些解释。我的主要问题是每个文件夹应包含什么 - 以及何时应该使用它?
我感到困惑的是,我可以删除字段代码 - 而我的前端仍然可以像它不存在一样工作。那么 - 它在做什么?
第二 - 表文件中的代码似乎只是将构造函数调用到父类。怎么能得到我想要的信息?是因为当我们调用getTable()时JTable正在初始化吗?
这个例子似乎只是显示我们是否需要来自数据库的一条记录...如果我想列出它们的话 - 我还会使用相同的表格文件???
对不起 - 我只是想绕过这个。我最大的问题是我经常在他们的文档中摸不着头......感谢任何建议/解释!
达人
答案 0 :(得分:1)
我同意文档可能有点令人困惑。正如Damien Pirsy所说,查看其他扩展可能非常有用。根据我的经验,其他扩展倾向于自由式,而不是坚持使用Joomla标准(例如社区生成器)。我的建议是查看内置组件,例如com_contacts和com_weblinks。
删除字段代码实际上不会破坏前端。这是因为(至少在第6部分)该字段仅用于后端(管理员)。在现场代码的解释下有一条线说:
“您可以在helloworld项目的菜单管理器部分中看到此更改的结果。”
您将意识到删除字段代码会破坏菜单项的编辑。
当调用getTable()时,它将创建Table类的新实例。您的表代码可能非常短,因为父类(JTable)将负责加载/保存等.JTable只需要知道您的表名是什么以及主键(id)的名称。您可以在表构造函数中调用:
传递此数据parent::__construct('#__helloworld', 'id', $db);
如果您想从数据库加载项目列表,通常不使用JTable。而是看JModelList。请参阅Weblinks use of ModelList。
是的,如果您有多个表,则表文件夹中的多个文件将非常有用。
答案 1 :(得分:0)
Fields文件夹实际上包含管理员端所需的任何特定自定义字段的代码。当我们在管理端创建表单时,该表单中可能会有一些字段会显示一些所需的结果。
假设 - 在表单中,您需要一个字段来显示可选列表下的所有Joomla用户。在这种情况下,你可以创建type =“anyUniqueName”的XML字段,显然这个XML将位于'models'的'forms'目录下
<field name="j_users" type="anyUniqueName" label="JOOMLA_USERS" />
现在,将在'models'的'fields'目录下构建一个名为anyUniqueName.php的文件。它的课程将是 -
class JFormFieldAnyUniqueName extends JFormFieldList{
protected function getInput() {
$this->multiple=true;
return parent::getInput();
}
protected function getOptions() {
$options = array();
$this->multiple=true;
$db = JFactory::getDBO ();
$query = $db->getQuery(true);
$query->SELECT('id, user_name')
->FROM($db->quoteName('#__virtuemart_users'))
->ORDER('id');
$db->setQuery($query);
$values = $db->loadObjectList();
foreach ($values as $v) {
$options[] = JHtml::_('select.option', $v->id, vmText::_($v->user_name));
}
// Merge any additional options in the XML definition.
$options = array_merge(parent::getOptions(), $options);
return $options;
}
}
创建表文件夹以获取对JTable的访问权以读取,创建或操作内容。可在此处查看所有内容的说明:
https://docs.joomla.org/J1.5:Using_the_JTable_class
在这里: