文章列表


Magento 2.4有什么新功能?商家的功能和优点盘点

<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 28.2020于2年4月1日发布,为全球第一的电子商务平台提供了一长串新功能,错误修复和安全增强功能。</p><p><span style="color: #6a9955;">### Magento 2.4有什么新功能?</span></p><p>新的和改进的默认搜索引擎</p><p>改进的媒体库</p><p>卖家辅助购物新功能</p><p>新功能采购审批工作流(仅适用于Magento商务)</p><p>双因素身份验证可提高安全性</p><p>整体技术要求更高</p><p><br/></p><p>显然,Magento正在解决其商家社区的一些最大问题,例如搜索和图像管理。</p><p>广泛的工作范围表明,Magento品牌显然已经在Adobe的品牌之家中成熟。</p><p>在Magento 2.4上投入的努力在Magento本身的这条推文中得到了完美的说明。</p><p>对于仍在Magento 1上的数千家在线商店,新的Magento 2.4增加了迁移到Magento 2的更多理由。</p><p>如果您是Magento 1商家,请随时直接与我们联系,我们可以帮助您找出从正在发生的全球电子商务转变中受益的最佳方式。</p><p>现在让我们更多地关注Magento 2.4中的新功能。</p><p><span style="color: #6a9955;">### 更好的默认搜索</span></p><p>搜索是几乎每个客户在登陆您的在线商店后都会采取的行动。您需要搜索体验不仅要好,而且要出色。</p><p>在Magento 2.4中,默认的Magento搜索引擎不再由MySQL提供支持。Magento现在要求您在服务器上安装Elasticsearch,然后再继续使用Magento 2.4。</p><p><span style="color: #6a9955;">### 弹性搜索徽标</span></p><p>说实话,Magento有点偏爱Elasticsearch已经有一段时间了。</p><p>既然 Elasticsearch 是强制性的,那么在服务器上维护另一个服务的成本会更高。特别是如果您当前的托管服务提供商默认不支持它。</p><p>对于我们Inchoo来说,我们一直在建议客户考虑替代搜索引擎。简而言之,Magento的默认搜索没有提供足够好的用户体验。</p><p>我们在Klevu搜索引擎方面有很好的经验。它非常直观,可以实时学习,显示热门搜索并轻松解决拼写错误。</p><p>但是,使Klevu成为其类别中的高级选择的是基于用户行为和购买历史的自学结果等功能。还有用于分析和报告、分层搜索等的详细仪表板。</p><p>但是,请注意,Klevu 是默认解决方案的昂贵替代品,您可以在其定价页面上自行检查。</p><p>总而言之,Magento 2.4中的搜索改进绝对是个好消息。如果您选择多投资一些,您可以为客户提供更好的搜索体验。</p><p><br/></p><p><span style="color: #6a9955;">### 新媒体库和双因素身份验证</span></p><p>在这里,我们在用户体验方面有了更多改进,只是这次是针对管理员用户的。</p><p>双因素身份验证还增加了Magento管理员帐户的安全性。该过程与大多数具有2FA的服务基本相同。系统生成的代码作为第二层身份验证发送给用户。</p><p>借助完全重新开发的媒体库,您的商店管理员现在可以比以前版本的平台更快地搜索、过滤和排序图像。Magento甚至声称它“执行速度提高了30倍”。</p><p>KEH Camera USA home page design</p><p>KEH Camera的例子,世界第一的二手相机设备零售商,其令人印象深刻的视觉效果</p><p>图片销售。更轻松地使用图像将转化为通过您的电子商务商店更有效的销售流程。</p><p>此外,新的媒体库与 Adobe Stock 集成,使您可以直接从媒体库访问库存图像预览。</p><p>是的,它基本上是Adobe向上销售其库存图像业务。但这是一笔好生意,对于某些客户来说,此功能值得研究。</p><p><br/></p><p><span style="color: #6a9955;">### 卖家辅助购物,提供更好的客户服务</span></p><p>您上次需要客户服务代表的帮助时,他/她是否能够从您的角度引导您完成使用该服务的整个过程?</p><p>如果是,那可能是很棒的客户服务。</p><p>借助Magento 2.4的新功能卖家辅助购物,您的客户服务代表可以从Magento管理员以客户身份登录网站。他们不再需要尝试无数的选项,最终却笨拙地要求客户交出他/她的密码。</p><p><br/></p><p>现在他们基本上可以在买家体验的各个方面指导和协助客户:</p><p><br/></p><p>例如,他们可以帮助客户找到产品</p><p>向他们展示如何设置特定功能,例如愿望清单</p><p>他们可以引导客户完成在店面体验中最容易理解的自定义功能(例如产品配置器)</p><p>他们可以通过代表客户快速创建订单和报价来打动客户并节省时间</p><p>他们可以处理管理任务,例如添加买家和设置审批规则</p><p>采购审批工作流(仅适用于Magento Commerce)</p><p>这项新功能为 B2B 购买公司带来了更好的支出控制,使他们能够为个人购买设置审批机制。</p><p><br/></p><p>为此,他们可以根据订单价值、SKU 数量或运输成本创建具有特定规则的审批工作流程。</p><p>他们不再需要尝试无数的选项,最终却笨拙地要求客户交出他/她的密码。</p><p>现在他们基本上可以在买家体验的各个方面指导和协助客户:</p><p><br/></p><p>例如,他们可以帮助客户找到产品</p><p>向他们展示如何设置特定功能,例如愿望清单</p><p>他们可以引导客户完成在店面体验中最容易理解的自定义功能(例如产品配置器)</p><p>他们可以通过代表客户快速创建订单和报价来打动客户并节省时间</p><p>他们可以处理管理任务,例如添加买家和设置审批规则</p><p>采购审批工作流(仅适用于Magento Commerce)</p><p>这项新功能为 B2B 购买公司带来了更好的支出控制,使他们能够为个人购买设置审批机制。</p><p><br/><br/></p><p><br/></p>

在Magento结帐地址表单中添加静态内容

<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>如果您正在阅读本文,您可能正在寻找一种将静态内容添加到结帐地址字段集的简单方法。</p><p>如果您打开Magento结帐模块,您会注意到Magento结帐的技术复杂性。当你考虑Knockout,HTML,PHTML,XML,JS - 这样的技术组合通常会使一个简单的简单任务看起来非常复杂。</p><p>通常,如果您需要在结帐时编辑某些内容,则需要创建一个自定义模块,该模块将覆盖布局处理器。如果结帐修改很复杂并且需要某种动态,则此方法是有意义的。</p><p>但是对于简单的任务,例如更新输入占位符,在输入中添加注释或在输入之间添加文本 - 自定义模块是矫枉过正。</p><p>让我与您分享一个简单的前端解决方案,适用于我们需要添加一些文本或图像横幅的情况,例如在姓氏输入和公司输入之间。像这样:</p><p><img src="/uploads/images/20230818/9498b050e4203d5d71728eff93fdae87.png" title="2.png" alt="" width="936" height="326"/></p><p>这些是步骤:</p><p><br/></p><p>找到Magento核心表单字段模板:</p><p>vendor/magento/module-ui/view/frontend/web/templates/form/field.html</p><p>将文件复制到您的主题:</p><p>app/design/frontend/Inchoo/[Theme_Name]/Magento_Ui/web/templates/form/field.html</p><p>在文件底部,创建挖空if,以检查您希望添加该自定义文本的位置。</p><p>例如,如果您希望在姓氏输入后添加内容,则需要添加以下内容:</p><pre class="brush:bash;toolbar:false">&lt;!--&nbsp;ko&nbsp;if:&nbsp;element.inputName&nbsp;===&nbsp;&#39;lastname&#39;&nbsp;--&gt; &nbsp;&nbsp;&nbsp;&nbsp;&lt;div&nbsp;class=&quot;delivery-address-title&quot;&gt; &nbsp;&nbsp;&nbsp;&nbsp;&lt;h6&nbsp;translate=&quot;Please&nbsp;add&nbsp;your&nbsp;delivery&nbsp;address&nbsp;below&quot;&gt;&lt;/h6&gt; &nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt; &lt;!--&nbsp;/ko&nbsp;--&gt;</pre><p>此外,如果您需要将该文本(或其他一些静态内容)放在地址表单中的其他位置,则需要检查 Knockout 语法并查找 inputName:</p><p><img src="/uploads/images/20230818/72fe2d3286cdce76e7c0ef7a207899c0.png" title="3.png" alt="" width="745" height="220"/></p><p>例如,如果您需要在邮政编码之后进行修改,那么您的 Knockout if 语句将包含代码而不是</p><p>postcode &nbsp;lastname</p><p>还有一件事要记住。扩展 Knockout 文件(在本例中为文件)并将该文件添加到您的主题后,请确保您的缓存已刷新并重新生成静态文件。form/field.html</p><p><br/></p>

如何将谷歌分析4连接到Magento 2

