Niedostępne produkty nadal pojawiają się w interfejsie użytkownika, wyszukiwarce i innych - Magento 2.1.0

12

Widzę, że moja instalacja Magento 2.1.0 ma problem! Odmawia ukrycia niedostępnych produktów ze stron wyszukiwania i kategorii! Wyczyściłem pamięć podręczną, ponownie indeksowałem, ale bez powodzenia!

Czy możesz mi dać jakieś porady?

Moje produkty są w magazynie 0, ale z przodu pojawiają się w magazynie, a kiedy je zamawiasz, pojawia się następujący błąd:

We don't have as many "Item's name" as you requested.

Dzięki

Późniejsza edycja:

Znam te informacje:

Ustaw w admin> Sklepy> konfiguracja> Katalog> Zapasy> Opcje zapasów> Wyświetl brak produktów z magazynu na NIE

Jest to właściwie funkcja Magento. Ustawienie opcji Wyświetl produkty z magazynu na Nie tylko ukrywa je na stronach listy kategorii i stronie wyników wyszukiwania. Strona produktu jest nadal dostępna. Począwszy od wersji CE 1.9.1, w ustawieniach konfiguracji pojawia się nawet komunikat Wyświetl produkty niedostępne, informujący, że produkty będą nadal wyświetlane przez bezpośrednie adresy URL produktów. I to jest naprawdę dobra rzecz. W ten sposób wyszukiwarki nie rejestrują dużo 404 stron, gdy produkty wyczerpią się z magazynu. Nie widzę krzywdy, pozostawiając to w ten sposób. Klient i tak nie może ich zamówić. Jeśli chcesz, aby produkt nie był w ogóle dostępny w Twoim sklepie, musisz oznaczyć go jako wyłączony lub ustawić jego widoczność na Niewidoczny indywidualnie lub usunąć jego powiązanie ze stronami internetowymi z karty Witryny na stronie edycji produktu administratora. Źródło:Niedostępne produkty nadal pojawiają się w interfejsie

edgetwism
źródło
Mam również ten sam problem. Nawet po zmianie konfiguracji zaplecza wciąż mam do czynienia z tym. Jeśli znalazłeś rozwiązanie, daj mi znać.
sabarivenkatesankrish
Nadal masz ten problem? Czy używasz niestandardowego motywu? Myślę, że to prawdopodobnie może być źródłem problemu.
Fred Orosko Dias,

Odpowiedzi:

7

Przejdź do admin> Sklepy> konfiguracja> Katalog> Zapasy> Opcje akcji

Ustaw Display Out of Stock Products na NO

wprowadź opis zdjęcia tutaj

Prashant Valanda
źródło
3
Już to zrobiłem! Nadal bez zmian!
edgetwism
2

Napotkałem dokładnie ten sam problem (Magento v2.1.9) z powodu „Zaległości”, dla których ustawiono „Zezwalaj na ilość poniżej 0 i powiadom klienta”

Idź do admin> Sklepy> konfiguracja> Katalog> Zapasy> Opcje zapasów Ustaw opcję „Brak produktów w magazynie” na NIE


Idź do administratora> Sklepy> konfiguracja> Katalog> Zapasy> Opcje zapasów produktów Ustaw opcję Backards na „No backorders”

Uwaga: Zmiana może zająć trochę czasu ze względu na przetwarzanie całego katalogu.

wprowadź opis zdjęcia tutaj

Nadeem0035
źródło
0

Mam ten sam problem w wersji 2.2.3. Po mojej stronie stało się to po poleceniu aktualizacji. Próbowałem poleceń i uruchamiałem zapytania, ale bez powodzenia. Rozwiązuję go, zmieniając następującą opcję z Tak na Nie. Stores => Configuration => Catalog=> Catalog =>Disable Add to cart button for Guests From Yes to NoMam nadzieję, że to pomoże komuś .Dzięki wprowadź opis zdjęcia tutaj

Mahmood Rehman
źródło
Domyślnie nie ma takiej opcji.
Priyank
-1
namespace vendor\module\Block\Product;

class ListProduct extends \Magento\Catalog\Block\Product\ListProduct{

    protected function _getProductCollection(){
        $collection = parent::_getProductCollection();
        $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
        $productIds = $objectManager->create('\vendor\module\Helper\Data')->getIdsToLastStock($collection->getAllIds());
        $orderString = array('CASE e.entity_id');
        foreach($productIds as $i => $productId) {
            $orderString[] = 'WHEN '.$productId.' THEN '.$i;
        }
        $orderString[] = 'END';
        $orderString = implode(' ', $orderString);
        $collection->addAttributeToFilter('entity_id', array('in' => $productIds));
        $collection->getSelect()->order(new \Zend_Db_Expr($orderString));
        return $collection;
    }

}
starjet
źródło
-3

Znalazłem rozwiązanie!

Umieść filtr w katalogu: Ilość: 0,0000 - 0,0000!

Następnie wybierz wszystko, akcja> zaktualizuj atrybuty> zaawansowany asortyment> Dostępność zapasów (kliknij zmień)> Wybierz brak towaru> zapisz, a następnie reindex i produkty zniknęły :)

edgetwism
źródło
A dla produktów konfigurowalnych?
Franck Garnier
-3

dostawca przestrzeni nazw \ moduł \ Pomocnik;

klasa Dane rozszerza \ Magento \ Framework \ App \ Helper \ AbstractHelper {

protected $_stockItemRepository;
protected $_scopeConfig;
protected $_storeScope;

public function __construct(\Magento\CatalogInventory\Model\Stock\StockItemRepository $_stockItemRepository, \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig)
{
    $this->_stockItemRepository = $_stockItemRepository;
    $this->_scopeConfig = $scopeConfig;
    $this->_storeScope = \Magento\Store\Model\ScopeInterface::SCOPE_STORE;
}


public function getIdsToLastStock($ids){
    if($this->_scopeConfig->getValue('module/vendor_module/active',$this->_storeScope)==1) {
        $products = array();
        $productIds = array();
        foreach ($ids as $id) {
            try {
                $stockItem = $this->_stockItemRepository->get($id);
                $products[] = array('id' => $id, 'stock' => $this->checkIfAvailableInStock($stockItem));
            } catch (\Exception $ex) {
                $products[] = array('id' => $id, 'stock' => 0);
            }
        }

        if (count($products) > 0) {
            foreach ($products as $id => $value) {
                $names[$id] = $value['stock'];
            }
            $keys = array_keys($products);
            array_multisort(
                $names, SORT_ASC, SORT_NUMERIC, $products, $keys
            );
            $result = array_combine($keys, $products);
            foreach ($result as $product) {
                $productIds[] = intval($product['id']);
            }
            return $productIds;
        } else {
            return $ids;
        }
    }
    return $ids;
}


private function checkIfAvailableInStock($item){
    if($item->getIsInStock()){
        if($item->getQty()>0)
            return 0;
    }
    return 1;
}

}

starjet
źródło