EC-CUBE3に商品登録項目追加。検索フォームにも追加。

参考ページ

「商品情報に項目を追加する方法」

「EC-CUBE3で既存のクエリーに条件を追加する方法」

「【ECCUBE 3】検索対象を増やす。」

受注マスターに検索条件を追加する方法(商品コードなど)

やりたいこと

「商品サイズ(productsize)」を商品登録項目で追加と、検索項目に追加。
上記の参考ページを参考にしました。

「商品サイズ(productsize)」を商品登録項目で追加と、検索項目に追加。
上記の参考ページを参考にしました。

商品登録項目追加

1.テーブルへのカラム追加

「dtb_product」テーブルに「productsize」という名前のカラムを追加

2.src/Eccube/Entity/Product.php

    /**
     * @var string
     */
    private $productsize;

    /**
     * @return string
     */
    public function getProductSize()
    {
        return $this->productsize;
    }

    /**
     * @param string $size
     * @return \Eccube\Entity\Product
     */
    public function setProductSize($productsize)
    {
        $this->productsize = $productsize;
        return $this;
    }

3.src/Eccube/Resource/doctrine/Eccube.Entity.Product.dcm.yml

fields:に以下を追加


        productsize: 
            type: text
            nullable: true
            

4.フォーム定義

src/Eccube/Form/Type/Admin/ProductType.phpの「public function buildForm(FormBuilderInterface $builder, array $options)」に


        $builder->add('productsize', 'text', array(
                'label' => '寸法',
                'required' => false,
            ));

5.管理画面に追加

template/admin/Product/product.twig

{{ form_row(form.productsize) }}

6.商品詳細にアウトプット

template/default/Product/detail.twig

{{ Product.productsize }}

検索項目に追加

1.ブロックタイプに追加

src/Eccube/Form/Type/SearchProductBlockType.php


        $builder->add('productsize', 'text', array(
            'required' => false,
            'empty_data' => null,
            'attr' => array(
                'maxlength' => 50,
            ),
        ));
        

を追加。

2.ブロックタイプのフォームに検索項目を増やす

app/template/test/Block/search_product.twigに追加

{{ form_widget(form.productsize, {'attr': { 'placeholder' : "寸法" }} ) }}

3.検索ロジックの追加

src/Eccube/Repository/ProductRepository.phpに追加

public function getQueryBuilderBySearchData($searchData)の中


        if (isset($searchData['productsize']) && Str::isNotBlank($searchData['productsize'])) {
            $qb->andWhere('LOWER(p.productsize) LIKE :productsize')
                ->setParameter('productsize', '%' . mb_convert_kana($searchData['productsize'], "nr", "utf-8") . '%');
        }

上記の方法で、一応、英数字は半角全角どちらでもヒットするようになっています。

4.$searchDataに追加

src/Eccube/Form/Type/SearchProductType.php

の「public function buildForm(FormBuilderInterface $builder, array $options)」に


        $builder->add('productsize', 'text', array(
            'required' => false,
            'empty_data' => null,
            'attr' => array(
                'maxlength' => 50,
            ),
        ));
        

を追加。

とりあえず、「テキスト」はできそう。「checkbox」とか「select」とかは研究しないといけません。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です