<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 style="box-sizing: inherit; margin-top: 0px; margin-bottom: 30px; overflow-wrap: break-word; color: rgb(64, 64, 65); font-family: &quot;Open Sans&quot;, &quot;Helvetica Neue&quot;, Arial, Helvetica, sans-serif; font-size: 18px; text-wrap: wrap;">按照这些明确的步骤,通过谷歌跟踪代码管理器将您的Google Analytics 4连接到Magento 2商店。注意:这篇文章已经更新,因为上一篇文章有通用分析(GA3)和Magento 1的说明。享受以下更新的说明。将Google Analytics(<span style="box-sizing: inherit; font-weight: bolder;">&nbsp;</span><span style="box-sizing: inherit;">分析4)媒体资源连接到任何网上商店的基本方法是在您要跟踪的每个网页的&lt;head&gt;标签中插入Google Analytics(分析4)跟踪代码(gtag.js)。您可以通过单击属性来找到代码 管理员&gt;数据流 &gt;然后单击流,您就有了它。</span></p><p style="box-sizing: inherit; margin-top: 0px; margin-bottom: 30px; overflow-wrap: break-word; color: rgb(64, 64, 65); font-family: &quot;Open Sans&quot;, &quot;Helvetica Neue&quot;, Arial, Helvetica, sans-serif; font-size: 18px; text-wrap: wrap;"><span style="box-sizing: inherit;"><img src="/uploads/images/20230818/88ec3547924a7e02b59cbe2b8a73b6de.png" title="3.png" alt="" width="680" height="279"/></span></p><p style="box-sizing: inherit; margin-top: 0px; margin-bottom: 30px; overflow-wrap: break-word; color: rgb(64, 64, 65); font-family: &quot;Open Sans&quot;, &quot;Helvetica Neue&quot;, Arial, Helvetica, sans-serif; font-size: 18px; text-wrap: wrap;"></p><p>还有一种更简单的方法可以通过使用市场上众多Google Analytics Magento扩展之一来连接它。在这种情况下,您只需在 Magento 扩展界面中插入 GA4 属性的测量 ID 号,而无需复制粘贴上述代码。</p><p>如何完成取决于您选择使用的Google Analytics Magento扩展程序。因此,最好搜索扩展提供程序的分步说明。</p><ul class=" list-paddingleft-2" style="list-style-type: disc;"><li><p>创建 Google 跟踪代码管理器 (GTM) 帐号和容器</p></li><li><p>安装谷歌跟踪代码管理器Magento 2扩展程序</p></li><li><p>将您的GTM容器与Magento GTM扩展连接</p></li><li><p>在 GTM 中创建 GA4 配置标记</p></li><li><p>在 GTM 预览模式下测试连接</p></li></ul><p>但是,将Google Analytics连接到Magento的最佳方法是通过Google Tag Manager进行连接。总体而言,在处理Google Analytics和其他营销工具(如Google Ads或Facebook)时,Google Tag Manager为您提供了更多管理选项,并使您能够创建Google Analytics增强型电子商务事件,以帮助您跟踪用户旅程。</p><p>在这里,您可以阅读更多关于为什么我认为这是将Google Analytics连接到Google Tag Manager的最佳方式。在这种情况下,您需要Google Tag Manager Magento扩展程序来正确设置所有内容,而不是Google Analytics Magento扩展程序。</p><p>事不宜迟,以下是使用Google Tag Manager将Google Analytics 4连接到Magento网上商店的步骤。</p><p><strong>1. 创建谷歌跟踪代码管理器 (GTM) 帐号和容器</strong></p><p>首先单击此链接中的“免费开始”按钮:https://marketingplatform.google.com/about/tag-manager/ 然后我强烈建议观看有关如何创建您的第一个 GTM 帐户和容器的简短视频教程。</p><p>您还将获得界面和帐户结构的概述。如果你后来觉得有必要更深入地研究GTM,我建议你查看Analytics Mania Youtube频道的其他视频和材料。</p><p><strong>2. 安装谷歌跟踪代码管理器 2 扩展程序</strong></p><p>我不会在这里建议任何特定的GTM扩展,因为它们都可以完成这项工作。最适合您的是谷歌它并选择具有最适合您需求的功能的扩展程序。通常,他们都需要遵循有关GA4增强型电子商务配置的Google文档。我们努力制作自己的性能感知GTM扩展,该扩展仅供我们的客户免费使用,因此我将在示例中向您展示此扩展的界面。将 GTM 与 GTM 扩展连接是相似且简单的,无论扩展提供程序如何,因此我相信您会成功连接它。</p><p>3. 将您的 GTM 容器与 Magento GTM 扩展连接</p><p><img src="/uploads/images/20230818/248b362b6c9a3ddf52ac714e2b3c843e.png" title="4.png" alt="" width="687" height="400"/></p><p>打开您的 GTM 容器,然后单击 GTM ID 号。</p><p style="box-sizing: inherit; margin-top: 0px; margin-bottom: 30px; overflow-wrap: break-word; color: rgb(64, 64, 65); font-family: &quot;Open Sans&quot;, &quot;Helvetica Neue&quot;, Arial, Helvetica, sans-serif; font-size: 18px; text-wrap: wrap;"><span style="box-sizing: inherit;"><img src="/uploads/images/20230818/419dca5d7b79425eaf03019a11c6c36c.png" title="5.png" alt="" width="696" height="432"/></span></p><p style="box-sizing: inherit; margin-top: 0px; margin-bottom: 30px; overflow-wrap: break-word; color: rgb(64, 64, 65); font-family: &quot;Open Sans&quot;, &quot;Helvetica Neue&quot;, Arial, Helvetica, sans-serif; font-size: 18px; text-wrap: wrap;"><span style="box-sizing: inherit;"><span style="box-sizing: inherit;">打开您的Magento GTM扩展程序,然后将GTM ID号粘贴到Google Tag Manager&gt;Google Tag Manager部分的商店&gt;配置&gt;销售&gt;Google API部分。保存配置,GTM将连接到您的Magento网上商店。您可以通过查看网上商店的页面源代码并找到 GTM ID 号来测试它。或者安装</span><a href="https://chrome.google.com/webstore/detail/tag-assistant-legacy-by-g/kejbdjndbnbjgmefkgdddjlbokphdefk?hl=en" style="box-sizing: inherit; transition: color 0.2s ease 0s; color: rgb(121, 173, 54); text-decoration-line: none;">旧版跟踪代码助手浏览器扩展</a><span style="box-sizing: inherit;">程序。这是一个有用的扩展,可以帮助您对GTM和Google Analytics的安装进行故障排除,并为您提供一些其他见解。</span></span></p><p style="box-sizing: inherit; margin-top: 0px; margin-bottom: 30px; overflow-wrap: break-word; color: rgb(64, 64, 65); font-family: &quot;Open Sans&quot;, &quot;Helvetica Neue&quot;, Arial, Helvetica, sans-serif; font-size: 18px; text-wrap: wrap;"><span style="box-sizing: inherit;"><span style="box-sizing: inherit;"><img src="/uploads/images/20230818/3e8feada6bf267a39146f837b560a5c6.png" title="6.png" alt="" width="703" height="376"/></span></span></p><p style="box-sizing: inherit; margin-top: 0px; margin-bottom: 30px; overflow-wrap: break-word; color: rgb(64, 64, 65); font-family: &quot;Open Sans&quot;, &quot;Helvetica Neue&quot;, Arial, Helvetica, sans-serif; font-size: 18px; text-wrap: wrap;"><span style="box-sizing: inherit;"><span style="box-sizing: inherit;"><span style="color: rgb(64, 64, 65); font-family: &quot;Open Sans&quot;, &quot;Helvetica Neue&quot;, Arial, Helvetica, sans-serif; font-size: 18px; text-wrap: wrap;">然后单击标签配置空间以打开标签类型。</span></span></span></p><p style="box-sizing: inherit; margin-top: 0px; margin-bottom: 30px; overflow-wrap: break-word; color: rgb(64, 64, 65); font-family: &quot;Open Sans&quot;, &quot;Helvetica Neue&quot;, Arial, Helvetica, sans-serif; font-size: 18px; text-wrap: wrap;"><span style="box-sizing: inherit;"><span style="box-sizing: inherit;"><span style="color: rgb(64, 64, 65); font-family: &quot;Open Sans&quot;, &quot;Helvetica Neue&quot;, Arial, Helvetica, sans-serif; font-size: 18px; text-wrap: wrap;"><img src="/uploads/images/20230818/3a76d7a8cd2acdd8aa675b4f64633ca4.png" title="1.png" alt="" width="706" height="403"/></span></span></span></p><p style="box-sizing: inherit; margin-top: 0px; margin-bottom: 30px; overflow-wrap: break-word; color: rgb(64, 64, 65); font-family: &quot;Open Sans&quot;, &quot;Helvetica Neue&quot;, Arial, Helvetica, sans-serif; font-size: 18px; text-wrap: wrap;">选择 GA4 配置标记类型。</p><p><span style="box-sizing: inherit;"><img src="/uploads/images/20230818/e43603489000823dff49e9a8709eff6b.png" title="2.png" alt="" width="708" height="402"/></span></p><p><span style="box-sizing: inherit;"></span></p><p style="box-sizing: inherit; margin-top: 0px; margin-bottom: 30px; overflow-wrap: break-word; color: rgb(64, 64, 65); font-family: &quot;Open Sans&quot;, &quot;Helvetica Neue&quot;, Arial, Helvetica, sans-serif; font-size: 18px; text-wrap: wrap;"><span style="box-sizing: inherit;">...,然后输入您的 GA4 测量 ID 号。衡量 ID 与 GA4 跟踪代码位于同一位置。</span></p><p style="box-sizing: inherit; margin-top: 0px; margin-bottom: 30px; overflow-wrap: break-word; color: rgb(64, 64, 65); font-family: &quot;Open Sans&quot;, &quot;Helvetica Neue&quot;, Arial, Helvetica, sans-serif; font-size: 18px; text-wrap: wrap;"><span style="box-sizing: inherit;">请记住本博客开头的屏幕截图,我向您展示了如何查找 GA4 跟踪代码的路径,您将在屏幕截图中看到衡量 ID 位置。</span></p><p><span style="color: rgb(64, 64, 65); font-family: &quot;Open Sans&quot;, &quot;Helvetica Neue&quot;, Arial, Helvetica, sans-serif; font-size: 18px; text-wrap: wrap;">现在单击触发部分并选择触发器“所有页面”。</span></p><p><span style="box-sizing: inherit;"><font color="#404041" face="Open Sans, Helvetica Neue, Arial, Helvetica, sans-serif"><span style="font-size: 18px;"><img src="/uploads/images/20230818/ca91562bb080c62f25b87254b974fde1.png" title="3.png" alt="" width="717" height="118"/></span></font></span><br/></p><p></p><p style="box-sizing: inherit; margin-top: 0px; margin-bottom: 30px; overflow-wrap: break-word; color: rgb(64, 64, 65); font-family: &quot;Open Sans&quot;, &quot;Helvetica Neue&quot;, Arial, Helvetica, sans-serif; font-size: 18px; text-wrap: wrap;"><span style="box-sizing: inherit;">将您的代码命名为“GA4 配置”,然后点击保存。</span></p><p><span style="box-sizing: inherit;"><br/></span></p><p><img src="/uploads/images/20230818/212bd593f3b88a3d8981e554772ea584.png" title="4.png" alt="" width="714" height="324"/></p><p></p><p style="box-sizing: inherit; margin-top: 0px; margin-bottom: 30px; overflow-wrap: break-word; color: rgb(64, 64, 65); font-family: &quot;Open Sans&quot;, &quot;Helvetica Neue&quot;, Arial, Helvetica, sans-serif; font-size: 18px; text-wrap: wrap;"><span style="box-sizing: inherit;">仅此而已。您使用Google Tag Manager将您的Google Analytics媒体资源连接到Magento网上商店。</span></p><h2 style="box-sizing: inherit; color: rgb(64, 64, 65); font-family: TheSerifB, &quot;Helvetica Neue&quot;, Arial, Helvetica, sans-serif; margin: 36px 0px 18px; letter-spacing: 0.25px; font-size: 31px; line-height: 36px; text-wrap: wrap;">5. 在 GTM 预览模式下测试您的连接</h2><p style="box-sizing: inherit; margin-top: 0px; margin-bottom: 30px; overflow-wrap: break-word; color: rgb(64, 64, 65); font-family: &quot;Open Sans&quot;, &quot;Helvetica Neue&quot;, Arial, Helvetica, sans-serif; font-size: 18px; text-wrap: wrap;"><span style="box-sizing: inherit;">打开您的 Google Analytics GA4 媒体资源,然后检查您是否收到了流量。GA4 需要一些时间才能开始显示流量,但您可以通过单击 GTM 容器中的“预览”按钮立即测试您的连接。输入您的网上商店网址,然后单击“连接”。</span></p><p><img src="/uploads/images/20230818/541e5d6b14686832bfd476f015bba838.png" title="5.png" alt="" width="718" height="396"/></p><p><span style="box-sizing: inherit;"><img src="/uploads/images/20230818/9086610a9f34757f92e4eaea21ab2aa4.png" title="6.png" alt="" width="720" height="379"/></span><br/></p><p></p><p style="box-sizing: inherit; margin-top: 0px; margin-bottom: 30px; overflow-wrap: break-word; color: rgb(64, 64, 65); font-family: &quot;Open Sans&quot;, &quot;Helvetica Neue&quot;, Arial, Helvetica, sans-serif; font-size: 18px; text-wrap: wrap;"><span style="box-sizing: inherit;">GTM将在另一个选项卡中打开您的网上商店。现在转到 GA4 属性,然后在“配置”报告中打开“调试视图”界面。您应该会看到GTM在另一个标签页中打开您的网上商店时发生的page_view事件,这意味着您的Google Analytics收到点击并连接到您的网上商店。继续浏览您的网上商店,并观察哪些事件开始显示在Google Analytics的DebugView中。</span></p><p><img src="/uploads/images/20230818/c1857cc833b742ef717ec0a60a11676e.png" title="7.png" alt="" width="723" height="342"/></p><p style="box-sizing: inherit; margin-top: 0px; margin-bottom: 30px; overflow-wrap: break-word; color: rgb(64, 64, 65); font-family: &quot;Open Sans&quot;, &quot;Helvetica Neue&quot;, Arial, Helvetica, sans-serif; font-size: 18px; text-wrap: wrap;"><span style="box-sizing: inherit;">如果您想继续设置增强型电子商务事件,例如:</span></p><p><img src="/uploads/images/20230818/951041de90beccb2b027efa3fb02ba0a.png" title="8.png" alt="" width="724" height="347"/></p><p style="box-sizing: inherit; margin-top: 0px; margin-bottom: 30px; overflow-wrap: break-word; color: rgb(64, 64, 65); font-family: &quot;Open Sans&quot;, &quot;Helvetica Neue&quot;, Arial, Helvetica, sans-serif; font-size: 18px; text-wrap: wrap;"><span style="box-sizing: inherit;"><span style="box-sizing: inherit;"><span style="color: rgb(64, 64, 65); font-family: &quot;Open Sans&quot;, &quot;Helvetica Neue&quot;, Arial, Helvetica, sans-serif; font-size: 18px; text-wrap: wrap;"><br/></span></span></span><br/></p>

