Показать отсутствующий на складе продукт "варианты" для настраиваемых продуктов
Знаете ли вы, как показать товар "варианты" (извините, если эта терминология неверна), даже если его нет в наличии и, возможно, показать "Нет в наличии" вместо цены?
Так, например, у меня есть настраиваемый продукт для футболки, поэтому я добавил один зеленый продукт и один оранжевый продукт в качестве сопутствующих продуктов. Оранжевый продукт отсутствует на складе, я все еще хочу, чтобы он отображался в выпадающем меню, чтобы клиенты знали, что есть оранжевый вариант, но его не должно быть на складе, чтобы клиент не мог сделать заказ.
Кто-нибудь знает?
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>
Вы можете сделать это без каких-либо переписываний.
Просто используйте событие 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);
}
}
}