バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > フロント機能 > トップページのブロックに商品詳細ページで表示される商品ステータスアイコンを表示させるにはどうしたらよろしいですか。

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
moment
投稿日時: 2014/7/4 23:57
対応状況: −−−
常連
登録日: 2014/6/30
居住地:
投稿: 45
トップページのブロックに商品詳細ページで表示される商品ステータスアイコンを表示させるにはどうしたらよろしいですか。
お世話になります。どうか教えてください。

トップページのブロックに商品詳細ページで表示される商品ステータスアイコンを表示させたいです。そのため、detail.tplとLC_Page_Products_Detail.phpを参考にトップページのおすすめ商品ブロックに下記の設定を施しました。

ページ更新をしてもLogにはエラーは記載されませんが、商品ステータスアイコンをトップページブロックで表示させることがどうしてもできません。なぜ表示できないか、問題はどこか、どなたか教えてくださいませんでしょうか。

● recommend.tpl(おすすめ商品ブロック) (detail.tplの商品ステータスの相当箇所をそのまま貼り付け)

<!--{foreach from=$arrProducts item=arrProduct}-->

 <!--▼商品ステータス-->
<!--{assign var=ps value=$productStatus[$tpl_product_id]}-->
<!--{if count($ps) > 0}-->
<ul class="status_icon clearfix">
<!--{foreach from=$ps item=status}-->
<li>
<img src="<!--{$TPL_URLPATH}--><!--{$arrSTATUS_IMAGE[$status]}-->" width="60" height="17" alt="<!--{$arrSTATUS[$status]}-->" id="icon<!--{$status}-->" />
</li>
<!--{/foreach}-->
</ul>
<!--{/if}-->
<!--▲商品ステータス-->
・・・・・

● LC_Page_FrontParts_Bloc_Recommend.php (LC_Page_Products_Detail.phpから商品ステータス関連の記述を引用)

