WEBサイト制作・アプリ開発・システム開発・ブランディングデザイン制作に関するご相談はお気軽にご連絡ください。
構想段階からじっくりとヒアリングし、お客様の課題にあわせたアプローチ手法でお客様の“欲しかった”をカタチにしてご提案いたします。
Blog スタッフブログ
EC-CUBE
システム開発
[EC-CUBE]EC-CUBE4の商品CSV出力項目の追加
システム開発担当のTFです。
※EC-CUBE4系統対応
メーカー管理プラグインのメーカー名を商品CSV出力に追加する手順
やり方
- メーカー管理プラグインをインストールし、有効化する
- マイグレーションを作成・実行を行いdtb_csvにデータを入れる
参考
[EC-CUBE4] コピペして少し修正して使える INSERT dtb_csv(CSV出力項目設定) マイグレーションファイル
マイグレーションの作成・実行方法
サンプル
※プラグインは一部抜粋
<?php
namespace Plugin\Maker4\Entity;
use Doctrine\ORM\Mapping as ORM;
use Eccube\Annotation as Eccube;
/**
* @Eccube\EntityExtension("Eccube\Entity\Product")
*/
trait ProductTrait
{
/**
* @var \Plugin\Maker4\Entity\Maker
*
* @ORM\ManyToOne(targetEntity="Plugin\Maker4\Entity\Maker")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="maker_id", referencedColumnName="id")
* })
*/
private $Maker;
/**
* @return Maker
*/
public function getMaker()
{
return $this->Maker;
}
/**
* @param Maker|null $Maker
*
* @return $this
*/
public function setMaker(Maker $Maker = null)
{
$this->Maker = $Maker;
return $this;
}
}
<?php
namespace Plugin\Maker4\Entity;
use Doctrine\ORM\Mapping as ORM;
use Eccube\Entity\AbstractEntity;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Validator\Mapping\ClassMetadata;
/**
* Class Maker.
*
* @ORM\Table(name="plg_maker")
* @ORM\Entity(repositoryClass="Plugin\Maker4\Repository\MakerRepository")
*/
class Maker extends AbstractEntity
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer", options={"unsigned":true})
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=255)
*/
private $name;
/**
* Get id.
*
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* Get name.
*
* @return string
*/
public function getName()
{
return $this->name;
}
/**
* Set name.
*
* @param string $name
*
* @return Maker
*/
public function setName($name)
{
$this->name = $name;
return $this;
}
}
<?php declare(strict_types=1);
namespace DoctrineMigrations;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
use Doctrine\ORM\EntityManager;
use Eccube\Entity\Csv;
use Eccube\Entity\Master\CsvType;
use Eccube\Repository\CsvRepository;
use Eccube\Repository\Master\CsvTypeRepository;
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
* Auto-generated Migration: Please modify to your needs!
*/
final class Version20220829150653 extends AbstractMigration implements ContainerAwareInterface
{
/** @var ContainerInterface */
private $container;
/** @var EntityManager */
private $em;
/** @var CsvRepository */
private $CsvRepository;
/** @var CsvTypeRepository */
private $CsvTypeRepository;
/** @var array */
private $CsvType;
public function setContainer(ContainerInterface $container = null)
{
$this->container = $container;
$this->em = $this->container->get('doctrine.orm.entity_manager');
$this->CsvRepository = $this->em->getRepository("Eccube\Entity\Csv");
$this->CsvTypeRepository = $this->em->getRepository("Eccube\Entity\Master\CsvType");
$this->CsvType["Product"] = $this->CsvTypeRepository->find(1); // 商品CSV
$this->CsvType["Customer"] = $this->CsvTypeRepository->find(2); // 会員CSV
$this->CsvType["Order"] = $this->CsvTypeRepository->find(3); // 受注CSV
$this->CsvType["Shipping"] = $this->CsvTypeRepository->find(4); // 配送CSV
$this->CsvType["Category"] = $this->CsvTypeRepository->find(5); // カテゴリCSV
}
public function up(Schema $schema) : void
{
// INSERT dtb_csv したい内容
$arr_insert_csv = [
[
"csv_type" => $this->CsvType["Product"], // 商品CSV
"entity_name" => "Eccube\\Entity\\Product", // 追加したい項目はどのEntityにあるか
"disp_name" => "メーカー(ID)", // 表示上の項目名
"field_name" => "Maker", // 項目名
"reference_field_name" => "id", // 参照先(field_nameがEntityの場合、Entity先のfeald_nameを文字列で指定してあげる)
"enabled" => true // true : 出力する項目, false : 出力しない項目
], [
"csv_type" => $this->CsvType["Product"],
"entity_name" => "Eccube\\Entity\\Product",
"disp_name" => "メーカー(名前)",
"field_name" => "Maker", // ProductTraitで追加したMakerエンティティ
"reference_field_name" => "name", // Makerエンティティの name を表示
"enabled" => true
]
];
$this->em->beginTransaction();
foreach($arr_insert_csv as $c){
$next_sort_no = $this->getCsvNextSortNo($c["csv_type"]);
$Csv = new Csv();
$Csv
->setCsvType($c["csv_type"])
->setEntityName($c["entity_name"])
->setDispName($c["disp_name"])
->setFieldName($c["field_name"])
->setReferenceFieldName($c["reference_field_name"])
->setEnabled($c["enabled"])
->setSortNo($next_sort_no);
$this->em->persist($Csv);
$this->em->flush($Csv);
}
$this->em->commit();
}
public function down(Schema $schema) : void { }
/**
* dtb_csvをCsvTypeで絞り込み、次のsort_noの返却する。
* @param CsvType $CsvType
* @return int
*/
private function getCsvNextSortNo(CsvType $CsvType){
$Csv = $this->CsvRepository->findOneBy(["CsvType" => $CsvType], ['sort_no' => 'DESC']);
return $Csv->getSortNo() + 1;
}
}
// プロジェクト直下に移動
cd プロジェクトのパス
// マイグレーションの実行
php bin/console doctrine:migrations:execute 20220829150653 –up