714
edits
No edit summary |
|||
| Line 13: | Line 13: | ||
=简介= | =简介= | ||
Hooks 是一项开发功能,允许开发人员将自定义代码添加到Dolibarr的标准页面,而无需修改Dolibarr的核心文件。与链接到Dolibarr事件的 [[触发系统]] | Hooks 是一项开发功能,允许开发人员将自定义代码添加到Dolibarr的标准页面,而无需修改Dolibarr的核心文件。与链接到Dolibarr事件的 [[触发系统]](与Dolibarr代码交互的另一种方式)不同,Hooks可以预埋在Dolibarr核心代码的任何时间、任何地点运行。这些是程序中的插入点(被视为代码执行从当前页面“转移”并运行自定义代码,然后返回的点)。 | ||
每个Hook都有一个名字,例如,代码:$reshook=$hookmanager->executeHooks('doActions',$parameters,$object,$ | 每个Hook都有一个名字,例如,代码:$reshook=$hookmanager->executeHooks('doActions',$parameters,$object,$action)中的“doActions”;然而,Hook的名称通常不是唯一的(可能在各种代码模块中重复使用),因此为了准确识别位置,代码模块具有一个“上下文”名称,该名称将被该代码模块位置中的所有Hooks引用。因此,要使用Hooks,您需要知道它的上下文名称(位置)和Hooks名称。 | ||
* | *Hook是否处于活动状态取决于上下文(通常每个模块有一个上下文:例如,产品模块的“productcard”,发票模块的“invoicecard”等等)。要查找现有的Hooks,请在php文件中搜索“'''initHooks('''”。 | ||
这将找到诸如“$hookmanager->initHooks(array('thirdpartycomm','globalcard'));”的结果,其中“thirdpartycomm”是上下文名称 | 这将找到诸如“$hookmanager->initHooks(array('thirdpartycomm','globalcard'));”的结果,其中“thirdpartycomm”是上下文名称 | ||
* | *Hooks是用于插入或替换标准代码的函数。要查找可以覆盖的代码,请搜索“'''executeHooks('''”。找不到就可能没有预埋Hook,所以你可以添加自己的Hook(并在Github中提交相应的拉取请求,以便将其包含在未来的版本中)。 | ||
这将找到诸如“$reshook = $hookmanager->executeHooks('addMoreBoxStatsCustomer', $parameters, $object, $action);”的结果,其中“addMoreBoxStatsCoustomer”是Hook名称。 | 这将找到诸如“$reshook = $hookmanager->executeHooks('addMoreBoxStatsCustomer', $parameters, $object, $action);”的结果,其中“addMoreBoxStatsCoustomer”是Hook名称。 | ||
=添加hook以允许插入代码= | =添加hook以允许插入代码= | ||
要在您自己的模块中预埋hook(以便您的模块可以被其他模块“挂接”),您需要执行两个步骤。 | |||
这些步骤必须为模块中要预埋hook的每个PHP脚本复制。当然,这也是hook在每个核心Dolibarr模块中实现的方式。 | |||
1 - 初始化HookManager对象 | 1 - 初始化HookManager对象 | ||
| Line 52: | Line 52: | ||
global $hookmanager; | global $hookmanager; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
2 - | |||
2 - 然后将<syntaxhighlight lang="PHP"> | |||
$parameters=array(); | |||
$reshook=$hookmanager->executeHooks('hookname',$parameters,$object,$action); // See description below | |||
// Note that $action and $object may have been modified by hook | |||
if (empty($reshook)) | |||
{ | |||
... // standard code that can be disabled/replaced by hook if return code > 0. | |||
} | |||
</syntaxhighlight>调用放置在允许添加代码的位置: | |||
<syntaxhighlight lang="PHP"> | <syntaxhighlight lang="PHP"> | ||
| Line 67: | Line 76: | ||
- '<nowiki/>'''hookname'''' 是将被调用的hook的名称(可以是您想要的任何内容,也可以遵循 Dolibarr 的命名法,查看下面的钩子列表)。例如:“formObjectOptions” | - '<nowiki/>'''hookname'''' 是将被调用的hook的名称(可以是您想要的任何内容,也可以遵循 Dolibarr 的命名法,查看下面的钩子列表)。例如:“formObjectOptions” | ||
- '''$parameters''' 是一个自定义数组,用于向钩子传递更多自定义数据(钩子中的函数可以处理这些数据)。把你想要的放在这里,它可以是一个文件、一个字符串数组、或任何东西... | - '''$parameters''' 是一个自定义数组,用于向钩子传递更多自定义数据(钩子中的函数可以处理这些数据)。把你想要的放在这里,它可以是一个文件、一个字符串数组、或任何东西... | ||
edits