pro pricing plataforma ecommerce costo business magento e-commerce catalog

pricing - plataforma de e commerce magento



Magento: cómo obtener el precio de un producto con las reglas de catálogo aplicadas (4)

Como las reglas de precios de catálogo dependen en gran medida del tiempo, la tienda y el cliente visitante, debe establecer esos parámetros cuando desee recuperar el precio final del producto con las reglas de precio aplicadas.

Entonces, en su caso, asegúrese de que el producto provisto se pase con la identificación de la tienda y el grupo de clientes que desee, que se puede configurar como:

Mage::getModel(''catalogrule/rule'')->calcProductPriceRule($product->setStoreId(''STORE_ID'')->setCustomerGroupId(''CUSTOMER_GROUP_ID''),$product->getPrice())

Estoy desarrollando un script (externo a Magento, no a un módulo) que tiene como objetivo generar una lista de texto de todos los productos disponibles, sus precios y algunos otros atributos. Sin embargo, las reglas de precios de catálogo no parecen aplicarse a los precios de los productos. Si utilizo alguno de los siguientes:

$_product->getPrice() $_product->getFinalPrice()

Obtengo el precio normal (sin aplicar reglas).

Si uso:

$_product->getSpecialPrice()

Obtendré nulo a menos que el producto tenga un precio especial insertado en el producto (es decir, si el precio especial no está relacionado con las reglas del catálogo).

Yo tambien lo intenté

Mage::getModel(''catalogrule/rule'')->calcProductPriceRule($product,$product->getPrice())

como se sugiere en la respuesta dada por Fabian Blechschmidt, pero es interesante que devuelva el precio normal solo si el producto está afectado por alguna regla de catálogo, de lo contrario, devuelve el valor nulo .

Hace un tiempo hubo una pregunta similar en los foros de StackOverflow y Magento , pero la respuesta proporcionada (que consiste en insertar el código a continuación) no funciona para mí (los precios devueltos siguen siendo los mismos).

Mage::app()->loadAreaPart(Mage_Core_Model_App_Area::AREA_FRONTEND,Mage_Core_Model_App_Area::PART_EVENTS);

¿Alguien tiene una idea de cómo lograr esto?

Estoy usando Magento 1.6.2.0. Gracias por adelantado.


Descubrí el problema. Los precios con descuento muestran Ok en la interfaz de la tienda. El problema fue que estaba desarrollando un script "externo" a Magento (por lo tanto no es un módulo de Magento), algo así como:

<?php set_time_limit(0); ignore_user_abort(); error_reporting(E_ALL^E_NOTICE); header("Content-Type: text/plain; charset=utf-8"); require_once "app/Mage.php"; // Get default store code $default_store = Mage::app()->getStore(); ...

Para que todo funcione correctamente, parece que uno debe seguir el arranque apropiado de Magento y desarrollar todo como un módulo. Mi script era tan simple que pensé que no sería necesario codificar un módulo completo. En otras palabras, todo en Magento debería ser realmente un módulo.

Concluyendo, utilizando el enfoque de módulo, todos los métodos funcionan como se espera:

$_product->getPrice() $_product->getFinalPrice() $_product->getSpecialPrice()

Gracias por su aportación a todos ustedes.


Esto me ayudó en este problema: http://www.magentocommerce.com/boards/viewthread/176883/ . La solución de Jernej parece plausible, pero no maneja reglas que sobrescriben otras reglas al usar ''detener procesamiento'' y, por lo tanto, puede aplicar más de una regla.

$original_price = $_product->getPrice(); $store_id = 1; // Use the default store $discounted_price = Mage::getResourceModel(''catalogrule/rule'')->getRulePrice( Mage::app()->getLocale()->storeTimeStamp($store_id), Mage::app()->getStore($store_id)->getWebsiteId(), Mage::getSingleton(''customer/session'')->getCustomerGroupId(), $_product->getId()); // if the product isn''t discounted then default back to the original price if ($discounted_price===false) { $discounted_price=$original_price; }