EC-CUBE3機能カスタマイズ版:カテゴリ登録の一覧でドラッグして並び替えた際の不具合解消

この記事の関連ページ

■EC-CUBE3機能カスタマイズ版
インストールと同時にデザインとカスタマイズ機能が実装されるのでサイト構築作業を大幅に短縮できます。

■デモサイト
インストール後、このようなサイトが立ち上がります。

■EC-CUBE3機能カスタマイズ版の機能内容
各機能についてこのページで解説しています。

■EC-CUBE3インストールガイド

 (1)不具合の現象

カテゴリをドラッグで並び替えた際、下記箇所で「親カテゴリ」と「子カテゴリ」がバラバラになってしまいます。
・商品登録の際のカテゴリ選択
・フロントページの商品検索プルダウン

 カテゴリ登録画面で、カテゴリをドラッグして入れ替えると、右側の「全カテゴリー」も正常に移動され表示されます。
▼変更前
001
▼変更後
002
 フロントのカテゴリ表示においても、PC画面、スマホ画面ともに正常に移動されています。
003
004
 ところが、商品登録の際のカテゴリ選択と商品検索プルダウンでは子カテゴリの位置が正常ではありません。
005
006

 (2)考えられる原因

「子カテゴリ」のrankカラムの値も一緒に変更しなければいけないところが、それが出来ていないためだと思われます。
「商品登録カテゴリ選択」「検索プルダウン」の場合、rankカラムを基準に読み込んでいるので意図した表示順になりません。

(3)対処方法

今後のEC-CUBEバージョンアップで改善されるとは思いますが、差し当たり次の方法で対処します。
 カテゴリ登録画面の右側「全カテゴリー」のカテゴリツリーは正常に表示されているので、カテゴリ名の前に「カテゴリID」を表示し、それを手がかりにSQLを作成しデータベース上で直接修正するようにします。
■src/Eccube/Resource/template/admin/Product/category.twig
{% macro tree(Category, TargetId, level) %}~{% endmacro %}の間、
——————————————
{{ Category.name }} ({{ Category.children|length }})
——————————————
↓【変更】(赤字を追加)
——————————————
{{ Category.id }}:{{ Category.name }} ({{ Category.children|length }})
——————————————
 データベース上でSQLを実行して直接rankカラムの値を修正するために、SQLを次のようにして作成します。
101
「全カテゴリー」の「カテゴリID」の並び順を上から確認する。上図では、並び順は以下の通り
(ここでは親・子カテゴリ合わせて10のカテゴリがある)
——————————————
1
9
4
3
5
2
7
8
10
6
——————————————
rankは上から大きい順に、
category_idは左記の順に記述し、SQLを作成する。
——————————————
UPDATE dtb_category SET rank=10 WHERE category_id=1;
UPDATE dtb_category SET rank=9 WHERE category_id=9;
UPDATE dtb_category SET rank=8 WHERE category_id=4;
UPDATE dtb_category SET rank=7 WHERE category_id=3;
UPDATE dtb_category SET rank=6 WHERE category_id=5;
UPDATE dtb_category SET rank=5 WHERE category_id=2;
UPDATE dtb_category SET rank=4 WHERE category_id=7;
UPDATE dtb_category SET rank=3 WHERE category_id=8;
UPDATE dtb_category SET rank=2 WHERE category_id=10;
UPDATE dtb_category SET rank=1 WHERE category_id=6;
——————————————

この記事のインデックス

PostgreSQLで実行

102
103
104

MySQLで実行

105
106
107

 (4)正常に表示されているのを確認

▼商品登録の際のカテゴリ選択
108
▼商品検索プルダウン
109