バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > フロント機能 > 2.12.0にて規格2のdisabled 有無切替

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
ゲスト
投稿日時: 2016/12/1 17:52
対応状況: −−−
2.12.0にて規格2のdisabled 有無切替
別サイトで、
『「規格1」が「選択してくだい」の時、「規格2」をdisabledにしたい。』
との問いが有り、
規格、javascriptを避けて来た身として、そろそろ、折り合いを付けないとと思い、下記までは探ったのですが、ここで、行き詰まりました。
そもそも、
「それは無理」なのか、何か手が有るのか、、、
アドバイス頂けると幸いです。

今更ながらの、ECCUBE2.12.0で、です。

===記===

javascriptは、敢えて避けてきたので、『そんな訳はないよなぁ』と思いつつも、
味を「選択してください」にすると、大きさが「選択してください」に戻ることから、
味の変更でfnSetClassCategories()が動くもの、、、と勝手に思い込んでいたのが、大きな間違い。>自分
やはり、初回表示時とsubmit「かごに入れる」でないと、fnSetClassCategories()は動かないですよね。

味の変更で、大きさが「選択してください」に戻るのは、
規格1の
「<!--{html_options options=$arrClassCat1 selected=$arrForm.classcategory_id1.value}-->」
のおかげ?

多分、以下のjavascriptの動作が、味の変更で動作すれば、ご希望に添えると思うのですが、それは、無理。
(「かごに入れる」を押せば、それなりな動きはするけれど。)
<detail.tpl>
<script type="text/javascript">
//<![CDATA[
    // 規格2に選択肢を割り当てる。
    function fnSetClassCategories(form, classcat_id2_selected) {
        var $form = $(form);
        var product_id = $form.find('input[name=product_id]').val();
        var elem = document.getElementById("select2");                                    // ★ここから
        if ($form.find('select[name=classcategory_id1]').val() == "__unselected") {
             elem.innerHTML = "<select disabled name='classcategory_id2'>";
        } else {
             elem.innerHTML = "<select name='classcategory_id2'>";
        }                                                                                 // ★ここまで
        var $sele1 = $form.find('select[name=classcategory_id1]');
        var $sele2 = $form.find('select[name=classcategory_id2]');
        setClassCategories($form, product_id, $sele1, $sele2, classcat_id2_selected);
    }
    $(document).ready(function() {
        $('a.expansion').facebox({
            loadingImage : '<!--{$smarty.const.ROOT_URLPATH}-->js/jquery.facebox/loading.gif',
            closeImage   : '<!--{$smarty.const.ROOT_URLPATH}-->js/jquery.facebox/closelabel.png'
        });
    });
//]]>

</script>
                        <!--▼規格2-->
                        <ul class="clearfix">
                            <li><!--{$tpl_class_name2|h}-->:</li>
                            <li>
                                <p id="select2">select2</p>                               // ★ここ
                                </select>
                                <!--{if $arrErr.classcategory_id2 != ""}-->
                                <br /><span class="attention">※ <!--{$tpl_class_name2}-->を入力して下さい。</span>
                                <!--{/if}-->
                            </li>
                        </ul>
                        <!--▲規格2-->


javascriptを熟知していれば、fnSetClassCategories()の変更と
↓の「lfMakeSelect()」が呼ばれるまでのお膳立てとの連携で、実現できるものなのか?
<LC_Page_Products_Detail.php>
    /* 規格選択セレクトボックスの作成 */
    function lfMakeSelect() {
        return 'fnSetClassCategories('
            . 'document.form1, '
            . SC_Utils_Ex::jsonEncode($this->objFormParam->getValue('classcategory_id2'))
            . '); ';
    }

残念ながら、今回は、小生の知識では、ご希望に添えませんでした。
red
投稿日時: 2016/12/1 19:21
対応状況: −−−
登録日: 2010/2/15
居住地: 東京都
投稿: 1569
Re: 2.12.0にて規格2のdisabled 有無切替
onchangeでどうにかならない感じなんですかね?


----------------
EC-CUBEのカスタマイズ、トラブル解決承ります
お気軽にお問い合わせ下さい
https://www.ec-cube.net/integrate/partner/partner.php?partner_id=690

468
投稿日時: 2016/12/2 11:55
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 3217
Re: 2.12.0にて規格2のdisabled 有無切替
2.12.6のソースで確認したので、多少異なるかもしれませんが、
予想されている通り、味(規格1)の変更時にfnSetClassCategories()は動作しています。

