Показать отсутствующий на складе продукт "варианты" для настраиваемых продуктов


Знаете ли вы, как показать товар "варианты" (извините, если эта терминология неверна), даже если его нет в наличии и, возможно, показать "Нет в наличии" вместо цены?

Так, например, у меня есть настраиваемый продукт для футболки, поэтому я добавил один зеленый продукт и один оранжевый продукт в качестве сопутствующих продуктов. Оранжевый продукт отсутствует на складе, я все еще хочу, чтобы он отображался в выпадающем меню, чтобы клиенты знали, что есть оранжевый вариант, но его не должно быть на складе, чтобы клиент не мог сделать заказ.

Кто-нибудь знает?

Author: Marius, 2014-11-05

2 answers

Вы можете просмотреть переменную "Нет в наличии" в продукте, удалив этот код

if ($product->isSaleable() || $skipSaleableCheck) { из функции getAllowProducts() в классе Mage_Catalog_Block_Product_View_Type_Configurable.

Поэтому вам нужно rewrite класс Mage_Catalog_Block_Product_View_Type_Configurable

Шаг 1: Вам нужно будет создать /app/code/local/Amit/MyProduct/Block/Catalog/Product/View/Type/ и файл Configurable.php

И код:

<?php
class Amit_MyProduct_Block_Catalog_Product_View_Type_Configurable extends Mage_Catalog_Block_Product_View_Type_Configurable{

 public function getAllowProducts()
    {
        if (!$this->hasAllowProducts()) {
            $products = array();
            $skipSaleableCheck = Mage::helper('catalog/product')->getSkipSaleableCheck();
            $allProducts = $this->getProduct()->getTypeInstance(true)
                ->getUsedProducts(null, $this->getProduct());
            foreach ($allProducts as $product) {
                    $products[] = $product;
                }
            $this->setAllowProducts($products);
        }
        return $this->getData('allow_products');
    }

}

Шаг 2: создать config.xml /app/code/local/Amit/MyProduct/etc/ и код

<?xml version="1.0"?>
<config>
 <modules>
    <Amit_MyProduct>
        <version>1.0.0</version>
    </Amit_MyProduct>
 </modules>
 <global>
   <blocks>
    <catalog>
         <rewrite>
              <product_view_type_configurable>Amit_MyProduct_Block_Catalog_Product_View_Type_Configurable</product_view_type_configurable>
             </rewrite>
      </catalog>
  </blocks>
 </global>
</config>

Шаг 3: Создайте Amit_MyProduct.xml вpp/etc/modules

<?xml version="1.0"?>
<config>
 <modules>
    <Amit_MyProduct>
        <codePool>local</codePool>
        <active>active</active>
    </Amit_MyProduct>
 </modules>
</config>
 1
Author: Amit Bera, 2014-11-05 22:50:59

Вы можете сделать это без каких-либо переписываний.
Просто используйте событие catalog_controller_product_init.
Так что добавьте это к config.xml из одного из ваших модулей внутри тега <frontend><events>

<catalog_controller_product_init>
    <observers>
        <[module]>
            <class>[module]/observer</class>
            <method>showOutOfStock</method>
        </[module]>
    </observers>
</catalog_controller_product_init>

Затем создайте файл Observer.php внутри папки Model с этим содержимым

<?php 
class [Namespace]_[Module]_Model_Observer
{
    public function showOutOfStock($observer)
    {
        $product = $observer->getEvent()->getProduct();
        if ($product->getTypeId() == Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE) {
            Mage::helper('catalog/product')->setSkipSaleableCheck(true);
        }
    }
}
 0
Author: Marius, 2014-11-07 13:12:08