【问题标题】:joomla com_users controller overridingjoomla com_users 控制器覆盖
【发布时间】: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。 有什么区别?为什么它不能这样工作? :/

【问题讨论】:

    标签: php controller overriding components joomla3.4


    【解决方案1】:
    1. 如果您安装了 MVC 覆盖插件,请确保在后端将 "Make Extendable" 设置为 yes(插件:系统 - MVC 覆盖)
    2. 我建议您将所有覆盖(html、代码等)放在模板目录中,因此将控制器文件创建为:templates/YOUR_TEMPLATE/code/com_users/controller.php
    3. 最后,在这个控制器文件中,您可以像提到的那样覆盖它:
      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 覆盖有效。您需要更改第一行以反映您正确的组件类。

      【讨论】:

        猜你喜欢
        • 2012-04-08
        • 2015-04-25
        • 2014-05-28
        • 1970-01-01
        • 2012-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多