1

magento2 のカスタム グリッドに CSV エクスポート ボタンを追加する方法。グリッドとフォームを作成しました。magento2 に csv エクスポート機能を追加する必要があります。

4

8 に答える 8

1

以下はデフォルトのクラスです。管理グリッドに表示されているデータのみをエクスポートします。データ全体をエクスポートするのではありません

<exportButton class="Magento\Ui\Component\ExportButton">

すべてのデータが必要な場合は、すべてのデータをエクスポートするカスタム エクスポート ボタンを作成します。

管理グリッドが表示される Ui-Component ファイルを編集します。

[vendor_name] \ [module_name] \view\adminhtml\ui_component

このコードを追加して、ボタンを管理グリッドに追加します

Ui-ComponentFIleName.xml

<item name="buttons" xsi:type="array">

    <item name="import" xsi:type="array">
        <item name="name" xsi:type="string">import</item>
        <item name="label" xsi:type="string" translate="true">Import</item>
        <item name="class" xsi:type="string">secondary</item>
        <item name="url" xsi:type="string">*/*/importdata</item>
        <item name="sortOrder" xsi:type="number">20</item>
    </item>

    <item name="export" xsi:type="array">
        <item name="name" xsi:type="string">export</item>
        <item name="label" xsi:type="string" translate="true">Export</item>
        <item name="class" xsi:type="string">secondary</item>
        <item name="url" xsi:type="string">*/*/exportdata</item>
        <item name="sortOrder" xsi:type="number">30</item>
    </item>

</item>

次に、データをエクスポートまたはインポートするファイルを作成します。ファイル名は、Ui-Component ファイルで定義したものと同じでなければなりません

  <item name="url" xsi:type="string">*/*/exportdata</item>

  <item name="url" xsi:type="string">*/*/importdata</item>

ファイルパスは次のようにする必要があります

[vendor_name] \ [module_name] \ Controller \ Adminhtml \ [Controller_name] \ Exportdata.php

Exportdata.php

<?php

namespace [vendor_name]\[module_name]\Controller\Adminhtml\[Controller_name];

use Magento\Framework\App\Filesystem\DirectoryList;


class Exportdata extends \Magento\Backend\App\Action
{
    protected $uploaderFactory;

    protected $_locationFactory; 

    public function __construct(
        \Magento\Backend\App\Action\Context $context,
        \Magento\Framework\App\Response\Http\FileFactory $fileFactory,
        \Magento\Framework\Filesystem $filesystem,
        \[vendor_name]\[module_name]\Model\locatorFactory $locationFactory // This is returns Collaction of Data

    ) {
       parent::__construct($context);
       $this->_fileFactory = $fileFactory;
       $this->_locationFactory = $locationFactory;
       $this->directory = $filesystem->getDirectoryWrite(DirectoryList::VAR_DIR); // VAR Directory Path
       parent::__construct($context);
    }

    public function execute()
    {   
        $name = date('m-d-Y-H-i-s');
        $filepath = 'export/export-data-' .$name. '.csv'; // at Directory path Create a Folder Export and FIle
        $this->directory->create('export');

        $stream = $this->directory->openFile($filepath, 'w+');
        $stream->lock();

        //column name dispay in your CSV 

        $columns = ['Col-1-name','Col-2-name','Col-3-name','Col-4-name','Col-5-name','Col-6-name','Col-7-name','Col-8-name','Col-9-name',];

            foreach ($columns as $column) 
            {
                $header[] = $column; //storecolumn in Header array
            }

        $stream->writeCsv($header);

        $location = $this->_locationFactory->create();
        $location_collection = $location->getCollection(); // get Collection of Table data 

        foreach($location_collection as $item){

            $itemData = [];

            // column name must same as in your Database Table 

            $itemData[] = $item->getData('col-1-name');
            $itemData[] = $item->getData('col-2-name');
            $itemData[] = $item->getData('col-3-name');
            $itemData[] = $item->getData('col-4-name');
            $itemData[] = $item->getData('col-5-name');
            $itemData[] = $item->getData('col-6-name');
            $itemData[] = $item->getData('col-7-name');
            $itemData[] = $item->getData('col-8-name');
            $itemData[] = $item->getData('col-9-name');

            $stream->writeCsv($itemData);

        }

        $content = [];
        $content['type'] = 'filename'; // must keep filename
        $content['value'] = $filepath;
        $content['rm'] = '1'; //remove csv from var folder

        $csvfilename = 'locator-import-'.$name.'.csv';
        return $this->_fileFactory->create($csvfilename, $content, DirectoryList::VAR_DIR);

    }


}

[エクスポート] ボタンをクリックすると、下にダウンロードされた .csv ファイルが表示されます。

これがお役に立てば幸いです。

于 2019-09-29T09:26:45.303 に答える
1

magento2 の UI コンポーネントを使用してグリッドでエクスポートするには

コンテナー タグの下に、ui リスト コンポーネント xml に次の行を追加します。

  <exportButton name="export_button">
    <argument name="data" xsi:type="array">
    <item name="config" xsi:type="array">
        <item name="selectProvider" xsi:type="string">vendor_listing.vendor_listing.example_blog_columns.ids</item>
        </item>
      </argument>
     </exportButton>

これにより、magento2 のグリッドに読み込まれたコレクションの csv が生成されます

于 2017-04-25T11:52:46.707 に答える