バージョン選択

フォーラム

メニュー

オンライン状況

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

PR

デザインテンプレート EC-CUBE3.0版が登場!
広告掲載について

サイト内検索

 > フロント機能 > 規格のプルダウン表示順序について

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
waiya
投稿日時: 2016/6/15 19:13
対応状況: −−−
半人前
登録日: 2009/5/29
居住地: 大阪市
投稿: 11
規格のプルダウン表示順序について
ECCUBE3.0.10でサイト制作をおこなっておりますが、
フロント画面で規格1・規格2ともにプルダウンの順序が
管理画面の規格登録画面で順序を変更しても反映されないという現象にあわれた方おられますか?

希望としては、dtb_class_categoryテーブルのrankの降順にしたいと思っています。

もしご存知の方おられましたらお知恵を貸していただきたいと思います。
何卒よろしくお願いいたします。
DELIGHT
投稿日時: 2016/6/15 20:15
対応状況: −−−
仙人
登録日: 2010/2/3
居住地: 熊本県・九州・長野県・関東甲信越
投稿: 571
Re: 規格のプルダウン表示順序について
当該箇所の処理は下記の順で追えます。

https://github.com/EC-CUBE/ec-cube/blob/3.0.10/src/Eccube/Form/Type/AddCartType.php#L105
https://github.com/EC-CUBE/ec-cube/blob/3.0.10/src/Eccube/Entity/Product.php#L156
https://github.com/EC-CUBE/ec-cube/blob/3.0.10/src/Eccube/Entity/Product.php#L60

ProductClassのマッピングは下記に記載されていますが、
私の知る限りでは、外部テーブルによるソートをマッピングによって実現することは出来ません。
https://github.com/EC-CUBE/ec-cube/blob/3.0.10/src/Eccube/Resource/doctrine/Eccube.Entity.Product.dcm.yml#L69

そのため、Eccube\Entity\Product::_calc()内で配列をソートした上でforeachをする必要があります。
Eccube\Entity\Product::getProductClasses()の返り値は配列ではなくDoctrine\Common\Collections\Collectionですので、
Doctrine\Common\Collections\Collection::toArray()した上でusort()するといいでしょう。


----------------
+ DAISY inc. -------------------- +
EC-CUBE構築・カスタマイズサービス
EC・WEB構築などお気軽にご相談ください。

デイジー株式会社
http://daisy.link/

DELIGHT
投稿日時: 2016/6/15 20:36
対応状況: −−−
仙人
登録日: 2010/2/3
居住地: 熊本県・九州・長野県・関東甲信越
投稿: 571
Re: 規格のプルダウン表示順序について
申し訳ありません、上記だけでは不十分なようです。
案が思いついたら再度書きます。


----------------
+ DAISY inc. -------------------- +
EC-CUBE構築・カスタマイズサービス
EC・WEB構築などお気軽にご相談ください。

デイジー株式会社
http://daisy.link/

DELIGHT
投稿日時: 2016/6/15 20:44
対応状況: −−−
仙人
登録日: 2010/2/3
居住地: 熊本県・九州・長野県・関東甲信越
投稿: 571
Re: 規格のプルダウン表示順序について
下記の箇所でも同様の処理がありました。
https://github.com/EC-CUBE/ec-cube/blob/3.0.10/src/Eccube/Resource/template/default/Product/detail.twig#L28
https://github.com/EC-CUBE/ec-cube/blob/3.0.10/src/Eccube/Entity/Product.php#L378

先の書き込みと合わせた2箇所で配列のソートをする必要があります。


----------------
+ DAISY inc. -------------------- +
EC-CUBE構築・カスタマイズサービス
EC・WEB構築などお気軽にご相談ください。

デイジー株式会社
http://daisy.link/

waiya
投稿日時: 2016/6/16 5:54
対応状況: −−−
半人前
登録日: 2009/5/29
居住地: 大阪市
投稿: 11
Re: 規格のプルダウン表示順序について
DELIGHTさんご解説いただきありがとうございます!

確かにマッピングでデータベースアクセス時にソートができれば一番よいですね.....今回はお教えいただいた箇所を参考にして下記の箇所にusortを追加することでフロント側の表示はうまくいきました。

https://github.com/EC-CUBE/ec-cube/blob/3.0.10/src/Eccube/Entity/Product.php#L100

if ($ProductClass->getClassCategory1()) {
$classCategoryId1 = $ProductClass->getClassCategory1()->getId();
if (!empty($classCategoryId1)) {

//規格1ランク用の配列を取得
$cc_rank_1[$ProductClass->getClassCategory1()->getName()] = $ProductClass->getClassCategory1()->getRank();

$this->classCategories1[$ProductClass->getClassCategory1()->getId()] = $ProductClass->getClassCategory1()->getName();
if ($ProductClass->getClassCategory2()) {

//規格2ランク用の配列を取得
$cc_rank_2[$ProductClass->getClassCategory2()->getName()] = $ProductClass->getClassCategory2()->getRank();

$this->classCategories2[$ProductClass->getClassCategory1()->getId()][$ProductClass->getClassCategory2()->getId()] = $ProductClass->getClassCategory2()->getName();
}
}
}

[ループが終わった後に]
// 規格1のソート
uasort($this->classCategories1,function($a, $b) use($cc_rank_1){
if($cc_rank_1[$a] == $cc_rank_1[$b]) return 0;
return $cc_rank_1[$a] < $cc_rank_1[$b];
});

// 規格2のソート
if ($ProductClass->getClassCategory2()) {
uasort($this->classCategories2,function($a, $b) use($cc_rank_2){
if($cc_rank_2[$a] == $cc_rank_2[$b]) return 0;
return $cc_rank_2[$a] < $cc_rank_2[$b];
});
}

あまりスマートではありませんが、これで様子を見ていきます。
もし、不具合などあればまた記載します。
これをもって一旦解決済みとさせていただきます。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

 



ログイン


EC-CUBEガイドブック

統計情報

総メンバー数は19,239名です
総投稿数は80,566件です

投稿数ランキング

1
seasoft
7331
2
AMUAMU
2712
3
nanasess
1619
4
yuh
1317
5
red
1041
6
fukap
907
7
shutta
827
8 ramrun 789
9
tsuji
778
10
tao_s
646


ネットショップの壺

EC-CUBEガイドブック
Copyright© LOCKON CO.,LTD. All Rights Reserved.