阅读时间6分钟 (1246字)

自定义管理菜单

Customizing the Admin Menu

为您的客户提供定制的后端菜单。以下是方法。

我们想要为客户定制后端菜单的原因有很多。最重要的是:我们希望提供直观命名的项目,直接链接到常用的编辑屏幕。但我们也可能想要删除一些至少会为非管理员杂乱菜单栏的项目。我们还想删除允许普通用户对网站造成重大损害的菜单项。

正如大多数开发者所知,管理菜单不能像网站菜单那样配置。(作为一个例外,管理模板Admin Praise提供自己的可配置菜单。)幸运的是,管理菜单的文本、链接和层次结构存储在一个模块中。通过覆盖其视图,我们可以添加菜单项和ACL逻辑。这种方法确实需要一些编码,但对于熟练的PHP开发者来说,添加和更改应该很容易。

在Joomla 2.5中,菜单的视图由三个文件组成。default.php是一个简单的文件,当菜单栏启用时调用default_enabled.php,相反,当菜单禁用时调用default_disabled.php。例如,在编辑某个项目时,菜单将进入禁用状态。我们主要关注default_enabled.php,但完整的解决方案应该将我们的更改应用到default_disabled.php中。

遵循覆盖视图的标准方法。在这种情况下,将提到的两个文件从目录/administrator/modules/mod_menu/tmpl复制到管理员模板的html目录中。假设我们正在使用Bluestork模板,两个文件放在这里

/administrator/bluestork/html/mod_menu/default_enabled.php
/administrator/bluestork/html/mod_menu/default_disabled.php

在编辑这些新文件时,更改将出现在后端菜单中。如果不幸出现无法纠正的编码错误,只需将问题文件重命名为其他名称。在模板的覆盖目录中更改任何文件名都会导致Joomla!恢复到原始文件,因此您总能恢复。

添加菜单项

请审查default_enabled.php中的代码,并观察菜单及其项目的构建方式。以下是一个代码片段以供参考。

code for menu items in the admin menu

理解PHP的人应该能够看到模式。类JMenuNode的构造函数需要项目的文本和链接。它可以接受额外的参数,但这些是可选的。

需要指出的一点是菜单级别的声明方式。第2行上的值“true”表示新项目将成为后续项目的父项目。如果布尔值为false或缺失(如第5行所示),则菜单项不是父项目。第8行上的代码指示菜单向上提升一个层级在菜单的层级结构中,并将“祖父”节点重新分配为后续项目的父节点。

将我们的新菜单项添加到帮助菜单项之前是一个不错的选择(目前大约在第343行)。复制你找到的一些代码,粘贴到这里,并将其更改为你想要的文本和链接。刷新管理屏幕。然后查找你的新增内容并测试新的链接。添加几个菜单项应该不会花费太多时间。

要找到你想要的链接,导航到该屏幕,复制并使用以“index.php”开始的URL(见下面的示例)。如果菜单项的标签需要多语言,你将需要在语言文件中创建条目,并使用JText::_()函数。我在示例中省略了这个,只是为了简化代码的可读性。

以下是示例中添加的菜单项片段

sample code for adding new menu items to the admin menu

以下是新项目在管理菜单中的视图
new menu items inserted within the admin menu

 

员工与管理员

这就是添加菜单项所需做的所有事情。但可以说,一个更易用的菜单是只向员工显示他们需要访问的链接。例如,如果用户只需要我们刚刚添加的项目,那么通过抑制其他项目如“菜单”和“扩展”,我们可以提高可用性。我们可以做到这一点。

在这个示例中,我们实施了一条规则,即员工只能看到“站点”、“内容”以及我们创建的项目。相反,超级管理员需要访问标准管理菜单,可能不需要访问为员工准备的链接。以下是我们可以如何实现这一点。

enabled文件顶部附近 – 在定义$user之后和创建任何菜单项之前 – 添加以下代码

setting boolean variables based upon a user's group membership

关键是我们将后端用户划分为有意义的组,并定义如何区分每个组。在这里,我们定义了超级用户员工之间的区别。使用适合你项目和客户的项目逻辑。在这个示例中,我们假设如果某人不是超级用户,那么这个人就是员工

假设至少有一个员工应该能够访问默认的管理菜单,但不是超级用户。我们简单地创建一个新的用户组(称为StaffAdmin,在这种情况下分配了id为‘9’)并在该文件中创建另一个变量

variable set to 'true' if user belongs the the specified group

现在,客户可以将任何员工分配到StaffAdmin组,这样的指定将触发此变量变为true

谁可以看到哪些菜单项

研究代码以查看如何将访问控制列表(ACL)应用于确定向任何给定用户显示哪些菜单项。我们将遵循这种方法。

要仅向员工显示所有我们的新菜单项,请将这些菜单项的块包装在以下条件语句中
show a block of menu items if the user is 'Staff'

要抑制某些菜单项供员工查看,请向包装这些项目的条件添加适当的逻辑。例如,以下是限制谁可以访问用户菜单项的代码(黄色部分是我添加的)
add logic to ACL condition: don't show to Staff

但是如果您希望此选项显示给StaffAdmin(除任何超级用户之外),则需添加适当的逻辑。
add logic to ACL condition: include requirement that user is either a Super or a StaffAdmin

进行一些可以撤销的小改动。然后测试。重复此操作,直到管理员菜单按照您想要实施的显示规则运行。

那么禁用菜单文件怎么办?

我们应该遵循原始default_disabled.php文件中的代码示例。只有顶级菜单项被列出,并且每个项都被设置为“禁用”状态。这个禁用菜单除了看起来像是活动的禁用版本外,什么也不做。

有人可能会想保持这个文件不变。毕竟,这些项都是禁用的。但是如果禁用菜单显示不同的菜单项集合,那么我们可能会无意中使客户的员工感到困惑。最好的解决方案是编辑禁用菜单,以便它为每个用户组显示相同的顶级项。记住,子菜单不会显示,所以您只需要包含顶级菜单项。如果您觉得这太麻烦,一个简单的替代方案(尽管是一个不太“纯粹”的方法)是在禁用版本中不显示任何菜单项。不显示项比显示不一致的项要好。

更好的Joomla!体验

通过覆盖管理员菜单,我们可以添加指向常用管理员屏幕的直接链接,使用客户能理解的术语,并适当隐藏技术细节。这使我们能够为我们的客户及其员工提供更简单、更直观的Joomla!体验!

 

在Joomla!社区杂志上发表的一些文章代表了作者对特定主题的个人观点或经验,可能不与Joomla!项目的官方立场一致。

0
 

评论

已经注册? 请在此登录
尚无评论。成为第一个发表评论的人

通过接受,您将访问由https://magazine.joomla.net.cn/之外的第三方提供的服务