如何在Joomla 3中禁用前端登录组件?

时间:2014-06-25 05:06:17

标签: php joomla joomla3.0 joomla3.2 joomla3.3

如何在Joomla 3中禁用前端登录组件?

我已设法通过禁止注册来禁用前端用户注册,如下所示。

enter image description here

但仍然可以通过以下网址

访问登录表单
index.php?option=com_users&view=login

如何在不编辑核心文件的情况下禁用前端登录组件?

鉴于我已经通过了以下内容。我不想使用RewriteRule来完成它。我想向用户显示一个已禁用的消息。

joomla 3 - how to disable front end login component?

4 个答案:

答案 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;
    }
}

还是我忽略了这里的某些东西?我承认这也会禁用前端用户的注册。但在大多数情况下,这也是我想要的! :-)

相关问题