バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

バグ報告 > 管理機能 > 商品並び替え 正常に機能しない

管理機能

新規スレッドを追加する

フラット表示 前のトピック | 次のトピック
投稿者 スレッド
seasoft
投稿日時: 2008/9/1 21:27
対応状況: −−−
登録日: 2008/6/4
居住地:
投稿: 7365
Re: 商品並び替え 正常に機能しない
大体、どうしたら良さげか、頭の中には設計があるんですけどねぇ…
EC-CUBE のソースを最初に読んだ頃に気になって、直そうかと思ったのですが、ちょっと面倒で途中で止めちゃいました。

自分は今のヘンテコ仕様で足りているんですよね

引用:
これはバグとなるのでしょうか?

現在、テスト環境を使えないので実際に試せないのですが、PostgreSQL の構文的にはNGな気がします。MySQL は分かりません。

ちなみに「登録した商品が1カテゴリだけの登録となってしまいます。」が若干気になるのですが、本件とは別の不具合ですか?


----------------
Seasoft
こちらでの投稿は、アイディア程度に留めさせていただいております。
個別案件の作業は有償で承っております。お気軽にご相談ください。

ゲスト
投稿日時: 2008/9/1 23:33
対応状況: −−−
Re: 商品並び替え 正常に機能しない
仙人さん、早速ご返答ありがとうございます。当方環境はmysqlでの検証です。ご質問の「1カテゴリのみ登録される」という件ですが、例えば、AカテゴリとBカテゴリがあったとして、商品登録で最初にAカテゴリに登録したとして、次にBカテゴリにも同じ商品を登録した場合に商品登録のデータとしてはAB両方に登録されているのですが、実際にはAカテゴリからは消えて、Bカテゴリのみに反映されるという事象です。カテゴリ階層が浅い場合(例えば1階層目の複数カテゴリに同一商品を登録する)場合は問題ないのですが、カテゴリの階層がこちらの環境のように4階層くらいになると複数カテゴリに登録されないと言った状態です。(↑わかりづらいご返答で申し訳ありません。)引き続きよろしくお願い致します。
seasoft
投稿日時: 2008/9/1 23:42
対応状況: −−−
登録日: 2008/6/4
居住地:
投稿: 7365
Re: 商品並び替え 正常に機能しない
コミュニティ版 × PostgreSQL では問題なかったような気はしたのですが(3階層くらいでのテストだったと思います)。試験できる環境がありましたら、最新のコミュニティ版で再現するか報告いただけると、追跡できるかもしれません。


----------------
Seasoft
こちらでの投稿は、アイディア程度に留めさせていただいております。
個別案件の作業は有償で承っております。お気軽にご相談ください。

para4
投稿日時: 2008/9/2 10:59
対応状況: −−−
常連
登録日: 2008/6/30
居住地:
投稿: 42
Re: 商品並び替え 正常に機能しない
引用:

seasoftさんは書きました:
引用:

$objQuery->setgroupby;

$objQuery->setgroupby;
かな。

けど、$col に列挙されているものの大半が setgroupby() されていませんが、大丈夫ですか?

当環境では、(product_id)も文字列として認識されてしまったので気が付きませんでした。('product_id')が良いですね。

ご指摘通り、表示カラムをsetgroupby()に入れるべきだと思いますが、当環境では、product_idと max(category_rank)一意になっているためか意図通り(?)に動いています。
でも、直したほうが良いですね。

環境---------------------------------
EC-CUBE : 2.3.0
PHP : 5.2.6
MySQL : 5.0.51b
OS : Windows2003R2
XAMPP 1.6.7
--------------------------------------

ゲスト
投稿日時: 2008/9/3 13:18
対応状況: −−−
Re: 商品並び替え 正常に機能しない
仙人さん
早速ですが コミュニティ版 × Mysql5.0.5(Xammp)
にて確認した所、問題なく(4階層及び5階層でも)動作いたしました。

現在、正規版2.1.2を使用していますので、解消されている問題かと思います。
しかしながら問題の箇所がどこなのかがわかりません・・・
ご存知でしたらよろしくお願い致します。
seasoft
投稿日時: 2008/9/3 15:34
対応状況: −−−
登録日: 2008/6/4
居住地:
投稿: 7365
Re: 商品並び替え 正常に機能しない
コミュニティ版では問題が発生しませんでしたか。はて、困りましたな…

そうなると、主に2つの要因が考えられます。
a. コミュニティ版独自の変更により修正されている。
b. 正式版 2.3.0 で解消されている。(最新コミュニティ版は、正式版 2.3.0-RC1 での修正を取り込み済み。)

「a.」のケースで私が心当たりあるとしたら…
http://svn.ec-cube.net/open_trac/changeset/17549
http://svn.ec-cube.net/open_trac/changeset/17557
あたりです。
特段、koji様のご指摘事項を修正した意識はないのですが、副作用で直ったのかもしれません。

