根据产品属性判断前端是否开启购买
根据产品属性判断前端是否开启购买
需求,有些产品仅做于展示,有些产品则可以加入销售,这个时候需要在后天产品管理里加一个属性来做判断是否开启购买。话不多说上步骤。
一 通过setup新建产品属性
app\code\CP\Lessohomeppw\Setup\UpgradeData.php
<?php<br /><br />namespace CP\Lessohomeppw\Setup;<br /><br />use Magento\Eav\Setup\EavSetup;<br />use Magento\Eav\Setup\EavSetupFactory;<br />use Magento\Framework\Setup\UpgradeDataInterface;<br />use Magento\Framework\Setup\ModuleContextInterface;<br />use Magento\Framework\Setup\ModuleDataSetupInterface;<br /><br />class UpgradeData implements UpgradeDataInterface<br />{<br /> private $eavSetupFactory;<br /> <em>/**<br /> * Init<br /> *<br /> * </em><strong><em>@param </em></strong><em>EavSetupFactory $eavSetupFactory<br /> */<br /> </em>public function __construct(EavSetupFactory $eavSetupFactory)<br /> {<br /> $this->eavSetupFactory = $eavSetupFactory;<br /> }<br /> <em>/**<br /> * </em><strong><em>@param </em></strong><em>ModuleDataSetupInterface $setup<br /> * </em><strong><em>@param </em></strong><em>ModuleContextInterface $context<br /> */<br /> </em>// @codingStandardsIgnoreStart <br /> public function upgrade(ModuleDataSetupInterface $setup, ModuleContextInterface $context) <br /> {<br /> <em>/** </em><strong><em>@var </em></strong><em>EavSetup $eavSetup */<br /> </em>$setup->startSetup();<br /> $eavSetup = $this->eavSetupFactory->create(['setup' => $setup]);<br /> <em>/**<br /> * Add attributes is_newproduct to the eav/attribute<br /> */<br /> </em>if (version_compare($context->getVersion(), '1.0.1') < 0) {<br /> $eavSetup->addAttribute(<br /> \Magento\Catalog\Model\Product::<em>ENTITY</em>,<br /> 'pdp_add_cart',<br /> [<br /> 'group' => 'General',<br /> 'type' => 'int',<br /> 'backend' => '',<br /> 'frontend' => '',<br /> 'label' => 'Product Add To Cart',<br /> 'input' => 'select',<br /> 'class' => '',<br /> 'source' => 'Magento\Eav\Model\Entity\Attribute\Source\Boolean',<br /> 'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::<em>SCOPE_GLOBAL</em>,<br /> 'visible' => true,<br /> 'required' => false,<br /> 'user_defined' => false,<br /> 'default' => '0',<br /> 'searchable' => false,<br /> 'filterable' => false,<br /> 'comparable' => false,<br /> 'visible_on_front' => false,<br /> 'used_in_product_listing' => true,<br /> 'unique' => false,<br /> 'apply_to' => 'simple,configurable,virtual,bundle,downloadable'<br /> ]<br /> ); <br /> }<br /> $setup->endSetup();<br /> }<br />}<br /><br />
二 通过observer控制显示xml
app\code\CP\Lessohomeppw\Observer\ProductViewLayout.php
<?php<br /><em>/**<br /> * Copyright © Magento, Inc. All rights reserved.<br /> * See COPYING.txt for license details.<br /> */<br /></em>namespace CP\Lessohomeppw\Observer;<br />use Magento\Framework\Event\ObserverInterface;<br /><br /><br />class ProductViewLayout implements ObserverInterface<br />{<br /> protected $_resultPageFactory;<br /><br /> public function __construct(\Magento\Framework\View\Result\PageFactory $resultPageFactory) {<br /> $this->_resultPageFactory = $resultPageFactory;<br /> }<br /> public function execute(\Magento\Framework\Event\Observer $observer)<br /> {<br /> $objectManager = \Magento\Framework\App\ObjectManager::<em>getInstance</em>();<br /> $_product = $objectManager->create('Magento\Catalog\Model\Product')->load($observer->getProduct()->getId());<br /> $is_add_to_cart = $_product->getData('pdp_add_cart');<br /> if(isset($is_add_to_cart)&&$is_add_to_cart==1){<br /> $page = $this->_resultPageFactory->create();<br /> $page->addHandle('catalog_product_custom_layout');<br /> }<br /> return $this;<br /> }<br />}
三 添加event.xml
app\code\CP\Lessohomeppw\etc\frontend\events.xml
<?xml version="1.0"?><br /><config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"><br /> <event name="catalog_controller_product_view"><br /> <observer name="custom_product_view_layout" instance="CP\Lessohomeppw\Observer\ProductViewLayout" /><br /> </event><br /></config>
四 添加配置xml文件 这里就是对应开启购买显示的xml配置,因为默认配置文件是不予显示购买,所以这里配置有购买功能的xml
app\code\CP\Lessohomeppw\view\frontend\layout\catalog_product_custom_layout.xml
<?xml version="1.0"?><br /><!--<br />/**<br /> * Copyright © 2016 Magento. All rights reserved.<br /> * See COPYING.txt for license details.<br /> */<br />--><br /><page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"><br /> <body><br /> <referenceBlock name="logo"><br /> <arguments><br /> <argument name="logo_file" xsi:type="string">images/logo.svg</argument><br /> </arguments><br /> </referenceBlock><br /> <!-- <referenceBlock name="catalog.topnav" remove="true" /> --><br /> <referenceBlock name="top.links" remove="true" /><br /> <referenceBlock name="footer_links" remove="true" /><br /> <referenceBlock name="form.subscribe" remove="true" /><br /> <referenceBlock name="header.panel.wrapper" remove="true"/><br /> <referenceContainer name="header.container"><br /> <referenceBlock name="minicart" remove="true"/><br /> <block class="CP\Category\Block\Categories" name="menu.category" template="CP_Category::categories.phtml" after="logo" /><br /> </referenceContainer><br /> <referenceBlock name="report.bugs" remove="true"/><br /> <referenceBlock name="advanced-search-link" remove="true"/><br /> <referenceContainer name="product.info.main"><br /> <referenceBlock name="page.main.title" remove="false" /><br /> <referenceBlock name="product.info.overview" remove="false" /><br /> <referenceBlock name="product.info.description" remove="false" /><br /> <block class="Magento\Catalog\Block\Product\View" name="custom.layout.details" template="Magento_Theme::product/addtocartview.phtml" before="-" /><br /> <referenceBlock name="custom.product.view" remove="true" /><br /> </referenceContainer><br /> <!-- Remove product detail page extra block --><br /> <referenceBlock name="product.info.review" remove="false"/><br /> <referenceBlock name="product.price.final" remove="false"/> <br /> <referenceBlock name="product.info.stock.sku" remove="false"/><br /> <referenceBlock name="product.info.addtocart" remove="false" /><br /> <referenceBlock name="product.info.mailto" remove="false" /> <br /> <referenceBlock name="catalog.compare.sidebar" remove="true"/><br /> <referenceBlock name="view.addto.compare" remove="true" /><br /> <referenceBlock name="view.addto.wishlist" remove="true" /><br /> <referenceBlock name="reviews.tab" remove="false" /><br /> <referenceBlock name="product.price.tier" remove="false" /> <br /> <referenceBlock name="catalog.product.related" remove="false" /><br /> <referenceBlock name="product.info.upsell" remove="false" /><br /> <referenceBlock name="product.info.additional" remove="false" /><br /> <referenceBlock name="product.info.form.options" remove="false" /><br /> <referenceBlock name="product.info" remove="false" /><br /> <referenceBlock name="product.info.addto" remove="false" /><br /><br /> <!-- Header Div Structure --><br /> <referenceContainer name="header-wrapper"><br /> <container name="section.logo" htmlTag="div" htmlClass="logo-menu" before="-" /><br /> <container name="section.search" htmlTag="div" htmlClass="searchbox" after="section.logo" /><br /> <container name="section.order.link" htmlTag="div" htmlClass="order-link" after="section.search"><br /> <block class="Magento\Cms\Block\Block" name="order.link"><br /> <arguments><br /> <argument name="block_id" xsi:type="string">order_link</argument><br /> </arguments><br /> </block><br /> </container><br /> </referenceContainer><br /> <move element="logo" destination="section.logo" before="-" /><br /> <move element="top.search" destination="section.search" before="-" /><br /> <move element="test.header" destination="section.search" after="top.search" /><br /> <move element="page.main.title" destination="category.view.container" after="category.image" /><br /> <move element="breadcrumbs" destination="columns.top" after="-" /><br /><br /> <referenceContainer name="sidebar.additional"><br /> <referenceBlock name="catalog.compare.sidebar" remove="true"/><br /> <referenceBlock name="wishlist_sidebar" remove="true"/><br /> </referenceContainer><br /> <move element="menu.category" destination="page.top" before="navigation.sections" /> <br /> <br /> </body><br /></page>
五 module 模块更新
app\code\CP\Lessohomeppw\etc\module.xml
<?xml version="1.0"?><br /><config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd"><br /> <module name="CP_Lessohomeppw" setup_version="1.0.1"><br /> </module><br /></config>
Done
后台显示
前台两种界面
展示界面
销售界面