$form2_id = 'commerce_product_ui_product_form';
$form2_state['values'] = array(
'sku' => 'xyz100',
'title' => 'xyz',
'commerce_price' => '355',
'op' => t('Save Product')
);
drupal_form_submit($form2_id, $form2_state);
$form_errors = form_get_errors();
drupal_set_message('Form errors = '.$form_errors);我没有错误但是很多警告..。并且数据没有保存到数据库中。
call_user_func_array()期望参数1是一个有效的回调、未找到函数'commerce_product_product_form‘或drupal_retrieve_form()中的无效函数名。
发布于 2013-11-22 20:11:59
显然,您试图以编程方式向Drupal商业生成的表单提交值。这是一种不切实际的方法,因为Drupal商业的模块化结构:在表单提交之前,有很多步骤填充表单,即使您已经(无论如何,您应该已经)使用drupal_get_form()预置$form_state,但最终提交函数会出现错误。我试着修改你的代码,但没有用。
幸运的是,还有另一种方法,利用Drupal的实体,我必须归功于这个职位。您可以使用所选类型的的产品对象创建实体元数据包装器:
commerce_product_new('PRODUCT_TYPE_MACHINE_NAME'));= $wrapper =entity_metadata_wrapper(“商业产品”)
通过这样调用entity_metadata_wrapper,您可以创建一个属性包装器,通过它可以访问一个commerce_product实体;commerce_product_new('[PRODUCT_TYPE_MACHINE_NAME]')用它所需的默认值创建实体实例。然后你就可以:
$wrapper->sku = 'xyz100';
$wrapper->title = 'xyz';
$wrapper->commerce_price->amount = 355;
$wrapper->commerce_price->currency_code = 'USD';请注意,commerce_price是一种结构化类型,amount和currency是必需的。amount必须是单位的百分之一,所以一个1.5美元的价格必须表示为150。当实体完全填充任何其他属性时,您需要发出
$wrapper->save(); 当我第一次读到你的问题时,我想“这应该很容易”.不是的,我花了几个小时才弄清楚。不过,这是值得的,因为我找到了一个更好的解决方案来处理实体(和节点.)在德鲁帕尔。
https://stackoverflow.com/questions/20050401
复制相似问题