バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > 管理機能 > 商品管理>商品登録(商品規格)画面のソートについて

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
viva_n
投稿日時: 2014/4/9 18:49
対応状況: −−−
新米
登録日: 2014/4/9
居住地:
投稿: 4
商品管理>商品登録(商品規格)画面のソートについて
商品管理>商品登録(商品規格)画面というのは、商品マスターから規格へ進んだページのことです。

現在規格が非常に多い為、管理が大変で困っております。

そこで、jQueryを使用してチェックの入っていない行に関して表示・非表示の切替を試しましたが、行数が多すぎて実用出来るレベルの動きではなかったです。

そこで、チェック済み(選択済み)の規格については、2回目以降開く際に、上に固まって表示されてくれると管理が楽になると思い、SQL部分でソートを掛けてみましたが、その以降の複雑な処理で並びが戻ってしまいます。

何か方法は無いものでしょうか・・・。

EC-CUBE 2.13.1
snitta
投稿日時: 2014/4/10 0:02
対応状況: −−−
一人前
登録日: 2013/10/3
居住地: 島根県
投稿: 100
Re: 商品管理>商品登録(商品規格)画面のソートについて
登録済みの規格を先頭に並び替えるパッチを作成いたしました。
こんな感じでいかがでしょうか?
※テストはあまりしてないので参考の範囲でお願いいたします。

https://gist.github.com/zenith6/10280243
Index: data/class/pages/admin/products/LC_Page_Admin_Products_ProductClass.php
===================================================================
--- data/class/pages/admin/products/LC_Page_Admin_Products_ProductClass.php	(リビジョン 23289)
+++ data/class/pages/admin/products/LC_Page_Admin_Products_ProductClass.php	(作業コピー)
@@ -512,6 +512,11 @@
             }
         }
 
+        // 登録済みの規格を先頭に並べる。
+        $del_flags = array_map(function ($class) { return (int)$class['del_flg']; }, $arrMergeProductsClass);
+        $indexes = array_keys($arrMergeProductsClass);
+        array_multisort($del_flags, SORT_NUMERIC, SORT_ASC, $indexes, SORT_NUMERIC, SORT_ASC, $arrMergeProductsClass);
+
         // 登録済みのデータで上書き
         $objFormParam->setParam(SC_Utils_Ex::sfSwapArray($arrMergeProductsClass));



引用:
そこで、jQueryを使用してチェックの入っていない行に関して表示・非表示の切替を試しましたが、行数が多すぎて実用出来るレベルの動きではなかったです。


どのようなコードを試されたか気になります。
もし差し障りが無ければ教えて頂けたら嬉しいです。


----------------
Seiji Nitta
zenith6@gmail.com
https://github.com/zenith6/

viva_n
投稿日時: 2014/4/10 15:51
対応状況: 解決済
新米
登録日: 2014/4/9
居住地:
投稿: 4
Re: 商品管理>商品登録(商品規格)画面のソートについて
snitta 様

貴重な時間をお使いいただき、コードまで書いてくださいましてありがとうございます!

コードを見て、同じところを触っていることから間違いではなかったのか!と思った瞬間・・・プラグインの事が頭をよぎり、それでソートが有効かされていなかったようです。

本当に初歩的な確認ミスで申し訳ございません。

しかし、snitta様に書いて頂いたコードが、元の並びを維持しながら選択された規格が上に来るようにして頂いていたので、大変感激いたしました。
ありがとうございました!
これでかなり管理が楽になると思います。

引用:

どのようなコードを試されたか気になります。
もし差し障りが無ければ教えて頂けたら嬉しいです。


簡単にdel_flgをソートしておりました。
usort($arrMergeProductsClass, function($a, $b) {
return $a['del_flg'] > $b['del_flg'];
});

※追記:初めの投稿で”SQL文で”と書いたところは、SC_Products.php 427行目のところのSQLでした。ただ、ここは選択データだけですよね。。
snitta
投稿日時: 2014/4/10 17:07
対応状況: −−−
一人前
登録日: 2013/10/3
居住地: 島根県
投稿: 100
Re: 商品管理>商品登録(商品規格)画面のソートについて
> プラグインとの干渉

フックで書き換えられてると分かりませんよねw
ともあれ解決なされたようで何よりです。


