Necesito ampliar el carrito de compras de Magento para incluir un paso adicional para un localizador de tiendas. Entiendo que necesito sobrescribir el controlador central de OnePage (Mage_Checkout_OnepageController
) y los bloques (Mage_Checkout_Block_Onepage
), pero lo que se debe hacer con respecto al seguimiento de la información adicional (por ejemplo, las opciones seleccionadas por el usuario de mi paso personalizado).Extender Magento Carro de la compra
Respuesta
Aquí hay una serie de pasos necesarios para obtener la solución completa.
En primer lugar, cree un nuevo módulo. Use el ModuleCreator si lo desea.
Luego, escriba setup script en su módulo para agregar los nuevos campos a la estructura de atributos de Magento, p. :
$setup = new Mage_Sales_Model_Mysql4_Setup('core_setup');
$setup->startSetup();
$setup->addAttribute('quote', 'my_attribute', array('type' => 'varchar', 'visible' => false, 'required' => false));
$setup->addAttribute('order', 'my_attribute', array('type' => 'varchar', 'visible' => false, 'required' => false));
$setup->addAttribute('invoice', 'my_attribute', array('type' => 'varchar', 'visible' => false, 'required' => false));
$setup->addAttribute('creditmemo', 'my_attribute', array('type' => 'varchar', 'visible' => false, 'required' => false));
Nota el uso de la Mage_Sales_Model_Mysql4_Setup
para agregar los campos a los pertinentes sales_flat_quote
y sales_flat_order
tablas.
Ahora, introduzca los siguientes valores en el archivo de su módulo de config.xml:
<global>
<fieldsets>
<sales_convert_quote>
<my_attribute>
<to_order>*</to_order>
</my_attribute>
</sales_convert_quote>
<sales_convert_order>
<my_attribute>
<to_cm>*</to_cm>
<to_invoice>*</to_invoice>
</my_attribute>
</sales_convert_order>
</fieldsets>
Eso dará instrucciones a Magento para copiar los valores de su campo personalizado de la cita para el fin de facturar y credit_memo, etc.
Luego, en su código de bloque/controlador personalizado, podrá usar los captadores y establecedores mágicos de Magento para persistir en los valores.
$oQuote = Mage::getSingleton('checkout/session')->getQuote();
$oQuote->setMyAttribute('some_value');
$oQuote->save();
Debería ver la nueva columna y el valor guardado en sales_flat_quote
. Luego, una vez que el cliente completa el proceso de pago, se debe guardar el mismo valor en sales_flat_order
.
Tenga en cuenta que el código anterior se puede extender a trabajar para quote_item
y order_item
con sólo cambiar quote
a quote_item
etc, sin embargo, si se desea guardar los valores de atributos que se han establecido en sus productos, entonces se requiere un trabajo extra.
insertar un nuevo bloque de XML en su config.xml (de nuevo dentro del nodo global):
<sales>
<quote>
<item>
<product_attributes>
<my_attribute />
</product_attributes>
</item>
</quote>
</sales>
Dónde my_attribute
es el código de atributo en el modelo del producto. Eso hará que el my_attribute disponibles sobre este producto vinculado, por lo que se puede acceder a él a través de
$oQuoteItem->getProduct()->getMyAttribute()
sin necesidad de realizar una completa Mage::getModel('catalog/product')->load($oQuoteItem->getProductId())
. Esto es mucho más eficiente.
Luego, necesitará un observador para copiar los valores del objeto del producto al objeto quote_item. Por lo tanto, declare su observador en el config.xml:
<events>
<sales_quote_item_set_product>
<observers>
<quoteitem_set_custom_data>
<type>singleton</type>
<class>mymodule/observer</class>
<method>setCustomDataOnQuoteItem</method>
</quoteitem_set_custom_data>
</observers>
</sales_quote_item_set_product>
<events>
y escribir código en su clase observador como esto:
public function setCustomDataOnQuoteItem($oObserver){
$oProduct = $oObserver->getProduct();
$oQuoteItem = $oObserver->getQuoteItem();
foreach(array('my_attribute') as $vAttributeCode){
$oQuoteItem->setData($vAttributeCode,$oProduct->getData($vAttributeCode));
}
}
Aquí es un módulo completo de trabajo .. su (casi) la misma que el código anterior de Johnatan. Usted lo encontrará aquí: https://bitbucket.org/vovsky/adding-custom-product-attribute-to-quote-and-order-items-in/
y una explicación completa de cada paso aquí: http://www.atwix.com/magento/custom-product-attribute-quote-order-item/
- 1. Magento Checkout redirecciona a la página "Carro de la compra está vacío" y borra el carro en IE7 e IE8
- 2. Gestión de carro de compra y stock
- 3. Magento- Cómo personalizar el carrito de la compra
- 4. Magento - Modificar las etiquetas de carro y la salida (revisión de la orden) pantallas
- 5. Magento: Obtener la cantidad en la compra de un producto determinado
- 6. Google Checkout: la mejor forma de manejar la edición de la compra y la confirmación de compra
- 7. Magento ¿Cómo verificar si el carrito de la compra está vacío o no?
- 8. En la compra de la aplicación, podemos reembolsar la compra en la aplicación
- 9. Compra de producto físico desde la aplicación iPhone sin Apple en la compra de la aplicación
- 10. ¿Carro de compras, sesión o DB?
- 11. En la compra de la aplicación
- 12. Agregue valor de opción al producto, luego al carro con Magento
- 13. ¿Cómo verificar si un producto de Magento ya está agregado en el carro o no?
- 14. Eventos personalizados en Magento
- 15. Carriles para múltiples tipos de productos carrito de la compra
- 16. extender la clase DOP
- 17. Magento anula el controlador
- 18. Eliminación de una compra en una cuenta de usuario de prueba de compra en la aplicación
- 19. ¿Admite PhoneGap la compra desde la aplicación?
- 20. ¿Cómo puedo anular un controlador Magento?
- 21. Cómo deshabilitar la funcionalidad de ventas en línea de magento?
- 22. Camel - extender Java DSL?
- 23. Carácter Unicode: carro
- 24. Cómo extender la clase css
- 25. extender la propiedad expressjs res
- 26. Extender la clase Singleton abstracta
- 27. InApp Compra rechazada en la App Store
- 28. iOS - Compra en la aplicación y aplicaciónDidBecomeActive
- 29. iOS App Fecha de compra
- 30. Enlace de referencia para la compra de la aplicación
¿Por qué nadie crear un blog tan clara y completa como lo hizo ?? Pasé 2 horas buscando tu respuesta! Gracias ! – LittleBigDev