2013-07-14 3 views
1

У меня есть пользовательский компонент. В настоящее время каждый может получить доступ к странице с помощью этого компонента. Я хочу перенаправить пользователя на страницу входа, если он не зарегистрирован. Как получить URL-адрес страницы входа в систему?Как получить форму для входа в Joomla URL для перенаправления

В моих компонентах просмотра я пишу:

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

Другой вопрос - это нормально, чтобы положить в поле зрения, или я должен поставить его Somwhere еще? Я использую Joomla 2.5.

ответ

2

Try это,

В том вид компоненты вы должны ограничить только для зарегистрированных пользователей, то,

$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, расположение с.

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. Вы можете прочитать о механизме redirect after login на 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')); 
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); 
Смежные вопросы