【问题标题】:Drupal's webform module isn't using the webform.api.phpDrupal 的 webform 模块没有使用 webform.api.php
【发布时间】:2016-01-18 08:22:19
【问题描述】:

我正在使用 Drupal 7 的 Webform 模块,我正在尝试修改 webform.api.php 中的 hook_webform_submission_presave,但似乎该模块没有使用它文件,因为我进行了修改但没有更改任何内容。

我是否必须在任何地方告诉 Drupal 才能使用此文件?或者我该怎么办?

【问题讨论】:

    标签: php drupal drupal-7 drupal-webform


    【解决方案1】:

    首先,我希望您知道您不应该直接更改模块文件,而是将钩子函数添加到您的模块中,并将函数名称开头的“钩子”更改为您的模块机器名称。

    其次,您必须清除所有缓存,以便 Drupal 重新扫描您的模块并确定有新的钩子函数并开始使用它。

    所以,你必须先创建自己的模块:

    https://www.drupal.org/developing/modules/7

    不要害怕 - 它只是一个文件夹,其中包含描述您的模块和模块文件的信息文件(在最小情况下)。

    然后,如果您的模块名为“anna”,您应该在模块文件中创建一个函数并为其命名:

    anna_webform_submissions_presave()

    并清除缓存 - 之后 Drupal 应该开始调用您的钩子函数。

    【讨论】:

    • 谢谢...抱歉我是新手...如何添加挂钩功能?我想修改hook_webform_submission_presave 函数,因为我需要在将sid 保存到数据库之前对其进行修改。 @MilanG
    • 再次感谢,我现在有了我的模块。我之所以问这个问题是因为我想在保存之前修改webform_submission的sid。我已尝试执行以下操作,但它不起作用:
    • function uvic_webform_submission_presave($node, &$submission) { $result = db_select('webform_submissions', 'sid') ->fields('sid') ->condition('nid', $node->nid) ->orderBy('sid', DESC) ->range(0,1) ->execute(); ->fetchAssoc(); if($submission->nid == $node->nid){ if ($result) { $submission->['sid'] = $result['sid'] + 1; } else { $submission->['sid'] = 1; } } $component_id = 4; $submission->data[$component_id][0] = 'uvic'; }@MilanG
    • 呃,这种方式很难调试。尝试在更改前后打印出 $submissions,并检查是否一切都按照您想要的方式进行了更改。
    【解决方案2】:

    模块不使用它们的.api.php 文件。这些文件用于文档目的。那是the standard way for documenting hook definitions

    【讨论】:

    猜你喜欢
    • 2018-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多