味(規格1)のchangeイベントとfnSetClassCategories()の紐づけは
/html/js/products.jsで定義されていると思います。
$('select[name=classcategory_id1]')
          .change(function() {
                      var $form = $(this).parents('form');
                      var product_id = $form.find('input[name=product_id]').val();
                      var $sele1 = $(this);
                      var $sele2 = $form.find('select[name=classcategory_id2]');
                      
                      // 規格1のみの場合
                      if (!$sele2.length) {
                          checkStock($form, product_id, $sele1.val(), '0');
                      // 規格2ありの場合
                      } else {
                          setClassCategories($form, product_id, $sele1, $sele2);
                      }
                  });

なので、ご要望の挙動はfnSetClassCategories()の
最後に$sele1の選択値を判定して、
$sele2のdisabled変更する処理を追加する事で実現できそうですが如何でしょうか?
ゲスト
投稿日時: 2016/12/5 11:30
対応状況: −−−
Re: 2.12.0にて規格2のdisabled 有無切替
>$sele2のdisabled変更する処理を追加する
は解決していませんが、下記の変更で、それなりに動いた様です。


「大きさ」が「選択してください」の時の「かごに入れる」時の規格2の背景色「桃色」動作の詰が甘いですが、こんな感じかな、、、と。
(桃色の件はproducts.jsでは、<!--{$arrErr.classcategory_id1|sfGetErrorColor}-->が機能しないからと思います。)

</eccube-2.12.0/data/Smarty/templates/default/products/detail.tpl>

//<![CDATA[
    // 規格2に選択肢を割り当てる。
    function fnSetClassCategories(form, classcat_id2_selected) {
        var $form = $(form);
        var product_id = $form.find('input[name=product_id]').val();
        // ここから
        var elem = document.getElementById("select2");
        if ($form.find('select[name=classcategory_id1]').val() == "__unselected") {
             elem.innerHTML = "<select disabled name='classcategory_id2' style='<!--{$arrErr.classcategory_id1|sfGetErrorColor}-->'>";
        } else {
             elem.innerHTML = "<select name='classcategory_id2'style='<!--{$arrErr.classcategory_id1|sfGetErrorColor}-->'>";
        }
        // ここまで
        var $sele1 = $form.find('select[name=classcategory_id1]');
        var $sele2 = $form.find('select[name=classcategory_id2]');
        setClassCategories($form, product_id, $sele1, $sele2, classcat_id2_selected);
    }
    $(document).ready(function() {
        $('a.expansion').facebox({
            loadingImage : '<!--{$smarty.const.ROOT_URLPATH}-->js/jquery.facebox/loading.gif',
            closeImage   : '<!--{$smarty.const.ROOT_URLPATH}-->js/jquery.facebox/closelabel.png'
        });
    });
//]]>


                        <!--▼規格2-->
                        <ul class="clearfix">
                            <li><!--{$tpl_class_name2|h}-->:</li>
                            <li>
                                <!-- ↓ここ -->
                                <p id="select2"></p>
                                </select>
                                <!--{if $arrErr.classcategory_id2 != ""}-->
                                <br /><span class="attention">※ <!--{$tpl_class_name2}-->を入力して下さい。</span>

                                <!--{/if}-->
                            </li>
                        </ul>
                        <!--▲規格2-->


</eccube-2.12.0/html/js/products.js>

      // 規格1選択時
      $('select[name=classcategory_id1]')
          .change(function() {
                      var $form = $(this).parents('form');
                      var product_id = $form.find('input[name=product_id]').val();
                      var $sele1 = $(this);
                      // ここから
                      var elem = document.getElementById("select2");
                      elem.innerHTML = "<select name='classcategory_id2'>";
                      if ($sele1.val() == "__unselected") {
                          elem.innerHTML = "<select disabled name='classcategory_id2' style='<!--{$arrErr.classcategory_id1|sfGetErrorColor}-->'>";
                      }
                      // ここまで
                      var $sele2 = $form.find('select[name=classcategory_id2]');
                      setClassCategories($form, product_id, $sele1, $sele2);
                  });
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

総メンバー数は88,646名です
総投稿数は109,891件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2311
5
umebius
2085
6
yuh
1819
7
h_tanaka
1635
8
red
1569
9
mcontact
1265
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.