阅读时间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/外部第三方提供的服务