Нет в наличии товаров по-прежнему появляются в веб-интерфейсе, поиске и других - Magento 2.1.0

12

Я вижу, что моя установка magento 2.1.0 имеет проблемы! Отказывается прятаться со склада товаров со страниц поиска и категорий! Я очистил кеш, я переиндексировал, но не повезло!

Можете ли вы дать мне какие-либо советы?

Мои товары имеют запас 0, но спереди они появляются на складе, и когда вы заказываете их, выдает эту ошибку:

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

Спасибо

Позже отредактируйте:

Я также знаю эту информацию:

Задайте в admin> Магазины> конфигурация> Каталог> Инвентарь> Параметры на складе> Показать товары со склада в NO

Это на самом деле особенность Magento. Если для параметра «Нет на складе» выбрано значение «Нет», он скрывается только от страниц списка категорий и страницы результатов поиска. Страница продукта фактически все еще доступна. Начиная с CE 1.9.1, в настройках конфигурации даже отображается сообщение «Нет в наличии продуктов», в котором говорится, что продукты будут отображаться по прямым URL-адресам продуктов. И это на самом деле хорошо. Таким образом, поисковые системы не регистрируют много 404 страниц, когда ваших товаров нет в наличии. Я не вижу вреда в том, чтобы оставить это так. Клиент не может заказать их в любом случае. Если вы хотите, чтобы продукт вообще не был доступен в вашем магазине, вы должны пометить его как отключенный или установить для него видимость Невидимым по отдельности или удалить его связь с веб-сайтами со вкладки веб-сайтов на странице редактирования продукта администратора. Источник:Нет в наличии продукты все еще появляются в интерфейсе

edgetwism
источник
Я также сталкиваюсь с той же проблемой. Даже после изменения конфигурации бэкенда я все еще сталкиваюсь с этим. Если вы нашли решение, пожалуйста, дайте мне знать.
sabarivenkatesankrish
Ребята, вы все еще испытываете эту проблему? Вы используете пользовательскую тему? Я думаю, что это может быть причиной проблемы.
Фред Ороско Диас

Ответы:

7

Зайдите в admin> Магазины> Конфигурация> Каталог> Инвентарь> Складские опции

Установите для параметра « Нет на складе» значение « Нет».

введите описание изображения здесь

Прашант Валанда
источник
3
Уже сделал это! Все еще без изменений!
крайний поворот
2

Я столкнулся с точно такой же проблемой (Magento v2.1.9) из-за «Задержек», для которых было установлено «Разрешить кол-во ниже 0 и уведомлять клиента»

Зайдите в admin> Магазины> конфигурация> Каталог> Инвентарь> Параметры складских запасов Установите для параметра «Нет в наличии товаров» значение НЕТ


Зайдите в admin> Магазины> Конфигурация> Каталог> Инвентарь> Параметры товара на складе.

Примечание. Изменение может занять некоторое время из-за обработки всего каталога.

введите описание изображения здесь

Nadeem0035
источник
0

У меня та же проблема в 2.2.3. Со своей стороны, это произошло после команды обновления. Я пробовал команды и выполнял запросы, но безуспешно. Я решаю эту проблему, изменив следующую опцию с Да на Нет. Stores => Configuration => Catalog=> Catalog =>Disable Add to cart button for Guests From Yes to NoНадеюсь, это кому-нибудь поможет .Благодаря введите описание изображения здесь

Махмуд Рехман
источник
По умолчанию такой опции нет.
Приянк
-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
источник
-3

Нашел решение!

Поместите фильтр в каталог: Количество: 0,0000 - 0,0000!

Затем выберите все, действие> обновить атрибуты> расширенный инвентарь> Наличие на складе (нажмите «Изменить»)> выберите «нет в наличии»> сохранить, затем переиндексировать, и товары исчезнут :)

edgetwism
источник
А для настраиваемых продуктов?
Франк Гарнье
-3

поставщик пространства имен \ module \ Helper;

Класс Data extends \ 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
источник