バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > フロント機能 > メーカーごとのナビを表示したい

フロント機能

新規スレッドを追加する

スレッド表示 | 古いものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
DDR
投稿日時: 2009/9/18 15:27
対応状況: −−−
仙人
登録日: 2008/6/21
居住地: 大阪
投稿: 307
Re: メーカーごとのナビを表示したい
お世話になります
こちらのソースにて、全商品のメーカーを表示させることが
できました!
ありがとう御座います。

これをカテゴリー別に表示させるようにしたいのですが
カテゴリーの判別をしている商品一覧のカテゴリブロックの
ようなソースは書いてあるのですが
tpl側で表示させるソースが分かりませんでした;;

素人が弄ってますので全然間違っているとは思いますが
ここが間違ってるなどアドバイス頂けたら幸いです


<?php

require_once(CLASS_PATH . "pages/frontparts/bloc/LC_Page_FrontParts_Bloc.php");

/**
 * メーカー のページクラス.
 *
 * @package Page
 * @author LOCKON CO.,LTD.
 * @version $Id:LC_Page_FrontParts_Bloc_Maker.php 15532 2007-08-31 14:39:46Z nanasess $
 */
class LC_Page_FrontParts_Bloc_Maker extends LC_Page_FrontParts_Bloc {

    // }}}
    // {{{ functions

    /**
     * Page を初期化する.
     *
     * @return void
     */
    function init() {
        parent::init();
        $bloc_file = 'maker.tpl';
        $this->setTplMainpage($bloc_file);
    }

    /**
     * Page のプロセス.
     *
     * @return void
     */
    function process() {
        $objView = new SC_SiteView();
        $objCustomer = new SC_Customer();
        $objQuery = new SC_Query();
        $objDb = new SC_Helper_DB_Ex();

        // メーカーの読込
        $where = "del_flg <> 1";
        $objQuery->setorder("rank DESC");
        $this->arrMaker = $objQuery->select("maker_id, name", "dtb_maker", $where);

        $objView->assignobj($this);

        $objSubView = new SC_SiteView();
        $objSubView->assignobj($this);
        $objSubView->display($this->tpl_mainpage);
 
 // 選択中のカテゴリIDを判定する
        $arrmaker_id = $objDb->sfGetCategoryId($_GET['product_id'], $_GET['maker_id']);

        // 選択中のカテゴリID
        $this->tpl_maker_id = empty($arrmaker_id) ? array(0) : $arrmaker_id;;
        $this->lfGetCatTree($this->tpl_maker_id, true, $this);

        $objSubView->assignobj($this);
        $objSubView->display($this->tpl_mainpage);
    }

    /**
     * デストラクタ.
     *
     * @return void
     */
    function destroy() {
        parent::destroy();
    }

    // カテゴリツリーの取得
    function lfGetCatTree($arrParent_maker_id, $count_check = false) {
        $objQuery = new SC_Query();
        $objDb = new SC_Helper_DB_Ex();
        $col = "*";
        $from = "dtb_maker left join dtb_maker_total_count using (maker_id)";
        // 登録商品数のチェック
        if($count_check) {
            $where = "del_flg = 0 AND product_count > 0";
        } else {
            $where = "del_flg = 0";
        }
        $objQuery->setoption("ORDER BY rank DESC");
        $arrRet = $objQuery->select($col, $from, $where);

        foreach ($arrParent_maker_id as $maker_id) {
            $arrParentID = $objDb->sfGetParents($objQuery, 'dtb_maker', 'parent_maker_id', 'maker_id', $maker_id);
            $arrBrothersID = SC_Utils_Ex::sfGetBrothersArray($arrRet, 'parent_maker_id', 'maker_id', $arrParentID);
            $arrChildrenID = SC_Utils_Ex::sfGetUnderChildrenArray($arrRet, 'parent_maker_id', 'maker_id', $maker_id);

            $this->root_parent_id[] = $arrParentID[0];

            $arrDispID = array_merge($arrBrothersID, $arrChildrenID);

            foreach($arrRet as $key => $array) {
                foreach($arrDispID as $val) {
                    if($array['maker_id'] == $val) {
                        $arrRet[$key]['display'] = 1;
                        break;
                    }
                }
            }
        }

        $this->arrTree = $arrRet;
    }

    // メインカテゴリーの取得
    function lfGetMainCat($count_check = false, &$objSubPage) {
        $objQuery = new SC_Query();
        $col = "*";
        $from = "dtb_maker left join dtb_maker_total_count using (maker_id)";
        // メインカテゴリーとその直下のカテゴリーを取得する。
        $where = 'level <= 2 AND del_flg = 0';
        // 登録商品数のチェック
        if($count_check) {
            $where .= " AND product_count > 0";
        }
        $objQuery->setoption("ORDER BY rank DESC");
        $arrRet = $objQuery->select($col, $from, $where);

        // メインカテゴリーを抽出する。
        $arrMainCat = array();
        foreach ($arrRet as $cat) {
            if ($cat['level'] != 1) {
                continue;
            }

            // 子カテゴリーを持つかどうかを調べる。
            $arrChildrenID = SC_Utils_Ex::sfGetUnderChildrenArray($arrRet, 'parent_maker_id', 'maker_id', $cat['maker_id']);
            $cat['has_children'] = count($arrChildrenID) > 0;
            $arrMainCat[] = $cat;
        }

        $objSubPage->arrCat = $arrMainCat;
        return $objSubPage;
    }
}
?>




