joomla com_users 控制器覆盖

Posted

技术标签:

【中文标题】joomla com_users 控制器覆盖【英文标题】:joomla com_users controller overriding 【发布时间】:2015-07-10 16:48:29 【问题描述】:

我无法覆盖com_users (Joomla 3.4) 的控制器。 (我想,如果管理员登录后可以在网站上进行用户注册。所以我想看看注册表,如果我登录了网站。)

如果我修改原始文件,那么它工作正常,但我不想修改原始文件。我为此尝试了 2 个覆盖插件(MVC override,覆盖大师)。这些插件会覆盖该文件,但在我单击注册按钮后,我收到以下错误消息:

致命错误:无法在第 136 行的 D:\wamp\www\mysite\components\com_users\controller.php 中重新声明类 UsersController

这是同一个文件。 我将class UsersController extends JControllerLegacy 行修改为class UsersController extends UsersControllerDefault。因为我读了这个here。 有什么区别?为什么它不能这样工作? :/

【问题讨论】:

【参考方案1】:
    如果您安装了 MVC 覆盖插件,请确保在后端将 "Make Extendable" 设置为 yes(插件:系统 - MVC 覆盖) 我建议您将所有覆盖(html、代码等)放在模板目录中,因此将控制器文件创建为:templates/YOUR_TEMPLATE/code/com_users/controller.php 最后,在这个控制器文件中,您可以像提到的那样覆盖它:class UsersController extends UsersControllerDefault

这应该可以解决问题。

【讨论】:

【参考方案2】:

这也发生在我身上。问题是我还覆盖了一个子控制器(在控制器文件夹内)

我必须添加

$bufferContent = str_replace('extends UsersController','extends UsersControllerDefault',$bufferContent);
$bufferContent = str_replace('require_once', '//require_once', $bufferContent);

之后

$bufferContent = str_replace($originalClass,$replaceClass,$bufferFile);

这是一个 hack,只对 com_user 覆盖有效。您需要更改第一行以反映您正确的组件类。

【讨论】:

以上是关于joomla com_users 控制器覆盖的主要内容,如果未能解决你的问题,请参考以下文章

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

Joomla 3 MVC 平台 12.1 自定义组件模板覆盖

如何在 Joomla 控制器中指定视图列表?

使用 joomla 以编程方式注销

如何通过joomla中的组件更改模板位置的内容

电子邮件地址已经注册,即使注册新的电子邮件 joomla