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

Drupal 7 Drupal7以编程方式提交表单,drupal-7,Drupal 7,我没有收到任何错误,但有很多警告。。。并且数据不会保存到数据库中 call\u user\u func\u array()要求参数1是有效的回调函数,在drupal\u retrieve\u form()中找不到函数“commerce\u product\u form”,或者函数名无效。显然,您试图以编程方式将值提交到生成的表单。这是一种不实用的方法,因为Drupal commerce的模块化架构:在提交表单之前,有很多步骤可以填充表单,即使您(无论如何,您应该)使用Drupal\u get\u

我没有收到任何错误,但有很多警告。。。并且数据不会保存到数据库中


call\u user\u func\u array()要求参数1是有效的回调函数,在drupal\u retrieve\u form()中找不到函数“commerce\u product\u form”,或者函数名无效。显然,您试图以编程方式将值提交到生成的表单。这是一种不实用的方法,因为Drupal commerce的模块化架构:在提交表单之前,有很多步骤可以填充表单,即使您(无论如何,您应该)使用
Drupal\u get\u form()
预述
$form\u state
,您最终也会在提交函数中出错。我试着修改你的代码,但没有用

幸运的是,还有另一种方法,利用Drupal的实体,对此我必须加以赞扬。您可以使用所选类型的Drupal commerce产品对象创建实体元数据包装器:

$wrapper=实体\元数据\包装(“商业\产品”, 商业(新产品)("[产品类型(机器名称));

通过以这种方式调用实体\元数据\包装器,您可以创建一个属性包装器,通过它您可以访问
商业\产品
实体
commerce\u product\u new(“[product\u TYPE\u MACHINE\u NAME]”)
使用所需的默认值创建实体实例。然后你可以做:

$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);
请注意,
commerce\u price
是一种结构化类型,需要
amount
currency
<代码>金额必须是单位的百分之一,因此1.5美元的价格必须表示为150美元。 当您的实体完全填充了任何其他属性时,您需要发出

$wrapper->sku = 'xyz100';
$wrapper->title = 'xyz';
$wrapper->commerce_price->amount = 355;
$wrapper->commerce_price->currency_code = 'USD';

当我第一次读到你的问题时,我想“这应该很容易”。。。事实并非如此,我花了几个小时才弄明白。不过,这是值得的,因为我找到了一个更好的解决方案来处理Drupal中的实体(和节点…)。

您显然是在尝试以编程方式将值提交到生成的表单。这是一种不实用的方法,因为Drupal commerce的模块化架构:在提交表单之前,有很多步骤可以填充表单,即使您(无论如何,您应该)使用
Drupal\u get\u form()
预述
$form\u state
,您最终也会在提交函数中出错。我试着修改你的代码,但没有用

幸运的是,还有另一种方法,利用Drupal的实体,对此我必须加以赞扬。您可以使用所选类型的Drupal commerce产品对象创建实体元数据包装器:

$wrapper=实体\元数据\包装(“商业\产品”, 商业(新产品)("[产品类型(机器名称));

通过以这种方式调用实体\元数据\包装器,您可以创建一个属性包装器,通过它您可以访问
商业\产品
实体
commerce\u product\u new(“[product\u TYPE\u MACHINE\u NAME]”)
使用所需的默认值创建实体实例。然后你可以做:

$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);
请注意,
commerce\u price
是一种结构化类型,需要
amount
currency
<代码>金额必须是单位的百分之一,因此1.5美元的价格必须表示为150美元。 当您的实体完全填充了任何其他属性时,您需要发出

$wrapper->sku = 'xyz100';
$wrapper->title = 'xyz';
$wrapper->commerce_price->amount = 355;
$wrapper->commerce_price->currency_code = 'USD';

当我第一次读到你的问题时,我想“这应该很容易”。。。事实并非如此,我花了几个小时才弄明白。不过,这是值得的,因为我找到了一个更好的解决方案来处理Drupal中的实体(和节点…)。

您显然是在尝试以编程方式将值提交到生成的表单。这是一种不实用的方法,因为Drupal commerce的模块化架构:在提交表单之前,有很多步骤可以填充表单,即使您(无论如何,您应该)使用
Drupal\u get\u form()
预述
$form\u state
,您最终也会在提交函数中出错。我试着修改你的代码,但没有用

幸运的是,还有另一种方法,利用Drupal的实体,对此我必须加以赞扬。您可以使用所选类型的Drupal commerce产品对象创建实体元数据包装器:

$wrapper=实体\元数据\包装(“商业\产品”, 商业(新产品)("[产品类型(机器名称));

通过以这种方式调用实体\元数据\包装器,您可以创建一个属性包装器,通过它您可以访问
商业\产品
实体
commerce\u product\u new(“[product\u TYPE\u MACHINE\u NAME]”)
使用所需的默认值创建实体实例。然后你可以做:

$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);
请注意,
commerce\u price
是一种结构化类型,需要
amount
currency
<代码>金额必须是单位的百分之一,因此1.5美元的价格必须表示为150美元。 当您的实体完全填充了任何其他属性时,您需要发出

$wrapper->sku = 'xyz100';
$wrapper->title = 'xyz';
$wrapper->commerce_price->amount = 355;
$wrapper->commerce_price->currency_code = 'USD';

当我第一次读到你的问题时,我想“这应该很容易”。。。事实并非如此,我花了几个小时才弄明白。不过,这是值得的,因为我找到了一个更好的解决方案来处理Drupal中的实体(和节点…)。

您显然是在尝试以编程方式将值提交到生成的表单。这是一种不实用的方法,因为Drupal commerce的模块化架构:在提交表单之前,有很多步骤可以填充表单,即使您(无论如何,您应该)使用
Drupal\u get\u form()
预述
$form\u state
,您最终也会在提交函数中出错。我试着修改你的代码,但没有用

幸运的是,还有另一种方法,利用Drupal的实体,对此我必须加以赞扬。您可以使用所选类型的Drupal commerce产品对象创建实体元数据包装器:

$wrapper=实体\元数据\包装(“商业\产品”, 商业产品新(“[产品类型]机器_