自己解決できましたので報告させていただきます。
最初の投稿や2件目の投稿で誤っている事を記載してしまっていましたのでお恥ずかしい限りです。
1. src/Eccube/Form/Type/SearchProductBlockType.phpのfunction buildForm(FormBuilderInterfaceに↓を追加
$builder->add('stock_available', 'choice', array(
'label' => '在庫あり商品のみを検索',
'required' => false,
'choices' => array(
'1' => '在庫あり商品のみを検索',
),
'expanded' => true,
'multiple' => true,
'empty_value' => false,
));
2. src/Eccube/Form/Type/SearchProductType.phpのfunction buildForm(FormBuilderInterfaceに↓を追加
$builder->add('stock_available', 'choice', array(
'label' => '在庫あり商品のみを検索',
'required' => false,
'choices' => array(
'1' => '在庫あり商品のみを検索',
),
// 'expanded' => true,
'multiple' => true,
'empty_value' => false,
));
1.との違いは'expanded' => true,をコメントアウトしている点です。こちらをコメントアウトしないと、検索後に並び替えや表示件数の変更を行うと検索条件が維持されず、在庫のない商品も表示されてしまいます。
3. src/Eccube/Resource/template/default/Block/search_product.twig
のbuttonの前に↓を追加
{{ form_widget(form.stock_available) }}
これでフォームが表示されるようになりました。
4. src/Eccube/Repository/ProductRepository.php の、public function getQueryBuilderBySearchData($searchData)
の中に↓を追加
// 在庫ありのみ検索
if (!empty($searchData['stock_available']) && count($searchData['stock_available']) > 0) {
$qb
->andWhere('pc.stock_unlimited = :stock_available OR pc.stock > 0')
->setParameter('stock_available', $searchData['stock_available']);
}
です。
できてみるとなんでこんなことに何日も頭を悩ませたんだろうかと思います。umebius様、コメントありがとうございました。おかげ様でEC-CUBEの理解が更に深まりました。今後ともよろしくお願いいたします。