Joomla! 1.7 突出特点 - 批量处理
Elin Waring 最近在 Joomla! 社区门户上博客了关于即将在 Joomla! 1.7 中出现的部分功能,标题为 窥视 1.7。除了将框架和 CMS 分离之外,我认为(我可能有点偏颇)更好的变化之一是能够批量处理添加到框架中的项目。这是从 Joomla! 1.6 中省略的一个流行功能,它在 1.7 中的回归对用户和开发者都有益。
幕后故事
将批量处理集成到 1.6 和 1.7 的核心并非易事。在 1.6 的第一个beta版本中,只有菜单管理器在项目视图中具有该功能。在一条跟踪项之后,这些方法被传播到分类管理器。最需要该功能的地方,文章管理器,却无法及时得到相同的待遇,因此决定这个特性不足以阻止 1.6 的发布。快进几个月,Dennis Hermatski 提交了一个补丁 来批量处理文章。经过测试,该补丁被集成到开发头中,这将从 1.6 系列中移出,开始为即将到来的 1.7 版本成型。在看到这个提交后,我记起核心中缺乏批量处理功能,开始在其他核心组件上测试 Dennis 的代码。我意识到,Dennis 不仅为文章管理器编写了一个解决方案,而且代码可以在整个 CMS 中轻松重用。
进入框架
我迅速请求创建一个SVN分支,以便开始将该功能集成到框架中,使其对核心组件和所有第三方开发者可用。第一个任务是将代码从ContentControllerArticle和ContentModelArticle移动到它们各自重写的函数中,分别是JControllerForm和JModelAdmin(分别)。模型函数只是简单的移动,只需要将硬编码的com_content引用更改为一个$extension变量,该变量将根据当时使用代码的组件来执行。控制器方法需要一些外部思考,因为每个控制器在过程完成后都会设置一个重定向。为了不使每个控制器重复所有批量功能代码,我决定将通用代码移动到JControllerForm中,每个控制器预设可执行模型和重定向,然后再将其馈送到父函数。
所有代码移动完成后,我开始审查com_categories和com_menus现有的代码,以确定可以删除多少扩展代码。我发现了一些可删除的行,包括让控制器方法遵循我的模板代码。作为实现的一个进一步演示,批量处理也被添加到com_weblinks中。
在此功能最初实现后的两个额外补丁对代码进行了进一步的清理。这两个补丁都解决了小错误并使界面更加一致。第一个补丁修复了在编辑文章时“另存为副本”失败的问题,因为标题和别名没有设置为唯一。第二个补丁修复了分类管理器批量处理中未进行相同唯一性检查的错误。这是通过添加到JModelAdmin中的generateNewTitle函数处理的,该函数对开发者来说非常易于重用。
那么我该如何添加批量处理呢?
如果您的扩展遵循类别→项目结构,并且您迫切希望为扩展添加批量处理并在明天发布新版本,您可以直接从当前主干中的JControllerForm和JModelAdmin中获取方法,将其推送到您自己的扩展代码中,或者您可以等待1.7发布,并在单个项目控制器(应扩展JControllerForm)中添加一个简单的模板函数。以下是ContentControllerArticle的代码片段
/**
* Method to run batch operations.
*
* @return void
* @since 1.7
*/
public function batch($model)
{
JRequest::checkToken() or jexit(JText::_('JINVALID_TOKEN'));
// Set the model
$model = $this->getModel('Article', '', array());
// Preset the redirect
$this->setRedirect(JRoute::_('index.php?option=com_content&view=articles'.$this->getRedirectToListAppend(), false));
return parent::batch($model);
}
非常简单,不是吗?
困难的部分是如果您的扩展不遵循此结构,在这种情况下,您需要从JControllerForm和JModelAdmin扩展这些函数。CategoriesModelCategory有很好的例子,其中项目存储在嵌套树中。
Joomla! 1.7即将到来。您准备好了吗?
在Joomla社区杂志上发布的一些文章代表作者对特定主题的个人意见或经验,可能并不代表Joomla项目的官方立场
通过接受,您将访问由 https://magazine.joomla.net.cn/ 外部第三方提供的服务。
评论