Joomla开发 - 表文件夹和字段文件夹

时间:2012-02-17 11:55:26

标签: php joomla

我已经完成了http://docs.joomla.org/Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!1.7_-_Part_06的组件开发教程。

虽然代码很棒 - 我觉得他们遗漏了一些解释。我的主要问题是每个文件夹应包含什么 - 以及何时应该使用它?

我感到困惑的是,我可以删除字段代码 - 而我的前端仍然可以像它不存在一样工作。那么 - 它在做什么?

第二 - 表文件中的代码似乎只是将构造函数调用到父类。怎么能得到我想要的信息?是因为当我们调用getTable()时JTable正在初始化吗?

这个例子似乎只是显示我们是否需要来自数据库的一条记录...如果我想列出它们的话 - 我还会使用相同的表格文件???

对不起 - 我只是想绕过这个。我最大的问题是我经常在他们的文档中摸不着头......感谢任何建议/解释!

达人

2 个答案:

答案 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

在这里:

https://docs.joomla.org/Using_the_JTable_class