<h5 style="color:red;">系统学习magento二次开发,推荐小册:<a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank">《Magento中文全栈二次开发 》</a></h5> <div class="image-container"> <p> <a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank"> <img src="https://www.maxiaoke.com/uploads/images/20230218/bb9c82995c24d1105676e02f373755f5.jpg" alt="Magento中文全栈二次开发"> </a> </p> </div> <div class="text-container" style="font-size:14px; color:#888"> <p>本小册面向Magento2以上版本,书代码及示例兼容magento2.0-2.4版本。涵盖了magento前端开发,后端开发,magento2主题,magento2重写,magento2 layout,magento2控制器,magento2 block等相关内容,带领您成为magento开发技术专家。</p> </div> <hr><p>要获取类别 ID,请执行以下步骤。</p><p>第 1 步:在以下路径的 Magento 根目录中创建一个文件</p><p>magento_root_directory\getcategory.php</p><p>然后添加代码,如下所示。</p><pre class="brush:bash;toolbar:false"><?php use Magento\Framework\AppInterface; ini_set('display_errors', TRUE); try { require_once __DIR__ . '/app/bootstrap.php'; } catch (\Exception $e) { echo 'Autoload error: ' . $e->getMessage(); exit(1); } try { $bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $_SERVER); $objectManager = $bootstrap->getObjectManager(); $appState = $objectManager->get('\Magento\Framework\App\State'); $appState->setAreaCode('frontend'); $categoryFactory = $objectManager->get('\Magento\Catalog\Model\CategoryFactory');// Instance of Category Model $rootCategoryId = 2; // your root category Id $category = $categoryFactory->create()->load($rootCategoryId); $categoryIds= $category->getAllChildren(false); echo $categoryIds; //will return comma separated list of ids } catch (Exception $e) { echo $e->getMessage(); } ?></pre><p>输出:</p><p>上面的代码将返回如下结果。</p><p>类别编号</p><p><img src="/uploads/images/20230828/57e2d6be00edce57b2cfe0f49c1a8353.png" title="1.png" alt=""/></p><p>结论:</p><p>希望您将能够在Magento 2中获取特定类别的所有子类别ID。</p><p><br/></p>
文章列表
<h5 style="color:red;">系统学习magento二次开发,推荐小册:<a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank">《Magento中文全栈二次开发 》</a></h5> <div class="image-container"> <p> <a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank"> <img src="https://www.maxiaoke.com/uploads/images/20230218/bb9c82995c24d1105676e02f373755f5.jpg" alt="Magento中文全栈二次开发"> </a> </p> </div> <div class="text-container" style="font-size:14px; color:#888"> <p>本小册面向Magento2以上版本,书代码及示例兼容magento2.0-2.4版本。涵盖了magento前端开发,后端开发,magento2主题,magento2重写,magento2 layout,magento2控制器,magento2 block等相关内容,带领您成为magento开发技术专家。</p> </div> <hr><p>在Magento 2中以编程方式创建目录的步骤:</p><p>第1步: 首先,在 etc文件夹中创建一个CreateDirectory.php文件。</p><p>app\code\Vendor\Extension\Helper</p><p>然后添加以下代码</p><p></p><pre class="brush:bash;toolbar:false"><?php namespace Vendor\Extension\Helper; use Magento\Framework\App\Helper\AbstractHelper; use Magento\Framework\Filesystem; use Magento\Framework\App\Filesystem\DirectoryList; use Magento\Framework\Exception\FileSystemException; use Magento\Framework\Exception\LocalizedException; use Magento\Framework\Filesystem\Directory\WriteInterface; class CreateDirectory extends AbstractHelper { protected $file; protected $newCreateDirectory; public function __construct( Filesystem $file ) { $this->newCreateDirectory = $file->getDirectoryWrite(DirectoryList::VAR_DIR); } public function createDirectory() { $directoryPath = "magecomp"; $newCreateDirectory = false; try { $newCreateDirectory = $this->newCreateDirectory->create($directoryPath); } catch (FileSystemException $e) { throw new LocalizedException( __('you can't create directory', $directoryPath) ); } return $newCreateDirectory; } }</pre><p><span style="color: #ce9178;">结论:</span></p><p><span style="color: #ce9178;">因此,您可以在Magento 2中以编程方式轻松创建目录。您甚至可以以编程方式删除Magento 2中的目录</span></p><p><br/></p>
<h5 style="color:red;">系统学习magento二次开发,推荐小册:<a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank">《Magento中文全栈二次开发 》</a></h5> <div class="image-container"> <p> <a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank"> <img src="https://www.maxiaoke.com/uploads/images/20230218/bb9c82995c24d1105676e02f373755f5.jpg" alt="Magento中文全栈二次开发"> </a> </p> </div> <div class="text-container" style="font-size:14px; color:#888"> <p>本小册面向Magento2以上版本,书代码及示例兼容magento2.0-2.4版本。涵盖了magento前端开发,后端开发,magento2主题,magento2重写,magento2 layout,magento2控制器,magento2 block等相关内容,带领您成为magento开发技术专家。</p> </div> <hr><p>在本博客中,我将指导您完成在Magento 2中将图像字段添加到CMS页面的步骤。</p><p>在Magento 2中,CMS(内容管理系统)在管理静态页面(例如主页,关于我们页面和联系页面)方面起着至关重要的作用。默认情况下,Magento 2提供用于CMS页面上的内容编辑的文本字段。但是,在某些情况下,您可能希望包含图像以丰富内容并为客户提供视觉上吸引人的体验。</p><p>让我们看一下如何在Magento 2的CMS页面上添加图像字段的步骤。</p><p>在Magento 2的CMS页面上添加图像字段的步骤:</p><p>步骤1: 第一步,我们需要在扩展名内部的以下路径创建一个db_schema.xml文件。</p><p>{{magento_root}}/app/code/Vendor/Module/etc/db_schema.xml</p><p>现在添加代码,如下所示。</p><pre class="brush:bash;toolbar:false"><?xml version="1.0"?> <schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Setup/Declaration/Schema/etc/schema.xsd"> <table name="cms_page" resource="default" engine="innodb" comment="Cms Page"> <column length="255" name="custom_image" nullable="false" xsi:type="varchar"/> </table> </schema></pre><p>步骤2:之后,我们需要创建一个cms_page_form.xml来定义CMS页面表单,其中图像字段文件位于扩展名内的以下路径。</p><p>{{magento_root}}/app/code/Vendor/Module/view/adminhtml/ui_component/cms_page_form.xml</p><p>然后包括下面提到的代码</p><pre class="brush:bash;toolbar:false"><?xml version="1.0" encoding="UTF-8"?> <form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd"> <fieldset name="content"> <field name="custom_image" formElement="imageUploader"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> <item name="dataType" xsi:type="string">string</item> <item name="label" xsi:type="string" translate="true">Page Image</item> <item name="formElement" xsi:type="string">imageUploader</item> <item name="source" xsi:type="string">page</item> <item name="sortOrder" xsi:type="number">30</item> <item name="previewTmpl" xsi:type="string">Magento_Catalog/image-preview</item> <item name="required" xsi:type="boolean">false</item> </item> </argument> </field> </fieldset> </form></pre><p>第三步:之后,我们需要在以下路径的扩展名中的 event.xml 文件中注册观察者文件。</p><p>{{magento_root}}/app/code/Vendor/Module/etc/events.xml</p><p>并添加以下代码段</p><pre class="brush:bash;toolbar:false"><?xml version="1.0" encoding="UTF-8"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="cms_page_prepare_save"> <observer name="custom_cms_image" instance="Vendor\Module\Observer\SaveCustomImage" /> </event> </config></pre><p>第4步: 最后,我们需要将上传的图像保存在扩展名内的观察者文件中,位于以下路径。</p><p>{{magento_root}}/app/code/Vendor/Module/Observer/SaveCustomImage.php</p><p>现在添加代码,如下所述</p><pre class="brush:bash;toolbar:false"><?php namespace Vendor\Module\Observer; use Magento\Framework\Event\ObserverInterface; use Magento\Framework\App\Request\DataPersistorInterface; use Magento\Framework\Filesystem; use Magento\MediaStorage\Model\File\UploaderFactory; class SaveCustomImage implements ObserverInterface { protected $dataPersistor; protected $uploaderFactory; protected $filesystem; public function __construct( DataPersistorInterface $dataPersistor, UploaderFactory $uploaderFactory, Filesystem $filesystem) { $this->dataPersistor = $dataPersistor; $this->uploaderFactory = $uploaderFactory; $this->filesystem = $filesystem; } public function execute(\Magento\Framework\Event\Observer $observer) { $data = $this->dataPersistor->get('cms_page'); if (!$data) { return; } $image = $data['custom_image'] ?? null; if ($image) { $uploader = $this->uploaderFactory->create(['fileId' => 'custom_image']); $uploader->setAllowedExtensions(['jpg', 'jpeg', 'gif', 'png']); $uploader->setAllowRenameFiles(true); $uploader->setFilesDispersion(true); $mediaDirectory = $this->filesystem->getDirectoryRead(\Magento\Framework\App\Filesystem\DirectoryList::MEDIA); $result = $uploader->save($mediaDirectory->getAbsolutePath('custom_cms_images')); $data['custom_image'] = 'custom_cms_images' . $result['file']; } $observer->getPage()->addData($data); } }</pre><p>输出:</p><p><img src="/uploads/images/20230826/c02aef4273ee6e11b15804058f12f1bb.png" title="3.png" alt="" width="757" height="359"/></p><p>结论:</p><p>您已成功将图像字段添加到Magento 2中的CMS页面。您还可以在Magento 2的后端CMS页面部分添加自定义按钮。</p><p><br/></p>
<h5 style="color:red;">系统学习magento二次开发,推荐小册:<a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank">《Magento中文全栈二次开发 》</a></h5> <div class="image-container"> <p> <a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank"> <img src="https://www.maxiaoke.com/uploads/images/20230218/bb9c82995c24d1105676e02f373755f5.jpg" alt="Magento中文全栈二次开发"> </a> </p> </div> <div class="text-container" style="font-size:14px; color:#888"> <p>本小册面向Magento2以上版本,书代码及示例兼容magento2.0-2.4版本。涵盖了magento前端开发,后端开发,magento2主题,magento2重写,magento2 layout,magento2控制器,magento2 block等相关内容,带领您成为magento开发技术专家。</p> </div> <hr><p>Magento 2开源功能的完整列表</p><p><span style="color: #6a9955;">### 目录管理</span></p><ul class=" list-paddingleft-2" style="list-style-type: disc;"><li><p>Magento 2提供了一个灵活且可定制的产品目录管理系统。这使您可以有效地组织库存并满足不同的客户需求。</p></li><li><p>创建和管理无限数量的产品</p></li><li><p>创建产品属性和属性集以区分产品</p></li><li><p>创建类别和子类别的层次结构</p></li><li><p>支持各种产品类型,包括简单产品、可配置产品、分组产品、虚拟产品、捆绑产品和可下载产品</p></li><li><p>跟踪产品库存水平</p></li><li><p>库存水平低时接收通知</p></li><li><p>为每个产品上传多张图片并创建图片库</p></li><li><p>使客户能够留下评论并对产品进行评分</p></li><li><p>高级搜索选项</p></li><li><p>批量导入/导出功能</p></li><li><p>高级定价选项,如特价、客户组定价和分层定价</p></li><li><p>设置添加到购物车的最小和最大产品数量</p></li><li><p>自动调整产品图片和水印大小</p></li><li><p>通过简单的库存管理支持延期交货</p></li></ul><p><span style="color: #6a9955;">### 目录浏览</span></p><p>Magento 2开源为客户提供了丰富的目录浏览体验,使他们能够轻松导航和探索您的产品。目录浏览功能可帮助客户发现产品、比较选项并做出明智的购买决策。</p><ul class=" list-paddingleft-2" style="list-style-type: disc;"><li><p>分层类别结构</p></li><li><p>分层导航</p></li><li><p>产品筛选选项</p></li><li><p>带有自动建议的搜索栏</p></li><li><p>产品分类</p></li><li><p>分页和无限滚动</p></li><li><p>面包屑</p></li><li><p>列表或网格格式的产品视图</p></li></ul><p><span style="color: #6a9955;">### 产品浏览</span></p><p>Magento 2开源提供了一系列功能来增强客户的产品浏览体验,使他们更容易探索您的产品,查看详细信息并做出明智的购买决定。</p><ul class=" list-paddingleft-2" style="list-style-type: disc;"><li><p>高质量的产品图像和缩略图视图</p></li><li><p>多个产品图片</p></li><li><p>快速查看选项</p></li><li><p>展示相关和交叉销售产品</p></li><li><p>最近查看的产品</p></li><li><p>添加到购物车按钮</p></li><li><p>愿望清单和比较按钮</p></li><li><p>社交分享选项</p></li></ul><p><span style="color: #6a9955;">### 现场管理</span></p><p>Magento 2开源提供站点管理功能,使电子商务企业能够有效地控制和维护其在线商店。</p><ul class=" list-paddingleft-2" style="list-style-type: disc;"><li><p>自定义店面以匹配您的品牌标识并提供独特的用户体验</p></li><li><p>轻松更改商店的布局和设计</p></li><li><p>从单个管理面板管理多个在线商店</p></li><li><p>设置具有特定语言和货币配置的多个商店视图,以迎合全球受众</p></li><li><p>集成 CMS 以创建和管理内容页面、博客和其他静态页面</p></li><li><p>创建用户角色并分配特定权限</p></li><li><p>整页缓存、优化的数据库查询和代码缩小有助于缩短加载时间</p></li><li><p>备份商店的数据和配置</p></li><li><p>为产品、类别和内容页面创建 SEO 友好的 URL</p></li><li><p>设置URL重定向以保持SEO价值</p></li><li><p>在更新或维护任务期间将您的Magento 2商店置于维护模式</p></li><li><p>验证码功能可保护商店免受欺诈登录</p></li></ul><p><span style="color: #6a9955;">### 订单管理</span></p><p>Magento 2开源提供了一个强大的订单管理系统,允许电子商务企业有效地处理和管理客户订单。此功能对于确保顺利履行订单、跟踪和客户沟通至关重要。</p><ul class=" list-paddingleft-2" style="list-style-type: disc;"><li><p>从管理面板创建新订单</p></li><li><p>编辑现有订单</p></li><li><p>清晰的订单状态和工作流程系统</p></li><li><p>电子邮件通知,让客户了解他们的订单状态</p></li><li><p>为订单生成发票和装箱单</p></li><li><p>从“我的帐户”跟踪订单</p></li><li><p>发放退款和处理退货</p></li><li><p>添加订单注释和注释</p></li><li><p>订单报告和分析</p></li><li><p>访问历史订单数据</p></li></ul><p><span style="color: #6a9955;">### 结帐、付款和运输</span></p><p>Magento 2开源提供广泛的结账,付款和运输功能,为客户提供无缝便捷的购物体验。这些功能对于顺利有效地完成交易至关重要。</p><ul class=" list-paddingleft-2" style="list-style-type: disc;"><li><p>单页结帐</p></li><li><p>访客结账</p></li><li><p>地址自动完成</p></li><li><p>多种送货地址、付款方式、送货方式</p></li><li><p>安全的支付处理</p></li><li><p>商店付款信息</p></li><li><p>实时运费计算</p></li><li><p>设置特定的运输限制和规则</p></li><li><p>订单跟踪功能</p></li></ul><p><span style="color: #6a9955;">### 客户帐户</span></p><p>Magento 2开源提供强大的客户帐户管理功能,使电子商务企业能够提供个性化的购物体验并建立牢固的客户关系。这些功能可增强客户参与度并促进与您的在线商店的无缝交互。</p><ul class=" list-paddingleft-2" style="list-style-type: disc;"><li><p>客户注册和登录</p></li><li><p>客户帐户仪表板</p></li><li><p>客户可以存储多个送货和账单地址</p></li><li><p>订单历史记录和跟踪</p></li><li><p>产品评论和评级</p></li><li><p>从“我的帐户”订阅时事通讯</p></li><li><p>创建多个愿望清单</p></li><li><p>重新排序以前下达的订单</p></li><li><p>个性化帐户首选项</p></li><li><p>管理客户帐户权限</p></li></ul><p><span style="color: #6a9955;">### 客户服务</span></p><p>Magento 2开源提供各种客户服务功能,以帮助电子商务企业提供出色的支持并确保客户满意度。这些功能旨在加强沟通、解决客户查询并有效解决问题。</p><ul class=" list-paddingleft-2" style="list-style-type: disc;"><li><p>内置“联系我们”表单</p></li><li><p>直接从管理面板回复客户电子邮件</p></li><li><p>通过客户帐户仪表板直接与客户沟通</p></li><li><p>创建知识库或常见问题 (FAQ) 部分</p></li><li><p>向客户发送有关各种订单状态更新的自动电子邮件通知</p></li><li><p>客户可以从其帐户发起退货</p></li><li><p>客户服务代表提供个性化帮助和直接沟通</p></li><li><p>集成第三方实时聊天解决方案</p></li></ul><p><span style="color: #6a9955;">### 营销和转换工具</span></p><p>Magento 2开源提供了广泛的营销和转换工具,以帮助电子商务企业吸引客户,促进销售并提高整体转化率。这些功能旨在提高客户参与度并创造引人入胜的购物体验。</p><ul class=" list-paddingleft-2" style="list-style-type: disc;"><li><p>创建各种促销优惠</p></li><li><p>百分比或固定金额折扣</p></li><li><p>买一送一 (BOGO) 优惠</p></li><li><p>免费送货</p></li><li><p>生成和分发优惠券代码</p></li><li><p>用于目标营销活动的客户细分功能</p></li><li><p>个性化产品推荐</p></li><li><p>自动电子邮件提醒以恢复废弃的购物车</p></li><li><p>创建和共享愿望清单</p></li><li><p>交叉销售和向上销售策略</p></li><li><p>客户忠诚度计划</p></li><li><p>设置电子邮件活动,让客户了解新产品、促销和更新</p></li></ul><p><span style="color: #6a9955;">### 搜索引擎优化功能</span></p><ul class=" list-paddingleft-2" style="list-style-type: disc;"><li><p>Magento 2开源提供了一系列内置的SEO功能,以帮助提高您的在线商店在搜索引擎中的可见性并吸引自然流量。通过针对搜索引擎优化您的Magento 2商店,您可以增加在搜索结果中排名更高并覆盖更广泛受众的机会。</p></li><li><p>适用于您的产品、类别和内容页面的 SEO 友好网址</p></li><li><p>自定义元标记和元描述</p></li><li><p>自动生成 XML 站点地图</p></li><li><p>规范代码可防止出现重复内容问题</p></li><li><p>配置机器人.txt文件</p></li><li><p>支持丰富网页摘要/架构标记</p></li><li><p>创建网址重写</p></li><li><p>响应式设计</p></li></ul><p><span style="color: #6a9955;">### 国际支持</span></p><p>Magento 2开源包括各种国际支持功能,可帮助电子商务企业扩大其全球市场并满足各种客户需求。这些功能旨在促进多语言、多币种和跨境操作。</p><ul class=" list-paddingleft-2" style="list-style-type: disc;"><li><p>多语言支持</p></li><li><p>多币种支持</p></li><li><p>支持复杂的税务规则和配置,以符合不同国家和地区的税务法规</p></li><li><p>使用 Geo-IP 技术检测客户的地理位置</p></li><li><p>翻译和本地化能力</p></li><li><p>支持跨境运输</p></li><li><p>集成国际支付网关</p></li><li><p>计算关税、税款和海关费用</p></li><li><p>多区域库存管理</p></li><li><p>设置国际网址结构</p></li></ul><p><span style="color: #6a9955;">### 分析与报告</span></p><p>Magento 2开源提供分析和报告功能,使电子商务企业能够深入了解其绩效,客户行为和销售趋势。这些功能对于做出明智的决策、优化战略和推动业务增长至关重要。</p><ul class=" list-paddingleft-2" style="list-style-type: disc;"><li><p>销售报表</p></li><li><p>产品报告</p></li><li><p>客户报告</p></li><li><p>废弃购物车报告</p></li><li><p>搜索词报告</p></li><li><p>营销报告</p></li><li><p>库存报告</p></li><li><p>客户细分报告</p></li><li><p>地理报告</p></li><li><p>仪表板和自定义报告</p></li><li><p>第三方分析集成,如谷歌分析</p></li></ul><p><span style="color: #6a9955;">### 移动商务</span></p><p>Magento 2开源提供移动商务(m-commerce)功能,允许电子商务企业创建响应迅速且用户友好的移动购物体验。随着移动设备在网上购物中越来越受欢迎,这些功能可帮助您针对移动用户优化商店并占领很大一部分市场。</p><ul class=" list-paddingleft-2" style="list-style-type: disc;"><li><p>响应式设计功能</p></li><li><p>针对移动设备优化的结账流程</p></li><li><p>触摸友好型导航</p></li><li><p>适合移动设备的商品详情</p></li><li><p>AMP(加速移动页面)支持</p></li><li><p>移动搜索功能</p></li><li><p>特定于移动设备的主题和模板</p></li><li><p>集成第三方移动应用解决方案</p></li><li><p>使用移动分析工具</p></li></ul><p><span style="color: #6a9955;">### 总结</span></p><p>凭借其增强的功能,改进的性能和强大的功能,Magento 2提供了许多优势,这些优势对于您的在线企业的成功至关重要。选择可靠的Magento开发服务提供商,帮助您创建强大,高性能且用户友好的电子商务商店,以满足您的业务目标和客户期望。</p><p><br/></p>
<h5 style="color:red;">系统学习magento二次开发,推荐小册:<a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank">《Magento中文全栈二次开发 》</a></h5> <div class="image-container"> <p> <a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank"> <img src="https://www.maxiaoke.com/uploads/images/20230218/bb9c82995c24d1105676e02f373755f5.jpg" alt="Magento中文全栈二次开发"> </a> </p> </div> <div class="text-container" style="font-size:14px; color:#888"> <p>本小册面向Magento2以上版本,书代码及示例兼容magento2.0-2.4版本。涵盖了magento前端开发,后端开发,magento2主题,magento2重写,magento2 layout,magento2控制器,magento2 block等相关内容,带领您成为magento开发技术专家。</p> </div> <hr><p>今天我们将学习如何在Magento 2中的类别分层导航中添加库存过滤器。</p><p>为客户提供无缝高效的购物体验至关重要。实现这一目标的一种方法是启用有用的过滤器,帮助客户缩小产品搜索范围。</p><p>在Magento 2中的类别分层导航中添加库存过滤器可以通过允许客户根据产品的可用性过滤产品来大大增强用户体验。提供此类过滤选项有助于在您的Magento 2电子商务平台上提供更简化和客户友好的购物体验。</p><p>在本教程中,我们将指导您完成将库存筛选器添加到Magento 2商店中的类别分层导航的过程。</p><p>在Magento 2中的类别分层导航中添加库存过滤器的步骤:</p><p>步骤1: 首先,我们需要在扩展名内部的以下路径创建一个“di.xml”文件。</p><p>app\code\Vendor\Extension\etc\frontend</p><p>然后添加代码,如下所示</p><pre class="brush:bash;toolbar:false"><?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../lib/internal/Magento/Framework/ObjectManager/etc/config.xsd"> <type name="Magento\Catalog\Model\Layer\FilterList"> <plugin name="stock-filter-category-navigation" type="Vendor\Extension\Model\Plugin\FilterList" sortOrder="100" /> </type> </config></pre><p>第2步: 之后,我们需要在扩展名中以以下路径创建一个“Stock.php”文件。</p><p>app\code\Vendor\Extension\Model\Layer\Filter</p><p>现在添加代码,如下所述</p><pre class="brush:bash;toolbar:false"><?php namespace Vendor\Extension\Model\Layer\Filter; class Stock extends \Magento\Catalog\Model\Layer\Filter\AbstractFilter { const IN_STOCK_COLLECTION_FLAG = 'stock_filter_applied'; protected $_activeFilter = false; protected $_requestVar = 'in-stock'; protected $_scopeConfig; public function __construct( \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig, \Magento\Catalog\Model\Layer\Filter\ItemFactory $filterItemFactory, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Catalog\Model\Layer $layer, \Magento\Catalog\Model\Layer\Filter\Item\DataBuilder $itemDataBuilder, array $data = [] ) { $this->_scopeConfig = $scopeConfig; parent::__construct($filterItemFactory, $storeManager, $layer, $itemDataBuilder, $data); } public function apply(\Magento\Framework\App\RequestInterface $request) { $filter = $request->getParam($this->getRequestVar(), null); if (is_null($filter)) { return $this; } $this->_activeFilter = true; $filter = (int)(bool)$filter; $collection = $this->getLayer()->getProductCollection(); $collection->setFlag(self::IN_STOCK_COLLECTION_FLAG, true); $collection->getSelect()->where('stock_status_index.stock_status = ?', $filter); $this->getLayer()->getState()->addFilter( $this->_createItem($this->getLabel($filter), $filter) ); return $this; } public function getName() { return __("Stock"); } protected function _getItemsData() { if ($this->getLayer()->getProductCollection()->getFlag(self::IN_STOCK_COLLECTION_FLAG)) { return []; } $data = []; foreach ($this->getStatuses() as $status) { $data[] = [ 'label' => $this->getLabel($status), 'value' => $status, 'count' => $this->getProductsCount($status) ]; } return $data; } public function getStatuses() { return [ \Magento\CatalogInventory\Model\Stock::STOCK_IN_STOCK, \Magento\CatalogInventory\Model\Stock::STOCK_OUT_OF_STOCK ]; } public function getLabels() { return [ \Magento\CatalogInventory\Model\Stock::STOCK_IN_STOCK => __('In Stock'), \Magento\CatalogInventory\Model\Stock::STOCK_OUT_OF_STOCK => __('Out of stock'), ]; } public function getLabel($value) { $labels = $this->getLabels(); if (isset($labels[$value])) { return $labels[$value]; } return ''; } public function getProductsCount($value) { $collection = $this->getLayer()->getProductCollection(); $select = clone $collection->getSelect(); // reset columns, order and limitation conditions $select->reset(\Zend_Db_Select::COLUMNS); $select->reset(\Zend_Db_Select::ORDER); $select->reset(\Zend_Db_Select::LIMIT_COUNT); $select->reset(\Zend_Db_Select::LIMIT_OFFSET); $select->where('stock_status_index.stock_status = ?', $value); $select->columns( [ 'count' => new \Zend_Db_Expr("COUNT(e.entity_id)") ] ); return $collection->getConnection()->fetchOne($select); } }</pre><p>第三步: 之后,我们需要在扩展名中的以下路径中创建“FilterList.php”文件。</p><p>app\code\Vendor\Extension\Model\Plugin</p><p>最后,添加代码如下</p><pre class="brush:bash;toolbar:false"><?php namespace Vendor\Extension\Model\Plugin; class FilterList { const STOCK_FILTER_CLASS = 'Vendor\Extension\Model\Layer\Filter\Stock'; protected $_objectManager; protected $_layer; protected $_storeManager; protected $_stockResource; protected $_scopeConfig; public function __construct( \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Framework\ObjectManagerInterface $objectManager, \Magento\CatalogInventory\Model\ResourceModel\Stock\Status $stockResource, \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig ) { $this->_storeManager = $storeManager; $this->_objectManager = $objectManager; $this->_stockResource = $stockResource; $this->_scopeConfig = $scopeConfig; } public function isEnabled() { $outOfStockEnabled = $this->_scopeConfig->isSetFlag( \Magento\CatalogInventory\Model\Configuration::XML_PATH_DISPLAY_PRODUCT_STOCK_STATUS, \Magento\Store\Model\ScopeInterface::SCOPE_STORE ); return $outOfStockEnabled; } public function beforeGetFilters( \Magento\Catalog\Model\Layer\FilterList\Interceptor $filterList, \Magento\Catalog\Model\Layer $layer ) { $this->_layer = $layer; if ($this->isEnabled()) { $collection = $layer->getProductCollection(); $websiteId = $this->_storeManager->getStore($collection->getStoreId())->getWebsiteId(); $this->_addStockStatusToSelect($collection->getSelect(), $websiteId); } return array($layer); } public function afterGetFilters( \Magento\Catalog\Model\Layer\FilterList\Interceptor $filterList, array $filters ) { if ($this->isEnabled()) { $filters[] = $this->getStockFilter(); } return $filters; } public function getStockFilter() { $filter = $this->_objectManager->create( $this->getStockFilterClass(), ['layer' => $this->_layer] ); return $filter; } public function getStockFilterClass() { return self::STOCK_FILTER_CLASS; } protected function _addStockStatusToSelect(\Zend_Db_Select $select, $websiteId) { $from = $select->getPart(\Zend_Db_Select::FROM); if (!isset($from['stock_status_index'])) { $joinCondition = $this->_stockResource->getConnection()->quoteInto( 'e.entity_id = stock_status_index.product_id' . ' AND stock_status_index.website_id = ?', $websiteId ); $joinCondition .= $this->_stockResource->getConnection()->quoteInto( ' AND stock_status_index.stock_id = ?', \Magento\CatalogInventory\Model\Stock::DEFAULT_STOCK_ID ); } return $this; } }</pre><p>步骤4:在Magento中创建所有文件后,您需要运行Magento升级,编译和部署命令,如下所示。</p><pre class="brush:bash;toolbar:false">php bin/magento setup:upgrade php bin/magento setup:static-content:deploy -f php bin/magento setup:di:compile php bin/magento cache:clean php bin/magento cache:flush</pre><p>输出:</p><p>访问您的Magento 2商店的类别页面,您现在应该在分层导航中看到库存过滤器。</p><p>库存过滤器</p><p>现在,如果客户在“库存”筛选器菜单中选择“有货”选项,它将显示可供购买的产品。</p><p>在库存过滤器中选择的库存期权</p><p>如果客户选择“缺货”选项,它将显示当前没有库存的产品。</p><p>在库存筛选器中选择缺货选项</p><p><br/></p><p><img src="/uploads/images/20230826/cbd1f64f4a47ba84e8fab41eea1cfdf6.png" title="2.png" alt="" width="740" height="318"/></p><p>结论:</p><p>通过执行以下步骤,您可以通过向类别分层导航添加库存筛选器来增强Magento 2商店的用户体验。这将使客户能够根据产品的可用性筛选产品,帮助他们查找当前有货或缺货的产品。</p><p><br/></p>
<h5 style="color:red;">系统学习magento二次开发,推荐小册:<a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank">《Magento中文全栈二次开发 》</a></h5> <div class="image-container"> <p> <a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank"> <img src="https://www.maxiaoke.com/uploads/images/20230218/bb9c82995c24d1105676e02f373755f5.jpg" alt="Magento中文全栈二次开发"> </a> </p> </div> <div class="text-container" style="font-size:14px; color:#888"> <p>本小册面向Magento2以上版本,书代码及示例兼容magento2.0-2.4版本。涵盖了magento前端开发,后端开发,magento2主题,magento2重写,magento2 layout,magento2控制器,magento2 block等相关内容,带领您成为magento开发技术专家。</p> </div> <hr><p>在本Magento 2教程指南中,我将解释如何在Magento 2中从前端下订单后以编程方式向订单添加评论。</p><p>在Magento 2中,从前端下订单后以编程方式向订单添加评论或评论的能力对于各种目的非常有用,例如提供其他说明,说明或内部通信。</p><p>让我们看看如何在Magento 2中从前端下订单后以编程方式向订单添加评论。</p><p>在Magento 2中从前端下订单后,以编程方式向订单添加评论的步骤:</p><p>第 1 步:在 app\code\Vendor\Extension\etc\events.xml 创建一个文件,并添加以下代码。</p><pre class="brush:bash;toolbar:false"><?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="checkout_onepage_controller_success_action"> <observer name="order_observer" instance="\Vendor\Extension\Observer\OrderObserver"/> </event> </config></pre><p>第 2 步:在 app\code\Vendor\Extension\Observer\OrderObserver.php 创建一个文件,并添加以下代码。</p><pre class="brush:bash;toolbar:false"><?php namespace Vendor\Extension\Observer; use Magento\Framework\Event\Observer; use Magento\Framework\Event\ObserverInterface; use Magento\Sales\Api\OrderRepositoryInterface; use Magento\Sales\Model\Order\Status\HistoryFactory; class OrderObserver implements ObserverInterface { protected $orderRepository; protected $orderStatusHistoryFactory; public function __construct( OrderRepositoryInterface $orderRepository, HistoryFactory $orderStatusHistoryFactory ) { $this->orderRepository = $orderRepository; $this->orderStatusHistoryFactory = $orderStatusHistoryFactory; } public function execute(Observer $observer) { $order = $observer->getEvent()->getOrder(); $comment = "Your comment goes here."; $this->addCommentToOrder($order->getId(), $comment); return $this; } public function addCommentToOrder($orderId, $comment) { try { $order = $this->orderRepository->get($orderId); $statusHistory = $this->orderStatusHistoryFactory->create(); $statusHistory->setComment( __('Comment: %1.', $comment) ); $statusHistory->setEntityName(\Magento\Sales\Model\Order::ENTITY); $statusHistory->setStatus($order->getStatus()); $statusHistory->setIsCustomerNotified(false)->setIsVisibleOnFront(false); $order->addStatusHistory($statusHistory); $this->orderRepository->save($order); } catch (\Exception $e) { throw new LocalizedException(__("Failed to add the comment to the order: %1", $e->getMessage())); } } }</pre><p>输出:</p><p>转到前端的订单视图页面,您现在应该在其中看到评论表单。添加评论,然后单击“提交评论”按钮。评论应添加到订单的状态历史记录中。</p><p><img src="/uploads/images/20230826/8566ef32e16669e2d954892ba729e710.png" title="1.png" alt="" width="944" height="347"/></p><p>结论:</p><p>通过执行这些步骤,您可以通过启用向订单添加评论或评论来增强商店的沟通和组织。此功能对于跟踪与每个订单相关的特殊说明、更新或任何其他相关信息特别有用。您还可以使用Magento 2订单评论扩展来允许客户在结帐页面上添加评论并从后端成功管理它。</p><p><br/></p>
<h5 style="color:red;">系统学习magento二次开发,推荐小册:<a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank">《Magento中文全栈二次开发 》</a></h5> <div class="image-container"> <p> <a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank"> <img src="https://www.maxiaoke.com/uploads/images/20230218/bb9c82995c24d1105676e02f373755f5.jpg" alt="Magento中文全栈二次开发"> </a> </p> </div> <div class="text-container" style="font-size:14px; color:#888"> <p>本小册面向Magento2以上版本,书代码及示例兼容magento2.0-2.4版本。涵盖了magento前端开发,后端开发,magento2主题,magento2重写,magento2 layout,magento2控制器,magento2 block等相关内容,带领您成为magento开发技术专家。</p> </div> <hr><p>在今天的Magento 2指南中,我将解释如何使用Magento 2将送货地址转换为HTML格式?</p><p>电子商务企业的送货地址信息有助于成功将订单交付给客户。但是,在您的网站上以视觉上吸引人且有组织的格式呈现此地址可以增强用户体验并提高商店的整体专业性。</p><p>让我们学习如何使用 Magento 2 将送货地址转换为 HTML 格式。</p><p>使用Magento 2将送货地址转换为HTML格式的步骤:</p><p>步骤1:在“帮助程序”文件夹中创建一个数据.php文件。</p><p>app\code\Vendor\Extension\Helper</p><p>然后添加代码,如下所示。</p><pre class="brush:bash;toolbar:false"><?php namespace Vendor\Extension\Helper; use Magento\Framework\App\Helper\AbstractHelper; class Data extends AbstractHelper { protected $orderRepository; protected $_addressConfig; public function __construct( \Magento\Sales\Api\OrderRepositoryInterface $orderRepository, \Magento\Customer\Model\Address\Config $addressConfig ) { $this->orderRepository = $orderRepository; $this->_addressConfig = $addressConfig; } public function _getAddressHtml($orderId) { try { $order = $this->orderRepository->get($orderId); } catch (NoSuchEntityException $e) { throw new \Magento\Framework\Exception\LocalizedException(__('This order no longer exists.')); } $address = $order->getShippingAddress(); $renderer = $this->_addressConfig->getFormatByCode('html')->getRenderer(); return $renderer->renderArray($address); } }</pre><p>第2步: 现在,在 地址.php 在 块 文件夹。</p><p>app\code\Vendor\Extension\Block</p><p>然后添加代码,如下所示。</p><pre class="brush:bash;toolbar:false"><?php namespace Vendor\Extension\Block; use Vendor\Extension\Helper\Data as Helper; class Address extends \Magento\Framework\View\Element\Template { /** * @param \Magento\Backend\Block\Template\Context $context * @param \Magento\Framework\Registry $registry * @param \Magento\Framework\Data\FormFactory $formFactory * @param array $data */ protected $helper; public function __construct( \Magento\Backend\Block\Template\Context $context, \Magento\Framework\Data\FormFactory $formFactory, Helper $helper, array $data = [] ) { parent::__construct($context, $data); $this->helper = $helper; } public function getAddressHtml($orderId) { return $this->helper->_getAddressHtml($orderId); } }</pre><p>步骤3:然后,在布局文件夹中创建一个布局文件。</p><p>Vendor/Extension/view/frontend/layout/your_layout_file.xml</p><p>添加代码,如下所示。</p><pre class="brush:bash;toolbar:false"><?xml version="1.0"?> <page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"> <body> <referenceContainer name="content"> <block template="Vendor_Extension::template.phtml" class="Vendor\Extension\Block\Address" name="address.html"/> </referenceContainer> </body> </page></pre><p>步骤4:现在,在模板文件夹中创建一个t emplate.phtml文件</p><p>Vendor/Extension/view/frontend/templates/template.phtml</p><p>然后添加代码,如下所示。</p><pre class="brush:bash;toolbar:false"><?php $orderId = 1; $shippingAddress = $block->getAddressHtml($orderId); $shippingFormat = strip_tags($shippingAddress); echo $shippingFormat; ?></pre><p>结论:</p><p>通过执行以下步骤,您可以轻松修改送货地址显示以匹配商店的设计和品牌,从而提供更加精致和专业的在线购物体验。您还可以在Magento 2的订单网格中添加送货地址详细信息。</p><p><br/></p>
<h5 style="color:red;">系统学习magento二次开发,推荐小册:<a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank">《Magento中文全栈二次开发 》</a></h5> <div class="image-container"> <p> <a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank"> <img src="https://www.maxiaoke.com/uploads/images/20230218/bb9c82995c24d1105676e02f373755f5.jpg" alt="Magento中文全栈二次开发"> </a> </p> </div> <div class="text-container" style="font-size:14px; color:#888"> <p>本小册面向Magento2以上版本,书代码及示例兼容magento2.0-2.4版本。涵盖了magento前端开发,后端开发,magento2主题,magento2重写,magento2 layout,magento2控制器,magento2 block等相关内容,带领您成为magento开发技术专家。</p> </div> <hr><p>今天,我将解释如何在Magento 2中使用JavaScript模块使用本地和cookie存储。</p><p>Cookie 是当用户通过网络浏览器浏览任何网站时存储在用户计算机中的一小段信息。之后,用户可以在需要时检索这些数据。Cookie 通常用于通过跟踪用户的操作来提供个性化的用户体验。</p><p>Magento 2提供了使用本地存储或cookie在浏览器中存储一些公共信息的功能。商店管理员可以使用 javascript 模块管理 cookie 信息。在商店前端显示cookie通知,以通过Magento 2的免费cookie合规性扩展获得用户的同意。</p><p>在Magento 2中使用JavaScript模块使用本地和cookie存储的步骤:</p><p>第 1 步:首先在扩展或主题中创建 JS 文件。为此,请创建自定义cookie.js</p><p>app\code\Vendor\Extension\view\Frontend\Web\Js\customcookie.js</p><p></p><pre class="brush:bash;toolbar:false">define([ 'jquery', 'uiComponent', 'jquery/jquery-storageapi' ], function ($, Component) { return Component.extend( { defaults: { cookieMessages: [] }, initialize: function () { this._super(); this.cookieMessages = $.cookieStorage.get('mage-string'); $.cookieStorage.set('mage-string', ''); } }); });</pre><p><span style="color: #6a9955;"></span><br/></p><p>要使用此功能,我们必须同时添加jquery和jquery/jquery-storageapi。</p><p>第 2 步:所以现在您可以使用</p><p>$.cookieStorage.get(<span style="color: #ce9178;">'mage-string'</span>)</p><p>步骤3:</p><p></p><pre class="brush:bash;toolbar:false">window.localStorage也支持将信息存储在本地存储中 window.localStorage.setItem('myname', 'Vendor'); window.localStorage.getItem('myname'); window.localStorage.removeItem('myname'); window.localStorageclear();</pre><p><span style="color: #6a9955;"></span><br/></p><p>这些都是存储信息的不同方法。</p><p>结论:</p><p>因此,在上述代码的帮助下,所有人都能够做到。如果您遇到任何困难,请在下面的评论部分中提及,让我知道。进一步分享文章并保持更新。</p><p><br/></p>
<h5 style="color:red;">系统学习magento二次开发,推荐小册:<a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank">《Magento中文全栈二次开发 》</a></h5> <div class="image-container"> <p> <a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank"> <img src="https://www.maxiaoke.com/uploads/images/20230218/bb9c82995c24d1105676e02f373755f5.jpg" alt="Magento中文全栈二次开发"> </a> </p> </div> <div class="text-container" style="font-size:14px; color:#888"> <p>本小册面向Magento2以上版本,书代码及示例兼容magento2.0-2.4版本。涵盖了magento前端开发,后端开发,magento2主题,magento2重写,magento2 layout,magento2控制器,magento2 block等相关内容,带领您成为magento开发技术专家。</p> </div> <hr><p>如何在Magento 2中获取POST和GET请求<br/></p><p>对于扩展Magento\Framework\App\Action\Action的控制器,可以在$this->getRequest()->getPost()的帮助下获取请求。</p><p>对于自定义类,请在构造函数中注入请求:</p><pre class="brush:bash;toolbar:false"><?php namespace Namespace\Module\Something; class ClassName { protected $request; public function __construct( \Magento\Framework\App\Request\Http $request, ....//rest of parameters here ) { $this->request = $request; ...//rest of constructor here } public function getPost() { return $this->request->getPost(); } }</pre><p><br/></p>
<h5 style="color:red;">系统学习magento二次开发,推荐小册:<a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank">《Magento中文全栈二次开发 》</a></h5> <div class="image-container"> <p> <a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank"> <img src="https://www.maxiaoke.com/uploads/images/20230218/bb9c82995c24d1105676e02f373755f5.jpg" alt="Magento中文全栈二次开发"> </a> </p> </div> <div class="text-container" style="font-size:14px; color:#888"> <p>本小册面向Magento2以上版本,书代码及示例兼容magento2.0-2.4版本。涵盖了magento前端开发,后端开发,magento2主题,magento2重写,magento2 layout,magento2控制器,magento2 block等相关内容,带领您成为magento开发技术专家。</p> </div> <hr><p>有几个选项可以将自定义CSS / JS添加到Magento 2模块中,以下选项是最简单的。</p><p>首先,您应该在模块文件夹中创建视图/<区域>/布局/默认.xml文件,例如,该文件可以是app/code/Df/Core。</p><p>不要忘记将<区域>替换为adminhtml或前端。</p><p>这是默认.xml的样子:</p><pre class="brush:bash;toolbar:false"><?xml version="1.0"?> <page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="admin-1column" xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_configuration.xsd" > <head> <link src="Df_Core::core.js"/> <css src="Df_Core::core.css"/> </head> <body/> </page></pre><p>将Df_Core替换为模块的名称,并将核心.js и 核心.css文件放入视图/<区域>/Web 文件夹。</p><p>此外,您可以对更少的文件执行相同的操作。创建 core.less 文件而不是 core.css并将其引用为 <css <span style="color: #569cd6;">src</span>=“Df_Core::core.css”/>更改上面的默认值.xml示例。因此,系统会将您的较少文件编译为 css。因此,您将能够在Magento 2模块中使用更少的文件!</p><p><br/></p>