如何在 Joomla 3 中禁用前端登录组件?
我已经设法通过禁止注册来禁用前端用户注册,如下所示。
但仍然可以通过以下网址访问登录表单
index.php?option=com_users&view=login
如何在不编辑核心文件的情况下禁用前端登录组件?
鉴于我已经经历了下面。我不想使用 RewriteRule 来完成它。我想向用户显示它已禁用的消息。
试试这个,
Joomla 默认登录模块受到保护。所以你不能从管理员端编辑/禁用它。
只需检查extensions-> extension manager -> Search for login
然后将显示该模块。但你不能让它禁用。因此,在不触及核心文件的情况下覆盖此功能的解决方案是模板覆盖。
您可以简单地index.php?option=com_users&view=login
在模板中覆盖此视图。
通过数据库表编辑受保护的扩展
扩展无法编辑,但您可以通过打开或关闭来管理它。受保护,意味着这个扩展不能被管理,否则它会破坏你网站的结构。但是,如果您希望将扩展程序带入解锁状态,您可以访问您的数据库(在我的情况下是由 phpMyAdmin 编辑的 MySQL),找到可靠的结构表,找到所需的字符串,并将“状态”从“1”更改为“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;
}
}
还是我在这里忽略了什么?我承认这也会禁用前端用户的注册。但在大多数情况下,这也是我想要的!:-)
在 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();
如果你想避免 404 服务器响应,在编辑 /components/com-users/controller.php 后,如前面的评论所示,你可以创建一个重定向,从前端登录页面发送到你想要的任何地方,比如主页。它确实有效。