引用:
簡単にdel_flgをソートしておりました。
usort($arrMergeProductsClass, function($a, $b) {
return $a['del_flg'] > $b['del_flg'];
});

※追記:初めの投稿で”SQL文で”と書いたところは、SC_Products.php 427行目のところのSQLでした。ただ、ここは選択データだけですよね。。


舌足らずですみません!
jQuery での表示非表示切り替えはどのようにされたかを教えて欲しいです。


----------------
Seiji Nitta
zenith6@gmail.com
https://github.com/zenith6/

viva_n
投稿日時: 2014/4/11 17:44
対応状況: −−−
新米
登録日: 2014/4/9
居住地:
投稿: 4
Re: 商品管理>商品登録(商品規格)画面のソートについて
jQueryでしたか!
両方書いて置けばよかったですね。
すいません。
お恥ずかしいですが、以下のような簡単なものです。
実用レベルであれば、選択した際にclass(下のソースではhide_tr)の追記をしてあげれば登録をしなくとも表示・非表示ができるなと思っていたのですが、、、
コードを工夫すればレスポンス良くできるものなんでしょうか。
まだまだ勉強が足りません><;

/data/Smarty/templates/admin/products/product_class.tpl

[179行目付近]
<div class="btn"><a class="btn-normal" href="java script:;" id="copy_from_first"><span>一行目のデータをコピーする</span></a></div>
<label><input id="check" type="checkbox" onclick="$('.hide_tr').toggle(0);"> 選択のみ表示</label> ←追加行

[211行目付近]
<!--{section name=cnt loop=$arrForm.total.value}-->
    <!--{assign var=index value=$smarty.section.cnt.index}-->

    <!--{assign var=key value="check"}--> ←追加行
    <tr class="<!--{if $arrForm[$key].value[$index] != 1}-->hide_tr<!--{/if}-->"> ←更新行

snitta
投稿日時: 2014/4/11 19:27
対応状況: −−−
一人前
登録日: 2013/10/3
居住地: 島根県
投稿: 100
Re: 商品管理>商品登録(商品規格)画面のソートについて
ご返事ありがとうございます、大変参考になります!
専用のクラスを割り当てても遅いとなると、
ブラウザの処理速度が足かせになっているように思えますね。

テーブルの各行を操作するのは諦めて、document.styleSheets に定義されている .hide_tr のルールの方を書き換えれば速くなるかも…。


----------------
Seiji Nitta
zenith6@gmail.com
https://github.com/zenith6/

viva_n
投稿日時: 2014/4/12 0:05
対応状況: −−−
新米
登録日: 2014/4/9
居住地:
投稿: 4
Re: 商品管理>商品登録(商品規格)画面のソートについて
こちらこそ今回は大変勉強になっております!

引用:

テーブルの各行を操作するのは諦めて、document.styleSheets に定義されている .hide_tr のルールの方を書き換えれば速くなるかも…。


おっしゃる通りです><;
こちらの書き方で400行あるテーブルにも問題なく動いてくれました!

<label><input type="radio" name="r" onclick="$('.hide_tr').css('display', '');" checked> すべて表示</label>
<label><input type="radio" name="r" onclick="$('.hide_tr').css('display', 'none');"> 選択のみ表示</label>


目的達成に向けていろんな角度から考えて行かないとダメですね。
本当にありがとうございました!


追記:
せっかくなので、追加選択したものも、上の表示コントロールに対応できるようにしておきました。

/data/Smarty/templates/admin/products/product_class.tpl

[228行目付近]
<input type="checkbox" name="<!--{$key}-->[<!--{$index}-->]" value="1" <!--{if $arrForm[$key].value[$index] == 1}-->checked="checked"<!--{/if}--> id="<!--{$key}-->_<!--{$index}-->" onclick="$(this).closest('tr').toggleClass('hide_tr');" />

残念ながら全登録チェックには対応できておりませんが、規格の件数が多い場合に役に立つかと思います。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

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

投稿数ランキング

1
seasoft
7365
2
468
3217
3
AMUAMU
2712
4
nanasess
2303
5
umebius
2085
6
yuh
1818
7
h_tanaka
1610
8
red
1567
9
mcontact
1240
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
796
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.