文章彙整

Magento 2 資料設定欄位的方法

By Sabina 9 months agoNo Comments
首頁  /  Magento  /  Magento-2  /  Magento 2 資料設定欄位的方法

Magento 內部有一張資料表是用來儲存系統參數,但常常不知道怎麼新增自定義的欄位進去。

今天,我們就來介紹資料設定欄位的方法吧!

 

1. 資料表 Database

(1) Table Name: core_config_data

 

這張就是我們今天要介紹的主要資料表,它負責了幾乎一切 Magento 系統變數的儲存,我們透過以下表格來看看他有哪些欄位吧!

 

欄位名稱 型別 長度 說明
config_id int 10 Entity Id
scope_id varchar 8 n/a
scope_id int 11 n/a
path varchar 255 路徑由 section/group/field 所組成
value text n/a 儲存資料內容

 

(2) 欄位名稱定義

 

裡面所有的 config Data 都是透過 sectiongroupfield 這三個值來定義資料,那這三個又是什麼呢?

我們參考下圖:

 

2.資料處理 Data Process

 

(1) 讀取 Read

<?php

$obj = \Magento\Framework\App\ObjectManager::getInstance();

       /* @var $scopeConfig \Magento\Framework\App\Config\ScopeConfigInterface */
       $scopeConfig = $obj->create('Magento\Framework\App\Config\ScopeConfigInterface');

       $scopeConfig->getValue('section/group/field');

 

(2) 寫入 Write

<?php

$obj = \Magento\Framework\App\ObjectManager::getInstance();

       /* @var $scopeConfig \Magento\Framework\App\Config\ScopeConfigInterface */
       $scopeConfig = $obj->create('Magento\Framework\App\Config\ScopeConfigInterface');
      $scopeConfig->saveConfig('section/group/field',$value, 'default',0);

 

 3. 自定義欄位 Custom Field

 

(1) XML 檔

跟大多數的 Magento 定義檔一樣,需要透過 XML 來定義 System 內的資料欄位,假設我們今天要開設一個遠端系統的 extension ,欄位有 usernamepasswordip addressport number 四個。檔案設定如下:

 

* 檔名及存放路徑

vendor/extension/etc/adminhtml/system.xml

 

* 程式碼

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Config:etc/system_file.xsd">
   <system>
       <tab id="example_core_tab" translate="label" sortOrder="888">
           <label>Remote System</label>
       </tab>
       <section id="example_core_setting" translate="label" sortOrder="130" showInDefault="1" showInWebsite="1" showInStore="1">
           <label>Setting</label>
           <tab>example_core_tab</tab>
           <resource>Grayson_SysConfigExample::example_core_setting</resource>
           <group id="setting_ip" translate="label" type="text" sortOrder="10" showInDefault="1" showInWebsite="0" showInStore="0">
               <label>Setting</label>
               <field id="field_ip" translate="label" type="text" sortOrder="20" showInDefault="1" showInWebsite="1" showInStore="1">
                   <label>Ip Address</label>
               </field>
               <field id="field_port" translate="label" type="text" sortOrder="20" showInDefault="1" showInWebsite="1" showInStore="1">
                   <label>Port</label>
               </field>
               <field id="field_username" translate="label" type="text" sortOrder="20" showInDefault="1" showInWebsite="1" showInStore="1">
                   <label>Username</label>
               </field>
               <field id="password" translate="label" type="obscure" sortOrder="25" showInDefault="1" showInWebsite="1" showInStore="1">
                   <label>Password</label>
                   <backend_model>Magento\Config\Model\Config\Backend\Encrypted</backend_model>
                   <depends>
                       <field id="*/*/active">1</field>
                   </depends>
               </field>
           </group>
       </section>
   </system>
</config>

 

(2) 賦予預設值

通常除了帳號密碼之外,我們可能會給予一些變數預設的資料,像是 Port Number,或是 IP Address 等等,而我們透過 config.xml 設定檔可以完成這件事情,讓資料永遠都有預設值。底下範例給予預設 IP 為 127.0.0.1,預設 port22,預設 usernamedefault_username

 

* 檔名及存放路徑

vendor/extension/etc/config.xml

 

* 程式碼:

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Store:etc/config.xsd">
   <default>
       <example_core_setting>
           <setting_ip>
               <field_ip>127.0.0.1</field_ip>
               <field_port>22</field_port>
               <field_username>default_username</field_username>
               <password backend_model="Magento\Config\Model\Config\Backend\Encrypted" />
           </setting_ip>
       </example_core_setting>
   </default>
</config>

 

(3) 密碼欄位

 

Magento 在 core_config_datavalue 中,可以儲存加密過後的字串。Magento 也實作了加 ( 解 ) 密的方法,讓開發人員能夠使用,在需要用到時 decode 回原本的字串。

 

!!注意!!這邊的加密非 MD5 或是 SHA256 類的雜湊 ( Hash ) 演算法!

 

因為有 Magento 實作了 Encrypted 方法,所以我們在設定 Password 的時候,要賦予 backend_model 的參數,才能用 getValue 方法正確的取得解密過後的字串。

 

* system.xml 程式碼

               <field id="password" translate="label" type="obscure" sortOrder="25" showInDefault="1" showInWebsite="1" showInStore="1">
                   <label>Password</label>
                   <backend_model>Magento\Config\Model\Config\Backend\Encrypted</backend_model>
                   <depends>
                       <field id="*/*/active">1</field>
                   </depends>
               </field>

 

* config.xml 程式碼

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Store:etc/config.xsd">
   <default>
       <example_core_setting>
           <setting_ip>
               <field_ip>127.0.0.1</field_ip>
               <field_port>22</field_port>
               <field_username>default_username</field_username>
               <password backend_model="Magento\Config\Model\Config\Backend\Encrypted" />
           </setting_ip>
       </example_core_setting>
   </default>
</config>

 

(4) 清除 Cache

因為有動到 XML 設定檔,更改完設定後,記得要用指令清除 Cache。

 

$ bin/magento cache:flush

$ bin/magento cache:clean

 

4. 範例程式碼:

Github

 

如果想了解更多相關Magento的教學,可以參考我們的其他文章喔!

 

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

 000

推薦文章

Category:
  Magento-2

留下回應

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

取得獨家電子商務祕技

建立更好的策略靈感

跟上全球的網路趨勢

絕佳的電商解決方案

電子商務戰略全指南

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

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