EC-CUBE4にメーカープラグインを入れて、商品検索機能でメーカーで絞り込みをする方法です。
メーカーIDで絞り込めるようにSearchProductTypeを拡張
メーカーIDを商品絞り込み対象にするためSearchProductTypeを以下のように拡張します。
<?php
/*
* Copyright (C) 2019 Akira Kurozumi <info@a-zumi.net>.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301 USA
*/
namespace Customize\Form\Extension;
use Eccube\Form\Type\SearchProductType;
use Symfony\Component\Form\AbstractTypeExtension;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\FormBuilderInterface;
class SearchProductTypeExtension extends AbstractTypeExtension
{
public function getExtendedType()
{
return SearchProductType::class;
}
public static function getExtendedTypes(): iterable
{
yield SearchProductType::class;
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('maker_id', HiddenType::class, []);
}
}
WhereCustomizerを使って商品検索用QueryBuilderを拡張
以下のようにWhereCustomizerを使って商品検索用QueryBuilderを拡張します。
<?php
/*
* Copyright (C) 2019 Akira Kurozumi <info@a-zumi.net>.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301 USA
*/
namespace Customize\Repository;
use Eccube\Doctrine\Query\WhereClause;
use Eccube\Doctrine\Query\WhereCustomizer;
use Eccube\Repository\QueryKey;
class MakerWhereCustomizer extends WhereCustomizer
{
/**
* カスタマイズ対象のキーを返します。
*
* @return string
*/
public function getQueryKey()
{
return QueryKey::PRODUCT_SEARCH;
}
/**
* @param array $params
* @param $queryKey
*
* @return WhereClause[]
*/
protected function createStatements($params, $queryKey)
{
if(isset($params['maker_id'])) {
return [WhereClause::eq("p.Maker", ':Maker', $params['maker_id'])];
}
return [];
}
}