Under the Bridge

a Picture of the Late Him

MT4.1:カテゴリの並べ替え+表示切り替え+現カテゴリ展開+強調表示つき(カスタムフィールド+ハッシュ変数)

2008年1月14日 18:22 | Writer: yoshi | 記事本文 | コメント(0) | トラックバック(0)

(どんだけ拡張しているんだろうか...)

Movable Type 4.1以降でしか動作しない。

先ほどの「MT4.1:カテゴリの並べ替え+表示切り替え(カスタムフィールド+ハッシュ変数)」を更に拡張し、現在のカテゴリ位置・エントリ位置をstrongタグで強調表示し、さらに現在のカテゴリを展開する機能を付加したサンプル。

早い話が下の画像のようなカテゴリリストを作る。

20080114_05.gif

サンプルコード

コードだけじゃわかりづらいんで、コメントとインデントつけた。


<!-- 使用変数初期化 -------------------------------------------------------------->

<!-- 現在のエントリ名 -->
<MTSetvarBlock name="CurEntName"><MTEntryTitle></MTSetvarBlock>

<!-- 現在のエントリが属するカテゴリ名 -->
<MTSetvarBlock name="EntCatName"><MTEntryCategory></MTSetvarBlock>

<!-- 現在のカテゴリのカテゴリオーダー(カスタムフィールドの値) -->
<MTSetvarBlock name="EntCatOrder"><MTCategorySortOrder></MTSetvarBlock>

<!-- エントリ配列のインデックスを初期化 -->
<MTSetVar name="CatIndex" value="-1">


<!-- 現在のエントリの属するカテゴリのエントリリスト生成(配列) -------------------------------------------------------------->

<MTEntries category="$EntCatName">

	<!-- インデックスをインクリメント -->
	<MTSetvar name="CatIndex" op="inc">

	<!-- ループ中のエントリ名を取得 -->
	<MTSetvarBlock name="LopEntName"><MTEntryTitle></MTSetvarBlock>

	<!-- 現在のエントリ名とループ中のエントリ名を比較して強調表示か通常表示かに分ける。ついでにリンクも作成。データは配列。 -->
	<MTIf name="LopEntName" ne="$CurEntName">
		<!-- 他のエントリ(通常表示) -->
		<MTSetvarBlock name="EntLinkSet[$CatIndex]"><a href="<$MTEntryPermalink$>" title="<$MTEntryTitle$>"><$MTEntryTitle$></a></MTSetvarBlock>
	<MTElse>
		<!-- 現在のエントリ(string強調表示) -->
		<MTSetvarBlock name="EntLinkSet[$CatIndex]"><a href="<$MTEntryPermalink$>" title="<$MTEntryTitle$>"><strong><$MTEntryTitle$></strong></a></MTSetvarBlock>
	</MTIf>
</MTEntries>


<!-- カテゴリリスト生成(ハッシュ) -------------------------------------------------------------->

<MTCategories>

	<!-- ループ中のカテゴリの表示/非表示を取得 -->
	<MTSetvarBlock name="CatShowFlag"><MTCategoryShowGlobal></MTSetvarBlock>

	<!-- カテゴリ並べ替えのためのソートオーダーを取得(カスタムフィールドの値) -->
	<MTSetvarBlock name="LopCatID"><MTCategorySortOrder></MTSetvarBlock>

	<!-- ループ中のカテゴリ名を取得 -->
	<MTSetvarBlock name="LopCatName"><MTCategoryLabel></MTSetvarBlock>

	<!-- 現在のカテゴリ名とループ中のカテゴリ名を比較して強調表示か通常表示かに分ける。ついでにリンクも作成 -->
	<MTIf name="LopCatName" ne="$EntCatName">
		<!-- 他のカテゴリ(通常表示) -->
		<MTSetvarBlock name="CatLinkSet"><a href="<$MTCategoryArchiveLink$>"<MTIfNonEmpty tag="MTCategoryDescription"> title="<$MTCategoryDescription$>"</MTIfNonEmpty>><$MTCategoryLabel$> (<$MTCategoryCount$>)</a></MTSetvarBlock>
	<MTElse>
		<!-- 現在のカテゴリ(強調表示) -->
		<MTSetvarBlock name="CatLinkSet"><a href="<$MTCategoryArchiveLink$>"<MTIfNonEmpty tag="MTCategoryDescription"> title="<$MTCategoryDescription$>"</MTIfNonEmpty>><strong><$MTCategoryLabel$> (<$MTCategoryCount$>)</strong></a></MTSetvarBlock>
	</MTIf>

	<!-- カテゴリリストハッシュの作成 -->
	<MTSetHashVar name="catlist">

		<!-- 表示するカテゴリのみ、データを生成 -->
		<MTIf name="CatShowFlag" eq="1">
			<MTSetVar name="$LopCatID" value="$CatLinkSet">
		</MTIf>

	</MTSetHashVar>
</MTCategories>


<!-- カテゴリリスト+現在のエントリの属するカテゴリのエントリリスト生成(LoopとForの入れ子) -------------------------------------------------------------->

