バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

バグ報告 > 管理機能 > 【EC-CUBE 2.13.0】おすすめ商品管理画面を更新すると並び順(rank)が繰り上が

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
yeuchi
投稿日時: 2013/10/2 10:42
対応状況: −−−
新米
登録日: 2013/10/2
居住地:
投稿: 5
【EC-CUBE 2.13.0】おすすめ商品管理画面を更新すると並び順(rank)が繰り上が
バージョン 2.13.0
PHP 5.3.6
PostgreSQL 8.4.8
の環境で構築しておりますが、管理画面のおすすめ商品管理で、登録済みのデー
タを、保存し直したり、並べ替えたり、何らかの更新を加えると、その他の登録
済みデータの並び順(rankの値)が繰り上がり、且つrankの値に重複が発生します。

rankの値が重複したデータは、そのうちの1点のみしか管理画面に表示されなく
なります。

DBを確認しながら、登録済みデータの更新を繰り返していくと、最終的にすべて
のデータのrankの値が[1]になってしまい、管理画面では1つの商品しか表示され
なくなりました。フロント画面では全てが表示されます。

プラグインは結構入れておりますが、カスタマイズは行っていません。
検索してみましたがヒントをみつけられす困っております。

どなたかご教示頂けませんでしょうか。

よろしくお願いします。
sumida
投稿日時: 2013/10/2 11:41
対応状況: −−−
仙人
登録日: 2013/2/10
居住地: 広島県呉市ときどき瀬戸内海
投稿: 641
Re: 【EC-CUBE 2.13.0】おすすめ商品管理画面を更新すると並び順(rank)が繰り上が
追記:sumida
別件のようなので、別スレッドを立てます。
http://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=13384&forum=9&post_id=61002#forumpost61002


直接の解決ではありませんが。

今回のバージョンで、classが新規に作成されているようですが、
以前のバージョンから動作していたのでしょうかね?

動作確認していませんが、ソースを見ると、?と思った箇所です。

v2.12.5
data/Smarty/templates/admin/contents/recommend.tplに

function lfnSortItem(mode,data){
    var flag = true;
    var checkRank = '<!--{$checkRank|h}-->';
    if ( checkRank ){
        if( ! window.confirm('さきほど選択した<!--{$checkRank|h}-->位の情報は破棄されます。宜しいでしょうか')){
            flag = false;
        }
    }
    
    if ( flag ){
        document.form1["mode"].value = mode;
        document.form1["rank"].value = data;
        document.form1.submit();
    }
}

の関数が用意されています。
これだと、「form1」決め打ちなので、おすすめ商品のどれでも、移動させれば、
「おすすめ商品1」が対象となるようですけど。
v2.13.0も決め打ちではありませんが、window.confirmがあり同じでした。

ただ、何となく、これは、別件のような気が。

あと、v2.12.5では、
data/class/pages/admin/contents/LC_Page_Admin_Contents_Recommend.php
 
               $arrRet = $objQuery->select('best_id', 'dtb_best_products', 'rank = ?', array($_POST['rank'])); //おすすめidの取得

により、変更する部分を再度DBから取得しています。
今回、v2.13.0では、この処理がなくなっています。


追記:
v2.12.5では、テンプレートが、form1固定になっていて、本来のデータと異なっていた(rankだけ正しい)ため、
正しいデータを取得するために、再取得(rankを使って)していなのかな。
sumida
投稿日時: 2013/10/2 13:09
対応状況: −−−
仙人
登録日: 2013/2/10
居住地: 広島県呉市ときどき瀬戸内海
投稿: 641
Re: 【EC-CUBE 2.13.0】おすすめ商品管理画面を更新すると並び順(rank)が繰り上が
これだとどうですか。
最終確認していませんけど。
data/Smarty/templates/admin/contents/recommend.tpl
以下、削除

function lfnSortItem(mode,data,cnt){
    var flag = true;
    var checkRank = '<!--{$checkRank|h}-->';
    if ( checkRank ){
        if( ! window.confirm('さきほど選択した<!--{$checkRank|h}-->位の情報は破棄されます。宜しいでしょうか')){
            flag = false;
        }
    }

    if ( flag ){
        document["form"+cnt]["mode"].value = mode;
        document["form"+cnt]["best_id"].value = data;
        document["form"+cnt].submit();
    }
}


