バージョン選択

フォーラム

メニュー

オンライン状況

52 人のユーザが現在オンラインです。 (39 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 52
もっと...

サイト内検索

質問 > フロント機能 > 商品在庫あり チェックボックス

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
chro
投稿日時: 2022/2/2 16:53
対応状況: 開発中
新米
登録日: 2017/6/10
居住地:
投稿: 10
商品在庫あり チェックボックス
▼テンプレート
[EC-CUBE]4.0.4
下記スレッドを参照に4系で「商品在庫あり」チェックボックスを設置しようとしていますが、尽くエラーになり困り果てています。

https://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=19843&forum=10&post_id=84975#forumpost84975

umebius
投稿日時: 2022/2/4 16:10
対応状況: −−−
登録日: 2016/7/22
居住地:
投稿: 2085
Re: 商品在庫あり チェックボックス
3系と4系ではファイル構成はあまり変わりませんが、フォームの書き方が変わっています。
例えば、
3系: $builder->add('stock_available', 'choice', array(
の部分が
4系: $builder->add('stock_available', \Symfony\Component\Form\Extension\Core\Type\ChoiceType::class, array(
など。

4系のカスタマイズ方法も参考にされる方がいいかもしれませんね。
https://doc4.ec-cube.net/


----------------
EC-CUBEカスタマイズ・高速化・脆弱性対策・SEO ご相談ください。

2系・3系から4系へのバージョンアップ実績豊富

chro
投稿日時: 2022/2/5 14:27
対応状況: −−−
新米
登録日: 2017/6/10
居住地:
投稿: 10
Re: 商品在庫あり チェックボックス
umebius様。コメントありがとうございます。
3系のカスタムに習って
1. src/Eccube/Form/Type/SearchProductBlockType.phpのfunction buildForm(FormBuilderInterfaceに↓を追加
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
$builder->add('stock_available', ChoiceType::class, [
        	'required' => false,
		    'choices'  => [
		    '在庫あり' => '1',
		    ],
		    'expanded' => true,
		    'multiple' => true,
		]);

2. src/Eccube/Form/Type/SearchProductType.phpのfunction buildForm(FormBuilderInterfaceに↓を追加
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
$builder->add('stock_available', ChoiceType::class, [
        	'required' => false,
		    'choices'  => [
		    '在庫あり' => '1',
		    ],
		    //'expanded' => true,
		    'multiple' => true,
		]);

と追加し、search_product.twigやProductRepository.php はそのまま引用させて頂きました。
動作はしたものの、表示件数や並べ替えをすると在庫なし商品も表示されている状態です。



chro
投稿日時: 2022/2/12 17:13
対応状況: −−−
新米
登録日: 2017/6/10
居住地:
投稿: 10
Re: 商品在庫あり チェックボックス
解決しましたので書き残しておきます。

function buildFormを編集しても変異したページのform1は<input type="hidden" id="stock_available" name="stock_available[]" value="Array">となり、並べ替えすると在庫なしも表示されてしまう状態だったので、javascriptで対応しました。
もっとスマートな方法があったとは思います。


app/template/original/Product/list.twigを編集
送信する値を指定し、チェックボックスの値を引き継ぐためにセッションを利用しました。

$(document).ready( function(){
            var d = sessionStorage.getItem('hoge ');
            if (d == 'on'){
                let ava = document.getElementById('stock_available_0');
                ava.checked = true;
                sessionStorage.setItem('hoge ', '');
            }
        });
        
        
        // 在庫ありチェックを変更
            $('#stock_available_0').change(function() {
                var check = document.getElementById("stock_available_0");
                if (check.checked){
                    $('#stock_available').val(1);
                    var hoge = $(this).val();
                    sessionStorage.setItem('hoge ', hoge );
                } else{sessionStorage.setItem('hoge ', ''); }
                $('#pageno').val(1);
                $("#form1").submit();
            });

        $(function() {
            // 表示件数を変更
            $('.disp-number').change(function() {
                var dispNumber = $(this).val();
                $('#disp_number').val(dispNumber);
                var check = document.getElementById("stock_available_0");
                if (check.checked){
                    $('#stock_available').val(1);
                    var hoge  = 'on';
                    sessionStorage.setItem('hoge ', hoge );
                } else{sessionStorage.setItem('hoge ', ''); }
                $('#pageno').val(1);
                $("#form1").submit();
            });            // 並び順を変更
            $('.order-by').change(function() {
                var orderBy = $(this).val();
                $('#orderby').val(orderBy);
                var check = document.getElementById("stock_available_0");
                if (check.checked){
                    $('#stock_available').val(1);
                    var hoge  = 'on';
                    sessionStorage.setItem('hoge ', hoge );
                } else{sessionStorage.setItem('hoge ', ''); }
                $('#pageno').val(1);
                $("#form1").submit();
            });


とし、新着を選んだ時のためにProductRepository.phpの「在庫切れ商品非表示の設定が有効時対応」部分を設定関係なく処理するように変更。


スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は89,099名です
総投稿数は110,035件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2314
5
umebius
2085
6
yuh
1819
7
h_tanaka
1649
8
red
1570
9
mcontact
1297
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.