盘点100个学习magento二次开发的网站

<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>1. [Magento 官方文档](https://devdocs.magento.com/): Magento的官方文档,提供了广泛的开发、配置和管理指南。</p><p>2. [Mageplaza Blog](https://www.mageplaza.com/blog/): Mageplaza的博客,包含各种Magento开发和管理的文章。</p><p>3. [Inchoo Blog](https://inchoo.net/blog/): Inchoo公司的博客,涵盖了Magento开发的多个方面。</p><p>4. [Alan Storm<span style="color: rgb(206, 145, 120);">s Blog](https://alanstorm.com/):&nbsp; Magento开发专家Alan Storm的博客,包含深入的技术文章。</span></p><p><span style="color: #ce9178;">5. [Firebear Studio Blog](https://firebearstudio.com/blog/): Firebear Studio的博客,涵盖了Magento和电子商务领域的技术文章。</span></p><p><span style="color: #ce9178;">6. [Magento Stack Exchange](https://magento.stackexchange.com/): Magento的问答社区,可以提问和回答与Magento开发相关的问题。</span></p><p><span style="color: #ce9178;">7. [Smashing Magazine - E-Commerce Category](https://www.smashingmagazine.com/category/e-commerce/): Smashing Magazine的电子商务类别,包含一些与Magento相关的文章。</span></p><p><span style="color: #ce9178;">8. [Reddit - r/magento](https://www.reddit.com/r/magento/): Reddit上的Magento社区,您可以在这里与其他Magento开发者交流和分享。</span></p><p><span style="color: #ce9178;">9. [GitHub - Magento](https://github.com/magento): Magento在GitHub上的官方仓库,包含源代码和一些示例。</span></p><p><span style="color: #ce9178;">10. [Magento DevDocs](https://developer.adobe.com/commerce/): Magento DevDocs,提供Magento的最新技术文档和API参考。</span></p><p><span style="color: #ce9178;">11. [Magento 2 Tutorials by Max Pronko](https://www.maxpronko.com/blog/category/magento-2): Magento开发者Max Pronko的博客,包含Magento 2的教程。</span></p><p><span style="color: #ce9178;">12. [MagePsycho Blog](https://www.magepsycho.com/blog/): 包含有关Magento开发、配置和优化的文章。</span></p><p><span style="color: #ce9178;">13. [Atwix Blog](https://www.atwix.com/blog/): Atwix公司的博客,涵盖了Magento开发和调优的各种话题。</span></p><p><span style="color: #ce9178;">14. [MageComp Blog](https://magecomp.com/blog/): MageComp的博客,包含有关Magento扩展和开发的文章。</span></p><p><span style="color: #ce9178;">15. [Magento Community Engineering](https://communityengineering.readme.io/): Magento社区工程团队的官方文档和资源。</span></p><p><span style="color: #ce9178;">16. [MageWorx Blog](https://www.mageworx.com/blog/): MageWorx的博客,包含有关Magento扩展和技术的文章。</span></p><p><span style="color: #ce9178;">17. [Magebuzz Blog](https://www.magebuzz.com/blog/): Magebuzz的博客,涵盖了Magento开发、设计和营销的话题。</span></p><p><span style="color: #ce9178;">18. [Classy Llama Blog](https://www.classyllama.com/blog): Classy Llama的博客,包含了Magento和电子商务领域的技术和策略文章。</span></p><p><span style="color: #ce9178;">19. [Magento Explained](https://magentoexplained.com/): 提供针对Magento初学者的教程和解释。</span></p><p><span style="color: #ce9178;">20. [Magento U](https://u.magento.com/): Magento官方的在线培训和学习平台,提供各种课程。</span></p><p><span style="color: #ce9178;">21. [MeetMagento Association](https://meet-magento.com/): MeetMagento协会,组织Magento相关的会议和活动。</span></p><p><span style="color: #ce9178;">22. [BelVG Blog](https://belvg.com/blog): BelVG公司的博客,涵盖了Magento和电子商务方面的技术文章。</span></p><p><span style="color: #ce9178;">23. [Tuts+ - Magento Category](https://webdesign.tutsplus.com/categories/magento): Tuts+网站的Magento类别,包含一些教程和技术文章。</span></p><p><span style="color: #ce9178;">24. [Atlassian Confluence - Magento](https://confluence.atlassian.com/mag): Atlassian Confluence上的Magento知识库,包含了一些有关Magento的文档。</span></p><p><span style="color: #ce9178;">25. [Cmsmart Community](https://cmsmart.net/community): Cmsmart社区,包含了一些Magento和电子商务领域的文章和讨论。</span></p><p><span style="color: #ce9178;">26. [Reddit - r/Magento2](https://www.reddit.com/r/Magento2/): Reddit上关于Magento 2的社区,适用于Magento 2开发者。</span></p><p><span style="color: #ce9178;">27. [Quick Tips by Aoepeople](https://www.aoepeople.com/en/blog/category/quick-tips/): Aoepeople的博客,提供有关Magento开发的快速技巧。</span></p><p><span style="color: #ce9178;">28. [Atwix Magento 2 Code Tips](https://github.com/atwix/atwix-magento2-code-tips): Atwix团队的Magento 2代码技巧存储库。</span></p><p><span style="color: #ce9178;">29. [Mgt-Commerce Blog](https://www.mgt-commerce.com/blog/): Mgt-Commerce的博客,涵盖了Magento扩展和开发的内容。</span></p><p><span style="color: #ce9178;">30. [BSS Commerce Blog](https://bsscommerce.com/blog/): BSS Commerce的博客,包含有关Magento 2扩展和开发的文章。</span></p><p><span style="color: #ce9178;">31. [Aitoc Blog](https://www.aitoc.com/blog/): Aitoc的博客,包含有关Magento开发和优化的文章。</span></p><p><span style="color: #ce9178;">32. [Webkul Blog](https://webkul.com/blog/): Webkul的博客,涵盖了关于Magento扩展和电子商务的多个主题。</span></p><p><span style="color: #ce9178;">33. [Cool Ryan Blog](https://coolryan.com/): Ryan的博客,包含Magento开发的实用教程和指南。</span></p><p><span style="color: #ce9178;">34. [Tutorial Magento](https://tutorialmagento.com/): Tutorial Magento是一个专门的博客,提供有关Magento的教程和技巧。</span></p><p><span style="color: #ce9178;">35. [Magently Blog](https://magently.com/blog/): Magently的博客,包含Magento开发和优化的文章。</span></p><p><span style="color: #ce9178;">36. [Experius Blog](https://www.experius.nl/blog/): Experius公司的博客,涵盖了Magento开发和电子商务的多个方面。</span></p><p><span style="color: #ce9178;">37. [Klevu Blog](https://www.klevu.com/blog/): Klevu的博客,涵盖了有关Magento搜索和用户体验的话题。</span></p><p><span style="color: #ce9178;">38. [ScandiPWA Blog](https://scandipwa.com/blog): ScandiPWA的博客,关注Magento Progressive Web App开发。</span></p><p><span style="color: #ce9178;">39. [Vovance Blog](https://www.vovance.com/blog.html): Vovance的博客,涵盖了关于Magento开发和定制的话题。</span></p><p><span style="color: #ce9178;">40. [Mirasvit Blog](https://mirasvit.com/blog/): Mirasvit的博客,提供有关Magento和电子商务的技术文章。</span></p><p><span style="color: #ce9178;">41. [Shero Blog](https://sherocommerce.com/blog/): Shero的博客,包含了有关Magento和电子商务策略的文章。</span></p><p><span style="color: #ce9178;">42. [MageMonkey Blog](https://magemonkey.io/blog/): MageMonkey的博客,涵盖了关于Magento和电子商务的技术和建议。</span></p><p><span style="color: #ce9178;">43. [Magento 2 Blog](https://magefan.com/blog/magento2): Magefan的Magento 2博客,提供有关Magento 2的技术文章。</span></p><p><span style="color: #ce9178;">44. [Cyrill Schumacher&#39;</span>s Blog](https://cyrillschumacher.com/): Cyrill Schumacher是Magento核心开发者,他的博客包含了有关Magento的深入文章。</p><p>45. [IWD Agency Blog](https://www.iwdagency.com/blog/): IWD Agency的博客,涵盖了关于Magento扩展和开发的多个主题。</p><p>46. [A Better Lemonade Stand Blog](https://www.abetterlemonadestand.com/blog/): 虽然不是专门针对Magento的网站,但该博客涵盖了电子商务和在线零售的多个方面,可能会涉及一些Magento相关内容。</p><p>47. [MageDaily](https://magedaily.com/): MageDaily提供有关Magento开发、设计和营销的日常更新。</p><p>48. [Magento Quickies](https://www.magenticity.com/magento-quickies): Magenticity的Magento Quickies系列,提供有关Magento的短小而有用的技巧。</p><p>49. [Modern Retail Blog](https://modernretail.co.uk/blog/): Modern Retail的博客,包含有关Magento和电子商务的文章。</p><p>50. [Sherocommerce Blog](https://sherocommerce.com/blog/): Sherocommerce的博客,涵盖了关于Magento和电子商务的技术和策略。</p><p>51. [Elogic Commerce Blog](https://elogic.co/blog/): Elogic Commerce的博客,包含了有关Magento开发和电子商务的文章。</p><p>52. [MageHost Blog](https://www.magehost.com/blog): MageHost的博客,涵盖了Magento托管、优化和性能方面的话题。</p><p>53. [MageArray Blog](https://magearray.com/blog/): MageArray的博客,提供有关Magento开发和扩展的技术文章。</p><p>54. [Divante Blog](https://divante.com/blog/): Divante公司的博客,涵盖了Magento开发和电子商务的多个方面。</p><p>55. [MageMonkey Blog](https://magemonkey.io/blog/): MageMonkey的博客,关注Magento和电子商务领域的技术和建议。</p><p>56. [MageDirect Blog](https://magedirect.co/blog/): MageDirect的博客,包含有关Magento和电子商务的文章和教程。</p><p>57. [ScandiPWA Blog](https://scandipwa.com/blog): ScandiPWA的博客,专注于Magento Progressive Web App开发。</p><p>58. [OroCommerce Blog](https://www.orocommerce.com/blog): OroCommerce的博客,关注B2B电子商务和技术。</p><p>59. [MagePsycho Blog](https://www.magepsycho.com/blog/): MagePsycho的博客,提供Magento开发、配置和优化的文章。</p><p>60. [MageBees Blog](https://www.magebees.com/blog/): MageBees的博客,涵盖了关于Magento和电子商务的多个话题。</p><p>61. [Creatuity Blog](https://creatuity.com/blog/): Creatuity的博客,提供有关Magento开发和优化的文章。</p><p>62. [Innobyte Blog](https://www.innobyte.com/blog/): Innobyte的博客,包含有关Magento开发和电子商务的多个主题。</p><p>63. [Fooman Blog](https://store.fooman.co.nz/blog/): Fooman的博客,提供有关Magento扩展和开发的技术文章。</p><p>64. [MageComp Blog](https://magecomp.com/blog/): MageComp的博客,涵盖了关于Magento扩展和开发的文章。</p><p>65. [Magento Hacks](https://www.magentohacks.com/): Magento Hacks提供有关Magento开发和技术的教程和文章。</p><p>66. [MagentoBlog](https://magento.blog/): MagentoBlog涵盖了关于Magento开发和电子商务的各种主题。</p><p>67. [Inviqa Blog](https://inviqa.com/blog): Inviqa的博客,涵盖了Magento开发和电子商务的技术和策略。</p><p>68. [Magmodules Blog](https://www.magmodules.eu/blog/): Magmodules的博客,关注Magento模块和扩展。</p><p>69. [Ecomdev Blog](https://ecomdev.org/blog/): Ecomdev的博客,提供有关Magento开发和测试的文章。</p><p>70. [Elsner Blog](https://www.elsner.com/blog/): Elsner的博客,包含有关Magento和电子商务的技术和营销策略。</p><p>71. [MagentoTutorial.net](https://magentotutorial.net/): MagentoTutorial.net提供有关Magento的教程和技术文章。</p><p>72. [Wagento Blog](https://www.wagento.com/blog): Wagento的博客,涵盖了关于Magento开发和电子商务的多个主题。</p><p>73. [Pronko Consulting Blog](https://pronkoconsulting.com/blog/): Pronko Consulting的博客,包含有关Magento开发和技术的文章。</p><p>74. [Atwix Blog](https://www.atwix.com/blog/): Atwix的博客,涵盖了关于Magento开发和调优的各种话题。</p><p>75. [Magebuzz Blog](https://www.magebuzz.com/blog/): Magebuzz的博客,包含有关Magento开发、设计和营销的文章。</p><p>76. [Magemad Blog](https://magemad.com/blog/): Magemad的博客,涵盖了有关Magento开发和电子商务的文章。</p><p>77. [Magedelight Blog](https://www.magedelight.com/blog/): Magedelight的博客,包含了关于Magento扩展和开发的技术文章。</p><p>78. [MageMojo Blog](https://magemojo.com/blog/): MageMojo的博客,关注于Magento托管和性能优化。</p><p>79. [MageComp Blog](https://magecomp.com/blog/): MageComp的博客,涵盖了有关Magento扩展和开发的多个话题。</p><p>80. [The Magento Community Blog](https://magento.com/blog/community): Magento官方社区博客,包含了有关Magento社区和事件的内容。</p><p>81. [Rave Infosys Blog](https://www.raveinfosys.com/blog/): Rave Infosys的博客,涵盖了Magento和电子商务领域的多个话题。</p><p>82. [MageCloud Blog](https://magecloud.agency/blog/): MageCloud的博客,关注于Magento托管和云解决方案。</p><p>83. [Coolblueweb Blog](https://coolblueweb.com/blog/): Coolblueweb的博客,涵盖了关于Magento开发和电子商务的内容。</p><p>84. [Magefan Blog](https://magefan.com/blog/): Magefan的博客,提供有关Magento开发和优化的文章。</p><p>85. [Mage-Coder Blog](https://mage-coder.com/blog/): Mage-Coder的博客,包含了关于Magento开发和技术的文章。</p><p>86. [MageComp Blog](https://magecomp.com/blog/): MageComp的博客,涵盖了关于Magento扩展和开发的多个方面。</p><p>87. [Magebay Blog](https://www.magebay.com/blog/): Magebay的博客,提供有关Magento开发和扩展的技术文章。</p><p>88. [Wahyu Pratama<span style="color: #ce9178;">s Blog](https://www.wahyupratama.com/): Wahyu Pratama的博客,涵盖了关于Magento和电子商务的多个话题。</span></p><p><span style="color: #ce9178;">89. [MageCloud Blog](https://magecloud.net/blog/): MageCloud的博客,关注于Magento托管和性能优化。</span></p><p><span style="color: #ce9178;">90. [Pulse Storm Blog](https://alanstorm.com/): Alan Storm的博客,包含了关于Magento开发的深入技术文章。</span></p><p><span style="color: #ce9178;">91. [Magedia Blog](https://magedia.com/blog/): Magedia的博客,提供有关Magento开发和电子商务的文章。</span></p><p><span style="color: #ce9178;">92. [Magebit Blog](https://magebit.com/blog/): Magebit的博客,包含了关于Magento开发和优化的技术文章。</span></p><p><span style="color: #ce9178;">93. [MageHit Blog](https://magehit.com/blog/): MageHit的博客,涵盖了关于Magento开发和扩展的话题。</span></p><p><span style="color: #ce9178;">94. [Ecom Labs Blog](https://ecom-labs.com/blog/): Ecom Labs的博客,包含有关Magento开发和电子商务的内容。</span></p><p><span style="color: #ce9178;">95. [Vervaunt Blog](https://www.vervaunt.com/blog/): Vervaunt的博客,关注Magento和电子商务领域的技术和策略。</span></p><p><span style="color: #ce9178;">96. [TIG PostNL Blog](https://tig.nl/blog/): TIG PostNL的博客,涵盖了有关Magento和电子商务的文章。</span></p><p><span style="color: #ce9178;">97. [MageComp Blog](https://magecomp.com/blog/): MageComp的博客,提供有关Magento扩展和开发的文章。</span></p><p><span style="color: #ce9178;">98. [Magento Master Blog](https://mmadventure.com/): Magento Master Adventure的博客,分享Magento相关经验和见解。</span></p><p><span style="color: #ce9178;">99. [MageSpecialist Blog](https://blog.mageplaza.com/): MageSpecialist的博客,涵盖了关于Magento开发和技术的多个话题。</span></p><p><span style="color: #ce9178;">100. [ScandiPWA Blog](https://scandipwa.com/blog): ScandiPWA的博客,关注Magento Progressive Web App开发。</span></p><p><br/></p><p><br/></p>

magento2中的UpgradeSchema脚本-upgradeschema.php介绍

<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><span style="text-wrap: nowrap;">UpgradeSchema脚本用于创建新表或向现有表添加列。.</span></p><p><span style="text-wrap: nowrap;">假设它在每次setup:upgrade上运行,其中setup_module.schema_version低于&lt;VendorName&gt;/&lt;ModuleName&gt;/etc/module.xml下的setup_version,</span></p><p><span style="text-wrap: nowrap;">我们负责控制特定版本的代码。这通常是通过if-ed-version_compare方法来完成的。</span><span style="text-wrap: nowrap;">为了更好地演示这一点,让我们创建&lt;MAGELICIOUS_DIR&gt;/Core/Setup/UpgradeSchema.phpfile,其中包含以下内容:</span></p><pre class="brush:bash;toolbar:false">use\&nbsp;Magento\&nbsp;Framework\&nbsp;Setup\&nbsp;UpgradeSchemaInterface; use&nbsp;Magento\&nbsp;Framework\&nbsp;Setup\&nbsp;ModuleContextInterface; use&nbsp;Magento\&nbsp;Framework\&nbsp;Setup\&nbsp;SchemaSetupInterface; class&nbsp;UpgradeSchema&nbsp;implements&nbsp;UpgradeSchemaInterface&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;upgrade(SchemaSetupInterface&nbsp;$setup,&nbsp;ModuleContextInterface&nbsp;$context)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$setup&nbsp;-&nbsp;&gt;&nbsp;startSetup(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(version_compare($context&nbsp;-&nbsp;&gt;&nbsp;getVersion(),&nbsp;&#39;2.0.2&#39;)&nbsp;&lt;&nbsp;0)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this&nbsp;-&nbsp;&gt;&nbsp;upgradeToVersionTwoZeroTwo($setup); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$setup&nbsp;-&nbsp;&gt;&nbsp;endSetup(); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;function&nbsp;upgradeToVersionTwoZeroTwo(SchemaSetupInterface&nbsp;$setup)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;&#39;UpgradeSchema-&gt;upgradeToVersionTwoZeroTwo()&#39;.PHP_EOL; &nbsp;&nbsp;&nbsp;&nbsp;} }</pre><p><span style="text-wrap: nowrap;">这里的if-ed-version_compare如下:如果当前模块版本等于2.0.2,则执行upgradeToVersionTwoZeroTwo方法。</span></p><p><span style="text-wrap: nowrap;">如果我们要发布模块的更新版本,我们需要正确地提升&lt;VendorName&gt;/&lt;ModuleName&gt;/etc/module.xml的setup_version,否则UpgradeSchema就没有多大意义。</span></p><p><span style="text-wrap: nowrap;">同样,我们应该始终确保针对特定的模块版本,从而避免在每次版本更改时执行代码。</span></p><p><span style="text-wrap: nowrap;"></span></p><p><span style="text-wrap: nowrap;">当涉及到UpgradeSchema脚本时,数据库适配器实例的以下方法以及前面提到的方法将是令人感兴趣的:</span><span style="text-wrap: nowrap;">dropColumn:从表中删除列</span></p><p><span style="text-wrap: nowrap;"><br/></span></p><p><span style="text-wrap: nowrap;">dropForeignKey:从表删除外键</span></p><p><span style="text-wrap: nowrap;">dropIndex:从表上删除索引</span></p><p><span style="text-wrap: nowrap;">dropTable:从数据库中删除表</span></p><p><span style="text-wrap: nowrap;">ModifyColumn:修改列定义</span></p><p><span style="text-wrap: nowrap;"></span><br/></p><p><br/></p>

magento2中的InstallSchema脚本-installschema.php文件介绍

<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><span style="text-wrap: nowrap;">当我们希望向现有表添加新列或创建新表时,将使用InstallSchema脚本。此脚本仅在启用模块时运行。</span></p><p><span style="text-wrap: nowrap;">一旦启用,模块就会在setup_module.schema_version表列下获得相应的条目。</span></p><p><span style="text-wrap: nowrap;">此条目阻止InstallSchema脚本在模块的setup_version保持不变的任何后续setup:upgrade命令上运行。</span></p><p><span style="text-wrap: nowrap;">让我们继续创建&lt;MAGELICIOUS_DIR&gt;/Core/Setup/InstallSchema.php文件,其中包含以下内容:</span></p><pre class="brush:bash;toolbar:false">use\&nbsp;Magento\&nbsp;Framework\&nbsp;Setup\&nbsp;InstallSchemaInterface; use&nbsp;Magento\&nbsp;Framework\&nbsp;Setup\&nbsp;ModuleContextInterface; use&nbsp;Magento\&nbsp;Framework\&nbsp;Setup\&nbsp;SchemaSetupInterface; class&nbsp;InstallSchema&nbsp;implements&nbsp;InstallSchemaInterface&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;install(SchemaSetupInterface&nbsp;$setup,&nbsp;ModuleContextInterface&nbsp;$context)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$setup&nbsp;-&nbsp;&gt;&nbsp;startSetup(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;&#39;InstallSchema-&gt;install()&#39;.PHP_EOL; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$setup&nbsp;-&nbsp;&gt;&nbsp;endSetup(); &nbsp;&nbsp;&nbsp;&nbsp;} }</pre><p><span style="text-wrap: nowrap;">使用$setup-&gt;startSetup();和$setup-&gt;endSetup();是大多数设置脚本中的常见做法。</span></p><p><span style="text-wrap: nowrap;">这两种方法的实现涉及运行额外的环境设置步骤,例如设置SQL_MODE和FOREIGN_KEY_CHECKS,如在Magento\Framework\DB\Adapter\Pdo\Mysql下所示。</span></p><p><span style="text-wrap: nowrap;">为了从中获得有用的东西,让我们继续使用实际创建我们的magelicious_core_log表的代码来替换echo行:</span></p><pre class="brush:bash;toolbar:false"><br/></pre><pre class="brush:bash;toolbar:false">&lt;?php $table&nbsp;=&nbsp;$setup-&gt;getConnection()-&gt;newTable($setup-&gt;getTable(&#39;magelicious_core_log&#39;)) &nbsp;&nbsp;&nbsp;&nbsp;-&gt;addColumn(&#39;entity_id&#39;,&nbsp;\Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,&nbsp;null, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#39;identity&#39;&nbsp;=&gt;&nbsp;true,&nbsp;&#39;unsigned&#39;&nbsp;=&gt;&nbsp;true,&nbsp;&#39;nullable&#39;&nbsp;=&gt;&nbsp;false,&nbsp;&#39;primary&#39;&nbsp;=&gt;&nbsp;true], &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;Entity&nbsp;ID&#39;) &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;-&gt;addColumn(&#39;severity_level&#39;,&nbsp;\Magento\Framework\DB\Ddl\Table::TYPE_TEXT, &nbsp;&nbsp;&nbsp;&nbsp;24,&nbsp;[&#39;nullable&#39;&nbsp;=&gt;&nbsp;false],&nbsp;&#39;Severity&nbsp;Level&#39;) &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;-&gt;addColumn(&#39;note&#39;,&nbsp;\Magento\Framework\DB\Ddl\Table::TYPE_TEXT, &nbsp;&nbsp;&nbsp;&nbsp;null,&nbsp;[&#39;nullable&#39;&nbsp;=&gt;&nbsp;false],&nbsp;&#39;Note&#39;) &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;-&gt;addColumn(&#39;created_at&#39;,&nbsp;\Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP,&nbsp;null, &nbsp;&nbsp;&nbsp;&nbsp;[&#39;nullable&#39;&nbsp;=&gt;&nbsp;false],&nbsp;&#39;Created&nbsp;At&#39;) &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;-&gt;setComment(&#39;Magelicious&nbsp;Core&nbsp;Log&nbsp;Table&#39;); &nbsp;&nbsp;&nbsp;&nbsp;$setup-&gt;getConnection()-&gt;createTable($table);</pre><p><span style="text-wrap: nowrap;">$setup-&gt;getConnection()为我们获取数据库适配器实例。从那时起,我们可以访问创建数据库表所需的方法。</span></p><p><span style="text-wrap: nowrap;">当涉及到InstallSchema脚本时,大多数情况下,以下方法可以完成任务:</span></p><p><br/></p><p><span style="text-wrap: nowrap;">newTable:为新表检索DDL对象</span></p><p><span style="text-wrap: nowrap;">addColumn:向表中添加列</span></p><p><span style="text-wrap: nowrap;">addIndex:向表添加索引</span></p><p><span style="text-wrap: nowrap;">addForeignKey:向表添加外键</span></p><p><span style="text-wrap: nowrap;">comment:为表设置注释</span></p><p><span style="text-wrap: nowrap;">createTable:从DDL对象创建表此处的magelicious_core_log表本质上是magelicious\core\Model\log简单模型后面的存储。</span></p><p><span style="text-wrap: nowrap;">如果我们的模型是EAV模型,我们将使用相同的InstallSchema脚本来创建如下表:</span></p><p><span style="text-wrap: nowrap;"><br/></span></p><p><span style="text-wrap: nowrap;">log_entity</span></p><p><span style="text-wrap: nowrap;">log_entity_datetime</span></p><p><span style="text-wrap: nowrap;">log_entity_decimal</span></p><p><span style="text-wrap: nowrap;">log_entity_int</span></p><p><span style="text-wrap: nowrap;">log_entity_text</span></p><p><span style="text-wrap: nowrap;">log_entity_varchar</span></p><p><span style="text-wrap: nowrap;"><br/></span></p><p><span style="text-wrap: nowrap;"></span></p><p><span style="text-wrap: nowrap;">然而,在EAV模型的情况下,实际的属性severity_level和note可能会通过InstallData脚本添加。</span></p><p><span style="text-wrap: nowrap;">这是因为属性定义本质上是eav_attribute_*表下的数据,主要是eav_attribute表。</span></p><p><span style="text-wrap: nowrap;">因此,属性是在InstallData和UpgradeData脚本内部创建的。</span></p><p><br/><span style="text-wrap: nowrap;"></span></p>

magento2中模型model常用的方法

<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><span style="text-wrap: nowrap;">EAV和简单模型都是从Magento\Framework\Model\AbstractModel类扩展而来的,该类进一步扩展了Magento\ Framework\DataObject。</span></p><p><span style="text-wrap: nowrap;">DataObject有一些巧妙的方法值得记住。</span></p><p><span style="text-wrap: nowrap;">以下一组方法用于处理数据转换:</span><span style="text-wrap: nowrap;">toArray:将对象数据的数组转换为$keys数组中请求的具有键的数组</span></p><p><span style="text-wrap: nowrap;">toXML:将对象数据转换为XML</span></p><p><span style="text-wrap: nowrap;">toJson:将对象数据转化为JSON</span></p><p><span style="text-wrap: nowrap;">toString:将对象数转换为具有预定义格式的字符串</span></p><p><span style="text-wrap: nowrap;">serialize:将对象数据转换为具有定义的键和值的字符串这些方法的其他组通过magic__call方法实现,启用以下简洁的语法:</span></p><p><br/></p><p><span style="text-wrap: nowrap;">get&lt;AttributeName&gt;,例如$object-&gt;getPackagingOption()</span></p><p><span style="text-wrap: nowrap;">设置&lt;AttributeName],例如$object-&gt;setPackagingOption(&#39;plastic_bag&#39;)uns&lt;AttributeName&gt;</span></p><p><span style="text-wrap: nowrap;">[例如$object-&gt;unsPackagingOptions()具有&lt;AttributeName&#39;,</span></p><p><span style="text-wrap: nowrap;">例如$bject-&gt;hasPackagingOption[(]要快速理解这种魔力,让我们手动创建如下所示的magelicious_core_log表:</span></p><pre class="brush:bash;toolbar:false">CREATE&nbsp;TABLE&nbsp;`magelicious_core_log`&nbsp;(`entity_id` &nbsp;&nbsp;&nbsp;&nbsp;int(10)&nbsp;unsigned&nbsp;NOT&nbsp;NULL&nbsp;AUTO_INCREMENT,&nbsp;`severity_level` &nbsp;&nbsp;&nbsp;&nbsp;varchar(24)&nbsp;NOT&nbsp;NULL,&nbsp;`note` &nbsp;&nbsp;&nbsp;&nbsp;text&nbsp;NOT&nbsp;NULL,&nbsp;`created_at` &nbsp;&nbsp;&nbsp;&nbsp;timestamp&nbsp;NOT&nbsp;NULL&nbsp;DEFAULT&nbsp;CURRENT_TIMESTAMP&nbsp;ON&nbsp;UPDATE&nbsp;CURRENT_TIMESTAMP,&nbsp;PRIMARY&nbsp;KEY(`entity_id`))&nbsp;ENGINE&nbsp;=&nbsp;InnoDB&nbsp;DEFAULT&nbsp;CHARSET&nbsp;=&nbsp;utf8;</pre><p><span style="text-wrap: nowrap;">借助DataObject的魔力,我们空的Magelicious\Core\Model\Log模型仍然可以保存其数据,如下所示:</span></p><pre class="brush:cpp;toolbar:false">$log&nbsp;-&nbsp;&gt;&nbsp;setCreatedAt(new\&nbsp;DateTime()); $log&nbsp;-&nbsp;&gt;&nbsp;setSeverityLevel(&#39;info&#39;); $log&nbsp;-&nbsp;&gt;&nbsp;setNote(&#39;Just&nbsp;Some&nbsp;Note&#39;); $log&nbsp;-&nbsp;&gt;&nbsp;save();</pre><p><span style="text-wrap: nowrap;">虽然这个例子会起作用,但它的作用远不止于此。手动创建表对于构建模块来说是不可行的。Magento对此有一个正确的机制,称为设置脚本。</span></p><p><br/><span style="text-wrap: nowrap;"></span></p>

magento2创建一个模型-model

<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><span style="text-wrap: nowrap;">与EAV模型不同,创建简单的模型非常简单。让我们继续为Log实体创建一个模型、资源模型和集合。</span></p><p><span style="text-wrap: nowrap;">我们将首先创建&lt;MAGELICIOUS_DIR&gt;/Core/model/Log.php文件,其中包含以下内容:</span></p><pre class="brush:bash;toolbar:false">class&nbsp;Log&nbsp;extends\&nbsp;Magento\&nbsp;Framework\&nbsp;Model\&nbsp;AbstractModel&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;$_eventPrefix&nbsp;=&nbsp;&#39;magelicious_core_log&#39;; &nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;$_eventObject&nbsp;=&nbsp;&#39;log&#39;; &nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;function&nbsp;_construct()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this&nbsp;-&nbsp;&gt;&nbsp;_init(\Magelicious\&nbsp;Core\&nbsp;Model\&nbsp;ResourceModel\&nbsp;Log::class); &nbsp;&nbsp;&nbsp;&nbsp;} }</pre><p><span style="text-wrap: nowrap;">$_eventPrefix和$_eventObject的使用不是强制性的,但强烈建议使用。</span></p><p><span style="text-wrap: nowrap;">这些值由Magento\Framework\Model\AbstractModel事件调度器使用,并增加了我们模块未来的可扩展性。</span></p><p><span style="text-wrap: nowrap;">虽然Magento使用&lt;ModuleName&gt;_&lt;ModelName&gt;约定进行$_eventPrefix命名,但使用&lt;VendorName&gt;_&lt;ModuleName&gt;_&lt;ModelName&gt;可能更安全。</span></p><p><span style="text-wrap: nowrap;">按照约定,$_eventObject通常带有模型本身的名称。</span><span style="text-wrap: nowrap;">然后,我们创建&lt;MAGELICIOUS_DIR&gt;/Core/Model/ResourceModel/Log.php文件,其中包含以下内容:</span></p><p><span style="text-wrap: nowrap;"></span></p><p><span style="text-wrap: nowrap;">这里的_init方法采用两个参数:$mainTable参数的magelicious_core_log值和$idFieldName参数的entity_id值。</span></p><p><span style="text-wrap: nowrap;">$idFieldName是指定数据库中主列的名称。值得注意的是,magelicious_core_log表仍然不存在,但我们稍后将对此进行说明。</span><span style="text-wrap: nowrap;">然后,我们将创建&lt;MAGELICIOUS_DIR&gt;/Core/Model/ResourceModel/Log/Collection.php文件,其中包含以下内容:</span></p><pre class="brush:bash;toolbar:false">class&nbsp;Collection&nbsp;extends\&nbsp;Magento\&nbsp;Framework\&nbsp;Model\&nbsp;ResourceModel\&nbsp;Db\&nbsp;Collection\&nbsp;AbstractCollection&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;function&nbsp;_construct()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this&nbsp;-&nbsp;&gt;&nbsp;_init(\Magelicious\&nbsp;Core\&nbsp;Model\&nbsp;Log::class,&nbsp;\Magelicious\&nbsp;Core\&nbsp;Model\&nbsp;ResourceModel\&nbsp;Log::class); &nbsp;&nbsp;&nbsp;&nbsp;} }</pre><p><span style="text-wrap: nowrap;">这里的_init方法接受两个参数:$model和$resourceModel的字符串名称。Magento为此使用了&lt;FULLY_QUALIFIED_CLASS_NAME&gt;::CLASS语法,</span></p><p><span style="text-wrap: nowrap;">因为它使用了一个漂亮的解决方案,而不是四处传递类字符串。</span></p><p><br/></p>

magento2中的事件Events和观察者详细介绍

<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><span style="text-wrap: nowrap;">Magento有一个整洁的发布-订阅模式实现,我们称之为事件和观察者。通过在触发某些操作时调度事件,我们可以运行自定义代码来响应触发的事件。</span></p><p><span style="text-wrap: nowrap;">这些事件是使用Magento\Framework\event\Manager类调度的,该类实现了Magento\ Framework\event \ ManagerInterface。</span><span style="text-wrap: nowrap;">要调度事件,我们只需调用事件管理器实例的调度方法,为其提供我们正在调度的事件的名称以及我们希望传递给观察者的可选数据数组</span></p><p><span style="text-wrap: nowrap;">如下例所示,该示例取自&lt;MAGENTO_DIR&gt;/module-customer/Controller/Account/CreatePost.php文件:</span></p><pre class="brush:bash;toolbar:false">$this&nbsp;-&nbsp;&gt;&nbsp;_eventManager&nbsp;-&nbsp;&gt;&nbsp;dispatch(&#39;customer_register_success&#39;,&nbsp;[&#39;account_controller&#39;&nbsp;=&gt;&nbsp;$this,&nbsp;&#39;customer&#39;&nbsp;=&gt;&nbsp;$customer]);</pre><p><span style="text-wrap: nowrap;">观察者是通过events.xml文件注册的,如&lt;MAGENTO_DIR&gt;/module persistent/etc/frontend/events.xml中的以下示例所示:</span></p><pre class="brush:bash;toolbar:false">&lt;event&nbsp;name=&quot;customer_register_success&quot;&gt; &nbsp;&nbsp;&nbsp;&nbsp;&lt;observer&nbsp;name=&quot;persistent&quot;&nbsp;instance=&quot;Magento\Persistent\Observer\RemovePersistentCookieOnRegisterObserver&quot;&nbsp;/&gt; &lt;/event&gt;</pre><p><span style="text-wrap: nowrap;">通过在整个&lt;MAGENTO_DIR&gt;目录的*.php文件中查找eventManager-&gt;dispatch字符串,我们可以看到数百个事件示例,分布在MAGENTO的大多数模块中。</span></p><p><span style="text-wrap: nowrap;">虽然所有这些事件都具有相同的技术重要性,但我们可以说,其中一些事件可能比其他事件在日常基础上使用得更多。</span><span style="text-wrap: nowrap;">这使得花一些时间研究以下类及其发送的事件变得值得:Magento\Framework\App\Action\Action类,具有以下事件:</span></p><pre class="brush:bash;toolbar:false">controller_action_predispatch&#39; controller_action_predispatch_&#39;&nbsp;.&nbsp;$request-&gt;getRouteName()&#39; controller_action_predispatch_&#39;&nbsp;.&nbsp;$request-&gt;getFullActionName()&#39; controller_action_postdispatch_&#39;&nbsp;.&nbsp;$request-&gt;getFullActionName()&#39; controller_action_postdispatch_&#39;&nbsp;.&nbsp;$request-&gt;getRouteName() controller_action_postdispatch</pre><p><span style="text-wrap: nowrap;">Magento\Framework\Model\AbstractModel类,包含以下事件:</span></p><pre class="brush:bash;toolbar:false">model_load_before$this-&gt;_eventPrefix&nbsp;.&nbsp;&#39;_load_before&#39; model_load_after$this-&gt;_eventPrefix&nbsp;.&nbsp;&#39;_load_after&#39; model_save_commit_after$this-&gt;_eventPrefix&nbsp;.&nbsp;&#39;_save_commit_after&#39; model_save_before$this-&gt;_eventPrefix&nbsp;.&nbsp;&#39;_save_before&#39; model_save_afterclean_cache_by_tags$this-&gt;_eventPrefix&nbsp;.&nbsp;&#39;_save_after&#39; model_delete_before$this-&gt;_eventPrefix&nbsp;.&nbsp;&#39;_delete_before&#39; model_delete_afterclean_cache_by_tags$this-&gt;_eventPrefix&nbsp;.&nbsp;&#39;_delete_after&#39; model_delete_commit_after$this-&gt;_eventPrefix&nbsp;.&nbsp;&#39;_delete_commit_after&#39;$this-&gt;_eventPrefix&nbsp;.&nbsp;&#39;_clear&#39;</pre><p><span style="text-wrap: nowrap;">Magento\Framework\Model\ResourceModel\Db\Collection类,包含以下事件:</span></p><pre class="brush:bash;toolbar:false">core_collection_abstract_load_before $this-&gt;_eventPrefix&nbsp;.&nbsp;&#39;_load_before&#39; core_collection_abstract_load_after $this-&gt;_eventPrefix&nbsp;.&nbsp;&#39;_load_after&#39;</pre><p><span style="text-wrap: nowrap;">让我们仔细看看其中一个事件,该事件位于&lt;MAGENTO_DIR&gt;/framework/Model/AbstractModel.php文件中:</span></p><pre class="brush:bash;toolbar:false">public&nbsp;function&nbsp;afterCommitCallback()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;$this&nbsp;-&nbsp;&gt;&nbsp;_eventManager&nbsp;-&nbsp;&gt;&nbsp;dispatch(&#39;model_save_commit_after&#39;,&nbsp;[&#39;object&#39;&nbsp;=&gt;&nbsp;$this]); &nbsp;&nbsp;&nbsp;&nbsp;$this&nbsp;-&nbsp;&gt;&nbsp;_eventManager&nbsp;-&nbsp;&gt;&nbsp;dispatch($this&nbsp;-&nbsp;&gt;&nbsp;_eventPrefix. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;_save_commit_after&#39;,&nbsp;$this&nbsp;-&nbsp;&gt;&nbsp;_getEventData()); &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;$this; } protected&nbsp;function&nbsp;_getEventData()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;[&#39;data_object&#39;&nbsp;=&gt;&nbsp;$this,&nbsp;$this&nbsp;-&nbsp;&gt;&nbsp;_eventObject&nbsp;=&gt;&nbsp;$this,&nbsp;]; }</pre><p><span style="text-wrap: nowrap;">$_eventPrefix和$_eventObject类型属性在这里特别重要。如果我们浏览Magento\Catalog\Model\Product、Magento\Datalog\Module\Category、</span></p><p><span style="text-wrap: nowrap;">MagentoCustomer\Model\Customer、Magento \ Quote \ Model \ Quote等类型,</span></p><p><span style="text-wrap: nowrap;">Magento\Sales\Model\Order等,我们可以看到,这些实体类型中有很多本质上是从Magento\Framework\Model\AbstractModel扩展而来的,</span></p><p><span style="text-wrap: nowrap;">并提供了它们自己的值来取代$_eventPrefix=“core_abstract”和$_eventObject=“object”。</span></p><p><span style="text-wrap: nowrap;">这意味着我们可以使用诸如$this-&gt;_eventPrefix&#39;之类的事件_save_commit_after&#39;通过events.xml指定观察者。</span><span style="text-wrap: nowrap;">让我们看一下以下示例,该示例取自&lt;MAGENTO_DIR&gt;/module downloadable/etc/events.xml文件:</span></p><pre class="brush:bash;toolbar:false">&lt;config&gt; &nbsp;&nbsp;&nbsp;&nbsp;&lt;event&nbsp;name=&quot;sales_order_save_commit_after&quot;&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;observer&nbsp;name=&quot;downloadable_observer&quot;&nbsp;instance=&quot;Magento\Downloadable\Observer\SetLinkStatusObserver&quot;&nbsp;/&gt; &nbsp;&nbsp;&nbsp;&nbsp;&lt;/event&gt; &lt;/config&gt;</pre><p><span style="text-wrap: nowrap;"></span></p><p><span style="text-wrap: nowrap;">观察者被放置在&lt;ModuleDir&gt;/Observer目录中。每个观察者在Magento\Framework\Event\ObserverInterface类上实现一个单独的执行方法:</span></p><pre class="brush:bash;toolbar:false">class&nbsp;SetLinkStatusObserver&nbsp;implements\&nbsp;Magento\&nbsp;Framework\&nbsp;Event\&nbsp;ObserverInterface&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;execute(\Magento\&nbsp;Framework\&nbsp;Event\&nbsp;Observer&nbsp;$observer)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$order&nbsp;=&nbsp;$observer&nbsp;-&nbsp;&gt;&nbsp;getEvent()&nbsp;-&nbsp;&gt;&nbsp;getOrder(); &nbsp;&nbsp;&nbsp;&nbsp;} }</pre><p><span style="text-wrap: nowrap;">就像插件一样,实现不好的观察者很容易导致错误,甚至破坏整个应用程序。这就是为什么我们需要保持观测器的小型化和计算效率,以避免性能瓶颈。</span></p><p><span style="text-wrap: nowrap;">周期性事件循环是一个很容易陷入的陷阱。当观察者在某个时刻调度其侦听的同一事件时,就会发生这种情况。</span></p><p><span style="text-wrap: nowrap;">例如,如果观察者侦听model_save_before事件,然后试图在观察者中再次保存同一实体,这将触发循环事件循环。</span></p><p><span style="text-wrap: nowrap;"></span></p><p><span style="text-wrap: nowrap;">为了使我们的观察者尽可能具体,我们需要在适当的范围内宣布他们:</span></p><p><span style="text-wrap: nowrap;">对于只观察前端的事件,您可以在&lt;ModuleDir&gt;/etc/frontend/events.xml中声明观察者对于只观察后端的事件</span></p><p><span style="text-wrap: nowrap;">可以在&lt;ModuleDir&gt;/etc/adminhtml/events.xml</span></p><p><span style="text-wrap: nowrap;"></span></p><p><span style="text-wrap: nowrap;">为了观察全局事件,您可以在&lt;ModuleDir&gt;/etc/events.xml中声明观察者。与插件不同,观察者用于触发后续功能,</span></p><p><span style="text-wrap: nowrap;">而不是更改作为其观察事件一部分的函数或数据的行为。</span></p><p><br/><span style="text-wrap: nowrap;"></span></p>

magento2中的Plugin机制--after方法详解

<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><span style="text-wrap: nowrap;">顾名思义,after插件是在观察到的方法之后运行的。在编写after插件时,有几个要点需要记住:</span></p><p><span style="text-wrap: nowrap;">传递给插件的第一个参数是一个观察到的类型实例。进入插件的第二个参数是观察到的方法的结果,通常调用$result或在从observed方法返回的变量之后调用(如下面的示例:$data)。</span></p><p><span style="text-wrap: nowrap;">所有其他参数都是observe方法的参数。插件必须返回相同类型的$result|$data变量,因为我们可以自由修改值。</span><span style="text-wrap: nowrap;">让我们来看看Magento的一个插件后实现,该实现在模块目录/etc/di.xml文件中指定:</span></p><pre class="brush:bash;toolbar:false">&lt;type&nbsp;name=&quot;Magento\Indexer\Model\Config\Data&quot;&gt; &nbsp;&nbsp;&nbsp;&nbsp;&lt;plugin&nbsp;name=&quot;indexerProductFlatConfigGet&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type=&quot;Magento\Catalog\Model\Indexer\Product\Flat\Plugin\IndexerConfigData&quot;&nbsp;/&gt; &lt;/type&gt;</pre><p><span style="text-wrap: nowrap;">此插件的原始目标方法是Magento\Indexer\Model\Config\Data类的get方法:</span></p><pre class="brush:bash;toolbar:false">public&nbsp;function&nbsp;get($path&nbsp;=&nbsp;null,&nbsp;$default&nbsp;=&nbsp;null)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;The&nbsp;rest&nbsp;of&nbsp;the&nbsp;code...&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;$data;}</pre><p><span style="text-wrap: nowrap;">after插件的实现是通过Magento\Catalog\Model\Indexer\Product\Flat\plugin\IndexerConfigData类的afterGet方法提供的,如以下部分示例所示:</span></p><pre class="brush:bash;toolbar:false">public&nbsp;function&nbsp;afterGet(Magento\Indexer\Model\Config\Data,&nbsp;$data,&nbsp;$path&nbsp;=&nbsp;null,&nbsp;$default&nbsp;=&nbsp;null)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;The&nbsp;rest&nbsp;of&nbsp;the&nbsp;code...&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;$data;}</pre><p><span style="text-wrap: nowrap;">使用插件时应特别小心。虽然它们提供了很大的灵活性,但也很容易引发错误、性能瓶颈和其他不太明显的不稳定性——如果几个插件都在观察相同的方法,情况更是如此。</span></p>