1

我跟着这个关于 ACL 的教程 - http://community.joomla.org/blogs/community/1252-16-acl.html

为了让一切都清楚:这就是我需要的:

  1. 有一个链接到文章的菜单项
  2. 用户进入(尚未登录)网站(用户是否已注册无关紧要)
  3. 这个用户应该看到菜单项
  4. 用户点击菜单项
    • 如果用户未登录 - 要求用户输入用户名/密码
    • 如果用户已登录 -> 转到 6
  5. 登录成功后,用户可以看到链接菜单项的文章的内容。

我的目标是让所有用户都可以看到一个菜单项:登录和未登录。但是当点击时 - 只有登录的用户才能查看菜单项指向的内容。如果用户未登录 -> 应显示登录表单。

遵循上述教程后,我得到了一个对于未登录的用户完全不可见的菜单项。

如何使菜单项对所有人可见,但需要登录才能查看内容?

谢谢你。

编辑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;
}

如何覆盖该代码并避免破解核心文件?

或者也许有更优雅的解决方案?

谢谢。

4

1 回答 1

1

您可以做的是模板覆盖并将登录表单添加到提供消息的页面。模板覆盖将允许您在不破坏核心文件的情况下向页面添加额外内容,因此在更新 Joomla 时,它仍然存在。

有关如何覆盖的更多信息,请参阅以下链接:

http://docs.joomla.org/How_to_override_the_output_from_the_Joomla!_core

希望这可以帮助。

于 2012-10-01T18:48:03.670 回答