【发布时间】:2016-01-18 08:22:19
【问题描述】:
我正在使用 Drupal 7 的 Webform 模块,我正在尝试修改 webform.api.php 中的 hook_webform_submission_presave,但似乎该模块没有使用它文件,因为我进行了修改但没有更改任何内容。
我是否必须在任何地方告诉 Drupal 才能使用此文件?或者我该怎么办?
【问题讨论】:
标签: php drupal drupal-7 drupal-webform
我正在使用 Drupal 7 的 Webform 模块,我正在尝试修改 webform.api.php 中的 hook_webform_submission_presave,但似乎该模块没有使用它文件,因为我进行了修改但没有更改任何内容。
我是否必须在任何地方告诉 Drupal 才能使用此文件?或者我该怎么办?
【问题讨论】:
标签: php drupal drupal-7 drupal-webform
首先,我希望您知道您不应该直接更改模块文件,而是将钩子函数添加到您的模块中,并将函数名称开头的“钩子”更改为您的模块机器名称。
其次,您必须清除所有缓存,以便 Drupal 重新扫描您的模块并确定有新的钩子函数并开始使用它。
所以,你必须先创建自己的模块:
https://www.drupal.org/developing/modules/7
不要害怕 - 它只是一个文件夹,其中包含描述您的模块和模块文件的信息文件(在最小情况下)。
然后,如果您的模块名为“anna”,您应该在模块文件中创建一个函数并为其命名:
anna_webform_submissions_presave()
并清除缓存 - 之后 Drupal 应该开始调用您的钩子函数。
【讨论】:
hook_webform_submission_presave 函数,因为我需要在将sid 保存到数据库之前对其进行修改。 @MilanG
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
模块不使用它们的.api.php 文件。这些文件用于文档目的。那是the standard way for documenting hook definitions。
【讨论】: