这就是我想要做的事情:我有一个自定义组件,在其中一个视图中,要求用户登录。如果他不是,现在,我只抛出一个异常,这真的很难看
所以我想将用户重定向到登录页面。这不是问题,我知道该怎么做。
BUT。肯定有一种方法可以在登录页面之后暂时“覆盖”默认重定向到用户想要查看的视图。事实上,例如,菜单项就是这样做的。问题是:我无法弄明白。有没有人知道如何覆盖登录页面的默认重定向仅适用于一个呼叫?
答案 0 :(得分:9)
您不需要创建插件才能执行此操作。
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);
答案 1 :(得分:4)
有三种方法可以实现它。
如果您有自定义组件视图的菜单项,则菜单项页面中有一个选项为访问。只需选择已注册的选项即可。现在,当用户尝试访问该页面时,它将提示用户登录以查看该页面。
您可以创建plugin
或从该页面加载的位置调用该插件。
或者您可以直接将此代码添加到您的视图,默认文件中。
<?php $user = JFactory::getUser(); if($user->id=='' || $user->id==NULL){ // Your message here. }else{ // Your code here } ?>
希望这会给你一个想法。
答案 2 :(得分:2)
您可以创建一个插件,但有一种更优雅的方式可以使用后端或内联现有代码。
不要抛出异常,而是使用以下行:
JFactory::getApplication()->redirect(JRoute::_('index.php?option=com_users&view=login', JText::_("You must be logged in to view this content"));
另一个选项是创建展示位置菜单参考。这是一个菜单组,未附加到模块并显示在网站上。它的使用有很多种原因,但在这种情况下,您将创建一个菜单引用并为其分配受限制的访问级别。
现在,如果您希望用户能够通过显示的菜单选项进行访问,您只需将公共引用转换为菜单别名的类型,并指向具有访问级别限制的展示位置菜单引用。
如果您只想使用嵌入式锚链接,可以使用放置菜单别名作为href属性来实现相同的结果。
让用户自动路由到登录页面。
我会使用这两个选项中的一个而不是用户插件。
答案 3 :(得分:0)
一段时间以来,我一直在使用接受的答案的解决方案,但是在最近的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");