参考ページ

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

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

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

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

やりたいこと

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

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

商品登録項目追加

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

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

2.src/Eccube/Entity/Product.php

[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;
}
[/php]

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

fields:に以下を追加

[php]

productsize:
type: text
nullable: true

[/php]

4.フォーム定義

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

[php]

$builder->add(‘productsize’, ‘text’, array(
‘label’ => ‘寸法’,
‘required’ => false,
));
[/php]

5.管理画面に追加

template/admin/Product/product.twig

[php]
{{ form_row(form.productsize) }}
[/php]

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

template/default/Product/detail.twig

[php]
{{ Product.productsize }}
[/php]

検索項目に追加

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

src/Eccube/Form/Type/SearchProductBlockType.php

[php]

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

[/php]

を追加。

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

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

[php]
{{ form_widget(form.productsize, {‘attr’: { ‘placeholder’ : "寸法" }} ) }}
[/php]

3.検索ロジックの追加

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

public function getQueryBuilderBySearchData($searchData)の中

[php]

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") . ‘%’);
}

[/php]

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

4.$searchDataに追加

src/Eccube/Form/Type/SearchProductType.php

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

[php]

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

[/php]

を追加。

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