バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > フロント機能 > カテゴリーの子階層を別ブロックに表示する方法。

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
seasoft
投稿日時: 2008/8/6 22:22
対応状況: −−−
登録日: 2008/6/4
居住地:
投稿: 7367
Re: カテゴリーの子階層を別ブロックに表示する方法。
勘ですが、コピー&編集するなら
/data/class/pages/frontparts/bloc/LC_Page_FrontParts_Bloc_Category.php
/data/class_extends/page_extends/frontparts/bloc/LC_Page_FrontParts_Bloc_Category_Ex.php
/data/Smarty/templates/default/bloc/category.tpl
あたりでは?

tao 様のご指摘どおり、データベースへの登録も必要でしょうね。

コピー&編集でなく、編集だけで済ますこともできるかもしれませんけど。


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

nexthp
投稿日時: 2008/8/7 16:51
対応状況: −−−
半人前
登録日: 2008/8/2
居住地: 熊本
投稿: 21
Re: カテゴリーの子階層を別ブロックに表示する方法。
時間が無かったので、CSSで今回は切り抜けました。今後も後追いしたいともいます。

seasoftさんのご指摘どおり、そのあたりを触ってみたいと思います。
DDR
投稿日時: 2008/8/22 11:33
対応状況: −−−
仙人
登録日: 2008/6/21
居住地: 大阪
投稿: 307
Re: カテゴリーの子階層を別ブロックに表示する方法。
私もこの表示したいのですが

新しいブロックに商品カテゴリを表示させることは
コピーなどで出来ると思いますが

カテゴリID別に
■親カテゴリ(ID:1)
└子カテゴリ(ID:2)
■親カテゴリ(ID:5)
└子カテゴリ(ID:6)

新規ブロック
■親カテゴリ(ID:3)
└子カテゴリ(ID:4)

このような形で振り分けすることが可能なんでしょうか?
こういう形の表示形式でしたらアドバイスいただけたら幸いです
john
投稿日時: 2008/9/4 16:32
対応状況: −−−
常連
登録日: 2008/2/20
居住地:
投稿: 34
Re: カテゴリーの子階層を別ブロックに表示する方法。
同様のカスタマイズをしたくて調べていたのですが、

terarin-memo - 現在開いているカテゴリーのサブカテゴリーを表示する 【Tips(1系)】
http://terarin.squares.net/2008/01/post-22.html

で紹介されているやり方ではどうでしょう。
自分でも挑戦してみたのですが、2系では関数を追加するファイル(文中ではdata/lib/slib.phpとあります)がどこなのかわからず、
コレかな?と思ったものにソースを記述してみたら一覧ページが真っ白に…

ぜひ導入したいカスタマイズなので助言をいただければと思います。
lucky7
投稿日時: 2009/1/17 13:33
対応状況: −−−
一人前
登録日: 2008/6/2
居住地: 東京近郊
投稿: 101
Re: カテゴリーの子階層を別ブロックに表示する方法。
貴重な情報ありがとうございます!
私も2系なので真っ白にはなりませんでしたが、
data/lib/slib.phpの該当箇所が分りませんでした。
他の所も修正が必要なのかな?

ちなみに追記したファイルは
SC_Helper_DB.php
SC_DB_DBFactory.php
です。
見当はずれ><

お分かりになる方いらっしゃいますか?


----------------
EC-CUBEバージョン 2.1.2
PHPバージョン PHP 4.3.9
DBバージョン MySQL 4.1.20

gizmo
投稿日時: 2009/2/27 22:13
対応状況: −−−
半人前
登録日: 2009/1/22
居住地:
投稿: 15
Re: カテゴリーの子階層を別ブロックに表示する方法。
いろいろ調べながら、適当な部分や、
不要な構文があるかもしれませんが、
表示されましたので記載します。


管理画面から、
subcategory.tpl を作成します。

引用:


