6:タグIDで絞り込み
4月 10, 2021タグIDで商品一覧を絞り込めるようにする
URLにパラメーター「tag_id=1」を加えて表示を可能にする。
app/Customize/Form/Extension/ のディレクトリに SearchProductTypeExtension.php を作成
(FTPからCostomizeに移動、Form以下がなかったのでForm>Extensionのフォルダを作成)
app/Customize/Form/Extension/SearchProductTypeExtension.php の中身
___________________________
<?php
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
{
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('tag_id', HiddenType::class, []);
}
/**
* {@inheritdoc}
*/
public function getExtendedType()
{
return SearchProductType::class;
}
}
___________________________
app/Customize/Repository ディレクトリに TagIdSearchCustomizer.phpを作成
(FTPからCustomizeに移動、Repositoryがなかったのでフォルダを作成)
app/Customize/Repository/TagIdSearchCustomizer.php の中身
___________________________
<?php
namespace Customize\Repository;
use Eccube\Doctrine\Query\QueryCustomizer;
use Eccube\Repository\QueryKey;
use Doctrine\ORM\QueryBuilder;
/**
*
*/
class TagIdSearchCustomizer implements QueryCustomizer {
/**
* 検索のパラメータにtag_idを追加
*/
public function customize(QueryBuilder $builder, $params, $queryKey)
{
if (!empty($params['tag_id']) && $params['tag_id']) {
$builder->innerJoin('p.ProductTag', 'pt');
$builder->andWhere('pt = :tag_id');
$builder->setParameter('tag_id', $params['tag_id']);
}
}
public static function getExtendedTypes(): iterable
{
return [EntryType::class];
}
}
___________________________
上記2つのファイルを設置すればタグIDでのパラメータで絞り込みが可能になりました。
https://ドメイン名/ec/products/list?&tag_id=3
にアクセス、デフォルトの「限定品」のタグの商品のみが表示されました。
参考リンク:
参考リンク:
参考リンク:
0 コメント