<mt:loop  name="catlist" sort_by="key">

	<!-- カテゴリのリストデータを取得 -->
	<p><$mt:getvar name="__value__"$></p>

	<!-- 現在のカテゴリの場合のみ、エントリリストデータを取得 -->
	<MTIf name="__key__" eq="$EntCatOrder">
		<ul>
			<MTFor var="x" from="0" to="$CatIndex">
				<li><MTGetVar name="EntLinkSet" index="$x"></li>
			</MTFor>
		</ul>
	</MTIf>
	
</mt:loop>

動作と考察

動作は、エントリページであればブログ記事やサイドバーに記述してもOK。カテゴリページなどに貼る場合はコンテキスト系を要調整。

追記

そのまま使えるよういろいろと調整してみた。変なところがあったので修正。コメントはずした。

テストページはこちら。予告なく削除する場合があります。


<MTIf name="main_index">
	<MTSetvarBlock name="CurEntName">None</MTSetvarBlock>
	<MTSetvarBlock name="EntCatName">None</MTSetvarBlock>
</MTIf>
<MTUnless name="main_index">
	<MTIf name="category_archive">
		<MTSetvarBlock name="CurEntName">None</MTSetvarBlock>
		<MTSetvarBlock name="EntCatName"><MTCategoryLabel></MTSetvarBlock>
	<MTElse>
		<MTSetvarBlock name="CurEntName"><MTEntryTitle></MTSetvarBlock>
		<MTSetvarBlock name="EntCatName"><MTEntryCategory></MTSetvarBlock>
	</MTIf>
	<MTSetvarBlock name="EntCatOrder"><MTCategorySortOrder></MTSetvarBlock>
	<MTSetVar name="CatIndex" value="-1">
	<MTEntries category="$EntCatName">
		<MTSetvar name="CatIndex" op="inc">
		<MTSetvarBlock name="LopEntName"><MTEntryTitle></MTSetvarBlock>
		<MTIf name="LopEntName" ne="$CurEntName">
			<MTSetvarBlock name="EntLinkSet[$CatIndex]"><a href="<$MTEntryPermalink$>" title="<$MTEntryTitle$>"><$MTEntryTitle$></a></MTSetvarBlock>
		<MTElse>
			<MTSetvarBlock name="EntLinkSet[$CatIndex]"><a href="<$MTEntryPermalink$>" title="<$MTEntryTitle$>"><strong><$MTEntryTitle$></strong></a></MTSetvarBlock>
		</MTIf>
	</MTEntries>
</MTUnless>
<MTCategories>
	<MTSetvarBlock name="CatShowFlag"><MTCategoryShowGlobal></MTSetvarBlock>
	<MTSetvarBlock name="LopCatID"><MTCategorySortOrder></MTSetvarBlock>
	<MTSetvarBlock name="LopCatName"><MTCategoryLabel></MTSetvarBlock>
	<MTIf name="LopCatName" ne="$EntCatName">
		<MTSetvarBlock name="CatLinkSet"><a href="<$MTCategoryArchiveLink$>"<MTIfNonEmpty tag="MTCategoryDescription"> title="<$MTCategoryDescription$>"</MTIfNonEmpty>><$MTCategoryLabel$> (<$MTCategoryCount$>)</a></MTSetvarBlock>
	<MTElse>
		<MTSetvarBlock name="CatLinkSet"><a href="<$MTCategoryArchiveLink$>"<MTIfNonEmpty tag="MTCategoryDescription"> title="<$MTCategoryDescription$>"</MTIfNonEmpty>><strong><$MTCategoryLabel$> (<$MTCategoryCount$>)</strong></a></MTSetvarBlock>
	</MTIf>
	<MTSetHashVar name="catlist">
		<MTIf name="CatShowFlag" eq="1">
			<MTSetVar name="$LopCatID" value="$CatLinkSet">
		</MTIf>
	</MTSetHashVar>
</MTCategories>
<mt:loop  name="catlist" sort_by="key">
	<p><$mt:getvar name="__value__"$></p>
	<MTIf name="EntCatName" ne="None">
		<MTIf name="__key__" eq="$EntCatOrder">
			<MTIf name="CatIndex" gt="-1">
			<ul>
				<MTFor var="x" from="0" to="$CatIndex">
					<li><MTGetVar name="EntLinkSet" index="$x"></li>
				</MTFor>
			</ul>
			</MTIf>
		</MTIf>
	</MTIf>
</mt:loop>

トラックバック(0)

このブログ記事を参照しているブログ一覧: MT4.1:カテゴリの並べ替え+表示切り替え+現カテゴリ展開+強調表示つき(カスタムフィールド+ハッシュ変数)

このブログ記事に対するトラックバックURL:

コメントする






Categories
Entries
Feed
スポンサードリンク

parts

フィードメーター - Under the Bridge

あわせて読みたい

なかのひと

2008年4月5日開催、MT4LP5

2008 yoshi(apstar)