分类项目数量:可能的新功能?
一个新功能是如何进入 Joomla 的?这是一个关于新功能是如何开发以及它如何可能被添加到下一个版本的故事。从构思、开发,到社区反馈与帮助、测试,以及(希望)添加到核心代码中。你即将听到的故事是真实的;只是将名字更改了,以感谢帮助我的人。
“很遗憾,Joomla 分类管理器已经没有文章计数器了” Marc Dechèvre 在我们下午晚些时候见面时告诉我。这是 2015 年 Joomladay 法国的第一天结束,那是一个很棒的一天:我遇到了很多可爱的法国 Joomla 人,我的演讲中并没有发生重大灾难,我们还剩下另一天的 Joomladay。我理解了 Marc 的意思,也听到自己说,“这应该不难实现...”。
Marc 提出了一个非常好的观点。我也在思考这个问题。Joomla 1.5 的分类管理器有一个很棒的功能,可以列出你网站的所有分类,包括每个分类中的文章数量。这将是一个关于内容数量的优秀概览,以及它是如何分配到各个分类和不同状态中的。
Joomla 的改进分类管理器
自从 Joomla 1.5 以来,分类管理器已经进行了一些重大改进:Joomla 1.6 去掉了章节,引入了嵌套分类并添加了语言标签。Joomla 3.x 使整个后台响应式,并改变了 UX。移除文章计数对我来说不是改进,但考虑到所有其他改进,我最终还是接受了。
当我当天晚上到达酒店时,时间还早于午夜。法国Joomladay的第一天既有趣又累人。脑海中回荡着“那应该不难构建……”的声音。我决定深入研究Joomla,尝试为Joomla 3.4.2dev版本添加新的计数器功能。
Joomla的菜单管理器(菜单 > 菜单管理器)有一个菜单项计数器,类似于我在分类管理器中想要的。我查看了com_menus的HTML输出代码,并在com_categories的HTML输出中构建了类似的东西。当然,它没有显示任何数字,我还没有在com_categories的“分类”模型中实现计数功能。当我打开模型时,一些比“哼”更无赖的话浮现在我的脑海中。添加计数器会比预期的更困难……
com_categories的隐藏力量
许多核心组件使用分类来对它们的条目进行分类:横幅、联系人、新闻源、网页链接。在过去,它们都有自己独特的代码来实现分类功能。当Joomla 1.6开发时,com_categories被制作成通用的,以便所有组件都使用相同的代码来为分类管理器创建分类。这是以一种优雅的方式完成的:如果你在后台使用精心制作的URL触发com_categories组件,你可以用它为每个组件创建分类。让我们比较以下URL:
文章管理器:文章(通过内容 > 文章管理器)的URL是:
/administrator/index.php?option=com_content&view=articles
分类管理器:文章(内容 > 分类管理器)的URL是:
/administrator/index.php?option=com_categories&extension=com_content
现在让我们比较另一个核心组件。
横幅管理器:横幅(通过组件 > 横幅 > 横幅)的URL是:
/administrator/index.php?option=com_banners
分类管理器:横幅(通过组件 > 横幅 > 分类)的URL是:
/administrator/index.php?option=com_categories&extension=com_banners
现在让我们检查一个不与分类一起工作的核心组件。
重定向管理器:链接(通过组件 > 重定向)的URL是:
/administrator/index.php?option=com_redirect
让我们构造一个URL来打开带有扩展com_redirect的com_categories:
/administrator/index.php?option=com_categories&extension=com_redirect
它触发了分类管理器,将显示“分类管理器:重定向”。选择“新建”来创建一个新的分类,查看“分类管理器:添加新的重定向分类”。在“保存 & 关闭”后,你将结束你的重定向条目的新分类!请注意,你无法使用这些分类与你的重定向条目一起使用,因为重定向组件不与分类一起使用且不存储与其条目关联的分类ID。
我说过优雅吗?实际上,我指的是非常优雅,因为代码是以一种很好的方式构建的,你甚至可以用它来为第三方组件编写。在你的组件中,你需要的是:一个数据库字段来存储分类(例如catid),在组件模型form .xml中的catid字段,以及在辅助文件中的addSubmenu方法来创建左侧菜单(例如,使用条目和分类)。然而,因为它太通用,我无法仅仅通过修改分类模型来添加我的文章计数器……
回到分类条目计数器
第二天,我开始回想刚刚吃过的那个微小的法国羊角面包早餐。实际上,这让我更多地思考了各国之间的饮食差异。美国人早上吃烤面包和煎饼。谁不知道英国早餐的培根、鸡蛋和豆子呢?我习惯了荷兰早餐(没有太多花哨的,只是粥、麦片或薄面包片)。德国人也有薄面包片,但你不会用荷兰风格的纸薄片肉或奶酪让他们开心(实际上,没有人会开心,连荷兰人自己也不知道这一点)。
回到活动中,我去了“比萨虫和乐趣”房间,向罗兰·达尔穆勒和维克托·福格尔解释说,问题比预期的要复杂/我遇到的问题。罗兰建议使用一个“com_content”在类别管理器中的“if”语句作为解决方案。这样,我就可以只为com_content开发功能。我们一致认为这不是最好的方法,但至少它让我更接近解决方案。
我在本地机器上创建了一个新的git分支,编写了代码,并在github上创建了一个拉取请求(PR),以便其他人可以测试并给出反馈:https://github.com/joomla/joomla-cms/pull/6916
我得到的反馈……(感谢大家!)布莱恩·蒂曼指出,“哈索尔”模板使用模板覆盖。哈索尔?是的,你知道的,另一个非响应式的管理员模板,据我所知,不是很多人使用。我决定不做双重工作,首先创建一个无错误的版本,然后再将其添加到哈索尔的模板覆盖中。
托比亚斯·祖劳夫提到了特拉维斯,他对我的代码不满意。特拉维斯CI是一个开源的持续集成服务,用于使用不同的PHP版本测试你的代码,并保持代码风格的一致性。特拉维斯对我的代码使用空格而不是制表符表示不满。我必须在PHPStorm编辑器中进行配置更改,以便制表符成为真正的制表符而不是空格。
我得到的进一步反馈是关于对齐、与移动设备的响应行为以及缺少的“存档”列。我使用了这些反馈来改进我的功能。我还包括了一些其他选项:我超链接了计数器,这样你就可以轻松地导航到文章,并过滤出你刚刚点击的分类+状态的那些文章。
下期将继续:通向通用解决方案。
在Joomla社区杂志上发表的一些文章代表了作者对特定主题的个人意见或经验,可能并不符合Joomla项目的官方立场
通过接受,您将访问由https://magazine.joomla.net.cn/之外第三方提供的服务的链接
评论