从管理员的角度来看,我可以禁用一步结帐,但是用户仍然可以将产品添加到购物车。我只想显示未结帐的产品。那里有分机吗?我的意思是禁用迷你购物车,添加到购物车链接整个网站。
我在哪里可以通过插件或观察者进行自定义,或者可以重写(主要是单次执行),以便在任何地方都隐藏添加到购物车的链接。通过编辑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