как создать тип контента продукта Ubercart в модуле - PullRequest
1 голос
/ 09 июля 2010

Я бы хотел создать тип контента продукта из модуля.Я следовал этому очень полезному руководству по программному созданию типа контента.Теперь, как мне «произвести» это?

Если уже существует модуль, который делает это, и который я мог бы использовать для обучения, пожалуйста, укажите мне в его направлении.Или, может быть, где-то есть гид?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 12 июля 2010

Я понял это.Очевидно, что если вы создаете тип контента, который также является классом продукта Ubercart, вы не можете просто следовать учебному пособию, на которое я ссылался выше, а затем «привязать» материал Ubercart.В соответствии с приведенным выше руководством вам необходимо реализовать следующие ловушки для создания типа контента из вашего модуля:

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

Чтобы создать тип контента, который также является классом продукта, необходимо внести следующие изменения вприведенный выше список:

  • Удалить hook_info ().Не знаю, почему это вызывает проблему, но это так.
  • Используйте hook_perm (), hook_access (), hook_form () и hook_help () как обычно.
  • Используйте hook_enable ()(запускается при включении модуля) и включает следующий код:

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

Как вы можете видеть, фрагмент добавляет запись в таблицу uc_product_classes, и я полагаю, что этовсе потребности Ubercart.

Наконец, я также реализовал специфический для Ubercart хук ниже в моем модуле: hook_product_types ()

Я просто выясняю этотак как я иду вперед, поэтому я рад получить исправления или предложения.

1 голос
/ 19 января 2011

Я только что понял это, похоже, все работает нормально, к сожалению, API не поддерживает это официально.

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

}
...