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