2010-07-09 9 views
1

Je souhaite créer un type de contenu de produit à partir d'un module. J'ai suivi this guide très utile pour créer par programme un type de contenu. Maintenant, comment est-ce que je le "productize"?comment créer un type de contenu de produit ubercart dans un module

S'il existe déjà un module qui fait cela et que je peux en tirer des leçons, veuillez me diriger dans cette direction. Ou peut-être y a-t-il un guide qui circule quelque part?

Merci!

Répondre

2

Je l'ai compris. Apparemment, si vous créez un type de contenu qui est aussi une classe de produit ubercart, vous ne pouvez pas simplement suivre le tutoriel auquel j'ai lié ci-dessus et ensuite "coller" sur ubercart. Selon le tutoriel ci-dessus, vous devez mettre en œuvre les crochets suivants pour créer un type de contenu à partir de votre module:

  • hook_info()
  • hook_perm()
  • hook_access()
  • hook_form()
  • hook_help()

pour créer un type de contenu qui est aussi une classe de produits, vous devez apporter les modifications suivantes aux lis ci-dessus t:

  • Supprimer hook_info(). Je ne sais pas pourquoi cela cause un problème, mais c'est le cas.
  • Utilisez hook_perm(), hook_access(), hook_form() et hook_help() comme d'habitude.
  • Utilisez hook_enable() (qui se déclenche lorsque le module est activé), et inclure le code suivant:

    function uc_yourmodule_enable() { 
        db_query("INSERT INTO {uc_product_classes} (pcid, name, description) 
          VALUES ('%s', '%s', '%s')", 
          'product_class_id', 
          'Product Class Name', 
          'Product Class Description.'); 
    
        node_types_rebuild(); 
    } 
    

Comme vous pouvez le voir, l'extrait ajoute une entrée dans la table uc_product_classes et Je suppose que c'est tous les besoins d'ubercart.

Enfin, je l'ai également mis en place un crochet spécifique à Ubercart plus bas dans mon module: hook_product_types()

Je suis juste comme cela comprendre que je vais le long, donc je suis heureux de recevoir des corrections ou des suggestions.

1

Je pensais juste à cela, cela semble fonctionner, il est regrettable que l'API ne supporte pas cela d'une manière officielle.

function create_uc_product_type ($name , $pcid , $description) 
    { 

    $pcid = preg_replace (array ('/\s+/' , '/\W/') , array ('_' , '') , strtolower ($pcid)); 


    db_query ("INSERT INTO {uc_product_classes} (pcid, name, description) VALUES ('%s', '%s', '%s')" , $pcid , $name , $description); 
    uc_product_node_info (TRUE); 
    variable_set ('node_options_' . $pcid , variable_get ('node_options_product' , array ('status' , 'promote'))); 

    if (module_exists ('comment')) { 
     variable_set ('comment_' . $pcid , variable_get ('comment_product' , COMMENT_NODE_READ_WRITE)); 
    } 

    module_invoke_all ('product_class' , $pcid , 'insert'); 

    if (module_exists ('imagefield')) { 
     uc_product_add_default_image_field ($pcid); 
    } 



    $type = node_get_types('type', $pcid); 
    $type->custom = 1; 

    node_type_save($type); 

    node_types_rebuild (); 
    menu_rebuild (); 

    drupal_set_message (t ('Product class ' . $pcid . ' created.')); 

}