2016-09-30 29 views
0

我是新手Magento2開發人員。 現在我正在製作一個小模塊,並且卡在一個地方。 我建管理網格founded example這裏是我di.xml在Magento 2的後端修改自定義網格

<preference for="Magento\Catalog\Model\Product" type="Vendor\Module\Model\Product" /> 
<virtualType name="Vendor\Module\Model\ResourceModel\Grid\Grid\Collection" type="Magento\Framework\View\Element\UiComponent\DataProvider\SearchResult"> 
     <arguments> 
      <argument name="mainTable" xsi:type="string">vendor_module</argument> 
      <argument name="resourceModel" xsi:type="string">Vendor\Module\Model\ResourceModel\Grid</argument> 
     </arguments> 
</virtualType> 
<type name="Magento\Framework\View\Element\UiComponent\DataProvider\CollectionFactory"> 
     <arguments> 
      <argument name="collections" xsi:type="array"> 
       <item name="grid_record_grid_list_data_source" xsi:type="string">Vendor\Module\Model\ResourceModel\Grid\Grid\Collection</item> 
      </argument> 
     </arguments> 
</type> 

同時,我使用的佈局XML文件硬編碼列裏:

... 
    <column name="customer" > 
     <argument name="data" xsi:type="array"> 
      <item name="config" xsi:type="array"> 
       <item name="filter" xsi:type="string">false</item> 
       <item name="label" xsi:type="string" translate="true">Customer</item> 
       </item> 
      </argument> 
    </column> 
... 

我的表中的列,如:產品ID,客戶ID,價格,狀態

而且我的問題是:

  • 如何將客戶ID轉換爲名字+姓氏?
  • 「狀態」有3種不同的狀態(0,1和2) - 我如何將它們轉換爲人類可讀的單詞? (undefined,good,bad)
  • 如何添加到同一網格另一列例如$ price + 10%

回答

1

在該組件的XML可以定義一個UI類以輔助內的Magento 2.顯示自定義/可讀的數據有很多的核心內的例子,如縮略圖正被顯示在目錄網格視圖。

使用,作爲一個例子,這裏的內catalog/view/adminhtml/ui_component/product_listing.xml列定義:

<column name="thumbnail" class="Magento\Catalog\Ui\Component\Listing\Columns\Thumbnail"> 
     <argument name="data" xsi:type="array"> 
      <item name="config" xsi:type="array"> 
       <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/thumbnail</item> 
       <item name="add_field" xsi:type="boolean">true</item> 
       <item name="sortable" xsi:type="boolean">false</item> 
       <item name="altField" xsi:type="string">name</item> 
       <item name="has_preview" xsi:type="string">1</item> 
       <item name="label" xsi:type="string" translate="true">Thumbnail</item> 
       <item name="sortOrder" xsi:type="number">20</item> 
      </item> 
     </argument> 
    </column> 

正如你可以看到有幾個參數可以傳遞到列定義,包括取決於類型的組件您嘗試顯示的數據。在這種情況下,它是一個縮略圖。回顧JS文件顯示,將下面方法中設置的數據作爲實際縮略圖顯示是邏輯。這不一定是要求。

在列標籤的定義類中,您會看到Magento\Catalog\Ui\Component\Listing\Columns\Thumbnail。這是一個爲數據顯示方式定義輔助方法的類,並且以定義的列組件可以正確呈現的方式解析要顯示的數據。

狠抓方法該類中,prepareDataSource

/** 
* Prepare Data Source 
* 
* @param array $dataSource 
* @return array 
*/ 
public function prepareDataSource(array $dataSource) 
{ 
    if (isset($dataSource['data']['items'])) { 
     $fieldName = $this->getData('name'); 
     foreach ($dataSource['data']['items'] as & $item) { 
      $product = new \Magento\Framework\DataObject($item); 
      $imageHelper = $this->imageHelper->init($product, 'product_listing_thumbnail'); 
      $item[$fieldName . '_src'] = $imageHelper->getUrl(); 
      $item[$fieldName . '_alt'] = $this->getAlt($item) ?: $imageHelper->getLabel(); 
      $item[$fieldName . '_link'] = $this->urlBuilder->getUrl(
       'catalog/product/edit', 
       ['id' => $product->getEntityId(), 'store' => $this->context->getRequestParam('store')] 
      ); 
      $origImageHelper = $this->imageHelper->init($product, 'product_listing_thumbnail_preview'); 
      $item[$fieldName . '_orig_src'] = $origImageHelper->getUrl(); 
     } 
    } 

    return $dataSource; 
} 

你可以使用這個方法來格式化你顯示成你需要的格式的數據。

例如,道路的價格通過其定義的列級顯示在目錄中電網(格式化,以正確的貨幣)是:

public function prepareDataSource(array $dataSource) 
{ 
    if (isset($dataSource['data']['items'])) { 
     $store = $this->storeManager->getStore(
      $this->context->getFilterParam('store_id', \Magento\Store\Model\Store::DEFAULT_STORE_ID) 
     ); 
     $currency = $this->localeCurrency->getCurrency($store->getBaseCurrencyCode()); 

     $fieldName = $this->getData('name'); 
     foreach ($dataSource['data']['items'] as & $item) { 
      if (isset($item[$fieldName])) { 
       $item[$fieldName] = $currency->toCurrency(sprintf("%f", $item[$fieldName])); 
      } 
     } 
    } 

    return $dataSource; 
} 

我希望這有助於弄清楚如何格式化列中的數據在網格上。

+0

非常感謝! –