web-dev-qa-db-ja.com

別のモジュールで1つのモジュールの関数を呼び出す方法

あるモジュールの関数を別のモジュールで呼び出すにはどうすればよいですか?独自のカスタムモジュールで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行目)‌

6
aashi

あるモジュールの関数を別のモジュールで呼び出すには:

  1. 関数が.moduleファイルにない場合は、 module_load_include() を呼び出します。

    //Load node.admin.inc from the node module
    module_load_include('inc', 'node', 'node.admin');
    
  2. 他のモジュールから関数を呼び出す

    function_you_want_to_call();
    
15
anduril

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);

0
willsquire

Undefined variable: skuは、変数$skuの値を宣言していないことを意味します。 $node->field_sku['und'][0]['value']が値を出力することを確認するためにデバッグを実行しましたか?

0
beth