这就是我想要做的事情:我有一个自定义组件,在其中一个视图中,要求用户登录。如果他不是,那么现在,我只抛出一个异常,这真的很难看。
所以我想将用户重定向到登录页面。这不是问题,我知道该怎么做。
但。肯定有一种方法可以在登录页面之后暂时“覆盖”默认重定向到用户想要查看的视图。事实上,例如,菜单项就是这样做的。问题是:我无法弄明白。有谁知道如何覆盖登录页面的默认重定向仅适用于一个呼叫?
您无需创建插件即可执行此操作。
com_user
组件接受return
参数以了解登录后用户的发送位置。这完全用于您描述的情况:用户尝试访问受限区域,他被重定向到登录页面,并返回到之前尝试访问的页面。
为此,你做了@Brian所建议的,但稍有改动:
$app = JFactory::getApplication();
$message = "You must be logged in to view this content";
$url = JRoute::_('index.php?option=com_users&view=login&return=' . base64_encode('YOUR COMPONENT VIEW URL HERE')
$app->redirect($url, $message);
有3种方法可以实现它。
plugin
或从该页面加载的地方调用该插件。<?php $user = JFactory::getUser(); if($user->id=='' || $user->id==NULL){ // Your message here. }else{ // Your code here } ?>
希望这会给你一个想法。
您可以创建一个插件,但是使用后端或内联现有代码有一种更优雅的方式。
使用以下行代替抛出异常:
JFactory::getApplication()->redirect(JRoute::_('index.php?option=com_users&view=login', JText::_("You must be logged in to view this content"));
另一个选项是创建放置菜单引用。这是一个菜单组,未附加到模块并显示在网站上。它的使用有很多种原因,但在这种情况下,您将创建一个菜单引用并为其分配受限制的访问级别。
现在,如果您希望用户能够通过显示的菜单选项进行访问,您只需将公共引用转换为菜单别名的类型,并指向具有访问级别限制的放置菜单引用。
如果您只想使用嵌入式锚链接,则可以使用放置菜单别名作为href属性来实现相同的结果。
让用户自动路由到登录页面。
我会使用这两个选项中的一个而不是用户插件。
我一直在使用已接受的答案的解决方案,但在最近的Joomla更新中,这停止了工作。四处搜索我看到隐私组件使用的东西略有不同,所以我只能推断出API的变化。我建议使用以下内容:
$url = JRoute::_('index.php?option=com_users&view=login&return=' . base64_encode('YOUR COMPONENT VIEW URL HERE')
$this->setRedirect($url);
return $this;
如果要显示消息,请在返回之前单独设置消息
$app = JFactory::getApplication();
$app->enqueueMessage("You must be logged in to view this content", "Notice");