あるモジュールの関数を別のモジュールで呼び出すにはどうすればよいですか?独自のカスタムモジュールでuc_stock.moduleのuc_stock_adjust()
関数を呼び出します。出来ますか?
これまでの私のコードは次のとおりです。
_function my_module_node_presave($node){
if($node->type == 'add_stock') {
$stock_value = $node->field_stock_value['und'][0]['value'];
$sku = $node->field_sku['und'][0]['value'];
if (module_exists('uc_stock') && function_exists('uc_stock_adjust')) {
uc_stock_adjust($sku, $stock_value);
}
}
}
_
カスタムモジュールのuc_stock.moduleで定義されている参照uc_stock_adjust()
を使用して、製品の在庫を追加および削除したいと思います。しかし、上記のコードを試しても機能しません。
エラーが発生し、エラーは次のとおりです。
通知:未定義の変数:my_module_node_presave()のsku(\ sites\all\modules\my_module\my_module.moduleの29行目)
あるモジュールの関数を別のモジュールで呼び出すには:
関数が.moduleファイルにない場合は、 module_load_include() を呼び出します。
//Load node.admin.inc from the node module
module_load_include('inc', 'node', 'node.admin');
他のモジュールから関数を呼び出す
function_you_want_to_call();
module_invoke() を参照してください。これは、指定されたモジュールの関数(フック)を呼び出します。
したがって、指定されたフックuc_stock_adjust()
は、module_invoke('uc_stock', 'adjust');
によって呼び出すことができます。 (これは、関数がDrupal module_name_function_nameの規則に従っているためです)。
必要に応じて、追加の引数を関数のパラメーターに渡すこともできます:module_invoke('uc_stock', 'adjust', $first_param_to_pass, $second_param_to_pass, $etc);
Undefined variable: sku
は、変数$sku
の値を宣言していないことを意味します。 $node->field_sku['und'][0]['value']
が値を出力することを確認するためにデバッグを実行しましたか?