2016-06-01 4 views
2

Я работаю над динамическим massaction Magento2, но я не получаю динамическую часть массива дерева в сетке заказа. Поэтому я ссылаюсь на одну ссылку, и у меня есть следующее решение, но я не получаю желаемого результата. Дайте мне знать, где я ошибаюсь.Magento2 dynamic massaction

<massaction name="listing_massaction"> 
    <action name="magento_hello"> 
     <argument name="data" xsi:type="array"> 
      <item name="config" xsi:type="array"> 
       <item name="type" xsi:type="string">magento_hello</item> 
       <item name="label" xsi:type="string" translate="true">change to group buyer</item> 
      </item> 
     </argument> 
     <argument name="actions" xsi:type="array"> 
     <argument name="class" xsi:type="string">Magento\Hello\Ui\Component\MassAction\Group\Options</argument> 
      <argument name="data" xsi:type="array"> 
      <item name="urlPath" xsi:type="string">customertobuyer/masschangetobuyer</item> 
      <item name="paramName" xsi:type="string">group</item> 
      <item name="confirm" xsi:type="array"> 
      <item name="title" xsi:type="string" translate="true">change to group buyer</item> 
      <item name="message" xsi:type="string" translate="true">Are you sure to change selected customerto buyer and to assign sto new group buyer?</item> 
       </item> 
     </argument> 
    </argument> 
    </action> 
</massaction> 
<?php 
/** 
* Copyright © 2015 Magento. All rights reserved. 
* See COPYING.txt for license details. 
*/ 
namespace Magento\Hello\Ui\Component\MassAction\Group; 

use Magento\Framework\UrlInterface; 
use Zend\Stdlib\JsonSerializable; 
use Magento\Customer\Model\ResourceModel\Group\CollectionFactory; 

/** 
* Class Options 
*/ 
class Options implements JsonSerializable 
{ 
    /** 
    * @var array 
    */ 
    protected $options; 

    /** 
    * @var CollectionFactory 
    */ 
    protected $collectionFactory; 

    /** 
    * Additional options params 
    * 
    * @var array 
    */ 
    protected $data; 

    /** 
    * @var UrlInterface 
    */ 
    protected $urlBuilder; 

    /** 
    * Base URL for subactions 
    * 
    * @var string 
    */ 
    protected $urlPath; 

    /** 
    * Param name for subactions 
    * 
    * @var string 
    */ 
    protected $paramName; 

    /** 
    * Additional params for subactions 
    * 
    * @var array 
    */ 
    protected $additionalData = []; 

    /** 
    * Constructor 
    * 
    * @param CollectionFactory $collectionFactory 
    * @param UrlInterface $urlBuilder 
    * @param array $data 
    */ 
    public function __construct(
     CollectionFactory $collectionFactory, 
     UrlInterface $urlBuilder, 
     array $data = [] 
    ) { 
     $this->collectionFactory = $collectionFactory; 
     $this->data = $data; 
     $this->urlBuilder = $urlBuilder; 
    } 

    /** 
    * Get action options 
    * 
    * @return array 
    */ 
    public function jsonSerialize() 
    { 
     if ($this->options === null) { 
      $options = $this->collectionFactory->create()->setRealGroupsFilter()->toOptionArray(); 
      $this->prepareData(); 
      foreach ($options as $optionCode) { 
       $this->options[$optionCode['value']] = [ 
        'type' => 'customer_group_' . $optionCode['value'], 
        'label' => $optionCode['label'], 
       ]; 

       // if ($this->urlPath && $this->paramName) { 
       //  $this->options[$optionCode['value']]['url'] = $this->urlBuilder->getUrl(
       //   $this->urlPath, 
       //   [$this->paramName => $optionCode['value']] 
       // ); 
       // } 

       $this->options[$optionCode['value']] = array_merge_recursive(
        $this->options[$optionCode['value']], 
        $this->additionalData 
       ); 
      } 

      $this->options = array_values($this->options); 
     } 
     return $this->options; 
    } 

    /** 
    * Prepare addition data for subactions 
    * 
    * @return void 
    */ 
    protected function prepareData() 
    { 
     foreach ($this->data as $key => $value) { 
      switch ($key) { 
       case 'urlPath': 
        $this->urlPath = $value; 
        break; 
       case 'paramName': 
        $this->paramName = $value; 
        break; 
       default: 
        $this->additionalData[$key] = $value; 
        break; 
      } 
     } 
    } 
} 

ответ

0

Я думаю, что есть проблема с function jsonSerialize() в классе компонентов пользовательского интерфейса.

Пожалуйста, попробуйте ниже.

public function jsonSerialize() 
    { 
     $i=0; 
     if ($this->options === null) { 
      // get the massaction data from the database table 
      $collection = $this->collectionFactory->create()->setRealGroupsFilter()->toOptionArray(); 

      if(!count($collection)){ 
       return $this->options; 
      } 
      //make a array of massaction 
      foreach ($collection as $key => $badge) { 
       $options[$i]['value']=$badge->getEntityId(); 
       $options[$i]['label']=$badge->getTitle(); 
       $i++; 
      } 
      $this->prepareData(); 
      foreach ($options as $optionCode) { 
       $this->options[$optionCode['value']] = [ 
        'type' => 'customer_group_' . $optionCode['value'], 
        'label' => $optionCode['label'], 
       ]; 

       if ($this->urlPath && $this->paramName) { 
        $this->options[$optionCode['value']]['url'] = $this->urlBuilder->getUrl(
         $this->urlPath, 
         [$this->paramName => $optionCode['value']] 
        ); 
       } 

       $this->options[$optionCode['value']] = array_merge_recursive(
        $this->options[$optionCode['value']], 
        $this->additionalData 
       ); 
      } 

      // return the massaction data 
      $this->options = array_values($this->options); 
     } 
     return $this->options; 
    } 
3

Пожалуйста, попробуйте с этим XML и обновить действие контроллера при необходимости

<massaction name="listing_massaction"> 
    <argument name="data" xsi:type="array"> 
     <item name="config" xsi:type="array"> 
      <item name="selectProvider"xsi:type="string">vendorName_moduleName_list.vendorName_moduleName_columns.ids</item> 
      <item name="component" xsi:type="string">Magento_Ui/js/grid/tree-massactions</item> 
      <item name="indexField" xsi:type="string">id</item> 
     </item> 
    </argument> 
    <action name="magento_hello"> 
     <argument name="data" xsi:type="array"> 
      <item name="config" xsi:type="array"> 
      <item name="type" xsi:type="string">magento_hello</item> 
      <item name="label" xsi:type="string" translate="true">change to group buyer</item> 
     <!-- set you action path--> 
      <item name="url" xsi:type="url" path="path_to_controller"/> 
       <item name="confirm" xsi:type="array"> 
        <item name="title" xsi:type="string" translate="true">change to group buyer</item> 
        <item name="message" xsi:type="string" translate="true">Are you sure to change selected customerto buyer and to assign sto new group buyer?</item> 
       </item> 
      </item> 
     </argument> 
    </action> 
</massaction> 
Смежные вопросы