「b.」のケースに該当するかは、正式版 2.3.0-RC1 で動作検証すると切り分けできると思います。


----------------
Seasoft
こちらでの投稿は、アイディア程度に留めさせていただいております。
個別案件の作業は有償で承っております。お気軽にご相談ください。

para4
投稿日時: 2008/9/3 17:05
対応状況: −−−
常連
登録日: 2008/6/30
居住地:
投稿: 42
Re: 商品並び替え 正常に機能しない
直してみました。
例によって、MySQLでしかテストしていません。
気が向いた方は、試してください。

引用:

function lfDispProductsList($category_id, $name, $disp_num, $orderby) {

$objQuery = new SC_Query();
$objDb = new SC_Helper_DB_Ex();
$this->tpl_pageno = defined("MOBILE_SITE") ? @$_GET['pageno'] : @$_POST['pageno'];

// 商品検索条件の作成(未削除、表示)
$where = "del_flg = 0 AND status = 1 ";
// カテゴリからのWHERE文字列取得
if ( $category_id ) {
list($tmp_where, $arrval) = $objDb->sfGetCatWhere($category_id);
if($tmp_where != "") {
$where.= " AND $tmp_where";
}
}

//表示順序
switch($orderby) {

//価格順
case 'price':
$col = "DISTINCT price02_min, product_id, product_code_min, product_code_max,"
. " name, comment1, comment2, comment3,"
. " main_list_comment, main_image, main_list_image,"
. " price01_min, price01_max, price02_max,"
. " stock_min, stock_max, stock_unlimited_min, stock_unlimited_max,"
. " point_rate, sale_limit, sale_unlimited, deliv_date_id, deliv_fee,"
. " status, product_flag, create_date, del_flg";
$from = "vw_products_allclass AS T1";
$order = "price02_min, product_id";
break;

//新着順
case 'date':
$col = "DISTINCT create_date, product_id, product_code_min, product_code_max,"
. " name, comment1, comment2, comment3,"
. " main_list_comment, main_image, main_list_image,"
. " price01_min, price01_max, price02_min, price02_max,"
. " stock_min, stock_max, stock_unlimited_min, stock_unlimited_max,"
. " point_rate, sale_limit, sale_unlimited, deliv_date_id, deliv_fee,"
. " status, product_flag, del_flg";
$from = "vw_products_allclass AS T1";
$order = "create_date DESC, product_id";
break;

default:
$col = "product_id, product_code_min, product_code_max,"
. " price01_min, price01_max, price02_min, price02_max,"
. " stock_min, stock_max, stock_unlimited_min,"
. " stock_unlimited_max, del_flg, status, name, comment1,"
. " comment2, comment3, main_list_comment, main_image,"
. " main_list_image, product_flag, deliv_date_id, sale_limit,"
. " point_rate, sale_unlimited, create_date, deliv_fee, "
. " category_rank, rank AS product_rank";
$from = "vw_products_allclass as TA1";
$where2 = " AND (product_id, category_rank) "
. " IN (SELECT product_id, max(TB2.rank) "
. " FROM dtb_product_categories AS TB1 JOIN dtb_category AS TB2 USING (category_id) "
. " WHERE " . $where
. " GROUP BY product_id)";
$order = "category_rank DESC, product_rank DESC";
break;
}


// 商品名をwhere文に
$name = ereg_replace(",", "", $name);// XXX
// 全角スペースを半角スペースに変換
$name = str_replace(' ', ' ', $name);
// スペースでキーワードを分割
$names = preg_split("/ +/", $name);
// 分割したキーワードを一つずつwhere文に追加
foreach ($names as $val) {
if ( strlen($val) > 0 ){
$where .= " AND ( name ILIKE ? OR comment3 ILIKE ?) ";
$ret = SC_Utils_Ex::sfManualEscape($val);
$arrval[] = "%$ret%";
$arrval[] = "%$ret%";
}
}

if (empty($arrval)) {
$arrval = array();
}

// 行数の取得
$linemax = count($objQuery->getAll("SELECT DISTINCT product_id "
. "FROM vw_products_allclass AS allcls "
. (!empty($where) ? " WHERE " . $where
: ""), $arrval));

$this->tpl_linemax = $linemax; // 何件が該当しました。表示用

// ページ送りの取得
$this->objNavi = new SC_PageNavi($this->tpl_pageno, $linemax, $disp_num, "fnNaviPage", NAVI_PMAX);

$strnavi = $this->objNavi->strnavi;
$strnavi = str_replace('onclick="fnNaviPage', 'onclick="form1.mode.value=\''.'\'; fnNaviPage', $strnavi);
// 表示文字列
$this->tpl_strnavi = empty($strnavi) ? " " : $strnavi;
$startno = $this->objNavi->start_row; // 開始行

// 取得範囲の指定(開始行番号、行数のセット)
$objQuery->setlimitoffset($disp_num, $startno);
// 表示順序
$objQuery->setorder($order);

// 検索結果の取得
if (isset($where2)) {
$arrval2 = array_merge($arrval, $arrval);
$this->arrProducts = $objQuery->select($col, $from, $where . $where2, $arrval2);
} else {
$this->arrProducts = $objQuery->select($col, $from, $where, $arrval);
}

// 規格名一覧
$arrClassName = $objDb->sfGetIDValueList("dtb_class", "class_id", "name");
// 規格分類名一覧
$arrClassCatName = $objDb->sfGetIDValueList("dtb_classcategory", "classcategory_id", "name");
// 規格セレクトボックス設定
if($disp_num == 15) {
for($i = 0; $i < count($this->arrProducts); $i++) {
$this->lfMakeSelect($this->arrProducts[$i]['product_id'], $arrClassName, $arrClassCatName);
// 購入制限数を取得
$this->lfGetSaleLimit($this->arrProducts[$i]);
}
}
}

