前提・実現したいこと
FutureShopを使用してショップを作成しております。
htmlとcssしかわからないど素人ですが自分で調べてもうまくいかないので知識のある方に助けてほしいです。
FutureShopの商品一覧ページに商品の並び順を変える機能がデフォルトで付いているのですがリストタグで横並びに並んだようなデザインになっています。
スマホでの操作性を考えると横並びではなくプルダウンにしたいと思い、下記2パターンの方法を試しましたがうまくいきません。
①既存の機能をcssでプルダウンぽく見た目を変える
②既存のパーツは使わずにプルダウンの並び順を変える機能をいちから実装する
①に関しては、デザインだけを変えることは可能だと思いますが既存の機能を使用する場合
もともとのソースを変更することが仕様上できないので外部ファイルから無理やり変更をかける方法しかありませんのであまりスマートではないと思い②で検討しています。
発生している問題・エラーメッセージ
商品の絞り込みが仕様上、urlにパラメータを追加するだけで可能なので
selectタグでプルダウンを作り、遷移先を「url+パロメータ」という形で作りました。
プルダウンを選択するとソート後のページに遷移させることはできるのですが
遷移後のページのプルダウンを連動させることが出来ません。
該当のソースコード
html
1 <select name="select-sort" onChange="location.href=value;"> 2 <option value="{% category.url %}?sort=price_low">価格が安い順</option> 3 <option value="{% category.url %}?sort=price_high">価格が高い順</option> 4 <option value="{% category.url %}">人気順</option> 5 <option value="{% category.url %}?sort=latest">新着順</option> 6 </select>
{% category.url %}はFutureShopの独自タグでURLが自動挿入されます。
(デフォルトが人気順のため、人気順のパロメータは存在しません)
試したこと
遷移先のパロメータを取得し、一致するoptionにselectedを付与したいと思い
調べたところ、PHPかjavascriptを使用すれば近しいことはできそうなのですが
「パロメータを取得する」
「一致したoptionにselectedを付与する」
をばらばらで解決した情報しか見つかりませんでした。
それらの必要だろうところを自分なりにつなぎ合わせたりしましたが
知識が不足しておりまったくうまくいきません。
html
1 <div class="itemgroup_sort"> 2 <span class="itemgroup_sort-label">並び順</span> 3 <select name="itemsort-select" onChange="location.href=value;"> 4 <option value="{% category.url %}?sort=price_low">価格が安い順</option> 5 <option value="{% category.url %}?sort=price_high">価格が高い順</option> 6 <option value="{% category.url %}">人気順</option> 7 <option value="{% category.url %}?sort=latest">新着順</option> 8 </select> 9 </div> 10 <script> 11 var params = getParameter(); 12$("#itemsort-select").val('modalshift'); 13if(params['sort']!==""){ 14 $("#itemsort-select").val(params['sort']); 15} 16 17function getParameter(){ 18 var paramsArray = []; 19 var url = location.href; 20 parameters = url.split("#"); 21 if( parameters.length > 1 ) { 22 url = parameters[0]; 23 } 24 parameters = url.split("?"); 25 if( parameters.length > 1 ) { 26 var params = parameters[1].split("&"); 27 for ( i = 0; i < params.length; i++ ) { 28 var paramItem = params[i].split("="); 29 paramsArray[paramItem[0]] = paramItem[1]; 30 } 31 } 32 return paramsArray; 33}; 34 </script>
htmlにすべて記述する方法とjQueryを別ファイルにして読み込む方法を試しましたが
どちらでもうまくいきませんでした。
恐らく初歩の初歩でつまずいていると思うのですが、解決法をご教示いただけますと有難いです。
宜しくお願い致します。
▼▼▼追記▼▼▼
html
1<div class="itemgroup_sort"> 2<span class="itemgroup_sort-label">並び順</span> 3<select name="itemsort-select" onChange="location.href=value;" id="itemsort-select"> 4<option value="{% category.url %}?sort=price_low">価格が安い順</option> 5<option value="{% category.url %}?sort=price_high">価格が高い順</option> 6<option value="{% category.url %}">人気順</option> 7<option value="{% category.url %}?sort=latest">新着順</option> 8</select> 9</div> 10<script> 11var params = getParameter(); 12$("#itemsort-select").val('modalshift'); 13if(params['sort']!==""){ 14$("#itemsort-select").val("{% category.url %}?sort=" + params['sort']); 15} 16 17function getParameter(){ 18var paramsArray = []; 19var url = location.href; 20parameters = url.split("#"); 21if( parameters.length > 1 ) { 22url = parameters[0]; 23} 24parameters = url.split("?"); 25if( parameters.length > 1 ) { 26var params = parameters[1].split("&"); 27for ( i = 0; i < params.length; i++ ) { 28var paramItem = params[i].split("="); 29paramsArray[paramItem[0]] = paramItem[1]; 30} 31} 32return paramsArray; 33}; 34</script>
頂いた回答をもとに上記のように修正したところ、遷移先に合わせてプルダウンを変化させることができました!
ですが、「人気順」を選択したときだけプルダウンの表示が消えてしまうバグが発生しており
エラーメッセージが下記のように出ています。
Uncaught TypeError: Failed to execute 'observe' on 'IntersectionObserver': parameter 1 is not of type 'Element'.
人気順にパロメータが無いことが原因かと思うのですが
あっているのかあまり自信がありません。
▼▼▼追記2▼▼▼
「人気順」のパロメータが存在したので追加しました。人気順を選択したときはきちんと表示されるようになりましたが
通常のショップ入り口からアクセスしてくるURLが{% category.url %}なので
何の解決にもなりませんでした。
ifの条件を増やせばいいのかなと思って書いてみましたが何も変化がないです。
解決から遠ざかった感じがします。
html
1<div class="itemgroup_sort"> 2 <select name="itemsort-select" onChange="location.href=value;" id="itemsort-select"> 3 <option value="{% category.url %}?sort=price_low">価格が安い順</option> 4 <option value="{% category.url %}?sort=price_high">価格が高い順</option> 5 <option value="{% category.url %}?sort=priority">人気順</option> 6 <option value="{% category.url %}?sort=latest">新着順</option> 7 </select> 8 </div> 9<script> 10 var params = getParameter(); 11$("#itemsort-select").val('modalshift'); 12if(params['sort']!==""){ 13 $("#itemsort-select").val("{% category.url %}?sort=" + params['sort']); 14} 15else if(params['sort']!==""){ 16 $("#itemsort-select").val("{% category.url %}"); 17} 18 19function getParameter(){ 20 var paramsArray = []; 21 var url = location.href; 22 parameters = url.split("#"); 23 if( parameters.length > 1 ) { 24 url = parameters[0]; 25 } 26 parameters = url.split("?"); 27 if( parameters.length > 1 ) { 28 var params = parameters[1].split("&"); 29 for ( i = 0; i < params.length; i++ ) { 30 var paramItem = params[i].split("="); 31 paramsArray[paramItem[0]] = paramItem[1]; 32 } 33 } 34 return paramsArray; 35}; 36</script>
補足情報(FW/ツールのバージョンなど)
ツールはDreamweaverを使用してコードをかいていますが
FutureShopに反映させるのは基本的にコピペです。
コマースクリエイターには登録しているのでサーバーにファイルを追加するのは可能です。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/18 03:47
2020/12/18 04:44
2020/12/18 06:27 編集
2020/12/18 07:19
2020/12/18 08:30
2020/12/18 09:03