function action() {

// 商品ステータスを取得
$objProduct = new SC_Product_Ex();
$this->productStatus = $objProduct->getProductStatus($product_id);

$masterData = new SC_DB_MasterData_Ex();
$this->arrSTATUS = $masterData->getMasterData('mtb_status');
$this->arrSTATUS_IMAGE = $masterData->getMasterData('mtb_status_image');

// 商品IDをFORM内に保持する
$this->tpl_product_id = $product_id;
・・・・・

EC-CUBE: 2.12.5
データベース: MySQL 5.0.6
WEBサーバ:apache2.2
OS:Linux
PHP: PHP 5.2.1
yuh
投稿日時: 2014/7/7 2:19
対応状況: −−−
登録日: 2013/1/9
居住地: 大阪
投稿: 1819
Re: トップページのブロックに商品詳細ページで表示される商品ステータスアイコンを表示させるにはどうしたらよろしいですか。
まず、

$objProduct = new SC_Product_Ex();
$this->productStatus = $objProduct->getProductStatus($product_id);

この部分で$product_idにはなにも値が入っておらず、$this->productStatusには空か空の配列が入るはずです。


$masterData = new SC_DB_MasterData_Ex();
$this->arrSTATUS = $masterData->getMasterData('mtb_status');
$this->arrSTATUS_IMAGE = $masterData->getMasterData('mtb_status_image');

この部分は問題ないです。

$this->tpl_product_id = $product_id;

この部分も$product_idが空なので意味ありません。


商品詳細ページは商品IDが固定ですが、おすすめ商品ブロックに関してはおすすめ商品で表示する分だけ商品IDがあります。

そこらへんでループの中で値を取得して、取得した値を元に表示させるようにすれば実装できます。



moment
投稿日時: 2014/7/7 22:07
対応状況: −−−
常連
登録日: 2014/6/30
居住地:
投稿: 45
Re: トップページのブロックに商品詳細ページで表示される商品ステータスアイコンを表示させるにはどうしたらよろしいですか。
Yuh様

返信いただきましてありがとうございます。
商品ステータスアイコンを表示しない原因が大変よく分かりました。

そこで、教えて頂きました様に私なりに変更を加えました。
まず、商品ステータスアイコン表示の記述がおすすめ商品用のループの中で値を取得できるように下記のようにdtb_product_statusのproduct_status_idを利用しました。

これだけだとおすすめブロックに商品ステータスアイコンをひとつだけ表示しますが、商品ステータスが複数存在する場合に対応できません。

● recommend.tpl(おすすめ商品ブロック) 
<!--{foreach from=$arrProducts item=arrProduct}-->
<!--{assign var=ps value=$arrProduct.product_status_id|u}-->
・・・・

そこで商品ステータスが複数存在する場合に対応すべくsc_product.phpのgetProductStatusをどうやってLC_Page_FrontParts_Bloc_Recommend.php 内で利用したらよいかと考え、以下の様に試しておりましたが、おすすめ商品ブロック全体を非表示にしてしまいます。

● LC_Page_FrontParts_Bloc_Recommend.php 

$arrProducts = $objQuery->select($col, $from, $where, $arrval);

< getProductStatus の以下の箇所を追加>
$results = array();
foreach ($productStatus as $status) {
$results[$status['product_id']][] = $status['product_status_id'];
}
return $results;

ここからどうしたらよいかお教え願いませんでしょうか。
red
投稿日時: 2014/7/7 23:17
対応状況: −−−
登録日: 2010/2/15
居住地: 東京都
投稿: 1570
Re: トップページのブロックに商品詳細ページで表示される商品ステータスアイコンを表示させるにはどうしたらよろしいですか。
商品一覧を真似るのが一番早いかと思いますが

            
$arrProducts = $objProduct->getListByProductIds($objQuery, $arrProductId);
$arrProducts['productStatus'] = $objProduct->getProductStatus($arrProductId); //追加


これだけでいい気がします


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

moment
投稿日時: 2014/7/8 4:30
対応状況: −−−
常連
登録日: 2014/6/30
居住地:
投稿: 45
Re: トップページのブロックに商品詳細ページで表示される商品ステータスアイコンを表示させるにはどうしたらよろしいですか。
Red様

ご教授頂きましてありがとうございます。
そうですね、商品一覧では複数の商品ステータスアイコンが各商品で表示されております。

頂きました内容は下記の設定ということですよね。しかしながら、おすすめ商品ブロックで商品ステータスアイコンを(一つも)表示できないでおります。

何かが不足していますでしょうか。

● recommend.tpl (list.tplの商品ステータスの相当箇所をそのまま貼り付け)
<!--{foreach from=$arrProducts item=arrProduct}-->
・・・・・
<!--{if count($productStatus[$id]) > 0}-->
<ul class="status_icon clearfix">
<!--{foreach from=$productStatus[$id] item=status}-->
<li>
<img src="<!--{$TPL_URLPATH}--><!--{$arrSTATUS_IMAGE[$status]}-->" width="60" height="17" alt="<!--{$arrSTATUS[$status]}-->"/>
</li>
<!--{/foreach}-->
</ul>
<!--{/if}-->
・・・・・
<!--{/foreach}-->

●LC_Page_FrontParts_Bloc_Recommend.php(頂いた内容を下記に貼り付け)
function process() {
・・・・・
$arrProducts = $objProduct->getListByProductIds($objQuery, $arrProductId);
$arrProducts['productStatus'] = $objProduct->getProductStatus($arrProductId); //追加
・・・・・
}
sumida
投稿日時: 2014/7/8 7:58
対応状況: −−−
仙人
登録日: 2013/2/10
居住地: 広島県呉市ときどき瀬戸内海
投稿: 641
Re: トップページのブロックに商品詳細ページで表示される商品ステータスアイコンを表示させるにはどうしたらよろしいですか。
横から失礼します。
LC_Page_FrontParts_Bloc_Recommend.php

        // おすすめ商品取得
        $arrRecommends = $objRecommend->getList(RECOMMEND_NUM);
// added
$masterData = new SC_DB_MasterData_Ex();
$this->arrSTATUS = $masterData->getMasterData('mtb_status');
$this->arrSTATUS_IMAGE = $masterData->getMasterData('mtb_status_image');
// added

recommend.tpl

                    <!--{foreach from=$arrBestProducts item=arrProduct name="recommend_products"}-->
                        <div class="product_item clearfix">
                            <div class="productImage">
                                <a href="<!--{$smarty.const.P_DETAIL_URLPATH}--><!--{$arrProduct.product_id|u}-->">
                                    <img src="<!--{$smarty.const.IMAGE_SAVE_URLPATH}--><!--{$arrProduct.main_list_image|sfNoImageMainList|h}-->" style="max-width: 80px;max-height: 80px;" alt="<!--{$arrProduct.name|h}-->" />
                                </a>
                            </div>
<!--{* added *}-->
                            <div class="productStatus">
                                <!--{$arrSTATUS[$arrProduct.status]}-->
                                <img src="<!--{$TPL_URLPATH}--><!--{$arrSTATUS_IMAGE[$arrProduct.status]}-->" width="60" height="17" alt="<!--{$arrSTATUS[$arrProduct.status]}-->" />
                            </div>
<!--{* added *}-->
                            <div class="productContents">
                                <h3>
                                    <a href="<!--{$smarty.const.P_DETAIL_URLPATH}--><!--{$arrProduct.product_id|u}-->"><!--{$arrProduct.name|h}--></a>
                                </h3>
                                <p class="sale_price">
                                    <!--{$smarty.const.SALE_PRICE_TITLE}-->(税込): <span class="price"><!--{$arrProduct.price02_min_inctax|number_format}--> 円</span>
                                </p>
                                <p class="mini comment"><!--{$arrProduct.comment|h|nl2br}--></p>
                            </div>
                        </div>
                        <!--{if $smarty.foreach.recommend_products.iteration % 2 === 0}-->
                            <div class="clear"></div>
                        <!--{/if}-->
                    <!--{/foreach}-->

こういうことですか?(v2.13.2ですが)
moment
投稿日時: 2014/7/8 9:55
対応状況: −−−
常連
登録日: 2014/6/30
居住地:
投稿: 45
Re: トップページのブロックに商品詳細ページで表示される商品ステータスアイコンを表示させるにはどうしたらよろしいですか。
Sumida様

ご教授いただきまして感謝いたします。

私のeccubeのバージョンは2.12.5なのですが、頂きました記述を試しましたところ、
Mtb_statusの最上段のデータだけを表示して、各商品ごとに商品登録時に選んだそれぞれの商品ステータスを表示しない様です。

どこか違うのでしょうか。

何とか表示させたいのですが、何か分かりませんでしょうか。
sumida
投稿日時: 2014/7/8 11:27
対応状況: −−−
仙人
登録日: 2013/2/10
居住地: 広島県呉市ときどき瀬戸内海
投稿: 641
Re: トップページのブロックに商品詳細ページで表示される商品ステータスアイコンを表示させるにはどうしたらよろしいですか。
もしかして、
NEWの商品しか表示できないということでしょうか?
そうであれば、なぜなのかわかりませんが、
(v2.13では、DBへのアクセス周りが変更されているので発生しません。)
LC_Page_FrontParts_Bloc_Recommend.php

        // おすすめ商品取得
        $col = 'T1.best_id, T1.category_id, T1.rank, T1.product_id, T1.title, T1.comment, T1.create_date, T1.update_date';
        $table = 'dtb_best_products as T1 INNER JOIN dtb_products as T2 ON T1.product_id = T2.product_id';
        $where = 'T1.del_flg = 0 and T2.status = 1';

このコードで、「T2.status = 1」とあるので、「NEW」の商品だけとなっています。なので、

        $where = 'T1.del_flg = 0';

とすれば、良いと思います。
そうなれば、T2が不要になるので

        $table = 'dtb_best_products as T1';

にしても良いと思います。
moment
投稿日時: 2014/7/8 14:57
対応状況: −−−
常連
登録日: 2014/6/30
居住地:
投稿: 45
Re: トップページのブロックに商品詳細ページで表示される商品ステータスアイコンを表示させるにはどうしたらよろしいですか。
Sumida様

長くなって大変申し訳ございませんが、ご教授いただきまして大変感謝致します。

商品は全て表示され、その商品の商品ステータスでmtb_statusの最上段のものだけが表示されるという意味です。

アドバイス通り、テーブルの連結の問題も考え(実際6テーブル連結)、いろいろと試しているのですが、やはりmtb_statusの最上段のデータだけを表示いたします。

商品一覧で表示しているようにトップページブロック(新着、おすすめ等)で各商品のそれぞれ異なる複数の商品ステータスアイコンを表示させるには、

Dtb_product_statusのproduct_status_idを抽出しなければならないのではと考えているのですが、どう思われますか。
sumida
投稿日時: 2014/7/8 17:43
対応状況: −−−
仙人
登録日: 2013/2/10
居住地: 広島県呉市ときどき瀬戸内海
投稿: 641
Re: トップページのブロックに商品詳細ページで表示される商品ステータスアイコンを表示させるにはどうしたらよろしいですか。
失礼しました。
まったくの勘違いをしておりました。
とりあえず、私の提案は、一旦取り消してください。
(1) 2 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

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

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2313
5
umebius
2085
6
yuh
1819
7
h_tanaka
1638
8
red
1570
9
mcontact
1285
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
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.