以下、onclick属性を修正


                <td>
                    <!--{* 移動 *}-->
                    <!--{if $smarty.section.cnt.iteration != 1 && $arrItems[$smarty.section.cnt.iteration].product_id}-->
                        <a href="?" onclick="return eccube.insertValueAndSubmit( document.form<!--{$smarty.section.cnt.iteration}-->, 'mode', 'up')">上へ</a><br />&nbsp;
                    <!--{/if}-->
                    <!--{if $smarty.section.cnt.iteration != $tpl_disp_max && $arrItems[$smarty.section.cnt.iteration].product_id}-->
                        <a href="?" onclick="return eccube.insertValueAndSubmit( document.form<!--{$smarty.section.cnt.iteration}-->, 'mode', 'down')">下へ</a>
                    <!--{/if}-->
                </td>
yeuchi
投稿日時: 2013/10/2 15:02
対応状況: −−−
新米
登録日: 2013/10/2
居住地:
投稿: 5
Re: 【EC-CUBE 2.13.0】おすすめ商品管理画面を更新すると並び順(rank)が繰り上が
ありがとうございます。
早速試してみましたが、残念ながら変化はありませんでした。

問題の起こる法則にいくつか誤りがありましたので訂正させていただきます。

●問題が起こるのは【この内容で登録する】ボタンを押したときのみで、上・下ボタンの並べ替えでは問題なし。

※並べ替えを事項すると、rank重複で隠れていたデータが出てきたりという現象が起こってるだけで、rankの重複は発生しません。

●保存したデータより後ろのrankのデータが一つづつ前に繰り上がる。
例えば、2番目のデータを更新した場合は、3番目以降のデータのrankが1つずつ繰り上がり、結果rank2が重複します。

sumida
投稿日時: 2013/10/2 16:19
対応状況: −−−
仙人
登録日: 2013/2/10
居住地: 広島県呉市ときどき瀬戸内海
投稿: 641
Re: 【EC-CUBE 2.13.0】おすすめ商品管理画面を更新すると並び順(rank)が繰り上が
使ったことのない部分なので best_id や rank の意味が、イマイチよくわかりませんが。

v2.12.5の場合
  「この内容で登録する」
  LC_Page_Admin_Contents_Recommend.php
    入力チェック
    内部関数 insertRecommendProduct 実行
        内部関数 deleteProduct 実行
          dtb_best_productsの該当rankのレコード削除
        dtb_best_productsへレコード挿入(上記のrankで)

v2.13.0の場合
  「この内容で登録する」
  LC_Page_Admin_Contents_Recommend.php
    入力チェック
    内部関数 insertRecommendProduct 実行
        内部関数 deleteProduct 実行
          関数 deleteBestProducts(SC_Helper_BestProducts.php) 実行
            // ランク付きレコードの削除
            関数 sfDeleteRankRecord(SC_Helper_DB.php) 実行
              dtb_best_productsの該当best_idのレコード削除

以下の処理が追加されています。

        // 追加レコードのランクより上のレコードを一つずらす。
        $sqlval = array();
        $where = 'rank > ?';
        if ($andwhere != '') {
            $where .= " AND $andwhere";
        }
        $arrWhereVal = array($rank);
        $arrRawSql = array(
            'rank' => '(rank - 1)',
        );
        $objQuery->update($table, $sqlval, $where, $arrWhereVal, $arrRawSql);

        $objQuery->commit();

コメントが、?なのですが。

        関数 saveBestProducts(SC_Helper_BestProducts.php) 実行
          dtb_best_productsへレコード挿入

と、ま〜こんなところです。

追記:
ランク付きレコードの削除は、数カ所で使っているようです。
ただ、これらは、「削除」として機能しています。
今回の場合、「削除」も存在していますが、
商品を一度登録したあと(「更新」)の場合も、「削除」「挿入」で実現していました。
そのため、「削除」にある「ランクをずらす」が無条件に実行されているようです。

再追記:
商品を選択直後(dtb_best_productsにまだ登録されていない状態)でも、「削除」「挿入」を行っている。
つまり、dtb_best_productsに登録・未登録関係なしに、「削除」「挿入」を行っている。

