2012-02-17 90 views
0

我已经通过了http://docs.joomla.org/Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!1.7_-_Part_06组件开发教程。Joomla开发 - 表文件夹和字段文件夹

尽管代码非常棒 - 我觉得他们会留下一些解释。我的主要问题是每个文件夹应包含哪些内容?何时使用?

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

其次 - 表格文件中的代码似乎将构造函数调用到父类。这怎么能得到我正在寻找的信息?是否因为当我们调用getTable()时JTable被初始化?

这个例子似乎只显示如果我们想从数据库的一个记录......如果我想将它们全部列出什么 - 我还会使用相同的表文件???

对不起 - 我只是试图包裹我的头。我最大的问题是我经常留下他们的文档头...感谢您的任何建议/解释!

达人

+0

好了 - 所以我做了一些更多的挖......这似乎表多用一个使用从表中记录?含义 - 当你知道身份证?另外 - 你有没有在你的表文件夹中有多个文件?可能如果你的组件中有多个表? – dingerkingh 2012-02-17 12:08:37

+0

这不是一个解决方案,但是在学习如何修改joomla方面帮了我很大忙(鉴于他们在这个领域的文档并不真正有帮助,v.1.5的Component教程只是一个没有db交互的“hello world”页面)是看看其他的扩展;下载一些(可能最接近你想要做的),看看它们是如何工作的;最终,您将通过这种方式了解更多信息,而不是阅读一个理论上的,苗条的和静态的页面 – 2012-02-17 12:28:59

+0

好主意。感谢您的建议。 – dingerkingh 2012-02-17 12:56:00

回答

1

我同意的记录可能会有点混乱。按照Damien Pirsy的观点,研究其他扩展可能会非常有用。根据我的经验,其他扩展程序往往会自由一点,而不会遵循Joomla标准(例如社区生成器)。我的建议是查看内置组件,例如com_contacts和com_weblinks。

删除域代码实际上并不会破坏前端。这是因为(至少在第6部分)该字段仅用于后端(管理员)。在字段代码的说明下面有一行说:

“您可以在helloworld项的菜单管理器部分中看到此更改的结果。”

你会意识到,删除域代码会中断菜单项的编辑。

当getTable()被调用时,它会创建表类的新实例。你的表代码可以很短,因为父类(JTable)将负责加载/保存等.JTable只需要知道你的表名是什么和你的主键(id)的名称。您可以通过在表中调用构造函数传递此数据:

parent::__construct('#__helloworld', 'id', $db); 

如果你想从数据库装载物品的清单,JTable中一般不使用。请参阅JModelList。见Weblinks use of ModelList

是的,在你的表格文件夹中的多个文件将,如果你有一个以上的表是有用的。

0

Fields文件夹实际上包含任何特定自定义字段的代码,这些字段在管理端需要。当我们在管理端制作表单时,可能会有一些表单中的字段显示一些期望的结果。

让我们说 - 的形式,你需要一个字段,将显示所有的下一个选择列表中的Joomla用户。在这种情况下,你可以让TYPE =“anyUniqueName”的XML领域,obviuosly这个XML是“形式”的“模型”

<field name="j_users" type="anyUniqueName" label="JOOMLA_USERS" /> 

现在,名anyUniqueName.php文件将在构建目录下'models'的'fields'目录。它的类将是 -

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

相关问题