バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > フロント機能 > パンくずリスト ver2.11用 教えてください。

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
patapata
投稿日時: 2011/6/7 21:29
対応状況: −−−
仙人
登録日: 2010/7/7
居住地: 神奈川県
投稿: 502
Re: パンくずリスト ver2.11用 教えてください。
fukap様のを参考に私も自分なり適当に作ってみた(゜o゜)
[お断り!!:コードはあくまでサンプルです。コードが判る人のみ参考にしてください]

----
1.新規ブロックを作成する。
→方法は省略。(仮:ProductNaviって名前で作ってます)

2.新規ブロックのPHPに以下を記述
require_once CLASS_REALDIR . 'pages/frontparts/bloc/LC_Page_FrontParts_Bloc.php';

/**
 * パンくず のページクラス.
 *
 */
class LC_Page_FrontParts_Bloc_ProductNavi extends LC_Page_FrontParts_Bloc {

    // }}}
    // {{{ functions

    /**
     * Page を初期化する.
     *
     * @return void
     */
    function init() {
        parent::init();
    }

    /**
     * Page のプロセス.
     *
     * @return void
     */
    function process() {
        $this->action();
        $this->sendResponse();
    }

    /**
     * Page のアクション.
     *
     * @return void
     */
    function action() {
        if ( !empty($_GET['category_id'])){
			$this->tpl_category_id = $this->lfGetSelectedCategoryId($_GET);
			$arrTopic = $this->sfGetTopic($this->tpl_category_id[0]);
        } elseif ( !empty($_GET['product_id'])) {
			$this->tpl_category_id = $this->lfGetSelectedCategoryId($_GET);
			$arrTopic = $this->sfGetTopic2($this->tpl_category_id[0],$_GET['product_id']);
		} elseif (($_GET['mode'] == 'search')){
			$arrTopic[0]['url'] = ROOT_URLPATH;
			$arrTopic[0]['name'] = "TopPage";
			$arrTopic[1]['name'] = $_GET['name'] . " の検索結果";
		}
		$this->arrTopic = $arrTopic;
    }

	//商品一覧用
	function sfGetTopic($category_id) {
		$objDb = new SC_Helper_DB_Ex();
		$arrCatId = $objDb->sfGetParents("dtb_category", "parent_category_id", "category_id", $category_id);

		//トップページ
		$arrTopic[0]['url'] = ROOT_URLPATH . 'index.php';
		$arrTopic[0]['name'] = "TopPage";

		$i = 1;
		foreach($arrCatId as $key => $val){
			$arrCatName = $objDb->sfGetCat($val);
			if($val != $category_id){
				//商品ページってDefineきってないのか?
				$arrTopic[$i]['url'] = ROOT_URLPATH . 'products/list.php?category_id=' .$val;
				$arrTopic[$i]['name'] = $arrCatName['name'];
			} else {
				$arrTopic[$i]['name'] = $arrCatName['name'];
			}
				$i++;
		}
		return $arrTopic;
	}

	//商品詳細用
	function sfGetTopic2($category_id, $product_id) {

		$objDb = new SC_Helper_DB_Ex();
		$arrCatId = $objDb->sfGetParents("dtb_category", "parent_category_id", "category_id", $category_id);

		//トップページ
		$arrTopic[0]['url'] = ROOT_URLPATH . 'index.php';
		$arrTopic[0]['name'] = "TopPage";

		$i = 1;

		foreach($arrCatId as $key => $val){
			$arrCatName = $objDb->sfGetCat($val);
			//商品ページってDefineきってないのか?
			$arrTopic[$i]['url'] = ROOT_URLPATH . 'products/list.php?category_id=' . $val;
			$arrTopic[$i]['name'] = $arrCatName['name'];
			$i++;
        }

		//最後に商品IDから商品名を取得
		$arrRes = $objDb->sfGetProductName($product_id);
		$arrTopic[$i]['name'] = $arrRes['name'];

		return $arrTopic;
	}


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

//↓LC_Page_FrontParts_Bloc_Category.phpにあったやつ、まんまコピペしちゃいました。
    /**
     * 選択中のカテゴリIDを取得する.
     *
     * @param array $arrRequest リクエスト配列
     * @return array $arrCategoryId 選択中のカテゴリID
     */
    function lfGetSelectedCategoryId($arrRequest) {
            // 商品ID取得
        $product_id = '';
        if ( isset($arrRequest['product_id']) && $arrRequest['product_id'] != '' && is_numeric($arrRequest['product_id']) ) {
            $product_id = $arrRequest['product_id'];
        }
        // カテゴリID取得
        $category_id = '';
        if ( isset($arrRequest['category_id']) && $arrRequest['category_id'] != '' && is_numeric($arrRequest['category_id']) ) {
            $category_id = $arrRequest['category_id'];
        }
        // 選択中のカテゴリIDを判定する
        $objDb = new SC_Helper_DB_Ex();
        $arrCategoryId = $objDb->sfGetCategoryId($product_id, $category_id);
        if (empty($arrCategoryId)) {
            $arrCategoryId = array(0);
        }
        return $arrCategoryId;
    }
}
?>


