我想从模块中创建产品内容类型。我按照this非常有用的指南以编程方式创建了一种内容类型。现在我该如何“产品化”呢?
如果已经存在一个可以用来学习的模块,请指出我的方向。或者也许有一个指南漂浮在某个地方?
谢谢!
答案 0 :(得分:2)
我明白了。显然,如果你正在创建一个也是一个ubercart产品类的内容类型,你不能简单地按照我上面链接的教程,然后“粘贴”ubercart的东西。根据上面的教程,您需要实现以下挂钩以在模块中创建内容类型:
要创建也是产品类的内容类型,您需要对上面的列表进行以下修改:
使用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 :(得分:1)
我只是搞清楚这一点,这似乎工作正常,不幸的是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.' ) );
}