【问题标题】:how to override files in [mysite]/concrete5/core如何覆盖 [mysite]/concrete5/core 中的文件
【发布时间】:2012-12-29 17:44:47
【问题描述】:

我想覆盖留言簿功能。确切地说,我想覆盖 [mysite]/concrete5/core/controllers/blocks/guestbook.php

上的 action_form_save_entry() 函数

我尝试通过以下方式覆盖它:

  • [mysite]/controllers/blocks/guestbook.php
  • [mysite]/core/controllers/blocks/guestbook.php

没有一个有效。我找不到任何方法来覆盖该文件。文档 herehere 没有显示如何覆盖 /core/ 目录。他们的论坛从来没有帮助。谷歌结果也只是被“核心”关键字误导。所有结果都只是将“核心”含义视为/concrete5/ 目录中存在的内容,而不是真正的/concrete5/core

看起来 /concrete5/core/ 目录只出现在较新的版本上。 CMIIW。

顺便说一句,也许我还应该告诉你我想用那个函数做什么。可能您对此有另一种解决方法,而不是简单地覆盖它。我想向它添加短信通知功能。因此,每当有人提交新评论时,都会向特定页面的管理员发送短信。

【问题讨论】:

    标签: php concrete5


    【解决方案1】:

    是的,/concrete/core 目录结构是 5.6 的新内容。 c5 上的教程和文档可能......缺乏......但在这种情况下,这只是他们落后一点的问题。

    “真正的”留言簿控制器位于 /concrete/blocks/guestbook/controller.php。你会注意到它只是一个类的外壳:

    class GuestbookBlockController extends Concrete5_Controller_Block_Guestbook {}
    

    您引用的文件定义了Concrete5_Controller_Block_Guestbook

    因此,解决方案是覆盖真正的控制器,而不是它扩展的任何内容(即,您正在查看的文件)。这样想,应该更清楚需要在/blocks/guestbook/controller.php处创建一个文件。事实上,只需复制我在上面引用的controller.php,因为您需要保留(有时是多个)类。然后,您可以覆盖特定功能。 (不要忘记调用 parent::action_save_form_entry())。

    【讨论】:

    • 谢谢詹姆斯...我觉得你的答案很愚蠢...为什么我不这么认为:)
    猜你喜欢
    • 2012-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-23
    • 2017-07-31
    • 2020-03-23
    相关资源
    最近更新 更多