magento2 のカスタム グリッドに CSV エクスポート ボタンを追加する方法。グリッドとフォームを作成しました。magento2 に csv エクスポート機能を追加する必要があります。
8 に答える
以下はデフォルトのクラスです。管理グリッドに表示されているデータのみをエクスポートします。データ全体をエクスポートするのではありません
<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 ファイルが表示されます。
これがお役に立てば幸いです。
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 が生成されます