Pregunta

He encontrado que Magento tiene dos formas separadas de manejo de precios especiales, pero no sé que es lo mejor para mi caso. He descubierto que las reglas de precios de catálogo son muy potente, pero no sé cómo recorrer sin codificar el identificador de la regla.

Mi cliente tiene que tener dos tipos de precios especiales: descuentos normales (20-30% de descuento en algunos productos) y "ventas flash" que duran un tiempo corto (1-2 días). Es necesario disponer de ellas aparecen en la página principal y en las páginas de categorías, los que están en la necesidad hogar de ser seleccionados por el administrador del programa de fondo y los que están en las páginas de categorías también, que se establecerán de 4 productos en cada página (los que están en las páginas de categorías tienen que ser a partir de dicha categoría). Entonces tengo un enlace a una página con todos los productos que tienen precios especiales en ellos.

El "seleccionar" parte del acuerdo Realmente no sé cómo hacerlo, pero hasta ahora ni siquiera puedo conseguir los productos con una regla de precios de catálogo para mostrar en mi página de inicio. Tengo un bloque para ellos y me encontré con este código:

$rule = Mage::getModel('catalogrule/rule')->load(1);   
$rule->setWebsiteIds("1"); $productIdsArray = $rule->getMatchingProductIds(); 
$productsCollection = Mage::getModel('catalog/product')->getCollection() ->addAttributeToSelect("*") ->addAttributeToFilter("entity_id", array("in", $productIdsArray)); 
$this->setProductCollection($collection); 

Pero estoy adivinando el ->load(1); está codificando el ID de la promoción, lo que si el usuario crea una nueva regla de precio, entonces? ¿Cómo hacer que toda bucle a través de todos los productos que tienen una regla en ellos?

Yo sé cómo colocar a través de productos del precio especial y tal vez podría utilizar para las promociones de flash, pero creo que voy a estar complicando con el resto de las funciones que necesito para poner en práctica.

Además, si usted tiene algún consejo sobre cómo manejar el hecho de que las necesidades de los usuarios para seleccionar los 4 productos destacados estaría muy agradecido.

¿Fue útil?

Solución

Tal vez considere la siguiente configuración:

La aplicación de descuentos normales (20-30% de descuento en algunos productos)
O bien hacerlo manualmente en cada producto o crear una categoría denominada "Venta Artículos" y menos que una subcategoría para cada soporte de descuento, por ejemplo, "20 por ciento", "30 por ciento", etc. A continuación, puede utilizar las reglas de precio de catálogo de cada uno de estos categorías para obtener los descuentos deseados.

Ventas Flash
Una vez más, crear una categoría para la venta flash y luego crear una regla de precio de catálogo descontando productos en esta categoría. Se puede establecer una "a" y "de" fecha de esta regla precio.

Mostrando productos de venta en la página web
Para mostrar los productos que tienen un precio especial que se aplica a ellos Por lo general crear un nuevo bloque llamado Namespace_Module_Block_Product_List_Special (Special.php). Se necesita ampliar Mage_Catalog_Block_Product_List. A continuación, puede sobrescribir el _getProductCollection(). Aquí está todo el archivo de bloque:

<?php
class Namespace_Module_Block_Product_List_Special extends Mage_Catalog_Block_Product_List
{

    //default item limit
    protected $_defaultItemLimit = 4;


    public function _construct() {
        parent::_construct();
    }

    /**
     * Retrieve product collection
     *
     * @return Mage_Eav_Model_Entity_Collection_Abstract
     */
    protected function _getProductCollection()
    {

        $todayStartOfDayDate  = Mage::app()->getLocale()->date()
            ->setTime('00:00:00')
            ->toString(Varien_Date::DATETIME_INTERNAL_FORMAT);

        $todayEndOfDayDate  = Mage::app()->getLocale()->date()
            ->setTime('23:59:59')
            ->toString(Varien_Date::DATETIME_INTERNAL_FORMAT);


        $collection = Mage::getResourceModel('catalog/product_collection');
        $collection->setVisibility(Mage::getSingleton('catalog/product_visibility')->getVisibleInCatalogIds());
        $collection = $this->_addProductAttributesAndPrices($collection)
            ->addStoreFilter()
            ->addAttributeToFilter('special_from_date', array('date' => true, 'to' => $todayStartOfDayDate))
            ->addAttributeToFilter('special_to_date', array('or'=> array(
                0 => array('date' => true, 'from' => $todayStartOfDayDate),
                1 => array('is' => new Zend_Db_Expr('null')))
            ), 'left')
            ->addAttributeToSort('special_from_date', 'desc')
        ;


        $itemLimit = $this->getItemLimit();
        $collection->setPageSize($itemLimit);
        return $collection;
    }

    public function getItemLimit() {

        if($this->hasData('item_limit')) {
            return $this->getData('item_limit');
        }

        return $this->_defaultItemLimit;
    }

}

Para usarlo tendrá que añadir esto a su config.xml bajo la etiqueta de <global>:

    <blocks>
        <modulename>
            <class>Namespace_Module_Block</class>
        </modulename>
        <catalog>
            <rewrite>
                <product_list_special>Namespace_Module_Block_Product_List_Special</product_list_special>
            </rewrite>
        </catalog>
    </blocks>

Y luego mostrarlo en la página de inicio de este modo:

{{block type="catalog/product_list_special" name="homepage.products.special" template="catalog/product/list.phtml"}}

O a través de XML diseño:

<block type="catalog/product_list_special" name="hometabs.products.special" template="catalog/product/list.phtml"/>

Se podría utilizar el mismo método para mostrar los productos especiales en cada categoría, pero eso requeriría un cambio en el método _getProductCollection() que los cheques para la categoría actual. Echar un vistazo a Mage_Catalog_Block_Product_list::_getProductCollection() para algunas ideas sobre el código para utilizar para esto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top