gpt4 book ai didi

Drupal:如何在每个页面请求中调用自定义模块中的一个钩子(Hook)导出?

转载 作者:行者123 更新时间:2023-12-04 07:02:25 25 4
gpt4 key购买 nike

如何在 drupal 网站的每个页面请求中调用自定义模块中的一个钩子(Hook)导出?

这是自定义模块中的钩子(Hook)退出代码:

<?php
function cec_monitoring_exit() {
if ((arg(0) == 'node') && is_numeric(arg(1)) && arg(2) == '') {
// database inserts here
}
}
?>

是因为if条件还是其他原因?因为一些自定义模块正在调用钩子(Hook)“cec_monitoring_exit()”,但其他一些自定义模块没有。

提前致谢。

干杯,
标记

最佳答案

我不确定您所说的 it is not called in some of the custom modules 是什么意思要么,所以只是在这里推测您可能是指其他模块提供的自定义页面:

正如 Jeremy 和 Googletorp 已经说过的,你的 if block

if ((arg(0) == 'node') && is_numeric(arg(1)) && arg(2) == '') {
// database inserts here
}

只有当用户请求一个完整的节点页面(例如'node/42')时才会评估为真。它将 不匹配任何其他页面 例如术语 View (例如'taxonomy/term/36')或默认首页('node')或 View 模块提供的 View 页面(可能/有/任何/路径)等。

因此,您的数据库插入只会发生在节点页面上,不会发生其他任何事情。

如果您想记录每个页面请求,您可以删除 if block 并直接进行数据库插入。

在评论中澄清后编辑 ( cec_monitoring_exit() 不会被其他模块创建的某些页面调用):

我只能看到两个可能的原因。

第一个原因是在页面输出之后、调用 hook_exit() 之前发生错误。实现(检查您的服务器日志中有关失败页面请求的 php 错误)。如果您查看“index.php”(您的 Drupal 实例的顶级文件夹):
require_once './includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

$return = menu_execute_active_handler();

// Menu status constants are integers; page content is a string.
if (is_int($return)) {
switch ($return) {
case MENU_NOT_FOUND:
drupal_not_found();
break;
case MENU_ACCESS_DENIED:
drupal_access_denied();
break;
case MENU_SITE_OFFLINE:
drupal_site_offline();
break;
}
}
elseif (isset($return)) {
// Print any value (including an empty string) except NULL or undefined:
print theme('page', $return);
}

drupal_page_footer();

可以看到页面输出是通过打印 theme('page', $return)的结果生成的. hook_exit() 的调用之后发生在 drupal_page_footer() .

所以你应该检查(最好通过调试器,但你也可以使用打印语句)如果 drupal_page_footer()完全在有问题的页面上执行。如果它被调用,错误可能发生在 hook_exit()实现在您之前调用的另一个模块,因此您需要检查这些。

第二个原因是如果其中一个模块通过调用 theme('page', ...) 本身并在之后停止执行来绕过标准的 Drupal 执行流程。在这种情况下, drupal_page_footer()不会被调用,因为在调用 menu_execute_active_handler() 期间执行会在很久之前停止。 .请注意,没有已建立的 Drupal 模块会这样做,因此不太可能。

除了这些选项之外,我对可能导致这种情况的原因没有进一步的想法。

关于Drupal:如何在每个页面请求中调用自定义模块中的一个钩子(Hook)导出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1641913/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com