我应该在几周前就发布这篇博客,它反映了6月1日至6月10日的工作。主要任务是实现 [https://community.joomla.net.cn/gsoc2009/gartheeban-ganneshapillai/831-architecture-design-taxonomy-extension-project.html] 在 Joomla! 库中的架构。尽管有关于最终结果的明确规格 [https://community.joomla.net.cn/gsoc2009/gartheeban-ganneshapillai/862-taxonomy-extension-design-spec-and-api.html],但由于 Joomla! 采用了独特的面向对象设计,高度倾向于工厂模式,因此并不直接。
第一个难题是遵循 Joomla! 风格,即使用 JTable 进行 CURD 操作,同时确保性能和功能不会受其限制。由于目标是 Joomla! 1.6,而且没有可用的明确文档,我选择以 JUser(Joomla! 核心库类)为参考,因为它与 Taxonomy 框架暴露的 JTaxonomyTree 和 JTaxonomyLeaf 两个主要类平行。这篇文章讨论了库的设计。
我与导师们讨论了将分类库文件夹放在哪里,最终决定放在 libraries/joomla/taxonomy 下,尽管如果认为更合适,可以将其移至 libraries/taxonomy。< p>
- 最新代码可以在这里查看:http://labs.joomla.org/svn/labs/playground/people/garthee/trunk/
- 演示可以在(不必与 SVN 中的版本平行)这里尝试:http://gsoc.theebgar.net/administrator/index.php?option=com_taxonomy (用户名:admin,密码 - 你为什么不发邮件到?)
JTaxonomy
在根 JTaxonomy 类中,它扩展了 JClass,并暴露了完整的功能集。它以单例形式使用,并且必须按如下方式调用:
jimport('joomla.taxonomy.taxonomy');
$taxonomy =&JTaxonomy::getInstance();
这个类提供了以下方法集
1. 树相关
&getTreeList($extension = null)
&getTrees($extension = null)
&getTree($id = 0, $options = null)
首先返回一个以树ID为键的树名称数组,其次返回一个以树ID为键的树对象数组,最后给定一个树ID,返回对应的树对象。它们最终通过JTaxonomyTree路由,该类为树提供了实现。
2. 叶子相关
&getLeafList($options = null)
&getLeaves($options = null)
&getLeaf($id = 0, $options = null)
&getLeafHierarchy($tid, $options = null)
最后一个函数暴露了一个在辅助类中实现的重要功能。它构建了给定树的完整叶子层次结构。
3. 映射相关
&getMap()
返回一个TaxonomyMap对象,该对象提供了处理叶子映射的方法。
JTaxonomyTree
JTaxonomyTree继承自JClass,主要处理通过其JTable子类JTabeTaxTree类路由的CRUD操作。
JTaxonomyLeaf
JTaxonomyLeaf继承自JClass,主要处理通过其JTable子类JTabeTaxLeaf类路由的CRUD操作。
JTaxonomyMap
这个类通过标准方法处理对象-叶子映射,这是分类框架的基本操作。随着com_contentPlus(一个支持分类的内容组件)的实施,预计其实现会根据要求的变化而变化。这个类和JHTMLTaxonomy一起,预计将为任何组件的集成提供完整的表单支持。
总结
尽管Taxonomy Library的功能集目前完全确定,但它可能会根据组件和插件的要求而发展。因此,这里仅提供参考和反馈。在下一篇博客中,我将讨论我们在性能、标准模式和泛型之间妥协的困境以及我们采取的步骤。