Alteração automática da “Disponibilidade de estoque” de “Esgotado” para “Em estoque” na alteração da quantidade
-
13-12-2019 - |
Pergunta
assuma que a quantidade do produto é "0", uma vez que editamos a quantidade para "1".novamente temos que mudar de
"esgotado" para "em estoque" para comprar no site
Então, estou procurando uma maneira de alterar a Disponibilidade de estoque de volta para Em estoque quando o campo de quantidade for maior que 0.
aqui alguém postou solução: https://stackoverflow.com/questions/7168295/magento-auto-change-the-stock-availability-from-out-of-stock-to-in-stock
podemos usar o evento Magento catalog_product_save_after.Crie um método observador que faça o seguinte no evento catalog_product_save_after.
alguém pode me explicar em detalhes o que e tudo que precisa ser feito para isso.significa em qual arquivo qual código devemos adicionar?
public function catalog_product_save_after($observer) {
$product = $observer->getProduct();
$stockData = $product->getStockData();
if ( $product && $stockData['qty'] ) {
$stock = Mage::getModel('cataloginventory/stock_item')->loadByProduct($product->getEntityId()); // Load the stock for this product
$stock->setData('is_in_stock', 1); // Set the Product to InStock
$stock->save(); // Save
}
}
como Qaisar Satti disse, estou tentando isso:
app/etc/modules/Froggyline_HappyHour.xml
<?xml version="1.0"?>
<config>
<modules>
<Froggyline_HappyHour>
<active>true</active>
<codePool>community</codePool>
<version>0.0.0</version>
</Froggyline_HappyHour>
</modules>
</config>
app/code/community/Froggyline/HappyHour/etc/config.xml
<?xml version="1.0"?>
<config>
<modules>
<Froggyline_HappyHour>
<version>0.0.0</version>
</Froggyline_HappyHour>
</modules>
<adminhtml>
<events>
<cataloginventory_stock_item_save_commit_after>
<observers>
<happyhour>
<type>model</type>
<class>happyhour/observer</class>
<method>product_save_after</method>
</happyhour>
</observers>
</cataloginventory_stock_item_save_commit_after>
</events>
</adminhtml>
</config>
app/code/community/Froggyline/HappyHour/Model/Observer.php
<?php
class Froggyline_HappyHour_Model_Observer {
public function product_save_after($observer) {
$product = $observer->getProduct();
$stockData = $product->getStockData();
if ( $product && $stockData['qty'] ) {
$stock = Mage::getModel('cataloginventory/stock_item')->loadByProduct($product->getEntityId()); // Load the stock for this product
$stock->setData('is_in_stock', 1); // Set the Product to InStock
$stock->save(); // Save
}
}}
?>
Solução
Solução 1
Adicione isso em config.xml
<?xml version="1.0"?>
<config>
<modules>
<Froggyline_HappyHour>
<version>0.0.0</version>
</Froggyline_HappyHour>
</modules>
<adminhtml>
<events>
//second event
<catalog_product_save_after>
<observers>
<happyhour>
<type>model</type>
<class>happyhour/observer</class>
<method>product_save_after</method>
</happyhour>
</observers>
</catalog_product_save_after>
</events>
</adminhtml>
</config>
app/code/community/Froggyline/HappyHour/Model/Observer.php
<?php
class Froggyline_HappyHour_Model_Observer {
public function product_save_after($observer) {
$product = $observer->getProduct();
$stockData = $product->getStockData();
if ( $product && $stockData['qty'] ) {
$stock = Mage::getModel('cataloginventory/stock_item')->loadByProduct($product->getEntityId()); // Load the stock for this product use for
$stock->setData('is_in_stock', 1); // Set the Product to InStock
$stock->save(); // Save use for
}
}
}
Solução 2 (Não testado, mas solução melhor)
Adicione isso em config.xml
<?xml version="1.0"?>
<config>
<modules>
<Froggyline_HappyHour>
<version>0.0.0</version>
</Froggyline_HappyHour>
</modules>
<adminhtml>
<events>
//second event
<catalog_product_prepare_save>
<observers>
<happyhour>
<type>model</type>
<class>happyhour/observer</class>
<method>product_prepare_save</method>
</happyhour>
</observers>
</catalog_product_prepare_save>
</events>
</adminhtml>
</config>
app/code/community/Froggyline/HappyHour/Model/Observer.php
<?php
class Froggyline_HappyHour_Model_Observer {
public function product_prepare_save($observer) {
$product = $observer->getProduct();
$stockData = $product->getStockData();
if ( $product && $stockData['qty'] ) {
$stockData->setData('is_in_stock', 1); // Set the Product to InStock
}
}
}
Outras dicas
Escrevo aqui apenas os passos principais
1) Escreva um esqueleto de módulo personalizado, você pode usar vários "criadores de módulos", eu pessoalmente uso issohttp://www.silksoftware.com/magento-module-creator/
Você pode definir o nome da sua empresa e do módulo e ativar todas as outras opções como NÃO para criar um módulo esqueleto
2) abra etc/config e adicione sua classe Model Name, finalize declarando os observadores de eventos que você precisa
<global>
<models>
<moduloname>
<class>company_modulo_Model</class>
</moduloname>
</models>
<events>
< catalog_product_save_after>
<observers>
<moduloname>
<class>moduloname/observer</class>
<method>yourFunc</method>
</moduloname>
</observers>
</catalog_product_save_after>
3) crie Model/Observer.php e escreva yourFun dentro
<?php
class company_Modulo_Model_Observer
{
public function yourFunc(Varien_Event_Observer $observer) {
}
}
Para detalhes mais profundos nas etapas acima, existem muitos outros recursos, o acima é apenas um esboço do que você deve fazer
espero que ajude
Em app/design/adminhtml/default/default/template/catalog/product/tab/inventory.phtmlEu mudei isso:
<?php foreach($this->getStockOption()as $option):?>
<?php $_selected =($option['value']== $this->getFieldValue('is_in_stock'))?'selected="selected"':''?>
<option value="<?php echo $option['value']?>" <?php echo $_selected ?>>
<?php echo $option['label']?></option><?php endforeach;?>
Para isso:
<?php if(($this->getFieldValue('qty')*1)>0):?>
<option selected="selected"value="1">In Stock</option><?php else:?>
<option selected="selected"value="0">Out of Stock</option><?php endif;?>