3.SC_Helper_DB.phpに以下を追加

    /**
     * 指定した商品IDの商品名を取得する.
     *
     * @param integer $product_id 商品ID
     * @return array 商品IDの商品名
     */
    function sfGetProductName($product_id){
        $objQuery =& SC_Query_Ex::getSingletonInstance();

        // 商品名を取得する
        $arrVal = array($product_id);
        $res = $objQuery->select('name', 'dtb_products', 'product_id = ?', $arrVal);

        return $res[0];
    }


4.新規ブロックのtplに以下を記述
<!--{* ▼パンくずリスト *}-->
<!--{foreach from=$arrTopic item=Topic }-->
<!--{if $Topic.url != ''}-->
<a href = <!--{$Topic.url}-->><!--{$Topic.name|escape}--> </a>&nbsp;>&nbsp;
<!--{else}-->
  <!--{$Topic.name|escape}-->
<!--{/if}-->
<!--{/foreach}-->
<!--{* ▲パンくずリスト *}-->


5.管理画面のページレイアウトの設定で適当に配置

----駄文---
なんとなくブロックでやってみただけです。
fukap
投稿日時: 2011/6/7 22:18
対応状況: −−−
仙人
登録日: 2009/7/7
居住地: 滋賀県
投稿: 907
Re: パンくずリスト ver2.11用 教えてください。
patapata様、ありがとうございます。

本職プログラマーの方が書かれると、こういう書き方もあるのかと、非常に参考になります。

私が文字列演算子で結合しているところを、多次元配列に代入されているところが、なるほどって感じです。
なかなか多次元配列って、馴染みが薄くて。慣れなんでしょうけど。

私が書いたコードはちょっとバグも出ているようですので、次に書くときは、Smartyの精神を尊重して、
HTML文字列については、PHP側で書かずに、tpl側に書くようにしたいと思っています。
patapata
投稿日時: 2011/6/7 22:52
対応状況: −−−
仙人
登録日: 2010/7/7
居住地: 神奈川県
投稿: 502
Re: パンくずリスト ver2.11用 教えてください。
本職って・・・・
私はPHPも、EC-CUBEもまだまだ初心者ですよ(´・ω・)
上のコードもあんまし動作確認してないし。なんかシングルコーテーションとダブルコーテーション入り混じってるし(-_-;)

そもそも自分で使う気がないので粗がかなりあります。
ほんとに暇つぶしに作っただけのものです。

fucap様の方が、簡単ですし。
ブロックにしたのは理由は、商品ページ以外にも使えるようにしようかなぁ〜〜と考えて・・・・面倒そうなのでやめちゃったって
だけの中途半端なものです。
aska824
投稿日時: 2011/6/8 21:49
対応状況: −−−
長老
登録日: 2010/2/20
居住地: 静岡県
投稿: 185
Re: パンくずリスト ver2.11用 教えてください。
すみません・・・

カテゴリがかなりあるので、CSVで登録しています・・・。
やはり、パンくずは管理画面からカテゴリ登録しないとできないんでしょうかね・・・;


----------------
-----------情報-----------
自分の分かる範囲でお答えします。

Shop Mate

fukap
投稿日時: 2011/6/8 22:04
対応状況: −−−
仙人
登録日: 2009/7/7
居住地: 滋賀県
投稿: 907
Re: パンくずリスト ver2.11用 教えてください。
いえいえ、カテゴリCSV登録はEC-CUBEの仕様内の話ですから、
そのケースにもコード側で対応させてないといけないですね。

おそらくCSV登録をされたのではないかと思っていました。

まとまった時間のある時に対応策を考えてみます。
aska824
投稿日時: 2011/6/8 22:30
対応状況: −−−
長老
登録日: 2010/2/20
居住地: 静岡県
投稿: 185
Re: パンくずリスト ver2.11用 教えてください。
なんか頼んでしまったようで申し訳ありません・・・

