web-dev-qa-db-fra.com

Comment appeler une fonction d'un module dans un autre module

Comment puis-je appeler une fonction d'un module dans un autre module? Je veux appeler la fonction uc_stock_adjust() de uc_stock.module dans mon propre module personnalisé. C'est possible?

Voici mon code jusqu'à présent:

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

Je souhaite ajouter et supprimer des stocks de produits en utilisant la référence uc_stock_adjust(), qui est définie dans uc_stock.module, dans mon module personnalisé. Mais quand j'essaie le code ci-dessus, cela ne fonctionne pas.

Cela donne une erreur, et l'erreur est:

Remarque: Variable non définie: sku dans my_module_node_presave () (ligne 29 de\sites\all\modules\my_module\my_module.module) ‌

6
aashi

Pour appeler la fonction d'un module dans un autre module:

  1. Si la fonction n'est pas dans le fichier .module, appelez module_load_include ()

    //Load node.admin.inc from the node module
    module_load_include('inc', 'node', 'node.admin');
    
  2. Appeler la fonction depuis l'autre module

    function_you_want_to_call();
    
15
anduril

Voir module_invoke () . Cela appelle une fonction (hook) dans un module spécifié.

Le hook donné uc_stock_adjust() peut donc être appelé par: module_invoke('uc_stock', 'adjust');. (Notez que cela est dû au fait que la fonction suit Drupal conventions de module_name_function_name).

Si vous le souhaitez, des arguments supplémentaires peuvent également être passés aux paramètres d'une fonction avec: module_invoke('uc_stock', 'adjust', $first_param_to_pass, $second_param_to_pass, $etc);

0
willsquire

Undefined variable: sku signifie que vous n'avez pas déclaré de valeur pour la variable $sku. Avez-vous effectué le débogage pour vous assurer que $node->field_sku['und'][0]['value'] sort une valeur?

0
beth