Вы, видимо, пытаются программно представить значения в Drupal commerce сгенерированной формы. Это непрактичный подход из-за модульной архитектуры торговли Drupal: есть несколько шагов, которые заполняют форму до ее отправки, и даже если бы у вас было (как и должно было быть, в любом случае) prepoulate $form_state
с drupal_get_form()
, вы бы закончили с ошибками в функции отправки. Я попытался исправить ваш код, но безрезультатно.
К счастью, существует еще один подход, использующий сущности Drupal, для чего я должен одолжить this post. Вы можете создать оболочку метаданных объекта с объектом коммерции в Drupal продукта выбранного типа:
$ обертка = entity_metadata_wrapper ('commerce_product', commerce_product_new ('[PRODUCT_TYPE_MACHINE_NAME]'));
Вызывая объект 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();
Когда я впервые прочитал ваш вопрос подумал: «Это должно быть легко» ... Это было не так, и я потратил несколько часов, чтобы понять это. Однако это стоило того, потому что я нашел гораздо лучшее решение для обработки сущностей (и узлов ...) в Drupal.
Я тоже пытался использовать drupal_get_form(), но не повезло. Это элегантное решение. – dlats