<!--商品カテゴリーここから-->
<div id="maincate">
<h2><!--{$maincate[0].category_name }--></h2>
<div class="maincate_disp">
<!--{$maincate[0].category_disp }-->
</div>
<ul>
<!--{section name=cnt loop=$arrTree}-->
<!--{* 階層を level へ *}-->
<!--{assign var=level value="`$arrTree[cnt].level`}-->
<!--{* カテゴリ名を disp_name へ *}-->
<!--{assign var=disp_name value="`$arrTree[cnt].category_name`"}-->
<!--{assign var=disp_disp value="`$arrTree[cnt].category_disp`"}-->
<!--{* 表示カテゴリのみ *}-->
<!--{if $arrTree[cnt].display == 1}-->
<!--{* 選択したカテゴリ *}-->
<!--{if in_array($arrTree[cnt].category_id, $tpl_category_id) }-->
<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>

<!--{* 未選択カテゴリ *}-->
<!--{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>
</div>
<!--商品カテゴリーここまで-->




ランキングブロック作成と同じ要領で、
データベースで、
dtb_blocに追加された
subcategory.tpl の php_path を下記のように編集します。

frontparts/bloc/subcategory.php


次に、
/html/frontparts/blocに
subcategory.phpを作成してアップロード

category.phpをコピーして、作成します。
内容は下記のとおりです。

引用:


<?php

// {{{ requires
require_once(CLASS_EX_PATH . "page_extends/frontparts/bloc/LC_Page_FrontParts_Bloc_Subcategory.php");

// }}}
// {{{ generate page

$objPage = new LC_Page_FrontParts_BLoc_Subcategory();
register_shutdown_function(array($objPage, "destroy"));
$objPage->init();
$objPage->process();
?>



次に、
/data/class_extends/page_extends/frontparts/bloc に、

LC_Page_FrontParts_Bloc_Subcategory.php
を作成してアップロードします。

引用:


<?php

class LC_Page_FrontParts_Bloc_Subcategory extends LC_Page_FrontParts_Bloc {

// }}}
// {{{ functions

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

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

// 選択中のカテゴリIDを判定する
$arrCategory_id = $objDb->sfGetCategoryId($_GET['product_id'], $_GET['category_id']);

// 選択中のカテゴリID
$this->tpl_category_id = empty($arrCategory_id) ? array(0) : $arrCategory_id;
if($arrCategory_id[0]){
$this->lfGetCatdate($arrCategory_id[0], true, $this);
$this->lfGetCatTree($this->tpl_category_id, true, $this);
}

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

/**
* モバイルページを初期化する.
*
* @return void
*/
function mobileInit() {
$this->tpl_mainpage = MOBILE_TEMPLATE_DIR . "frontparts/"
. BLOC_DIR . 'category.tpl';
}

/**
* Page のプロセス(モバイル).
*
* @return void
*/
function mobileProcess() {
$objSubView = new SC_MobileView();

$this->lfGetMainCat(true, $this);

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

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

// カテゴリツリーの取得
function lfGetCatTree($arrParent_category_id, $count_check = false) {
$objQuery = new SC_Query();
$objDb = new SC_Helper_DB_Ex();
$col = "*";
$from = "dtb_category";
$where = "del_flg = 0 AND parent_category_id =".$arrParent_category_id[0];
$objQuery->setoption("ORDER BY rank DESC");
$arrRet = $objQuery->select($col, $from, $where);

foreach ($arrParent_category_id as $category_id) {
$arrParentID = $objDb->sfGetParents($objQuery, 'dtb_category', 'parent_category_id', 'category_id', $category_id);
$arrBrothersID = SC_Utils_Ex::sfGetBrothersArray($arrRet, 'parent_category_id', 'category_id', $arrParentID);
$arrChildrenID = SC_Utils_Ex::sfGetUnderChildrenArray($arrRet, 'parent_category_id', 'category_id', $category_id);

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

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

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

$this->arrTree = $arrRet;
}

// メインカテゴリーの取得
function lfGetMainCat($count_check = false, &$objSubPage) {
$objQuery = new SC_Query();
$col = "*";
$from = "dtb_category left join dtb_category_total_count using (category_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_category_id', 'category_id', $cat['category_id']);
$cat['has_children'] = count($arrChildrenID) > 0;
$arrMainCat[] = $cat;
}

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

//メインカテゴリのデータ取得
function lfGetCatdate($arrCategory_id, $count_check = false){
$objQuery = new SC_Query();
$objDb = new SC_Helper_DB_Ex();
$col = "*";
$from = "dtb_category";
$where = "del_flg = 0 AND category_id = ".$arrCategory_id;
$objQuery->setoption("ORDER BY rank DESC");
$arrRet = $objQuery->select($col, $from, $where);
$this->maincate = $arrRet;
}
}
?>





とりあえず、以上の作業で、
子カテゴリーが別ブロックで表示されるようになりました。

あとは、CSSでデザインを整えてください。



環境は

2.2.0-beta

MySQL 5.0.33-log

で作成しています。
bibikusu
投稿日時: 2009/6/5 14:12
対応状況: −−−
半人前
登録日: 2008/12/10
居住地:
投稿: 13
Re: カテゴリーの子階層を別ブロックに表示する方法。
今、私の探してるものかと思い試してみました。

凄い近かったので驚いていたのですが問題が・・・

子カテゴリに入った時、子カテゴリから計算されています所です。

>Aこんな機能あったらなぁ
 >A1フロント機能
 >A2理機能
 >A3その他

>Bバグ見つけましたよ!
 >B1フロント機能
 >B2管理機能
  >B4初めての方
 >B3その他


Aにいる時は、ばっちりなんです。
求めていた物なんです。
しかし、A3にいる時、A3に子カテゴリがないので何も表示されません。

僕が求めていた物は、A3にいる時は、Aから見た状態であってほぢいのです。
又、B4にいる時は、Bから見た状態のシステムにしたいと思ってました。

だから、なんだって話なんですけど検索しても見つからないので方法をご存知の方、いましたら是非、教えて下さいm(__)m
seasoft
投稿日時: 2009/6/5 14:25
対応状況: −−−
登録日: 2008/6/4
居住地:
投稿: 7367
Re: カテゴリーの子階層を別ブロックに表示する方法。
斜め読みで、読解しきれていないかもしれませんが・・・

選択カテゴリが属する最上位カテゴリと、その配下のカテゴリを表示したい感じでしょうか?

少し仕様が曖昧かなと思うのは、B1 や B3 を選択したときは、B4 は表示されるのかという点ですね。


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

bibikusu
投稿日時: 2009/6/5 21:47
対応状況: −−−
半人前
登録日: 2008/12/10
居住地:
投稿: 13
Re: カテゴリーの子階層を別ブロックに表示する方法。
上手に説明できなくってすみません。

seasoftさんの言われる通り

選択カテゴリが属する最上位カテゴリと、その配下のカテゴリを表示したいです。

B1やB3を選択したときは、B4も表示されるようにしたいです。

seasoft
投稿日時: 2009/6/5 22:39
対応状況: −−−
登録日: 2008/6/4
居住地:
投稿: 7367
Re: カテゴリーの子階層を別ブロックに表示する方法。
それでしたら、EC-CUBE に
・指定カテゴリが属する最上位カテゴリを返すメソッド
・指定カテゴリの配下のカテゴリを全て返すメソッド
があったと思うので、それを使って、on/off の情報を書き換えれば実現可能な気がします。


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

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


 



ログイン


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

統計情報

総メンバー数は89,650名です
総投稿数は110,158件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2314
5
umebius
2085
6
yuh
1819
7
h_tanaka
1657
8
red
1570
9
mcontact
1323
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.