バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

バグ報告 > 管理機能 > チケット#2389「未登録のおすすめ商品の削除を行うと全商品が削除されたような表示となる」について

管理機能

新規スレッドを追加する

フラット表示 前のトピック | 次のトピック
投稿者 スレッド
sumida
投稿日時: 2013/10/13 22:17
対応状況: −−−
仙人
登録日: 2013/2/10
居住地: 広島県呉市ときどき瀬戸内海
投稿: 641
チケット#2389「未登録のおすすめ商品の削除を行うと全商品が削除されたような表示となる」について
直接の原因:
・「商品を選択する」で商品を選ぶ。
この段階で、HTML上
  おすすめ商品ID:なし
  商品ID:あり
  カテゴリID:0
  ランク:5
  コメント:なし
となっている。
また、DBには、登録されていない状態にある。

・「削除」を実行する。(DBに未登録のおすすめ商品を削除)
data/class/pages/admin/contents/LC_Page_Admin_Contents_Recommend.php

    public function lfInitParam(&$objFormParam)
    {
        $objFormParam->addParam('おすすめ商品ID', 'best_id', INT_LEN, 'n', array('NUM_CHECK', 'MAX_LENGTH_CHECK'));
        $objFormParam->addParam('商品ID', 'product_id', INT_LEN, 'n', array('EXIST_CHECK', 'NUM_CHECK', 'MAX_LENGTH_CHECK'));
        $objFormParam->addParam('カテゴリID', 'category_id', INT_LEN, 'n', array('EXIST_CHECK', 'NUM_CHECK', 'MAX_LENGTH_CHECK'));
        $objFormParam->addParam('ランク', 'rank', INT_LEN, 'n', array('EXIST_CHECK', 'NUM_CHECK', 'MAX_LENGTH_CHECK'));
        $objFormParam->addParam('コメント', 'comment', LTEXT_LEN, 'KVa', array('EXIST_CHECK', 'MAX_LENGTH_CHECK'));
    }

になっており、この段階で、商品ID,コメントに対し、'EXIST_CHECK'でエラーになっている。

            case 'delete': // 商品を削除する。
                $this->arrErr = $this->lfCheckError($objFormParam);
                if (SC_Utils_Ex::isBlank($this->arrErr)) {
                    $this->deleteProduct($arrPost, $objRecommend);
                    $arrItems = $this->getRecommendProducts($objRecommend);
                }
                $this->tpl_onload = "window.alert('削除しました');";
                break;

この lfCheckError でエラーになっているにもかかわらず、「削除しました」となっている。
また、$arrItemsの読み直しが行われない。
そのため、他のおすすめ商品も表示されていないと思われる。

もし、lfCheckError のエラー条件を緩和し、回避させたとしても、
deleteProduct で、'best_id' がない(DBに未登録)場合、DBにアクセスしている。

    public function deleteProduct($arrPost, SC_Helper_BestProducts_Ex &$objRecommend)
    {
        if ($arrPost['best_id']) {
            $target = $arrPost['best_id'];
        } else {
            $recommend = $objRecommend->getByRank($arrPost['rank']);
            $target = $recommend['best_id'];
        }
        $objRecommend->deleteBestProducts($target);
    }

そのため、lfCheckError を実行しないようにする必要がある。

修正案
data/class/pages/admin/contents/LC_Page_Admin_Contents_Recommend.php

            case 'delete': // 商品を削除する。
// added
        if ($arrPost['best_id']) {
// added
                $this->arrErr = $this->lfCheckError($objFormParam);
                if (SC_Utils_Ex::isBlank($this->arrErr)) {
                    $this->deleteProduct($arrPost, $objRecommend);
                    $arrItems = $this->getRecommendProducts($objRecommend);
// added
                    $this->tpl_onload = "window.alert('削除しました');";
// added
                }
/* deleted
                $this->tpl_onload = "window.alert('削除しました');";
deleted */
// added
        } else {
            $arrItems = $this->getRecommendProducts($objRecommend);
            $this->tpl_onload = "window.alert('削除しました');";
        }
// added
                break;


さらに、並び替えの「上へ」「下へ」も、DBにアクセスしているので、
使用できないようにする必要がある。
(product_idは、存在するので、best_idで判断させる。)
data/Smarty/templates/admin/contents/recommend.tpl

                <td>
                    <!--{* 移動 *}-->
<!--{* changed
                    <!--{if $smarty.section.cnt.iteration != 1 && $arrItems[$smarty.section.cnt.iteration].product_id}-->
changed *}-->
                    <!--{if $smarty.section.cnt.iteration != 1 && $arrItems[$smarty.section.cnt.iteration].best_id}-->
<!-- {* changed *}-->
.
.
                    <!--{/if}-->
<!--{* changed
                    <!--{if $smarty.section.cnt.iteration != $tpl_disp_max && $arrItems[$smarty.section.cnt.iteration].product_id}-->
changed *}-->
                    <!--{if $smarty.section.cnt.iteration != $tpl_disp_max && $arrItems[$smarty.section.cnt.iteration].best_id}-->
<!-- {* changed *}-->
.
.


再検討事項として、
「商品を選択する」実行直後の場合は、「この内容で登録する」
既存のおすすめ商品の場合は、「この内容で登録する」という表現で良いのか否か。

追記:
「上へ」「下へ」について、動作する仕様として確定していない。
(例:おすすめ商品の1、2に登録していると仮定する)

(1)登録したおすすめ商品群の最後のおすすめ商品にある「下へ」を操作しても何も変化しない。
(例:おすすめ商品2の「下へ」を操作)

(2)「商品を選択する」直後に、「上へ」「下へ」を操作しても何も変化しない。
(例:おすすめ商品3で「商品を選択する」直後に、「下へ」を操作)

(3)おすすめ商品が飛び番号になっているところで、「商品を選択する」直後に、「下へ」を操作すると、画面からなくなる。
(例:おすすめ商品4を登録(この時点で、おすすめ商品の1、2、4が登録されている)し、おすすめ商品3で「商品を選択する」直後に、「下へ」を操作)
フラット表示 前のトピック | 次のトピック


題名 投稿者 日時
 » チケット#2389「未登録のおすすめ商品の削除を行うと全商品が削除されたような表示となる」について sumida 2013/10/13 22:17
     管理画面:おすすめ商品画面の仕様について sumida 2013/10/14 8:42
     Re: チケット#2389「未登録のおすすめ商品の削除を行うと全商品が削除されたような表示となる」について sumida 2014/1/2 10:35
       Re: チケット#2389「未登録のおすすめ商品の削除を行うと全商品が削除されたような表示となる」について sumida 2014/1/6 21:49
         Re: チケット#2389「未登録のおすすめ商品の削除を行うと全商品が削除されたような表示となる」について nanasess 2014/1/7 9:32
           Re: チケット#2389「未登録のおすすめ商品の削除を行うと全商品が削除されたような表示となる」について sumida 2014/1/7 21:17
             Re: チケット#2389「未登録のおすすめ商品の削除を行うと全商品が削除されたような表示となる」について sumida 2014/1/13 21:16

 



ログイン


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

統計情報

総メンバー数は88,281名です
総投稿数は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.