Tengo un observador que agrega opciones personalizadas dinámicas a la página de detalles del producto, que se llama en el catalog_controller_product_view
evento. Esto permite al cliente seleccionar de un menú desplegable de sus códigos de licencia existentes.
public function addLicenseOptions(Varien_Event_Observer $observer) {
$product = $observer->getEvent()->getProduct();
if ($product->isSubscriptionProduct()) {
$optionModel = Mage::getModel('catalog/product_option')
->setTitle('License Code')
->setProductId($product->getId())
->setStoreId($product->getStoreId())
->setId('license_code')
->setType('drop_down')
->setPrice(null)
->setPriceType(null)
->setIsRequire(true);
$customer = Mage::getSingleton('customer/session')->getCustomer();
if ($customer->getId()) {
$linksPurchased = Mage::getResourceModel('downloadable/link_purchased_collection')
->addFieldToFilter('customer_id', $customer->getId());
if ($linksPurchased->count() > 0) {
foreach ($linksPurchased as $linkPurchased) {
$valueModel = Mage::getModel('catalog/product_option_value')
->setTitle($linkPurchased->getData('key_code'))
->setProduct($product)
->setOption($optionModel)
->setId($linkPurchased->getData('license_code'))
->setPrice(null)
->setPriceType('fixed')
->setSku(null);
$optionModel->addValue($valueModel);
}
$product->setHasOptions(1);
$product->addOption($optionModel);
}
}
}
}
Pero, cuando hago el pedido, las opciones seleccionadas solo se guardan en el info_buyRequest
. ¿Hay alguna manera de que se guarde como si fuera una opción de producto creada en el administrador?
Relacionado con la respuesta de Marius, aquí hay algo que se me ocurrió:
Tengo un controlador personalizado que maneja la configuración de un tipo de producto personalizado. Este controlador agrega
additional_options
durante agregar al carrito.En un observador del evento
sales_convert_quote_item_to_order_item
, luego tomoadditional_options
y establezco como opciones en el artículo de pedido:Al usarlo,
additional_options
no debería tener que preocuparse por varios bloques / plantillas que muestran las opciones (aunque puede preferir un formato alterado), ya que estos bloques llamarán$options['additional_options']
Ver aquífuente