Joomla PHP插件如何检查当前组件是不是com_users

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Joomla PHP插件如何检查当前组件是不是com_users相关的知识,希望对你有一定的参考价值。

所以我有以下代码导致无限重定向循环,因为我无法检查用户所在的当前URL是否是“com_users”组件。

如果它们在com_users组件上,我不希望再执行任何代码。

public function onAfterInitialise() {
    $app  = JFactory::getApplication();
    $user = JFactory::getUser();
    if (!$user->guest) {
        //THIS CAN'T GET CURRENT COMPONENT AND CAUSES INFINITE redirect LOOP
        if ( !($app->input->get('option') == 'com_users' && JRequest::getVar('view') == 'profile') ) { //IF NOT on the EDIT PROFILE URL then force the user to go and change their email
            if ($user->email === "fakemail@spam-disposable-domain.com") {
                $app->enqueueMessage('Please change your email address!');
                $app->redirect(
                    JRoute::_(
                        'index.php?option=com_users&view=profile&layout=edit'
                    )
                );
            }
        }
    }
}
答案

使用观察者来降低复杂性。

JRequest已弃用,请改用$app->inputInput::getCmd()做了一些自动卫生。

public function onAfterInitialise()
{
    $user = JFactory::getUser();
    $app  = JFactory::getApplication();

    if ($user->guest)
    {
        return;
    }

    if ($app->input->getCmd('option') === 'com_users' && $app->input->getCmd('view') === 'profile')
    {
        return;
    }

    if ($user->email === "fakemail@spam-disposable-domain.com")
    {
        $app->enqueueMessage('Please change your email address!');
        $app->redirect(
            JRoute::_(
                'index.php?option=com_users&view=profile&layout=edit'
            )
        );
    }
}

以上是关于Joomla PHP插件如何检查当前组件是不是com_users的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Joomla 中将组件放入模块中!地点?

Joomla - 如何捕捉系统事件

这应该是插件还是组件解决方案? (Joomla!)

如何使用插件打包我的 joomla 2.5 组件?

php 如何在Joomla中的任何位置访问Joomla插件参数

我可以在我的组件中使用 Joomla 插件吗