1

我有自定义组件。现在每个人都可以使用这个组件访问页面。如果他没有登录,我想将用户重定向到登录页面。如何获取登录页面网址?

在我的组件视图中,我写道:

if($user->id != 0) {
    ..
}
else {
    $link = JRoute::_(???????);
    $this->setRedirect($link);  
}

另一个问题 - 可以放在视野中还是应该放在其他地方?我正在使用 Joomla 2.5。

4

3 回答 3

2

尝试这个 ,

在该组件视图中,您必须仅限制登录用户,

$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、布局等内部的任何位置使用此代码。

于 2013-07-15T04:06:53.890 回答
0

你没有指定,所以我假设 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'));
于 2013-07-15T00:30:51.837 回答
0

这是理想的放置在控制器中:但您可以在视图中做很多相同的事情。

首先,对您的返回链接进行编码:

$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);
于 2013-07-15T08:08:23.840 回答