ありがとうございます!
早速、
https://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=18377&forum=14&post_id=79278こちらを参考にさせて頂き、
スマホ画面用のFromを生成し、対応いたしました。
src/Eccube/Form/Type/SearchProductBlockType.phpに name_sp
と category_id_sp を追加。
$builder->add('category_id_sp', 'entity', array(
'class' => 'Eccube\Entity\Category',
'property' => 'NameWithLevel',
'choices' => $Categories,
'empty_value' => '全ての商品',
'empty_data' => null,
'required' => false,
'label' => '商品カテゴリから選ぶ',
));
$builder->add('name_sp', 'search', array(
'required' => false,
'label' => '商品名を入力',
'empty_data' => null,
'attr' => array(
'maxlength' => 50,
),
));
src/Eccube/Form/Type/SearchProductType.phpにname_sp
と category_id_sp を追加。
$builder->add('category_id_sp', 'entity', array(
'class' => 'Eccube\Entity\Category',
'property' => 'NameWithLevel',
'choices' => $Categories,
'empty_value' => '全ての商品',
'empty_data' => null,
'required' => false,
'label' => '商品カテゴリから選ぶ',
));
$builder->add('name_sp', 'search', array(
'required' => false,
'label' => '商品名を入力',
'empty_data' => null,
'attr' => array(
'maxlength' => 50,
),
));
src/Eccube/Repository/ProductRepository.phpのgetQueryBuilderBySearchData()に下記を追加。
// category_sp
$categoryJoin = false;
if (!empty($searchData['category_id_sp']) && $searchData['category_id_sp']) {
$Categories = $searchData['category_id_sp']->getSelfAndDescendants();
if ($Categories) {
$qb
->innerJoin('p.ProductCategories', 'pct')
->innerJoin('pct.Category', 'c')
->andWhere($qb->expr()->in('pct.Category', ':Categories'))
->setParameter('Categories', $Categories);
$categoryJoin = true;
}
}
// name_sp
if (isset($searchData['name_sp']) && Str::isNotBlank($searchData['name_sp'])) {
$keywords = preg_split('/[\s ]+/u', $searchData['name_sp'], -1, PREG_SPLIT_NO_EMPTY);
foreach ($keywords as $index => $keyword) {
$key = sprintf('keyword%s', $index);
$qb
->andWhere(sprintf('NORMALIZE(p.name) LIKE NORMALIZE(:%s) OR NORMALIZE(p.search_word) LIKE NORMALIZE(:%s)', $key, $key))
->setParameter($key, '%' . $keyword . '%');
}
}
src/Eccube/Resource/template/default/Block/search_product.twig を両対応にさせる。
<div class="header_bottom_area">
<div id="search" class="search">
<form method="get" id="searchform" action="{{ path('product_list') }}">
<div class="drawer_block pc search_inner">
{{ form_widget(form.category_id) }}
<div class="input_search clearfix">
{{ form_widget(form.name, {'attr': { 'placeholder' : "商品名、キーワードを入力" }} ) }}
<button type="submit" class="bt_search"><svg class="cb cb-search"><use xlink:href="#cb-search" /></svg></button>
</div>
</div>
<div class="drawer_block sp search_inner">
<div class="input_search clearfix">
{{ form_widget(form.category_id_sp) }}
{{ form_widget(form.name_sp, {'attr': { 'placeholder' : "商品名、キーワードを入力" }} ) }}
<button type="submit" class="bt_search"><svg class="cb cb-search"><use xlink:href="#cb-search" /></svg></button>
</div>
</div>
<div class="extra-form">
{% for f in form.getIterator %}
{% if f.vars.name matches '[^plg*]' %}
{{ form_label(f) }}
{{ form_widget(f) }}
{{ form_errors(f) }}
{% endif %}
{% endfor %}
</div>
</form>
</div>
</div>
以上で出来ました!
※なお、cssについては省略をさせて頂きます。