我使用Joomla的登录模块。登录和注销重定向到模块设置中设置的页面。
我的问题是状态,用户尝试使用错误的用户凭据登录。在这种情况下,用户将被重定向到component / users /?view = login页面。就我而言,这个页面没有被使用,也没有像其他页面那样设计。因此,我想在错误登录后将用户重定向到上一页。
有人有线索,如何解决?
THX
答案 0 :(得分:2)
您需要修改用户控制器。但要保持“更新证明”,你无法修改核心代码,这就是为什么我们要进行覆盖:
components/com_users/controllers/
并复制名为user.php
的文件,您可以调用新文件user2.php
user2.php
文件并将控制器类重命名为UsersControllerUser2
templates/YOUR_TEMPLATE/html/mod_login
文件夹并在那里复制modules/mod_login/tmpl/default.php
文件。<input type="hidden" name="task" value="user.login" />
更改为<input type="hidden" name="task" value="user2.login" />
$ APP-&GT;重定向(JROUTE :: _( '的index.php选项= com_users&安培;图=登录', 假));
将$app->redirect
路线更改为您想要的任何路线:)
答案 1 :(得分:1)
执行此操作的最佳方法是使用mod_login模块的模板覆盖。此链接详细说明了如何执行此操作的具体细节。
http://docs.joomla.org/Layout_Overrides_in_Joomla
基本上,您将位于/modules/mod_login/tmpl/default_login.php的文件复制到/ templates / {YOUR_TEMPLATE} / html / mod_login,这就是Joomla用来渲染任何mod_login模块的内容,只要您保留文件名相同。
在第116行,您将看到以下代码行:
<input type="hidden" name="return" value="<?php echo $return; ?>" />
您现在可以完全控制返回值。我通常在URL中传递base64编码的返回参数,我依次解析并插入我的模块模板覆盖中的返回隐藏输入的值
请注意,您应该永远不要更改核心文件或将自定义文件放在侧面核心文件中,原因很简单,主要是任何后续的Joomla更新都可能会消除您的网站更改。
答案 2 :(得分:0)
在Joomla 3.6.1中,为了在错误登录后停留在同一页面,您必须更改/components/com_users/controllers/user.php中的一行
查找
if (true !== $app->login($credentials, $options))
{
// Login failed !
// Clear user name, password and secret key before sending the login form back to the user.
$data['remember'] = (int) $options['remember'];
$data['username'] = '';
$data['password'] = '';
$data['secretkey'] = '';
$app->setUserState('users.login.form.data', $data);
$app->redirect(JRoute::_('index.php?option=com_users&view=login', false));
并且只评论最后一行:
// $app->redirect(JRoute::_('index.php?option=com_users&view=login', false));
这就是全部。
答案 3 :(得分:0)
di3sel非常重要,仍然可以在2019年使用,在第3步中,您可以添加:
为您的登录模块创建一个模板替代(以使其也得到更新证明),创建一个template / YOUR_TEMPLATE / html / mod_login文件夹,并在其中复制模块/mod_login/tmpl/default.php文件,并使用不同的名称像altlogin.php
在管理区域中,打开mod_login,在高级选项卡中找到“演示文稿”,然后从模板中选择在步骤3“ altlogin”中创建的视图。
谢谢。