使用MetaMod为注册用户和非注册用户提供不同的菜单项
本教程面向已经掌握Joomla基础且刚开始需要比标准Joomla工具箱更高级定制的Joomla用户。
通常需要向注册用户和非注册用户显示不同的菜单选项。
例如以下菜单结构,这是为公共用户显示的,它包含一个水平菜单栏,其中包括“注册 & 登录”菜单项
当访客登录时,菜单会调整以包含两个额外的菜单选项“支付”和“登出”,这些选项仅适用于注册访客。
通过将“支付”和“登出”菜单选项的访问级别设置为“注册”,向注册访客显示菜单项,这样公共用户就不会看到不适用于他们的菜单。
然而,对于注册用户来说,一旦他们登录,就不再需要“注册 & 登录”菜单选项,因此最好不显示“注册 & 登录”菜单选项。
如果Joomla除了“注册”和“公共”访问级别外还有“仅公共”选项,那将会很简便,但它并没有。
使用Joomla 1.6及以上版本的用户能够配置ACL以隐藏“注册 & 登录”菜单选项,但对于使用Joomla 1.5的用户来说,这个选项是不可用的。
有各种解决方案和变通方法,一些方法依赖于修改模板或CSS文件,这最初可能看起来像是一个快速简单的解决方案,但可能会很难维护。模板和CSS的定制越少越好。太常见的情况是,一个模板可以被定制,但几个月后模板或CSS文件被更新,定制被遗忘,突然一个曾经正常工作的网站不再工作,而没有人知道为什么。
解决此问题的流行方法是使用MetaMod扩展,这是一种更容易维护的解决方案,也可以用于更复杂的配置,例如允许将菜单配置为特定语言、一天中的时间和位置。
本文仅演示使用MetaMod向处于“公开”和“注册”模式的访客显示不同的菜单。
示例中使用了水平菜单,但说明可以轻松适应在任何位置使用任何类型的菜单。
以下是一些假设:
- 读者对免费Joomla主机有基本了解,并知道如何下载和安装扩展。
- 网站已经开发到足以有一个需要为两种登录状态定制的单个菜单。
尽管在这个例子中我们专注于满足两种不同的登录状态,但它为其他类型的自定义提供了良好的基础。
MetaMod方法
准备
如果当前未安装MetaMod模块,则定位、导航并下载MetaMod扩展。
使用Joomla安装包括MetaMod,然后启用MetaMod模块。
在开始第一步之前进行备份是个好主意。
步骤1
假设网站最初使用单个菜单进行开发,选择菜单管理器选项,并复制现有完整菜单。
在这个例子中,我们使用的是顶级菜单。
选择顶级菜单,单击复制按钮,并确认复制。
我们将对顶级菜单制作两个副本。
制作一个副本,并将其命名为反映您所需的定制的名称,在这个例子中,我们将称之为Public-Access-Top-Menu,因为我们希望这个菜单反映未登录访客的菜单选项。
现在我们将重复此过程,制作第二个副本,并给它一个合适的名称;在这个例子中,我们将称之为'Registered-Users-Top-Menu'。
步骤2
我们现在想定制复制的每个菜单,例如,对于'Public-Access-Top-Menu',我们将删除'Payment'和'Logout'菜单选项。
然后我们将定制第二个菜单,在这个例子中,我们将定制'Registered-User-Top-Menu',并删除'Registration & Login'菜单项,并保留'Payment'和'Logout'菜单选项。
访问级别可以保持为注册或公开,当我们完成时,这不会很重要,因为我们不会使用访问级别来控制菜单选项。
步骤3
我们现在转到模块管理器。
在这个时候,我们有三个菜单模块都在争夺相同的空间,所以我们要做的第一件事是关闭不再需要的原始菜单(顶级菜单)的显示,在这个例子中,通过编辑顶级菜单。
我们可以将菜单分配更改为'None',这样菜单就不再显示,或者我们可以简单地禁用整个菜单,因为我们不会使用它。
尽管我们想显示其他两个菜单,但我们不想同时显示它们,而只想在我们需要时显示它们,所以我们将编辑第一个复制的菜单模块,即在这个例子中,'Public-Access-Top-Menu'。
并将显示标题设置为'否'
将启用设置为'是'
将位置设置为复制的'顶级菜单'相同,在这个例子中是'user3'
将访问级别设置为'公开'
将菜单分配设置为'None'
(菜单分配设置为'none',因为我们不希望在检查用户是否未注册之前显示菜单。此检查将由我们下载的MetaMod模块执行,它将控制菜单是否显示)。
我们对复制的第二个菜单执行相同的操作,即'Registered-Users-Top-Menu'。
配置设置与'Public-Access-Top-Menu'相同。
步骤4
我们现在已关闭了所有菜单配置的显示。在此阶段,如果预览网站,则不会显示顶部菜单。
我们现在需要编辑MetaMod模块,以便我们可以控制哪个菜单被显示,以及何时显示。
编辑MetaMod模块,并为MetaMod模块提供一个合适的标题。
在此情况下,我们将其命名为'MetaModPublicRegistered'。
将显示标题设置为“否”,将菜单分配设置为“全部”,并将位置设置为与菜单相同 - 在此情况下为'user3'。
在MetaMod配置的右侧,将“包含模块的样式”设置为“无样式” - 如果不这样做,顶部菜单可能显示的位置低于预期。
在PHP部分,输入显示正确菜单的PHP代码。
公共访问顶部菜单和注册用户顶部菜单的ID将在PHP代码框上方显示。如果它们没有显示,则可能是因为它们尚未启用。
对于本例,如果用户未注册,我们希望显示菜单ID 53(PublicAccessTopMenu),但如果他们已注册,我们希望显示菜单54(RegisteredUsersTopMenu)。
我们输入执行此操作的PHP代码,有多种不同的语句可以工作,但我们使用了'if else if'语句。
保存MetaMod设置。
步骤5
我们现在已配置所需的所有内容,所以现在我们只需要检查配置是否正常。
对于未注册的用户,如果配置正确,他们将看到包含“注册 & 登录”菜单且不包括“支付”和“登出”菜单选项的菜单。
一旦注册,MetaMod应切换菜单模块,并显示包含“支付”和“登出”菜单选项但排除“注册和登录”菜单选项的菜单配置。
使用MetaMod解决方案确实需要维护至少两个菜单,但如果最初使用单个菜单,则维护主菜单相对容易,该主菜单不活跃,但可以轻松复制并定制复制的菜单。
在Joomla社区杂志上发表的一些文章代表了作者对特定主题的个人观点或经验,可能与Joomla项目的官方立场不一致。
通过接受,您将访问https://magazine.joomla.net.cn/外部第三方提供的服务
评论