文章彙整

駭客入侵(修正) – 在 Magento 2 後台 Form 表單取得 categories 功能

By Sabina 8 months agoNo Comments
首頁  /  Magento  /  Magento-2  /  駭客入侵(修正) – 在 Magento 2 後台 Form 表單取得 categories 功能

當您使用PHP製作一個Magento 2後台Form表單則無法有所有UI elements的功能。

我最近遇到了一個將產品目錄列出來的Form表單,並且正在使用一種我已經看到在Stack Overflow網站平台中廣泛使用的hack方法。

這個程式大部分都可以運作,但是由於版本2.2.1和2.2.3之間有些結構改變,以至於一些程式碼會產生錯誤。 它還將根目錄列出來,這些根目錄大多數情況下沒有作用,你可能不希望它們顯示在列表中。 它也看起來很醜,我們可以改善這一點。

 

這裡是他原來程式碼:

const REPEATER = "__";
const PREFIX_END = '';

$categories = $this->getCategoryCollection(true, false, false, false);

private function _toArray()
	{
    	$categories = $this->getCategoryCollection(true, false, false, false);

    	$catagoryList = array();
    	foreach ($categories as $key => $category) {
        	$prefix = str_repeat(self::REPEATER, ($category->getLevel()-1) * 1) . self::PREFIX_END;
        	$catagoryList[$category->getEntityId()] = $prefix. $category->getName();
    	}

    	return $catagoryList;
	}

 

在這個例子中你可以看到定義REPEATER是一個下劃線,這個想法是在常規的下拉清單元件中創建一個樹結構,如下所示:

 

Item 1

__Item 2

____Item 3

 

相當的醜對吧? 不過,我們稍後會回顧那部分。 這裡最重要的是str_repeat函式 – 在M2的某些版本中,根目錄的初始設置為0 – 這意味著str_repeat第二個參數將會有被帶入負數的情形,那麼網站就會產生fatal error!

 

所以我們將為此創建一個簡單的修復程序。 首先,我們將檢查分配給根目錄的級別,然後我們將跳過根目錄,然後我們將確保不會有負數帶入str_repeat第二個參數讓它產生錯誤 – 如果是負數,我們將跳過它!

 

我們修改的程式碼(每個步驟都有註釋):

private function _toArray()
	{
    	$categories = $this->getCategoryCollection(true, false, false, false);
    	$catagoryList = array();
    	$i = 0;
    	foreach ($categories as $key => $category) {
        	if($i == 0){
            	$rootLevel = $category->getLevel();
            	//this is the level of our root category
        	}
        	if($category->getLevel() == $rootLevel){
            	$i++;
            	continue;
            	//we want to skip the root categories like so
        	}
        	if($category->getLevel()-1 < 0){
            	$i++;
            	continue;
            	//we want to make sure that we aren't going to break the str_repeat
        	}
        	$z = $rootLevel + 1;
        	//we want to do this so we don't have any underscores on our top level - that would be even uglier!!
        	$prefix = str_repeat(self::REPEATER, ($category->getLevel()-$z) * 1) . self::PREFIX_END;
        	$catagoryList[$category->getEntityId()] = $prefix. $category->getName();
        	$i++;
        	}

    	return $catagoryList;
	}

 

太棒了,現在我們有了我們的樹狀結構,它兼容在2.2.1和2.2.3的版本! 現在我們只需要刪除那些醜陋的下劃線。

 

當我們的表單加載時,我們將使用Jquery來做到這一點。 這不是最理想的,但它是我們想到最好的方式。

$("option").each(function() {
  var text = $(this).text();
  text = text.replace(/\_/g, "\u2003");
  $(this).text(text);
});

 

想了解更多關於Magento的相關教學,可以關注我們的Facebook粉絲專頁或是訂閱我們的電子報喔!

我們會不定期的更新分享文章,跟我們的歐斯瑞一起學習吧!

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

 000

推薦文章

Category:
  Magento-2

留下回應

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

取得獨家電子商務祕技

建立更好的策略靈感

跟上全球的網路趨勢

絕佳的電商解決方案

電子商務戰略全指南

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

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