tplファイル


<!--{$maincate[0].category_disp }-->
<ul class="subcategory_first">
<!--メーカーここから-->
  <ul>
<!--{section name=cnt loop=$arrMaker}-->
<!--{* 階層を level へ *}-->
<!--{assign var=level value="`$arrMaker[cnt].level`}-->
<!--{* カテゴリ名を disp_name へ *}-->
<!--{assign var=disp_name value="`$arrMaker[cnt].maker_name`"}-->
<!--{assign var=disp_disp value="`$arrMaker[cnt].maker_id`"}-->
<!--{* 表示カテゴリのみ *}-->
<!--{if $arrMaker[cnt].display == 1}-->
<!--{* 選択したカテゴリ *}-->
<!--{if in_array($arrMaker[cnt].maker_id, $tpl_category_id) }-->

 <li class="maker_list"><a href="<!--{$smarty.const.URL_DIR}-->products/list.php?maker_id=<!--{$arrMaker[cnt].maker_id}-->"><!--{$arrMaker[cnt].name|escape}--></a>
        </li>
<!--{* 未選択カテゴリ *}-->
<!--{else}-->
<li><a href="<!--{$smarty.const.URL_DIR}-->products/list.php?category_id=<!--{$arrTree[cnt].category_id}-->" title="<!--{$disp_name|escape}-->"><!--{$disp_name|escape}--></a></li>
<!--{/if}-->


<!--{$disp_disp|sfCutString:40|escape}-->

<!--{/if}-->
<!--{/section}-->
</ul>
</dl>
</div>
<!--商品カテゴリーここまで-->


----------------
------------------------------------------------------------------------------------------
EC-CUBE 3.0.17
DBサーバー mariaDB
WEBサーバー apache (CentOS)
PHP 7.1
-----------------------...

rst
投稿日時: 2009/6/30 16:10
対応状況: −−−
一人前
登録日: 2008/8/17
居住地:
投稿: 80
Re: メーカーごとのナビを表示したい
お返事ありがとうございます。表示できました!!本当に感謝です。多数のファイルの追加等1つの機能を増やすのも結構大変なのですね。いろいろやりたい事はあるのですがいまいち構成がつかめず四苦八苦しているところでしたが本当にありがとうございました!
flealog
投稿日時: 2009/6/30 15:14
対応状況: −−−
仙人
登録日: 2008/6/10
居住地:
投稿: 485
Re: メーカーごとのナビを表示したい
引用:


デフォルトで用意されている商品検索ブロックで$arrMakerListをdumpすると表示されたので新規のブロックでも実装できるものと思っておりましたが新規ブロックでdumpしたところNULLでした^^;

そこで調べてみたところ以下のファイルが出力しておりました。

/data/class/pages/frontparts/bloc/LC_Page_FrontParts_Bloc_SearchProducts.php

ひとまずこれを複製しLC_Page_FrontParts_Bloc_SearchProducts.php2で保存し表示するtplファイルを変えました。

新規ブロックを作成した際にtplしか作成されていないのですがこれをからませるにはどのような手順になるのでしょうか?


この記事を見て、おぉ・・・ぜひ実装したいと思いやってみました^^
きっかけを与えてもらったので恩返しです。♪

管理ページでmaker.tplを作成。
/html/frontparts/bloc/maker.php
/data/class_extends/page_extends/frontparts/bloc/LC_Page_FrontParts_Bloc_Maker_Ex.php
を他のファイルからコピーして作成
やり方はここ(フォーラム)で何度も出てます。
わからなかったら調べてください^^

/data/class/pages/frontparts/bloc/LC_Page_FrontParts_Bloc_Maker.php
を作成


<?php
/*
 * This file is part of EC-CUBE
 *
 * Copyright(c) 2000-2007 LOCKON CO.,LTD. All Rights Reserved.
 *
 * http://www.lockon.co.jp/
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 */

// {{{ requires
require_once(CLASS_PATH . "pages/frontparts/bloc/LC_Page_FrontParts_Bloc.php");

/**
 * メーカー のページクラス.
 *
 * @package Page
 * @author LOCKON CO.,LTD.
 * @version $Id:LC_Page_FrontParts_Bloc_Maker.php 15532 2007-08-31 14:39:46Z nanasess $
 */
class LC_Page_FrontParts_Bloc_Maker extends LC_Page_FrontParts_Bloc {

    // }}}
    // {{{ functions

    /**
     * Page を初期化する.
     *
     * @return void
     */
    function init() {
        parent::init();
        $bloc_file = 'maker.tpl';
        $this->setTplMainpage($bloc_file);
    }

    /**
     * Page のプロセス.
     *
     * @return void
     */
    function process() {
        $objView = new SC_SiteView();
        $objCustomer = new SC_Customer();
        $objQuery = new SC_Query();
        $objDb = new SC_Helper_DB_Ex();

        // メーカーの読込
        $where = "del_flg <> 1";
        $objQuery->setorder("rank DESC");
        $this->arrMaker = $objQuery->select("maker_id, name", "dtb_maker", $where);

        $objView->assignobj($this);

        $objSubView = new SC_SiteView();
        $objSubView->assignobj($this);
        $objSubView->display($this->tpl_mainpage);

    }

    /**
     * デストラクタ.
     *
     * @return void
     */
    function destroy() {
        parent::destroy();
    }
}
?>




DBでdtb_blocにあるmaker.tplのphp_pathをfrontparts/bloc/maker.phpに変更

管理画面ブロック編集でmaker.tplに下記記載

<!--メーカーここから-->
  <ul>
<!--{section name=cnt loop=$arrMaker}-->
      <!--{assign var=maker_id value=$arrMaker[cnt].maker_id}-->
 <li class="maker_list"><a href="<!--{$smarty.const.URL_DIR}-->products/list.php?maker_id=<!--{$arrMaker[cnt].maker_id}-->"><!--{$arrMaker[cnt].name|escape}--></a>
        </li>
<!--{/section}-->
  </ul>
<!--メーカーここまで-->


多分いけると思います^^;
私はこれで表示されました。

ちなみに私はド素人なので、ゴミや間違いがあると思います。
どんどんご指摘して、修正してください。

あと質問にも答えられないことが多いです。
ごめんなさい^^;


----------------
EC-CUBE3っぽいテンプレート
GitHub で公開中
https://github.com/bluestylejp

お問い合わせ番号CSV登録&メール送信プラグイン
http://urx.red/qDT6

rst
投稿日時: 2009/6/30 13:17
対応状況: −−−
一人前
登録日: 2008/8/17
居住地:
投稿: 80
Re: メーカーごとのナビを表示したい
お返事ありがとうございます。
デフォルトで用意されている商品検索ブロックで$arrMakerListをdumpすると表示されたので新規のブロックでも実装できるものと思っておりましたが新規ブロックでdumpしたところNULLでした^^;

そこで調べてみたところ以下のファイルが出力しておりました。

/data/class/pages/frontparts/bloc/LC_Page_FrontParts_Bloc_SearchProducts.php

ひとまずこれを複製しLC_Page_FrontParts_Bloc_SearchProducts.php2で保存し表示するtplファイルを変えました。

新規ブロックを作成した際にtplしか作成されていないのですがこれをからませるにはどのような手順になるのでしょうか?
AMUAMU
投稿日時: 2009/6/30 0:52
対応状況: −−−
登録日: 2009/5/2
居住地: 東京都
投稿: 2712
Re: メーカーごとのナビを表示したい
php側で$arrMakerにきちんとデータを格納出来ていますでしょうか?
php側でprint_rなりEC-CUBEのログ出力なりを利用してデータ可能を調べると良いと思います。


----------------
EC-CUBE公式エヴァンジェリスト
EC-CUBEインテグレートパートナー (株)スピリット・オブ
移転・拡張・高速化・問題解決
各種カスタマイズ・支援依頼承ります。

[url=h

seasoft
投稿日時: 2009/6/30 0:10
対応状況: −−−
登録日: 2008/6/4
居住地:
投稿: 7367
Re: メーカーごとのナビを表示したい
その if は必要ですか? 何の目的でしょうか?

やるとしても、
<!--{if $arrMaker|@is_array}-->

<!--{if $arrMaker|@count >= 1}-->
などでは?


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

rst
投稿日時: 2009/6/29 23:49
対応状況: −−−
一人前
登録日: 2008/8/17
居住地:
投稿: 80
メーカーごとのナビを表示したい
カテゴリーナビのようにメーカーごとにナビを表示させたいです。
新規ブロックを作成し見よう見まねではありますがtplを以下のようにしてみました。


<!--{if $arrMaker}-->
<!--{section name=cnt loop=$arrMaker}-->
    <a href="<!--{$smarty.const.URL_DIR}-->products/list.php?maker_id=<!--{$arrMaker[cnt].maker_id}-->"><!--{$arrMaker[cnt].maker}-->2</a>
<!--{/section}-->
<!--{/if}-->


しかしifが常にfalseで思うような表示が全くできません。
バージョンは2.4を利用しているのですがどのようにすれば可能なものかご教授お願い致します。
スレッド表示 | 古いものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

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

投稿数ランキング

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.