自分がもっとPHP等に詳しければいいんですが・・・。
いろんな情報をもとにカスタマイズする位しかできないので^^;

ありがとうございます><

あと、素朴な疑問で申し訳ないんですが、
「新着ブロックのPHP」って言うのは、
LC_Page_FrontParts_Bloc_ProductNavi.php
LC_Page_FrontParts_Bloc_ProductNavi_EX.php
ProductNavi.php
を作って、データベースの「dtb_bloc」の「pap_path」を変更して・・・

ってやって行くんですか?
2.11系をまだちゃんと理解してなくて申し訳ないです・・・。


----------------
-----------情報-----------
自分の分かる範囲でお答えします。

Shop Mate

fukap
投稿日時: 2011/6/9 14:32
対応状況: −−−
仙人
登録日: 2009/7/7
居住地: 滋賀県
投稿: 907
Re: パンくずリスト ver2.11用 教えてください。
aska824様へ

パンくずリストが正常に表示されない件です。
dtb_category の rank が関係しているかなと思っていたのですが、
rankを意図的に変えた場合、確かにパンくずリストは崩れるのですが、
カテゴリブロックのツリー表示なども崩れるようです。
カテゴリブロックのツリー表示は正常だけど、パンくずは崩れるという状態ですか?

可能であれば、表示崩れが発生している枝で、
dtb_categoryの各カラムの値がどうなっているか、教えていただけますでしょうか。
以下の項目がわかれば助かります。(category_nameはダミーで結構です。)

select category_id,category_name,parent_category_id,level,rank from dtb_category;
aska824
投稿日時: 2011/6/9 22:06
対応状況: −−−
長老
登録日: 2010/2/20
居住地: 静岡県
投稿: 185
Re: パンくずリスト ver2.11用 教えてください。
ん〜と、

カテゴリブロックのツリー表示は正常だけど、パンくずは崩れる状態の方です。

書くカラムの値がどうなっているかは正直phpPgAdminを使用しているため、

select category_id,category_name,parent_category_id,level,rank from dtb_category;

がわかりません・・・。
SQLについてはまだまだ無知なので・・・;

とりあえず、dtb_categoryテーブル内をキャプチャした画像を貼り付けておきます。


----------------
-----------情報-----------
自分の分かる範囲でお答えします。

Shop Mate

fukap
投稿日時: 2011/6/10 10:28
対応状況: −−−
仙人
登録日: 2009/7/7
居住地: 滋賀県
投稿: 907
Re: パンくずリスト ver2.11用 教えてください。
aska824様

キャプチャ画像、ありがとうございました。
さっそくそのデータを dtb_category に放り込んでみましたが、
表示崩れを再現できていません。

いただいたデータでは第3階層までありますが、それら全て正常な配置で表示されています。

提示された崩れ方から言って、CSSではなく、sfGetParents()で配列を取得して、foreachを回す時点で、
順序が違っているのかなと思っていたのですが、何が影響しているんだろう? ウ〜ン。

ちなみに、data/class/pages/products/LC_Page_Products_List.php のパンくずコード末尾に、
以下のコードを書いて保存し、表示崩れが出ている商品一覧ページを表示した際に、
ページ上部に何が表示されるか教えてもらえると、すごく助かります。

var_dump($arrCatId);   を記述した場合

var_dump($TopicPath);   を記述した場合
aska824
投稿日時: 2011/6/10 22:21
対応状況: −−−
長老
登録日: 2010/2/20
居住地: 静岡県
投稿: 185
Re: パンくずリスト ver2.11用 教えてください。
あれ?
何故かわかりませんが、もう一度組み入れたところ、うまく表示されるようになりました^^;

もしかしたら何か抜けてたのかもしれません・・・

お騒がせしてすみません・・・。


----------------
-----------情報-----------
自分の分かる範囲でお答えします。

Shop Mate

« 1 (2) 3 4 5 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBEペイメント

統計情報

総メンバー数は35,094名です
総投稿数は88,193件です

投稿数ランキング

1
seasoft
7331
2
AMUAMU
2712
3
nanasess
1835
4
yuh
1521
5
468
1287
6
red
1186
7
umebius
1007
8
fukap
907
9
shutta
827
10
tsuji
815
11 ramrun 789
12
tao_s
667
13 karin 656
14 sumida 641
15
homan
633
16
h_tanaka
588
17 DELIGHT 571
18
patapata
502
19
flealog
483
20 tonton 436


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© LOCKON CO.,LTD. All Rights Reserved.