首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Drupal 7以编程方式提交表单

Drupal 7以编程方式提交表单
EN

Stack Overflow用户
提问于 2013-11-18 14:38:08
回答 1查看 2.2K关注 0票数 0
代码语言:javascript
复制
$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()中的无效函数名。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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]')用它所需的默认值创建实体实例。然后你就可以:

代码语言:javascript
复制
$wrapper->sku = 'xyz100';
$wrapper->title = 'xyz';
$wrapper->commerce_price->amount = 355;
$wrapper->commerce_price->currency_code = 'USD';

请注意,commerce_price是一种结构化类型,amountcurrency是必需的。amount必须是单位的百分之一,所以一个1.5美元的价格必须表示为150。当实体完全填充任何其他属性时,您需要发出

代码语言:javascript
复制
$wrapper->save(); 

当我第一次读到你的问题时,我想“这应该很容易”.不是的,我花了几个小时才弄清楚。不过,这是值得的,因为我找到了一个更好的解决方案来处理实体(和节点.)在德鲁帕尔。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20050401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档