shinshinsh
投稿日時: 2008/9/4 2:01
対応状況: −−−
半人前
登録日: 2008/7/18
居住地:
投稿: 12
Re: 商品並び替え 正常に機能しない
para4さん、ありがとうございます。試してみました。
2.1.2+PostgreSQL8.2.4環境では同様に並び替えが機能しないようです。
私の環境では、すべての商品を2つ以上のカテゴリにまたがって登録しています。
このことが影響するのでしょうか?
para4
投稿日時: 2008/9/4 11:46
対応状況: −−−
常連
登録日: 2008/6/30
居住地:
投稿: 42
Re: 商品並び替え 正常に機能しない
引用:

2.1.2+PostgreSQL8.2.4環境では同様に並び替えが機能しないようです。
私の環境では、すべての商品を2つ以上のカテゴリにまたがって登録しています。
このことが影響するのでしょうか?

影響は、すると思いますが末端のカテゴリなら問題ないように作ったつもりです。
A-+-B
..+-C
..+-D-E
....+-F

この例だと、B,C,E,Fのカテゴリ。

Dで表示するときは、E,Fのカテゴリランクの大きい方を最初に最初に表示表示するようにしたつもりです。


ランクがうまく設定されていない可能性もあります。
管理画面の商品並び替えで順位は1から始まってますか?
マイナスになってたりしませんか?
私の場合は、何が原因でなったか分かりませんが、マイナス番号になっていたのでテーブル'dtb_product_categories'を強制的に書き換えました。
どう直したかと言うと、
category_id単位で、rankを1から連番になるようにしました。
shinshinsh
投稿日時: 2008/9/11 13:11
対応状況: −−−
半人前
登録日: 2008/7/18
居住地:
投稿: 12
Re: 商品並び替え 正常に機能しない
引用:

para4さんは書きました:
引用:

2.1.2+PostgreSQL8.2.4環境では同様に並び替えが機能しないようです。
私の環境では、すべての商品を2つ以上のカテゴリにまたがって登録しています。
このことが影響するのでしょうか?

影響は、すると思いますが末端のカテゴリなら問題ないように作ったつもりです。
A-+-B
..+-C
..+-D-E
....+-F

この例だと、B,C,E,Fのカテゴリ。

Dで表示するときは、E,Fのカテゴリランクの大きい方を最初に最初に表示表示するようにしたつもりです。


ランクがうまく設定されていない可能性もあります。
管理画面の商品並び替えで順位は1から始まってますか?
マイナスになってたりしませんか?
私の場合は、何が原因でなったか分かりませんが、マイナス番号になっていたのでテーブル'dtb_product_categories'を強制的に書き換えました。
どう直したかと言うと、
category_id単位で、rankを1から連番になるようにしました。

仰るとおり、ランクが重なったりしているところがありました。
削除した商品IDが残っていたので、データベース上で削除し、連番を振りなおしましたが、うまくいきません。

ひとまず管理画面の商品並び替えでは、順位は重なることなく1から始まるようになりましたが、管理画面の商品並び替えの順位と、データベース上のrank値が一致せず、フロント画面の並び順もまた別のようです。

商品並び替えを実行すると、データベースのrank値も変わりますが、何故か別の値になっています。
気になるのはデータベース編集時にcategory_idでソートすると、同じcategory_id中でもrank値が昇順でも降順でもなくばらばらの並びなのです。

うーん、困りました。
フラット表示 前のトピック | 次のトピック


題名 投稿者

 



ログイン


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

統計情報

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

投稿数ランキング

1
seasoft
7365
2
468
3217
3
AMUAMU
2712
4
nanasess
2303
5
umebius
2085
6
yuh
1818
7
h_tanaka
1610
8
red
1568
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.