另一天玩joomla,另一个缺点是修复:)
这次它以管理(后端)菜单的形式出现。 要将项目/子项添加到此菜单,人们必须在xml文件中编写菜单项,并附带其components / extension / plugin / whatever。 安装扩展时,joomla“生成”菜单项并将其“存储”在DB中。 实际上,通过读取数据库来呈现真实/有形菜单。
这有几个含义:
我有这个系统,它依赖于动态修改菜单项的能力,但是通过代码。 简单地说,我需要具有可以创建易失性菜单项的功能(即,它会在会话结束时被删除)。
要做到这一点,我有几个预期的黑客:
JFactory::$database=new MyFakeJDatabase(JFactory::$database);
您怎么看?
编辑:我已经检查了joomla/administrator/modules/mod_menu/helper.php
,看看我是否能找到一种方法来注入我的东西,希望joomla可能使用全局变量或其他东西,但没有用 - 菜单项也是通过读取db和渲染直接创建的。
仅供参考我在Google上搜索了一段时间,没有用。
答案 0 :(得分:2)
有趣。我与Joomla合作多年,为各种目的编写各种扩展,包括集成外部系统。通过查看代码执行的基本需求来解决这些类型的情况是我的经验。我似乎总是开始问:它是由UI驱动还是由系统驱动的?
首先,考虑代码是否将根据用户生成的系统事件执行。有很多'他们甚至可以触发你自己的。如果这是一项要求,那么解决方案将需要包含一个附加到事件的插件。
但是,对于任何类型的动态UI内容,您都需要一个模块。模块都是关于显示内容的。这些人专为用户体验而设计。因此,请考虑如何管理对UI内容的访问。哪些用户将构成此内容的“受众”?这由用户组和访问级别控制。在代码中的某个时刻,最好是早期,您必须检查用户的权限,然后修改代码执行作为响应。值得庆幸的是,我发现有人已经为我做了很多工作。怎么样?
找到一个扩展程序,用于执行代码需要执行的操作,或者尽可能接近匹配的扩展程序。整个CMS都是使用在Joomla上运行的扩展而构建的!框架,有数以千计的扩展可供下载。一旦找到它,就克隆一下。然后对其进行编辑,使其完成您需要它做的事情,以及它之前所做的事情(如果这是一项要求)。安装更新的克隆,取消发布原始版本并发布您的原件。节省了大量时间。
查看您的要求,只有会话时,代码才会执行。我将从'用户'类型插件开始。当用户触发登录事件时,插件可以将动态菜单记录作为db记录数组添加到会话变量中。当用户触发注销或会话超时时,记录将自行消失。然后我会简单地克隆“mod_menu”并读取它在用户会话中找到的任何记录。我一直使用这种会话变量技术,特别是在实现分析数据收集时。
无论如何,我不经常发帖;但我当然希望这会有所帮助。我很想看到这种类型的pf功能。只是没有时间来编码它。
祝你好运!chozyn
答案 1 :(得分:1)
“正确”的方法是编写一个模块,该模块覆盖核心菜单模块以实现旧功能,并具有来自任何来源的动态菜单的附加功能。不是特别好的方式,但这是Joomla的方式。 感谢@ircmaxell指出这个方法。
答案 2 :(得分:0)
没有任何黑客看起来足够令人满意,安全或可维护。
我已经中止了项目,而是通过JS将按钮放在主仪表板中。
最终用户非常不方便(他们仍然会错过子项目)。但到底是什么......这是Joomla的错。
哦,为了记录,我需要添加自己的自定义“页面”,类似于管理组件。你猜怎么着?那也失败了,所以这是另一个黑客。
希望在版本1.7中,他们[joomla]完全废弃了初始代码库。