文章彙整

如何覆蓋 magento 2 原生的程式

By Steffi 4 months agoNo Comments
首頁  /  Magento  /  Magento-2  /  如何覆蓋 magento 2 原生的程式

覆蓋Magento 2 的原生程式

專案開發中難免會遇到需要改寫原生程式的狀況,但考量到減少程式相依性,我們不會直接去修改 magento 程式,而是用我們的 extension 覆蓋 magento 程式,以下分享幾個覆蓋的方法:

 
假設我們要更改的程式路徑為 /vendor/magento/module-catalog/Block/Product/View.php 其 namespace 為Magento\Catalog\Block\Product在我們的 extension 內加入 di.xml 檔,檔案路徑 AstralWeb/ExtensionName/etc/di.xml

<?xml version="1.0"?>

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">

   <preference for="Magento\Catalog\Block\Product\View" type="AstralWeb\ExtensionName\PluginName\Test" />

</config>

 

這樣的設定是指 將自訂的 Test class 完全取代 View class,只需將 View.php 的內容複製到 Test.php 並修改 namespace 與 class name 即可使用,這是相當簡當的作法,但實際上常常會遇到只需要覆蓋 View.php 內的一個 function,若將整個 class 覆蓋未免有些多餘,此時將 di.xml 檔修改如下:AstralWeb/ExtensionName/etc/di.xml

<?xml version="1.0"?>

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

       xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">

   <type name="Magento\Catalog\Block\Product\View">

       <plugin name="exit_data" type="AstralWeb\ExtensionName\PluginName\Test" />

   </type>

</config>

 

Test.php 的內容

namespace AstralWeb\CategoryContentImageUrlIssue\Plugin;


use Magento\Catalog\Block\Product\View;


class Test extends View

{


   public function beforeGetProduct(View $subject)

   {

       echo 'call plugin function beforeGetProduct()<br/>';

   }

   public function afterGetProduct(View $subject,$result)

   {

       echo 'call plugin function afterGetProduct()<br/>';

       return $result;

   }

   public function aroundGetProduct(View $subject , \Closure $closure)

   {

       echo 'call plugin function aroundGetProduct()<br/>';

       return $closure();

   }

}

 
覆蓋後的結果會在商品頁看到,可以看到執行順序是 beforeGetProduct() -> aroundGetProduct() -> afterGetProduct()其中 aroundGetProduct 會將 getProduct 內容覆蓋,以上可以看出命名規則的規律性。

以上就是這次關於如何覆蓋Magento 2 原生程式的分享,更多電商知識,別忘訂閱歐斯瑞電子報,以及追蹤我們的粉絲專頁喔!

更多Magento相關文章請看: Magento教學導覽

 

以上內容由Astralweb 歐斯瑞編寫製作

 000

推薦文章

Category:
  Magento-2

留下回應

你的電子郵件地址不會被公開.

取得獨家電子商務祕技

建立更好的策略靈感

跟上全球的網路趨勢

絕佳的電商解決方案

電子商務戰略全指南

每月發送電商戰略指南,只要填寫E-mail即可訂閱!

請到您的信箱確認,即可完成訂閱。