我有自定义组件。现在每个人都可以使用这个组件访问页面。如果他没有登录,我想将用户重定向到登录页面。如何获取登录页面网址?
在我的组件视图中,我写道:
if($user->id != 0) {
..
}
else {
$link = JRoute::_(???????);
$this->setRedirect($link);
}
另一个问题 - 可以放在视野中还是应该放在其他地方?我正在使用 Joomla 2.5。
我有自定义组件。现在每个人都可以使用这个组件访问页面。如果他没有登录,我想将用户重定向到登录页面。如何获取登录页面网址?
在我的组件视图中,我写道:
if($user->id != 0) {
..
}
else {
$link = JRoute::_(???????);
$this->setRedirect($link);
}
另一个问题 - 可以放在视野中还是应该放在其他地方?我正在使用 Joomla 2.5。
尝试这个 ,
在该组件视图中,您必须仅限制登录用户,
$user = JFactory::getUser();
if($user->id != 0){
// show your view
}
else{
$mainframe = JFactory::getApplication();
$mainframe->redirect('index.php?option=com_users&view=login');
}
您可以在 view.html.php、布局等内部的任何位置使用此代码。
你没有指定,所以我假设 Joomla 2.5.x。
在你看来,类似乎是标准的地方......例如com_content
检查它的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;
}
如您所见,com_content
它不会重定向用户,它只会引发一条阻塞警告消息。
com_users
可以使用redirect
包含您希望用户在登录后发送到的 URL 的参数来调用。参数应使用 进行base64
编码和转义urlendcode
。您可以在docs.joomla.org上阅读有关登录后重定向机制的信息。
要实现对登录的重定向,然后在成功登录后返回原始请求,您可以在块中使用类似于此的内容else
:
// Redirect to login
$uri = JFactory::getURI();
$return = $uri->toString();
$url = 'index.php?option=com_users&view=login&return=' . urlencode(base64_encode($return));
$jAp->redirect($url, JText::_('Message_about_this_view_requiring_login'));
这是理想的放置在控制器中:但您可以在视图中做很多相同的事情。
首先,对您的返回链接进行编码:
$link = base64_encode(JRoute::_("index.php?option=com_yourcomponent&view=someview&tmpl=somelayout", false));
然后,构建到登录页面的路由:
$rlink = JRoute::_("index.php?option=com_users&view=login&return=$link", false);
$msg = JText::_("COM_YOURCOMPONENT_LOGIN_TO_ACCESS");
$app = JFactory::getApplication();
$app->redirect($rlink, $msg);