如何在Joomla 3中禁用前端登录组件?
我已设法通过禁止注册来禁用前端用户注册,如下所示。
但仍然可以通过以下网址
访问登录表单index.php?option=com_users&view=login
如何在不编辑核心文件的情况下禁用前端登录组件?
鉴于我已经通过了以下内容。我不想使用RewriteRule来完成它。我想向用户显示一个已禁用的消息。
答案 0 :(得分:1)
试试这个,
Joomla默认登录模块受到保护。因此,您无法从管理员端编辑/禁用它。
只需查看extensions-> extension manager -> Search for login
然后该模块将显示。但你无法禁用它。 因此,在不触及核心文件的情况下覆盖此功能的解决方案是模板覆盖。
您只需在模板中覆盖此视图index.php?option=com_users&view=login
即可。
通过数据库表编辑受保护的扩展程序
无法修改扩展程序,但您可以通过转换来管理扩展程序 开或关。受保护,意味着无法管理此扩展程序, 否则会破坏您网站的结构。但是,如果你愿意的话 要将扩展程序置于解锁状态,您可以访问您的数据库(在我的 案例MySQL由phpMyAdmin编辑),找到可靠的结构表, 找到所需的字符串,并将“状态”从“1”更改为“0”。通常你的 主机为您提供一些数据库管理工具。
希望有所帮助......
答案 1 :(得分:0)
在joomla 3.x中 我发现的简单方法是编辑/components/com-users/controller.php 然后像这样标记视图字符串登录。我得到404服务器响应,但这就是我想要的。 由于这不是url,而是组件视图,因此很难重定向。
// Set the default view name and format from the Request.
// $vName = $this->input->getCmd('view', 'login');
$vFormat = $document->getType();
答案 2 :(得分:0)
如果你想避免 404 服务器响应,在编辑 /components/com-users/controller.php 之后,如前一条评论所示,你可以创建一个重定向,从前端登录页面发送到你想要的任何地方,比如主页。它确实有效。
答案 3 :(得分:0)
我为此编写了一个插件。它在前端完全禁用“用户”。 您还可以仅针对以下内容禁用特定视图:
index.php?option=com_users&view=login
index.php?option=com_users&view=registration
index.php?option=com_users&view=profile&layout=edit
这是前端完全禁用用户的代码
<?php defined('_JEXEC') or die;
use Joomla\CMS\Factory;
use Joomla\CMS\Plugin\CMSPlugin;
use Joomla\CMS\Router\Route;
class PlgSystemCobizDisableLogin extends CMSPlugin
{
public function onAfterInitialise()
{
$this->disableLogin();
}
protected function disableLogin()
{
$app = Factory::getApplication();
if ($app->isClient('site') === false) return;
$disable_users = $this->params->get('disable_users', 1);
if (!$disable_users) return;
$option = $app->input->getCmd('option');
if ($option == 'com_users') {
$this->redirect();
}
}
protected function redirect()
{
$Itemid = $this->getHomePageItemid();
$app = Factory::getApplication();
$link = Route::_('index.php?Itemid=' . $Itemid);
Factory::getApplication()->enqueueMessage('Toegang gewijgerd', 'error');
$app->redirect($link);
}
protected function getHomePageItemid()
{
$tableName = '#__menu';
$db = Factory::getDbo();
$query = $db->getQuery(true);
$query->select('id');
$query->from($db->quoteName($tableName));
$query->where($db->quoteName('published') . ' = ' . $db->quote(1));
$query->where($db->quoteName('home') . ' = ' . $db->quote(1));
$db->setQuery($query);
$data = $db->loadResult();
return $data;
}
}
还是我忽略了这里的某些东西?我承认这也会禁用前端用户的注册。但在大多数情况下,这也是我想要的! :-)