0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

EC-CUBEシリーズ!「独自項目追加カスタマイズ」

Posted at

ec_cube_additem.jpg

エスプリフォートでは、ECによる請負開発やプロダクト(自社サービス)開発を長く行ってきました。
そしてECサイトを構築する際には、お客様の業種・業態やお客様独自の管理法などにあわせて運用・管理できるようにするために、管理項目を増やしたり、商品情報を増やすようなことはアドオン開発では当たり前にあります。

ECサイトを構築する際の一つの選択肢として、エスプリフォートが長年扱ってきましたEC-CUBEで、管理項目を増やしたり、商品情報を増やす方法をご紹介していきます。

1、画面の追加項目を作成

管理画面の商品登録画面に項目を追加してみます。
「/app/Customize/Form/Extension/Admin」ディレクトリに「ProductTypeExtension.php」というファイルを作成します。

namespace Customize\Form\Extension\Admin;

use Eccube\Form\Type\Admin\ProductType;
use Symfony\Component\Form\AbstractTypeExtension;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
use Symfony\Component\Form\FormBuilderInterface;

class ProductTypeExtension extends AbstractTypeExtension {
  public function getExtendedType() {
    return ProductType::class;
  }

  public function buildForm(FormBuilderInterface $builder, array $options) {
    $builder->add('special_sort_no', TextType::class, [
      'required' => false
    ]);
    $builder->add('special_comment', TextType::class, [
      'required' => false
    ]);
  }
}

※その他のフォームタイプは「Form Types Reference」を参照ください。

2、テーブルの追加項目を作成

「/app/Customize/Entity/ProductTrait.php」を作成します。
「special_sort_no」はint型で整数のみ(unsigned)とし、nullを許容する。
「special_comment」はstring型でnullを許容する。

<?php
namespace Customize\Entity;
use Eccube\Annotation\EntityExtension;
use Eccube\Entity\Product;

/**
 * @EntityExtension("Eccube\Entity\Product")
 */
trait ProductTrait {

  /**
   * @var string
   *
   * @ORM\Column(name="parts_new_sort_no", type="integer", nullable=true, options={"unsigned":true})
   */
  private $special_sort_no;

  /**
   * @var string
   *
   * @ORM\Column(name="special_comment", type="string", nullable=true)
   */
  private $special_comment;

  /**
   * Set special_sort_no.
   *
   * @param integer|null $special_sort_no
   *
   * @return Product
   */
  public function setSpecialSortNo($special_sort_no) {
    $this->special_sort_no = $special_sort_no;
    return $this;
  }

  /**
   * Get special_sort_no.
   *
   * @return integer
   */
  public function getSpecialSortNo() {
    return $this->special_sort_no;
  }

  /**
   * Set special_comment.
   *
   * @param string|null $special_comment
   *
   * @return Product
   */
  public function setSpecialComment($special_comment) {
    $this->special_comment = $special_comment;
    return $this;
  }

  /**
   * Get special_comment.
   *
   * @return string
   */
  public function getSpecialComment() {
    return $this->special_comment;
  }
}

3、コマンドでproxyファイルを作成し、DBに「ProductTrait」で指定した項目を追加

サーバーにSSHで接続して、EC-CUBEのインストールディレクトリまでcdコマンドで移動します。

cd /var/www/public_html/[EC-CUBEインストールディレクトリ]

移動後、下記コマンドを実行し、「/app/proxy/entity/src/Eccube/Entity/Product.php」が作成します。

php bin/console eccube:generate:proxies

次に、EC-CUBEのキャッシュをクリアします。

/usr/bin/php bin/console cache:clear --no-warmup

最後に、下記コマンドを実行してデータベースに列を追加します。

/usr/bin/php bin/console doctrine:schema:update --dump-sql --force

4、ビューに画面に追加する項目を追加

「/src/Eccube/Resource/template/admin/Product/product.twig」に画面に追加する項目を追加します。

<div class="row">
    <div class="col-3">
        <div class="d-inline-block" data-tooltip="true" data-placement="top" title="{{ 'tooltip.admin.product.special_sort_no'|trans }}">
            <span>{{ 'admin.product.special_sort_no'|trans }}</span>
            <i class="fa fa-question-circle fa-lg ml-1"></i>
        </div>
    </div>
    <div class="col mb-2">
        <div>
            {{ form_widget(form.special_sort_no) }}
            {{ form_errors(form.special_sort_no) }}
        </div>
    </div>
</div>
<div class="row">
    <div class="col-3">
        <div class="d-inline-block" data-tooltip="true" data-placement="top" title="{{ 'tooltip.admin.product.special_comment'|trans }}">
            <span>{{ 'admin.product.special_comment'|trans }}</span>
            <i class="fa fa-question-circle fa-lg ml-1"></i>
        </div>
    </div>
    <div class="col mb-2">
        <div>
            {{ form_widget(form.special_comment) }}
            {{ form_errors(form.special_comment) }}
        </div>
    </div>
</div>

5、画面に表示する固定文言を追加

「/app/Customize/Resource/locale/Eccube/messages.ja.yaml」に画面で利用する固定文言を追加します。

admin.product.special_sort_no: スペシャル商品の並び順
admin.product.special_comment: スペシャル商品用のコメント

tooltip.admin.product.special_sort_no: スペシャル商品の並び順を指定します。
tooltip.admin.product.special_comment: スペシャル商品用のコメントを設定します。

最後に

アドオン開発において、お客様の業種・業態やお客様独自の管理法などにあわせて運用・管理できるようにするために、管理項目を増やしたり、商品情報を増やすようなことはアドオン開発では当たり前にありますので、覚えておいて損はないかと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?