품절 된 제품이 여전히 프론트 엔드, 검색 및 기타 항목에 나타납니다-Magento 2.1.0


12

magento 2.1.0 설치에 문제가 있음을 알았습니다! 검색 및 카테고리 페이지에서 품절 된 제품 숨기기를 거부 합니다! 캐시를 지우고 다시 색인을 생성했지만 운이 없습니다!

조언 좀 해줄 래?

내 제품은 재고가 0이지만 앞에는 재고가 있으며 주문하면 다음과 같은 오류가 발생합니다.

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

감사

나중에 편집 :

나는 또한이 정보를 알고있다 :

관리자> 상점> 구성> 카탈로그> 인벤토리> 재고 옵션> 품절 된 제품 표시를 NO로 설정하십시오.

이것은 실제로 마젠 토의 기능입니다. 품절 된 제품 표시를 아니오로 설정하면 카테고리 목록 페이지와 검색 결과 페이지에서만 숨겨집니다. 제품 페이지는 실제로 계속 사용할 수 있습니다. CE 1.9.1부터 구성 설정 아래에 품절 된 제품 표시 제품에 직접 제품 URL이 계속 표시된다는 메시지가 표시됩니다. 실제로 이것은 좋은 것입니다. 이 방법으로 귀하의 제품이 품절되었을 때 검색 엔진은 많은 404 페이지를 등록하지 않습니다. 나는 그렇게 떠나는 데 해를 끼치 지 않습니다. 고객은 어쨌든 주문할 수 없습니다. 상점에서 제품을 전혀 사용하지 않으려면 제품을 사용 안함으로 표시하거나 가시성을 개별적으로 표시하지 않음으로 설정하거나 관리 제품 편집 페이지의 웹 사이트 탭에서 웹 사이트와의 연관성을 제거해야합니다. 출처:품절 된 제품이 여전히 프론트 엔드에 나타남


나는 또한 같은 문제에 직면하고있다. 백엔드 구성을 변경 한 후에도 여전히 문제가 있습니다. 해결책을 찾았다면 알려주십시오.
sabarivenkatesankrish 2016

아직도이 문제가 발생합니까? 사용자 정의 테마를 사용하고 있습니까? 아마 그것이 문제의 근원 일 수 있다고 생각합니다.
Fred Orosko Dias

답변:


7

관리자> 상점> 구성> 카탈로그> 인벤토리> 재고 옵션으로 이동하십시오.

세트 재고 제품의 디스플레이 출력NO

여기에 이미지 설명을 입력하십시오


3
이미 해냈습니다! 여전히 변화가 없습니다!
edgetwism

2

'수량을 0 미만으로 허용하고 고객에게 알림'으로 설정된 '이월 주문'으로 인해 동일한 문제 (Magento v2.1.9)에 직면했습니다.

관리자> 상점> 구성> 카탈로그> 인벤토리> 재고 옵션으로 이동 "재고가없는 제품"표시를 아니오로 설정하십시오.


관리> 상점> 구성> 카탈로그> 인벤토리> 제품 재고 옵션으로 이동하십시오. 이월 주문을 "이월 주문 없음"으로 설정하십시오.

참고 : 전체 카탈로그 처리로 인해 변경하는 데 다소 시간이 걸릴 수 있습니다.

여기에 이미지 설명을 입력하십시오


0

2.2.3에서 동일한 문제가 발생했습니다. 제 측면에서 업그레이드 명령 후에 발생했습니다. 명령을 시도하고 쿼리를 실행했지만 Stores => Configuration => Catalog=> Catalog =>Disable Add to cart button for Guests From Yes to No운이 없습니다. 다음 옵션을 예에서 아니요로 변경하여 정렬합니다. .감사 여기에 이미지 설명을 입력하십시오


기본적으로 그러한 옵션은 없습니다.
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;
    }

}

-3

해결책을 찾았습니다!

필터를 카탈로그에 넣으십시오 : 수량 : 0.0000-0.0000!

그런 다음 모두, 작업> 업데이트 속성> 고급 인벤토리> 재고 가용성 (변경 클릭)> 재고 선택> 저장 후 재 색인을 선택하십시오.


구성 가능한 제품의 경우?
Franck Garnier

-3

네임 스페이스 공급 업체 \ module \ Helper;

데이터 클래스는 \ 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;
}

}

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.