【问题标题】:Expressionengine hooks表达式引擎挂钩
【发布时间】:2012-04-04 11:06:28
【问题描述】:

我有一个用于提交条目的保险箱破解器表单。该表单由标题、url_title 和描述组成。如果条目的title 中存在某些单词,我想创建一个扩展挂钩来过滤掉它们。

我已经有一个负责清理function clean(){....}的功能。我知道我们需要使用扩展挂钩,以便我们可以在保存条目时清理标题。

我需要为此使用什么扩展挂钩。你能给我一个扩展钩子的完整例子吗?我对 PHP 非常熟悉,但对钩子以及如何实现它们仍然很陌生。我已经阅读了 EE 文档,但仍然对如何使用钩子感到有些困惑

【问题讨论】:

    标签: expressionengine


    【解决方案1】:

    首先前往http://pkg.io/ 并获取您的基本扩展文件。

    如果输入了不干净的单词,您可能需要使用“safecracker_submit_entry_start”挂钩来引发错误。扩展最重要的部分是注册你要使用的方法和钩子,否则代码将不会运行。

    您的代码应如下所示:

    public function activate_extension()
    {
        // Setup custom settings in this array.
        $this->settings = array();
    
        $data = array(
            'class'     => __CLASS__,
            'method'    => 'clean', // point to the method that should run
            'hook'      => 'safecracker_submit_entry_end', // point to the hook you want to use to trigger the above method.
            'settings'  => serialize($this->settings),
            'version'   => $this->version,
            'enabled'   => 'y'
        );
    
        $this->EE->db->insert('extensions', $data);         
    
    }
    

    调用该方法后,您就可以开始清洁了。确保在定义时将 safecracker 对象传递给您的 clean 方法。例如:

    public function clean($sc){
        print_r($sc);
    }
    

    【讨论】:

    • 感谢@philip。这真的是很大的帮助。感谢您的链接。我唯一的问题是我如何告诉 clean 函数来清理 $_POST['title'] 因为我想清理提交条目的标题。在 clean 函数内部我应该有类似 $_POST['title'] = clean($_POST['title']); 的东西。我希望在将标题发送到数据库之前对其进行清理。
    • 你可以在被钩子调用的方法内部做这件事。你想让它真正清洁它吗?还是拒绝带有某些关键字的标题?
    • 您可能还在寻找:$this->EE->output->show_user_error("FooBar")
    • 我有扩展设置。我正在使用 'method' => 'clean', 'hook' => 'safecracker_submit_entry_end' 我的 clean 函数看起来像 public function clean(){$_POST['title'] = $this->sanitize($_POST['title']);} 其中 sanitize 是另一个处理清理标题的函数。但是,这是行不通的。您在上面说过,请确保将对象传递给 clean 方法。我有点困惑你的意思。我做错了什么以及如何修复 clean 功能使其正常工作。
    • 如何使用安全破解器对象数据更改 $_post。这就是我所坚持的。
    猜你喜欢
    • 2011-06-30
    • 1970-01-01
    • 1970-01-01
    • 2012-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多