バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

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

フロント機能

新規スレッドを追加する

フラット表示 前のトピック | 次のトピック
投稿者 スレッド
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

で作成しています。
フラット表示 前のトピック | 次のトピック


題名 投稿者 日時
   カテゴリーの子階層を別ブロックに表示する方法。 lucky7 2008/6/21 21:05
     Re: カテゴリーの子階層を別ブロックに表示する方法。 seasoft 2008/6/23 0:31
       Re: カテゴリーの子階層を別ブロックに表示する方法。 lucky7 2008/6/23 0:41
         Re: カテゴリーの子階層を別ブロックに表示する方法。 tao 2008/6/23 23:59
           Re: カテゴリーの子階層を別ブロックに表示する方法。 lucky7 2008/6/24 0:07
             Re: カテゴリーの子階層を別ブロックに表示する方法。 tao 2008/6/24 0:14
               Re: カテゴリーの子階層を別ブロックに表示する方法。 lucky7 2008/6/24 0:27
                 Re: カテゴリーの子階層を別ブロックに表示する方法。 lucky7 2008/6/25 23:19
                   Re: カテゴリーの子階層を別ブロックに表示する方法。 nexthp 2008/8/5 12:30
               Re: カテゴリーの子階層を別ブロックに表示する方法。 nexthp 2008/8/5 14:40
                 Re: カテゴリーの子階層を別ブロックに表示する方法。 seasoft 2008/8/6 22:22
                   Re: カテゴリーの子階層を別ブロックに表示する方法。 john 2008/9/4 16:32
                     Re: カテゴリーの子階層を別ブロックに表示する方法。 lucky7 2009/1/17 13:33
                     » Re: カテゴリーの子階層を別ブロックに表示する方法。 gizmo 2009/2/27 22:13
                         Re: カテゴリーの子階層を別ブロックに表示する方法。 bibikusu 2009/6/5 14:12
                           Re: カテゴリーの子階層を別ブロックに表示する方法。 seasoft 2009/6/5 14:25
                             Re: カテゴリーの子階層を別ブロックに表示する方法。 bibikusu 2009/6/5 21:47
                               Re: カテゴリーの子階層を別ブロックに表示する方法。 seasoft 2009/6/5 22:39
                                 Re: カテゴリーの子階層を別ブロックに表示する方法。 bibikusu 2009/6/6 8:54
                                   Re: カテゴリーの子階層を別ブロックに表示する方法。 bibikusu 2009/6/9 12:16
                                     Re: カテゴリーの子階層を別ブロックに表示する方法。 chrysalis 2009/7/21 22:20
                         Re: カテゴリーの子階層を別ブロックに表示する方法。 rz3 2009/8/3 13:45
                           Re: カテゴリーの子階層を別ブロックに表示する方法。 rz3 2009/8/3 14:21
                         Re: カテゴリーの子階層を別ブロックに表示する方法。 ゲスト 2011/1/21 20:52
                           Re: カテゴリーの子階層を別ブロックに表示する方法。 ytk 2011/3/20 11:48
                             Re: カテゴリーの子階層を別ブロックに表示する方法。 AMUAMU 2011/3/20 19:11
                 Re: カテゴリーの子階層を別ブロックに表示する方法。 nexthp 2008/8/7 16:51
                   Re: カテゴリーの子階層を別ブロックに表示する方法。 DDR 2008/8/22 11:33

 



ログイン


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

統計情報

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

投稿数ランキング

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