Deaktivieren Sie die gesamte Warenkorbfunktion und die Kaufabwicklung in magento2


8

Von der Administratorseite aus kann ich das Auschecken in einem Schritt deaktivieren, aber Benutzer können weiterhin Produkte zum Warenkorb hinzufügen. Ich möchte nur Produkte ohne Auschecken anzeigen. Gibt es dort eine Erweiterung? Ich meine, deaktivieren Sie den Minikorb, fügen Sie dem Warenkorb Links zur gesamten Website hinzu.

Wo kann ich durch Plugins oder Beobachter anpassen oder neu schreiben (meistens in Einzelaufnahme), so dass überall Links zum Hinzufügen zum Warenkorb ausgeblendet werden? Durch Bearbeiten von list.phtml kann ich tun. Aber gibt es einen besseren Weg?


Sie können dieser Lösung folgen. stackoverflow.com/questions/2840441/…
Abhishek

Antworten:


7

Bitte versuchen Sie es mit app / code / Vendor / Module / etc / di.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">   

    <type name="Magento\Catalog\Model\Product">
        <plugin name="module-filter" type="Vendor\Module\Plugin\Product" sortOrder="1" />
    </type>

</config> 

in app / code / Vendor / Module / Plugin / Product.php

<?php
namespace Vendor\Module\Plugin;

class Product
{               
    public function afterIsSaleable(\Magento\Catalog\Model\Product $product)
    {           
            return false;

    }

}

Jetzt kommt der Text 'Auf Lager'. Muss ich trotzdem CSS verwenden, um mich zu verstecken?
Siva Kumar Koduru

Ja, fügen Sie css any where .stock hinzu {display: none; }
Nikhil Vaghela

2
Sie können auch Ihr gesamtes Produkt mit Qty = 0?
Franck Garnier

6

Es gibt viele Arbeiten, um diese Frage zu beantworten: Hier die Schritte:

1. Deaktivieren Sie die Blockausgabe des Checkout-Moduls

In diesem Fall deaktivieren Sie die Blockausgabe des Checkout-Moduls , wodurch Cart / Checkout leer bleibt und Minicart-Pop entfernt wird. Der Kunde kann also keine Bestellung aufgeben.

Deaktivieren Sie die Magento_Checkout Modulausgabe von Adminadmin>Store>Configuration>Advance>Advance .

Es gibt viele Dinge, die Sie in diesem Fall tun müssen.

In diesem Fall benötigen Sie möglicherweise die folgenden Schritte:

  • Deaktivieren Sie die Blockausgabe des Checkout-Moduls mit der Magento-Standardsystemeinstellung

Wählen Sie dann das Modul Magento_Checkout aus. Ändern Sie den Status in Disabledund klicken Sie anschließend auf die Schaltfläche Konfiguration speichern, um die Einstellung zu speichern.

Geben Sie hier die Bildbeschreibung ein

2. Deaktivieren Sie die Ausgabe einiger Blöcke mithilfe des Plugins mit der Schaltfläche AddtoCart

Für den Fall, Idee ist die Ausgabe von Block diejenigen Block deaktiviert , die Add-to-Cart zu Block mit Plugin generieren

Wie Sie wissen , dass aus der Klasse Magento \ Framework \ View \ Element \ AbstractBlock ` toHtml () Ausgabe von Block erzeugt wird ,

In meinem Plugin finden Sie einige Blöcke ( Which are generate Add to Cart button) Namen im Layout wie :

di.xml create ist app \ code [Vendorname] [Module] \ etc \ frontend

, So wird es nur Frontend arbeiten nicht für den Admin .

di.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
     <type name="\Magento\Framework\View\Element\AbstractBlock">
        <plugin name="disabledOutofAddtoCartblock" type="[Vendorname]\[Module]\Plugin\AbstractBlockPlugin" />
    </type>
</config>

Plugin-Klasse AbstractBlockPlugin befindet sich bei a pp/code/[Vendorname]/[Module]/Plugin/.

<?php
namespace [Vendorname]\[Module]\Plugin;

class AbstractBlockPlugin{

    /**
     * @var \Psr\Log\LoggerInterface
     */
    protected $logger;

    public function __construct(
        \Psr\Log\LoggerInterface $logger
    ){

          $this->logger = $logger;
    }
    /**
    * Using after method change  return value of toHtml
    */
    public function afterToHtml(\Magento\Framework\View\Element\AbstractBlock $block ,$result){

       $moduleName = $block->getModuleName();
       $nameInLayout = $block->getNameInLayout();

       $_disableBlocksNameInLayout = array(
            'product.info.addtocart','product.info.addtocart.additional','product.info.addtocart.bundle',

        );
       /** 
       * If block name is match then return Blank
       */
       if(in_array($nameInLayout ,$_disableBlocksNameInLayout)){
           return "";
       }
       return $result;
    }

}

Dann benötigen Sie einen Cache: Flush Magento Shell mit bin/magento cache:flush


2
Die Magento 2.2-Funktion zum Deaktivieren der Modulausgabe ist nicht verfügbar.
Siva Kumar Koduru
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.