从管理员的角度来看,我可以禁用一步结帐,但是用户仍然可以将产品添加到购物车。我只想显示未结帐的产品。那里有分机吗?我的意思是禁用迷你购物车,添加到购物车链接整个网站。
我在哪里可以通过插件或观察者进行自定义,或者可以重写(主要是单次执行),以便在任何地方都隐藏添加到购物车的链接。通过编辑list.phtml我可以做到。但是还有更好的方法吗?
从管理员的角度来看,我可以禁用一步结帐,但是用户仍然可以将产品添加到购物车。我只想显示未结帐的产品。那里有分机吗?我的意思是禁用迷你购物车,添加到购物车链接整个网站。
我在哪里可以通过插件或观察者进行自定义,或者可以重写(主要是单次执行),以便在任何地方都隐藏添加到购物车的链接。通过编辑list.phtml我可以做到。但是还有更好的方法吗?
Answers:
请尝试一下 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> 在应用程序/代码/供应商/模块/插件/Product.php中
<?php
namespace Vendor\Module\Plugin;
class Product
{               
    public function afterIsSaleable(\Magento\Catalog\Model\Product $product)
    {           
            return false;
    }
}有很多工作要做这个问题:这里的步骤:
在这种情况下,您将禁用使购物车/结帐栏为空白的结帐模块块输出,并且还将删除小型购物车弹出,因此客户无法下订单。
禁用模块   Magento_Checkout输出从管理员。刚到admin>Store>Configuration>Advance>Advance。
有很多东西,你需要做这种情况。
对于这种情况,可能需要执行以下步骤:
然后选择模块Magento_Checkout将其状态更改为Disabled,然后单击保存配置按钮以保存设置。
如果禁用了 idea,则使用插件将那些生成添加到购物车的block的block 禁用
如你所知,从类的Magento \框架\查看\元素\ AbstractBlock ` toHtml()的输出生成块
在我的插件中,在布局中找到一些block(Which are generate Add to Cart button)名称,例如:
di.xml创建的是app \ code [供应商名称] [模块] \ etc \ frontend
,因此它将仅适用于前端,不适用于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>位于的插件类AbstractBlockPluginpp/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;
    }
}然后需要使用cache:flush magento shell bin/magento cache:flush