"best_id"がない場合:挿入
"best_id"がある場合:削除(上記不都合のない)・挿入又は更新
と、使い分けた方が、後々良いのでは。
sumida
投稿日時: 2013/10/2 18:05
対応状況: −−−
仙人
登録日: 2013/2/10
居住地: 広島県呉市ときどき瀬戸内海
投稿: 641
Re: 【EC-CUBE 2.13.0】おすすめ商品管理画面を更新すると並び順(rank)が繰り上が
「この内容で登録する」を使用すると、毎回、"best_id"が新しくなる仕様なので、更新ではだめなのかな〜?

「編集」で商品をかえても、"best_id"が変化しないのに、コメントの内容を登録(変更)すると、"best_id"が変化するのもへんですね。

ということで、"best_id"を変化させない仕様にすれば、
とりあえず、

data/class/pages/admin/contents/LC_Page_Admin_Contents_Recommend.php

    public function insertRecommendProduct($arrPost,$member_id, SC_Helper_BestProducts_Ex &$objRecommend)
    {
// deleted
//        // 古いおすすめ商品のデータを削除する。
//        $this->deleteProduct($arrPost, $objRecommend);
// deleted

        $sqlval = array();
// added
        $sqlval['best_id'] = $arrPost['best_id'];
// added
        $sqlval['product_id'] = $arrPost['product_id'];
        $sqlval['category_id'] = $arrPost['category_id'];
        $sqlval['rank'] = $arrPost['rank'];
        $sqlval['comment'] = $arrPost['comment'];
        $sqlval['creator_id'] = $member_id;
        $objRecommend->saveBestProducts($sqlval);
    }

でどうでしょう。

"best_id"が""(商品選択直後)
"best_id"が""以外(コメントの変更、「編集」ボタン)
saveBestProducts内で、"best_id"により、
insertとupdateを使い分けてくれます。
yeuchi
投稿日時: 2013/10/3 10:10
対応状況: −−−
新米
登録日: 2013/10/2
居住地:
投稿: 5
Re: 【EC-CUBE 2.13.0】おすすめ商品管理画面を更新すると並び順(rank)が繰り上が
ありがとうございます。

頂いたヒントを参考に試してみます。
結果が出ましたら報告させていただきます。
yeuchi
投稿日時: 2013/10/3 17:20
対応状況: 解決済
新米
登録日: 2013/10/2
居住地:
投稿: 5
Re: 【EC-CUBE 2.13.0】おすすめ商品管理画面を更新すると並び順(rank)が繰り上が
sumida様

こちらの修正を試してみたところ、無事問題が解決しました!

データを更新してもrankが繰り上がらなくなり正常な動作になりました。

おかげさまで仕組みも少し分かってきました。
いろいろと丁寧にお教えいただき本当にありがとうございました。
sumida
投稿日時: 2013/10/3 17:43
対応状況: −−−
仙人
登録日: 2013/2/10
居住地: 広島県呉市ときどき瀬戸内海
投稿: 641
Re: 【EC-CUBE 2.13.0】おすすめ商品管理画面を更新すると並び順(rank)が繰り上が
よかったですね。

一応、以前のものとの仕様の相違は、前にも書きましたが、
「この内容で登録する」をクリックして、コメントを変更した場合、

変更前:
best_idが新規(削除・挿入になっていたため)に割り振られていた。
変更後:
best_idがそのまま(更新になったため)

です。
red
投稿日時: 2013/10/11 15:43
対応状況: −−−
登録日: 2010/2/15
居住地: 東京都
投稿: 1424
Re: 【EC-CUBE 2.13.0】おすすめ商品管理画面を更新すると並び順(rank)が繰り上が
修正コミットしておきました
http://svn.ec-cube.net/open_trac/changeset/23243


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

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


 



ログイン


EC-CUBEペイメント

公式ストアEC-CUBE4系デザインテンプレート続々リリース中

統計情報

総メンバー数は66,478名です
総投稿数は98,318件です

投稿数ランキング

1
seasoft
7332
2
AMUAMU
2712
3
468
2645
4
nanasess
2103
5
umebius
1747
6
yuh
1612
7
red
1424
8
h_tanaka
1043
9
fukap
907
10
tsuji
863
11
shutta
835
12
tao_s
792
13 ramrun 789
14 karin 657
15 sumida 641
16
homan
633
17 DELIGHT 571
18
patapata
502
19
flealog
485
20 tonton 437


ネットショップの壺

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

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