SQLの窓 イラストAC フリー素材

2014年02月05日

Windows 8.1 + Visual Studio 2013 + WebGL + Three.js v65

いろいろ調べても見つけられなかったので、自分で確かめました。

このテストでは、Three.js の v65 を使用していますが、Windows8.1 で使うにあたって、OrbitControls がちらつくようになっていたので、v57 と比べて少し変更してちらつかずに視点変更をできるようにしました 



▼ テストに使った内容
Three.js : WebGL限定の Cube テクスチャによる『パノラマ背景』



posted by at 2014-02-05 15:44 | Windows8 Metro style | このブログの読者になる | 更新情報をチェックする

2012年09月29日

『Windows8(C#) 2ページテンプレート』で、2ページ目で HttpClient で JSON データをバインドする

テンプレート

Windows8(C#) 2ページテンプレート

データ

http://textt.net/sworc/20120924055943.txt

JSON処理

JSON.net の文字列から内容の参照のバターンサンプルがわりと全く無かったので作成
Json.NET - James Newton-King

BasicPage1.xaml.cs 内では、直接 DataContext にセットしているので、その時点でバインドされて表示されます。
<!-- HttpClient で取り出すデータの為に追加した TextBox -->
<TextBox
	x:Name="TextBox1"
	HorizontalAlignment="Left"
	Height="26" 
	Margin="128,34,0,0" 
	Grid.Row="1" 
	TextWrapping="Wrap" 
	Text="{Binding Path=id}" 
	VerticalAlignment="Top" 
	Width="143">
</TextBox>


BasicPage1.xaml.cs
namespace App74
{
	public sealed partial class BasicPage1 : App74.Common.LayoutAwarePage
	{
		private HttpClient httpClient;
		private string responseBodyAsText;
		private Class1 class1 = new Class1();

		public BasicPage1()
		{
			this.InitializeComponent();
			this.init();
		}

		private async void init()
		{
			httpClient = new HttpClient();
			httpClient.MaxResponseContentBufferSize = 256000;
			httpClient.DefaultRequestHeaders.Add("user-agent", "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)");
			HttpResponseMessage response = await httpClient.GetAsync("http://textt.net/sworc/20120924055943.txt");
			response.EnsureSuccessStatusCode();

			responseBodyAsText = await response.Content.ReadAsStringAsync();
			class1 = JsonConvert.DeserializeObject<Class1>(responseBodyAsText);
			TextBox1.DataContext = class1;
//			class1.NotifyPropertyChanged("id");

		}

		protected override void LoadState(Object navigationParameter, Dictionary<String, Object> pageState)
		{
		}

		protected override void SaveState(Dictionary<String, Object> pageState)
		{
		}
	}
}

オブジェクトのすべてのプロパティが変更されたことを示すには、PropertyChangedEventArgs の PropertyName プロパティに String.Empty を使います

HttpClient のサンプルソースは、こちらから参照できます。

Microsoft のドキュメントならこのページです。

バイント用のクラス : Class1
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ComponentModel;



namespace App74
{
	class Class1 : INotifyPropertyChanged
	{

		public Class1()
		{
		}

		public event PropertyChangedEventHandler PropertyChanged;

		public string id { get; set; }

		public void NotifyPropertyChanged(string propertyName)
		{
			if (PropertyChanged != null)
			{
				PropertyChanged(this,
					new PropertyChangedEventArgs(propertyName));
			}
		}
	}
}

※ id のみ実装しています

ドキュメントリンク

windows8


posted by at 2012-09-29 13:56 | Windows8 Metro style | このブログの読者になる | 更新情報をチェックする

2012年09月20日

Windows8 の最新版で、C#のテンプレート(Windows ストア)で、ページを追加すると固まるというバグがあるので、テンプレートを作って回避しています。

v6.2 build 9200




「C:\Users\ユーザ名\Documents\Visual Studio 2012\Templates\ProjectTemplates\Visual C#」ディレクトリに「Windows Store」ディレクトリを作成し、その中にテンプレートを入れる

かなり酷いバグです。Windows8 の問題では無く、Visual Studio の問題だとは思いますが、10数人で実行してとてもとても高い確率(ほぼ、殆ど)で発生します。

ページを追加する際に、新しいクラステンプレートファイルがいくつか Common フォルダに追加され、BasicPage1.xaml と BasicPage1.xaml.cs が追加されるのですが( MainPage.xaml と同じ場所 )、その後プロジェクトに登録するところでフリーズします。

ですから、いったん Visual Studio を強制終了させて、それらの追加されたファイルを『既存』として追加登録すれば正常な状態になります・・・が、いちいちフリーズさせてられないので、『クイック スタート: アプリ バーの追加』にある内容を実装してテンプレート化してあります。
( アプリバーの『HELP』をクリックすると、BasicPage1に移動 )

この際、Common フォルダにある StandardStyles.xaml の該当するコメント部分を解除しないと、StaticResource EditAppBarButtonStyle 等がエラーになるのでその処理も済ませてあります。

しかし・・・相当酷いバグですね・・・。

ページをさらに追加したい場合は、BasicPage1.xaml 部分で CTRL+C して CTRL+V すると、通常のエクスプローラと同様にコピーされるので( .cs も同時コピーされます )、名前を BasicPage2.xaml に変更してから、中身の BasicPage1 の 1 を 2 を全て変更するとページ追加になります。( BasicPage1.xaml と BasicPage1.xaml.cs と両方行って下さい )



posted by at 2012-09-20 03:55 | Windows8 Metro style | このブログの読者になる | 更新情報をチェックする

2012年06月14日

Windows8(JavaScript Metro Style 導入) 関連リンク

サンプルコードダウンロード( Metro style - C#, VB.NET, C++, JavaScript )

JavaScript では、世の中の一般的なライブラリが動作します。jQueryThree.js も動作確認済です



API reference for Metro style apps

API 部分はまだ日本語化されていません。

JavaScript

WinJS Namespace

WinJS API は JavaScript で書かれています。 XMLHttpRequest を使う為の使いやすい関数である xhr function が定義されています

※ Windows8 の XMLHttpRequest の POST メソッドのテストの為に、超簡易掲示板を授業中に作成

また、Metro JavaScript は jQuery を元に作られているようで、その中核となる処理が、WinJS.Promise objectPromise.then method です。サンプルコードを読むには、この扱いを知っていないと理解できない部分が多くなりますが、要するに ( 成功, 失敗, プログレス ) という処理を非同期で行う為の仕様です。


Windows.UI.Popups namespace

これはメッセージボックスにあたるものですが、UI 的にはウインドウではなく画面の左右いっぱいに広がる細い帯のようなものになります。

JavaScript のオブジェクト

ここは日本語になっていますが、直訳なのであまり解りやすいものではありません。しかし、Debug オブジェクトがあるのでチェックしておく必要があります。write と writeln メソッドでデバッグ情報を出力します。

JavaScript の参照

ここは JavaScript そのもののリファレンスです。ステートメントで debugger ステートメント をチェックしておいて下さい。これが書かれたところでブレークポイントを設けたのと同じ結果になります。


Windows.Storage namespace

ここは、ローカルファイルのアクセス方法です。サンプルコードに『File access sample』というそのままのものがありますが、最初にアプリ使用するファイルを作成する仕様になっています。これは、セキュリティ上の仕様らしく、Windows で作成したファイルをそののまではアプリからアクセスできません。アプリと関連付けして初めて使えるようになるようです。


WinJS.Namespace Namespace

妙な名前の API ですが、多用されています。参照を統一する為の名前を定義するもので、JavaScript のスコープ外から名称を参照する為に共通仕様的に最初に定義して使います。


LiveSDK

Download the Live SDK
( 日本語ページから行くとなにかまだ挙動がおかしいです )

JavaScript API (Windows 8 Consumer Preview and web)

WindowsConsumerPreview やその他の環境で、Microsoft の Live SDK を試す為の情報

Windows8 Metro(JS) で LiveSDK を使って signin してテキスト表示するだけのサンプルコードの実行

Windows8 で SkyDrive にアップロードするサンプル



アプリの登録やその情報の使い方が慣れて無い人には解りにくいかもしれませんが、Twitter のアプリを作った経験のある人には常識的な内容です。LiveSDK は、Android バージョンもとてもうまく動いています。
( LiveSDK-for-Android のサンプルプロジェクトのビルド手順 )

LiveSDK-for-Android ビルド手順 - NAVER まとめ


posted by at 2012-06-14 07:48 | Windows8 Metro style | このブログの読者になる | 更新情報をチェックする

2012年06月05日

Windows 8 Release Preview のコントロールパネルの Flash Player 設定マネージャ











タグ:Windows8 Flash
posted by at 2012-06-05 14:31 | Windows8 Metro style | このブログの読者になる | 更新情報をチェックする

2012年05月31日

Windows8 の XMLHttpRequest の POST メソッドのテストの為に、超簡易掲示板を授業中に作成

toypark は、オンラインで WEBベースの クライアントアプリがあるので、直接タイプして登録。最初、Seesaa のブログの記事のコメント欄を使ってたら、しばらくしてスパム扱いされて書き込み禁止になってしまったので・・・

で、Windows8 が UTF-8 で、他のキャラクタセットの URL エンコードが必要になったので、ecl.js をベクターからダウンロードして、Windows8 に実装しましたが、普通に動きます。ほんと、このライブラリは良くできています。
<?
header( "Content-Type: text/html; Charset=shift_jis" );
header( "pragma: no-cache" );
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );
header( "Cache-control: no-cache" );

error_reporting(E_ALL ^ E_NOTICE);

ini_set( 'display_errors', "1" );

?>
<html>
<form method="POST">
<textarea name="text"></textarea>
<input type="submit" name="send" value="送信">
</form>
<?
$text = @file_get_contents("./text.log");


if ( $_POST['send'] != "" ) {
    $text .= "<br />\n" . $_POST['text'];
    file_put_contents("./text.log", $text );
}


print $text;
?>
</html>
以下のコードは、Windows8サンプルの『Secondary tiles sample』の中にあります。これは、データを決め打ちで処理していますが、ecl.js は正しく動作しています。
( JavaScript のみで、日本語が Shift_JIS に変換されて URL エンコードされます )

★ コンシューマからリリースの変化で、サンプルの中身も変わったようです。
★ XMLHttpRequest のサンプルは、Metro style banking app with strong authentication sample を見て下さい

    function scenario7RefreshChannels() {
        var serverUrl = document.getElementById("serverUrlField").value;

        // Send the channel to the server
        var xhr = new WinJS.xhr({
            type: "POST",
            url: serverUrl,
            headers: { "Content-Type": "application/x-www-form-urlencoded" },

            // Send the tile id of the secondary tile for handling in your service, in addition to the channelUri
            data: "tileId=abc&channelUri=xyz"

        }).then(function (req) {
            id("scenario7Output").innerHTML += req.response;
        }, function (req) {
            sdkSample.displayError("Could not send channel URI to server: " + req.statusText);
        });
    }
関連する記事

JavaScript のみで、SHIFT_JIS や EUC-JP を UrlEncode に近い Escapeする Escape Codec Library


posted by at 2012-05-31 20:42 | Windows8 Metro style | このブログの読者になる | 更新情報をチェックする

2012年05月16日

Windows8 + LiveSDK のサンプルコードの実行



Live SDK のダウンロード

Live Connect のアプリ管理 (英語) サイトで、Metro スタイル アプリをマイクロソフトのクラウド サービスにアクセスするように構成します。( アプリケーション名を登録して、ID を取得する )

▼ Visual Studio より参照設定


▼ 実行




▼ 承認時に、Microsoft サイトに登録されたアプリケーション情報

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <meta charset="utf-8">
    <title>SkyApp</title>

    <!-- WinJS references -->
    <link href="//Microsoft.WinJS.0.6/css/ui-dark.css" rel="stylesheet">
    <script src="//Microsoft.WinJS.0.6/js/base.js"></script>
    <script src="//Microsoft.WinJS.0.6/js/ui.js"></script>

    <script src="///LiveSDKHTML/js/wl.js"></script>

    <!-- SkyApp references -->
    <link href="/css/default.css" rel="stylesheet">
    <script src="/js/default.js"></script>
</head>
<body>
    <h1>JavaScript Code Sample</h1>
    <div id="signin"></div>
    <label id="info"></label>
    <script>
        WL.Event.subscribe("auth.login", onLogin);
        WL.init({
            scope: ["wl.signin", "wl.basic"]
        });
        WL.ui({
            name: "signin",
            element: "signin"
        });
        function onLogin() {
            WL.api({
                path: "me",
                method: "GET"
            }).then(
                function (response) {
                    document.getElementById("info").innerText =
                        "Hello, " + response.first_name + " " + response.last_name + "!";
                },
                function (responseFailed) {
                    document.getElementById("info").innerText =
                        "Error calling API: " + responseFailed.error.message;
                }
            );
        }
    </script>
</body>
</html>



タグ:Windows8 LiveSDK
posted by at 2012-05-16 18:10 | Comment(0) | Windows8 Metro style | このブログの読者になる | 更新情報をチェックする

2012年05月12日

WindowsConsumerPreview やその他の環境で、Microsoft の Live SDK を試す為の情報

ダウンロード

Live Connect Downloads
Windows8 とWindows Phone の場合 SDK のインストールが必要になります
その他ではそれぞれ違いますが、基本はソースパッケージのダウンロードのようです。

すぐ試せるのは、Code Samples 内の PHP バージョンです。

Windows8 での手順

Live SDK による Windows 8 アプリへのシングル サインオン機能の実装と SkyDrive との連携
( Windows 8 アプリ開発者ブログ )

SDK をインストール後、Live Connect のアプリ管理 (英語) サイトで、Metro スタイル アプリをマイクロソフトのクラウド サービスにアクセスするように構成。

設置方法は英文ですが、SDK ダウンロードページからリンクされているので信頼できそうです。

WEB 版での設置も含めたページはこちらから( 内容は同じだと思います )

WEB からのアクセス

アップロードやダウンロードはできませんが、参照は簡単にできるようで、日本語の記事があります

使ってみよう! Windows Live SDK/API



タグ:Windows8 LiveSDK
posted by at 2012-05-12 12:47 | Comment(0) | Windows8 Metro style | このブログの読者になる | 更新情報をチェックする

2012年04月13日

アプリケーションバーを追加する : Win8 Metro(JS)

サンプルID

JavaScript and HTML5 touch game sample

オプションの意味についてはこちらのリファレンスを参考にします

<body>
    <!-- App bar -->
    <div id="appbar" data-win-control="WinJS.UI.AppBar" aria-label="Command Bar" data-win-options="{
        commands:[
            {id:'home', label:'Menu', icon:'&#xE10F;', section: 'global', onclick: GameManager.navigateHome},
            {id:'play', label:'Game', icon:'&#xE102;', section: 'global', onclick: GameManager.navigateGame},
            {id:'rules', label:'Rules', icon:'&#xE104;', section: 'global', onclick: GameManager.navigateRules},
            {id:'scores', label:'Scores', icon:'&#xE113;', section: 'global', onclick: GameManager.navigateScores},
            {id:'credits', label:'Credits', icon:'&#xE10C;', section: 'global', onclick: GameManager.navigateCredits},
            {id:'newgame', label:'New', icon:'&#xE10E;', section: 'selection', onclick: GameManager.game.newGame},
            {id:'pause', label:'Pause', icon:'&#xE103;', section: 'selection', onclick: GameManager.game.togglePause}
        ]}"></div>
</body>

"selection"は、選択したオブジェクトのコンテキスト内で表示するように意図されているコマンド
のためのものです。"global"は、常に特定のページに表示するコマンドです。

関連する Microsoft の暫定ドキュメント

メトロスタイルのアプリ用ナビゲーションの設計

GameManager はオブジェクトでは無く、このアプリで定義されている名前空間です
( メソッドは、default.js 内で定義されているユーザーメソッドです )

    WinJS.Namespace.define("GameManager", {
        navigateHome: navigateHome,
        navigateGame: navigateGame,
        navigateRules: navigateRules,
        navigateScores: navigateScores,
        navigateCredits: navigateCredits,
        showPreferences: showPreferences,
        onBeforeShow: onBeforeShow,
        onAfterHide: onAfterHide,
        game: game,
        state: state,
        assetManager: assetManager,
        scoreHelper: scoreHelper,
        gameId: gameId,
        touchPanel: touchPanel
    });



posted by at 2012-04-13 22:19 | Comment(0) | Windows8 Metro style | このブログの読者になる | 更新情報をチェックする

2012年03月19日

Win8 Metro(JS) : Split Application : categoryPage.js


(function () {
	'use strict';

	// Custom event raised after the fragment is appended to the DOM.
	WinJS.Application.addEventListener('fragmentappended', function handler(e) {
		if (e.location === '/html/categoryPage.html') { fragmentLoad(e.fragment, e.state); }
	});

	function updateForLayout(lv, layout) {
		var layoutState = Windows.UI.ViewManagement.ApplicationLayoutState;
		if (layout === layoutState.snapped) {
			lv.layout = new WinJS.UI.ListLayout();
		} else {
			lv.layout = new WinJS.UI.GridLayout();
		}
		lv.refresh();
	}

	function layoutChanged(e) {
		var list = document.querySelector('.categoryList');
		if (list) {
			var lv = WinJS.UI.getControl(list);
			updateForLayout(lv, e.layout);
		}
	}

	function fragmentLoad(elements, options) {
		try {
			var appLayout = Windows.UI.ViewManagement.ApplicationLayout.getForCurrentView();
			if (appLayout) {
				appLayout.addEventListener('layoutchanged', layoutChanged);
			}
		} catch(e) { }

		WinJS.UI.processAll(elements)
			.then(function () {
				var lv = WinJS.UI.getControl(elements.querySelector('.categoryList'));
				WinJS.UI.setOptions(lv, {
					dataSource: pageData.groups,
					itemRenderer: elements.querySelector('.itemTemplate'),
					oniteminvoked: itemInvoked,
				});
				updateForLayout(lv, Windows.UI.ViewManagement.ApplicationLayout.value);
			});

		return;
	}
	
	function itemInvoked(e) {
		var group = pageData.groups[e.detail.itemIndex];
		WinJS.Navigation.navigate('/html/splitPage.html', { group: group });
	}

	// The getGroups() and getItems() functions contain sample data.
	// TODO: Replace with custom data.
	function getGroups() {
		var colors = ['rgba(209, 211, 212, 1)', 'rgba(147, 149, 152, 1)', 'rgba(65, 64, 66, 1)'];
		var groups = [];

		for (var i = 0; i < 12; i++) {
			var even = (i % 2) === 0;
			groups.push({
				key: 'group' + i,
				title: 'Collection title lorem ' + i,
				backgroundColor: colors[i % colors.length],
				label: 'Eleifend posuere',
				description: even ? '?Sed nisl nibh, eleifend posuere.' : '?Sed nisl nibh, eleifend posuere laoreet egestas, porttitor quis lorem.',
				fullDescription: '? Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum.' + (even ? '' : ' ? Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum.')
			});
		}

		return groups;
	}

	function getItems() {
		var colors = ['rgba(209, 211, 212, 1)', 'rgba(147, 149, 152, 1)', 'rgba(65, 64, 66, 1)'];
		var items = [];

		for (var g = 0, gl = pageData.groups.length; g < gl; g++) {
			var numItems = g % 2 === 0 ? 12 : 9;
			for (var i = 0; i < numItems; i++) {
				items.push({
					group: pageData.groups[g],
					key: 'item' + i,
					title: g + '.' + i + (i % 2 === 0 ? ' ?Sed nisl nibh, eleifend posuere.' : ' ?Sed nisl nibh, eleifend posuere laoreet egestas, porttitor quis lorem.'),
					subtitle: 'Phasellus faucibus',
					backgroundColor: colors[i % colors.length],
					content: (new Array(5)).join('<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Typi non habent claritatem insitam; est usus legentis in iis qui facit eorum claritatem. Investigationes demonstraverunt lectores legere me lius quod ii legunt saepius. Claritas est etiam processus dynamicus, qui sequitur mutationem consuetudium lectorum. Mirum est notare quam littera gothica, quam nunc putamus parum claram, anteposuerit litterarum formas humanitatis per seacula quarta decima et quinta decima. Eodem modo typi, qui nunc nobis videntur parum clari, fiant sollemnes in futurum.</p>'),
					description: '? Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.'
				});
			}
		}

		return items;
	}

	var pageData = {};
	pageData.groups = getGroups();
	pageData.items = getItems();

	WinJS.Namespace.define('categoryPage', {
		fragmentLoad: fragmentLoad,
		itemInvoked: itemInvoked
	});
})();



posted by at 2012-03-19 18:07 | Comment(0) | Windows8 Metro style | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します


Android SDK ポケットリファレンス
改訂版 Webデザイナーのための jQuery入門
今すぐ使えるかんたん ホームページ HTML&CSS入門
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX