我跟着这个关于 ACL 的教程 - http://community.joomla.org/blogs/community/1252-16-acl.html
为了让一切都清楚:这就是我需要的:
- 有一个链接到文章的菜单项
- 用户进入(尚未登录)网站(用户是否已注册无关紧要)
- 这个用户应该看到菜单项
- 用户点击菜单项
- 如果用户未登录 - 要求用户输入用户名/密码
- 如果用户已登录 -> 转到 6
- 登录成功后,用户可以看到链接菜单项的文章的内容。
我的目标是让所有用户都可以看到一个菜单项:登录和未登录。但是当点击时 - 只有登录的用户才能查看菜单项指向的内容。如果用户未登录 -> 应显示登录表单。
遵循上述教程后,我得到了一个对于未登录的用户完全不可见的菜单项。
如何使菜单项对所有人可见,但需要登录才能查看内容?
谢谢你。
编辑1:
我刚刚找到了这个解决方案http://docs.joomla.org/Auto_redirect_guests_to_login 它是唯一的解决方案吗?我有一个巨大的树形菜单结构。这意味着我需要克隆我的巨大菜单......每次我更改菜单项名称时 - 我应该做两次(在可见菜单和不可见菜单中)。没有 2 个菜单,还有其他解决方案吗?
编辑2:
找到了另一个解决方案(黑客核心文件)。这是菜单项设置为“公共”但文章 ACL 设置为“已注册”的情况
组件/com_content/views/article/view.html.php
从
// Check the view access to the article (the model has already computed the values).
if ($item->params->get('access-view') != true && (($item->params->get('show_noauth') != true && $user->get('guest') ))) {
JError::raiseWarning(403, JText::_('JERROR_ALERTNOAUTHOR'));
return;
}
至
// Check the view access to the article (the model has already computed the values).
if ($item->params->get('access-view') != true && (($item->params->get('show_noauth') != true && $user->get('guest') ))) {
// Redirect to login
$uri = JFactory::getURI();
$app->redirect('index.php?option=com_users&view=login&return=' . base64_encode($uri), JText::_('Members please login to view this page. If you are not a member please <a href="/component/users/?view=registration">register here<a>'));
return;
}
如何覆盖该代码并避免破解核心文件?
或者也许有更优雅的解决方案?
谢谢。