カラーミーショップのテンプレートをカスタマイズするメモ

カラーミーショップのテンプレートを初めて触ってみたのでメモ。
特徴的な編集方法や、ちょっとしたカスタマイズなど。

テンプレートの構成

画像に alt 属性が指定されていません。ファイル名: basiccolorme1-920x521.png

カラーミーショップでは、すべてのページで「共通テンプレート」を読み込みます。
共通テンプレートには、ヘッダーやフッター、サイドバーなんかが書いてあります。
ページごとのテンプレートは、共通テンプレートにインクルードされます。

ざっくりこんなかんじ

<header role="header">ヘッダー</header>
<main role="main">
	<{include file = $file_name}><!-- ここが各ページのテンプレート -->
</main>
<aside id="sidebar">サイドバー</aside>
<footer role="">フッター</footer>
	
※<{include file = $file_name}>必須

なので、ページによって「サイドバーを表示させない」などの条件分岐は、共通テンプレートに記述します。

共通テンプレートの編集可能な部分

htmlファイルを全部編集できるわけではありません。

ざっくりこんなかんじ
<html>
	<head>~</head>
	<body>
		ここが共通テンプレート
	</body>
</html>

headタグ内を編集できない! というのがひとつミソですが、bodyタグ自体も触れません。
bodyタグに任意のクラスをつける場合は、Javascriptを使うことになるので、個人的にはやらないで済むならそのほうがいいな~と思います。

bodyタグに任意のクラスをつける

<script>
	let elements = document.getElementsByTagName("body");
	elements[0].classList.add("任意のクラス");
</script>

文字コードはEUC(EUC-JP)

コピペで文字化けする場合は、コピー元の文字のエンコーディングを疑うとよいかもしれません。

全商品の一覧

<a href="<{$home_url}>?mode=srh&keyword=">

全商品の一覧を表示する専用タグがないので、キーワード検索結果を利用するようです。

CDNでプラグインなどを使いたい

書けるところに書くしかないようです。。そんなぁ…

Google Analyticsを使いたい

プラン次第のようですが、管理画面から設定可能なようです。
CDN同様に無理やり捻じ込んでも動きましたが、サポートされている方法をとりたいです。
参考:https://shop-pro.jp/manual/ga_config

独自タグ一覧

https://shop-pro.jp/manual/menu_06_02_01

ページ別の条件分岐

<{if $tpl_name == "top"}>
	//トップページ
<{elseif $tpl_name == "product_list"}>
	//商品一覧
<{elseif $tpl_name == "product_srh"}>
	//検索結果
<{elseif $tpl_name == "product"}>
	//商品詳細
<{elseif $tpl_name == "option_stock"}>
	//オプション在庫・値段表
<{elseif $tpl_name == "shopkeeper"}>
	//特定商取引ページ
<{elseif $tpl_name == "privacy"}>
	//プライバシーポリシー
<{elseif $tpl_name == "free1"}>
	//フリーページ(1~10)
<{/if}>

カテゴリーで分岐

カテゴリーには固有IDがあるので、変更される可能性の少ないこの固有IDで分岐させたいところですが、基本的にはカテゴリーIDを取得できないようです。
が、商品一覧ページであれば可能だそうで。

商品一覧:IDで分岐

<{if $smarty.get.cbid == "1234567"}>

IDはカテゴリーページのURLで分かります。

https:// ~ /?mode=cate&cbid=1234567&csid=0
※1234567 がカテゴリーID

商品詳細:IDが取得できないのでカテゴリー名で分岐

<{if $bid_name == "大カテゴリー名"}>

カテゴリー名を変更した場合、併せてテンプレートを修正しなければいけないので注意です。
参考:商品詳細ページで、商品自身が属している「カテゴリー(大)」のIDを取得したい

トップページにカテゴリ別商品リストを表示

トップページのID部分に、商品一覧のクラス部分を抜き出して出力する

<ul id="yourcategory" class="list">
</ul>
<{section name=num loop=$productlist}>
	<li class="list-item">
		<a href="<{$productlist[num].link_url}>">
			<span class="list-thumb" style="background-image: url('<{if $productlist[num].img_url != ""}><{$productlist[num].img_url}><{else}>https://example.com/noimage.png<{/if}>');"></span>
			<span class="list-ttl"><{$productlist[num].name}></span>
			<{if $productlist[num].soldout_flg == false}>
			<span class="list-price"><span class="bold"><{$productlist[num].price}></span></span>
			<{else}>
			<span class="list-price">SOLD OUT</span>
			<{/if}>
		</a>
	</li>
<{/section}>
<script>
if(document.getElementById("yourcategory") != null){
	$.ajax({
		url: '<{$home_url}>/?mode=cate&cbid=1234567&csid=0', //商品一覧ページのURL
		cache: false,
		dataType:'html',
		success: function(html){
			var product_num = 6; //抜き出したい商品の数
			var list = $(html).find('.list-item'); // 抜き出す情報のセレクタを「商品一覧」から指定
			for (var i = 0; i < product_num; i++) {
					if ( !list[i] ) break;
					$('#yourcategory').append(list[i]); // トップページに埋め込みたい場所のセレクタを指定
			}
		}
	});
}
</script>

ページャーの実装

(前後ページへのページ送りではなくて)数字で移動できるページャーは、無料のテンプレートだと実装されてないみたい。。
まんま先人のお世話になりました。ありがとうございます。

<!-- 1ページに表示する商品数(テンプレートの設定に合わせる) -->
<{assign var='products_per_page' value=12}>

<!-- 必要な変数を設定 -->
<{assign var='current_page' value=1}>
<{if $productlist_prev_page != ''}>
	<{assign var='productlist_page_url' value=$productlist_prev_page|regex_replace:'|page=\d+|':'page='}>
	<{assign var='current_page' value=$productlist_prev_page|regex_replace:'|^.*page=(\d+).*|':'$1'}>
	<{assign var='current_page' value=$current_page+1}>
<{elseif $productlist_next_page != ''}>
	<{assign var='productlist_page_url' value=$productlist_next_page|regex_replace:'|page=\d+|':'page='}>
	<{assign var='current_page' value=$productlist_next_page|regex_replace:'|^.*page=(\d+).*|':'$1'}>
	<{assign var='current_page' value=$current_page-1}>
<{/if}>
<{assign var='page_max' value=0}>
<{assign var='tmp_page_count' value=$productlist_num}>
<{section name=page start=1 loop=$productlist_num}>
	<{if $tmp_page_count > 0}>
		<{assign var='page_max' value=$page_max+1}>
	<{/if}>
	<{assign var='tmp_page_count' value=$tmp_page_count-$products_per_page}>
<{/section}>

<!-- ここから表示 -->
<div class="pager">
	<{if $productlist_prev_page != ""}>
		<a href="<{$productlist_prev_page}>">前ページ</a>
	<{/if}>
	<ul class="pager-list">
	<{section name=page start=1 loop=$page_max+1}>
		<{assign var='tmp_page' value=$smarty.section.page.index}>
		<{if $current_page == $tmp_page}>
			<li>
				<span class="current"><{$tmp_page}></span>
			</li>
		<{else}>
			<li>
				<a href="<{$productlist_page_url}><{$tmp_page}>"><{$tmp_page}></a>
			</li>
		<{/if}>
	<{/section}>
	</ul>
	<{if $productlist_next_page != ""}>
		<a href="<{$productlist_next_page}>">次ページ</a>
	<{/if}>
</div>

参考:https://scientre.hateblo.jp/entry/20120612/colormeshop_pagination

コメントする

CAPTCHA