はじめに

AssetExifプラグインはイメージファイルと一緒に表示させることでその効果を期待できます。ギャラリーページで使うことを前提に構築フロー・構築に役立つスクリプト・管理などについてご紹介します。

フォトギャラリー構築

ここで紹介している通りにテンプレートカスタマイズや新規テンプレート作成、管理フローなどを学ぶことでスムーズにギャラリーページの構築・管理ができるようになります。

javascriptフレームワークを使ってギャラリー構築

jQuery(javascriptフレームワーク)などを使ってスムーズに表示できるギャラリーページを構築してみましょう。

ギャラリーページ専用スクリプト

シチュエーションや好みに合わせて、以下ご紹介するスクリプトの中からお好きなものを選び、ご自分のMovable Typeに実装してみてください。選ぶポイントは実際に自分で触ってみることです。数十枚のイメージファイルをクリックで閲覧するといった作業を行い、見る側から扱いやすい(ユーザーの使いやすい)スクリプトを選ぶことをオススメします。

実装方法については同カテゴリ別ページにてご紹介します。尚、サンプルギャラリーページにて表示しているExif情報はすべての項目表示となっています。実際にお使い構築されるときには、プラグイン画面にて必要な項目を指定するといいですね。

  • Highslide JS - JavaScript thumbnail viewer
    一番のオススメスクリプトです。ユーザーの開いている画面のサイズに合わせてイメージファイルの大きさが変更されます。Exif情報などをキャプションとして表示させる場合にイメージファイル右側表示できたり、playモードなどもあります。細かい設定などもできるので見る側からは優れたスクリプトだと思います。
    サンプルはこちらHighslideJSをごらんください。

    jQueryとHighslideJSの組合せでJSONを読み込んで表示するパターンもご覧ください。JSONHighslideJS

  • Galleriffic | A jQuery plugin for rendering fast-performing photo galleries
    jQueryギャラリープラグインの中では一番のオススメです。数多くのイメージファイルのサムネイルをページネーションで分割表示でき、playモード機能もついていて、こちらも見る側からすれば扱いやすいギャラリープラグインです。
    サンプルはこちらGallerifficをごらんください。

  • jQuery lightBox plugin
    photoviewerの中で人気があるLightBoxです。写真だけであれば使っている方も多く扱いやすいかもしれないですが、Exif情報など写真に関する情報をキャプションとして追加する場合、画面からはみ出して見えなくなる場合があります。また、play機能はありません。写真に合わせてnext・prevボタンのクリック位置などが変化するということを考えると見る側からは扱いにくいかとも思われます。人気があるのでご紹介しておきます。
    サンプルはこちらLightboxをごらんください。

  • InnerFade with jquery
    イメージを一定間隔で切り替え表示(フェード)するプラグインです。ちょっとしたアイキャッチやウィジットとして、ギャラリーページへの誘導目的として、最新イメージを数枚紹介する目的で使ってみるといいかもしれません。ユーザーからは見てみたいイメージファイルを選ぶことができないのでギャラリーとしての役目は薄いです。JSONと併せて使うといいですね。
    サンプルはこちらinnerfadeをごらんください。

  • s3Slider jQuery plugin
    こちらもinnerfadeと同じ感じのイメージを一定間隔で切り替え表示(フェード)するプラグインです。キャプション表示でちょっとお洒落な感じな演出があるのでこちらもアイキャッチなどで使ってみるといいですね。こちらもJSONと併せて使ってみるといい感じ演出ができると思います。
    サンプルはこちらS3sliderをごらんください。

その他参考リソース

とりあえず、いくつかのGalleryプラグインを紹介しました。その他にもまだ何種類もあります。以下、参考リソースよりあなたのイメージするシチュエーションにぴったりのプラグインを探して、実装してみてください。

今後も使えそうなプラグインがあありましたら、本ページでも実装・紹介するつもりでいます。

知っておくと便利なフロー

イメージファイルアップロード

イメージファイルを一つずつアップロードするほど面倒な作業はありません。そんな面倒な作業をスマートに行えるプラグインがありますのでご紹介しておきます。

ArchiveUploader | MovableType.org - Home of the MT Community
http://plugins.movabletype.org/archiveuploader-7/
MT > ArchiveUploader > ArchiveUploader の使い方 - ToI

国内のTOI企画さんが作られた一括アップロードができるプラグインです。

数十枚のイメージファイルを圧縮し、プラグイン画面から圧縮ファイルをアップロードすることで数秒ですべてのイメージファイルをアップロード、アッセトアイテムとしてシステムに登録することができます。

今のところトータルで4MBほどまでのファイル容量まではアップロードできています。あまり大きな容量は受け付けてくれませんので注意です。

アイテムの管理

アップロードしたファイルを管理するのはダッシュボード→アイテムの管理ページとなります。すべてのアイテムを整理するのにタグを付けて整理するといいです。

hint_manageitem.png

表示オプションを100行に設定し、サムネイルを見て該当するアイテムイメージファイルにチェックを付けます。あとはアクションメニューから[タグの追加]を選択し実行することで複数イメージファイルを一括で整理することができます。

<MTAssets type="image" tag=""></MTAssets>テンプレートタグでタグで表示内容を分けることができますので、上手にタグを付けることでキレイにイメージファイルを整理表示することが可能となります。

複数タグで整理

タグ付けもフォルダ管理(フォルダで分けて管理する)と同じ要領で作業するといいですね。対象>カテゴライズ>日付>任意の順で複数タグ付けすることでさまざまなパターンのイメージファイル表示が可能となります。

情報発信するという前提で考えるとさまざまなパターンを用意するとユーザーにも喜ばれると思います。イメージファイルのリソースは同じですのでデスクトップで同じファイルを重複保存する感覚とは異なります。ちょっとコードを書き換える(MTAssets 属性tag="")だけなんです。

例)景色>夜景>兵庫県>0905(9年5月)>ズームレンズ>レンズ機種名>ベスト
景色,夜景,兵庫県,0905,ズーム,Nikon70mm-200mmZoom,best,favorite

複数タグ付けすることで技術的な情報を整理集約して発信することができるようになります。

ギャラリーページ構築フロー

ギャラリーページを構築するフロー(流れ)を作業前に知っておくことでスムーズに進めることができます。全体の流れをご紹介しておきます。

  1. スクリプト(javascriptフレームワーク)ダウンロード・解凍。
  2. FTPなどで作成ページのウェブサイト、インデックスページと同じ階層にjsフォルダ・cssフォルダを新規作成。(※すでに作成されている場合は作業必要なし)
  3. ダウンロードしたファイルの中からjsスクリプトはjsフォルダに、cssファイルはcssフォルダにアップロードする。

MTダッシュボードでの作業。

  1. 新規カテゴリ作成(ギャラリーカテゴリを作成する)
  2. イメージファイルを分類表示するならギャラリーカテゴリ下に新規サブカテゴリを必要分作成する。
    (※MTAssetsブロックタグ属性tagでイメージファイルにタグ付けを行いファイル分類するので、サブカテゴリ名はイメージファイルにタグ付けした名前だと解りやすい。)
  3. ダッシュボード→[デザイン]→[テンプレートページ >アーカイブテンプレート]にてカテゴリページの編集(タグ追加:カテゴリ別テンプレート切り替えの条件分岐・モジュールを追加するなど)。
  4. ダッシュボード→[デザイン]→[テンプレートページ >テンプレートモジュール]にて 新規モジュールテンプレートを2つ作成。一つは<head></head>内にjavascriptフレームワークを追加するためのモジュール、二つ目にはMTAssetブロックタグを使ってイメージファイルをリスト表示させるためのモジュール。
  5. イメージファイルをAirchiveUploaderを使って、スムーズにアップロード登録。
  6. ダッシュボード→[一覧]→[アイテムの管理]ページにてタグ付けなどアイテム管理。
  7. カテゴリページのみ再構築
  8. ギャラリーページ構築完了。テスト

上記の作業を一通りこなし慣れもありますが、2時間程度で構築できる作業となります。

本ページにてサンプルテンプレートを配布(デフォルトテンプレート準拠)していますので、それらをコピーペーストすることで作業をスムーズに進めることも可能です。

ギャラリー構築作業方法(HTML)

本サイトが推奨するHighslideJSを使ってギャラリー構築する作業内容をご紹介します。新規カテゴリにてギャラリーページを構築。カテゴリ名は”フォトギャラリー”、サブカテゴリ”flower”、”wedding”、”portrait”の3つを作成する前提で作業内容を紹介していきます。

スクリプトDL・解凍

まず、HighslideJSのスクリプトを本家サイトからダウンロードします。尚、このスクリプトは非商用サイトのみフリーで扱えるスクリプトですので使用できるサイトなど規約に注意してください。有料で商用サイトにおいて使用することができます。
ダウンロードしたスクリプトを解凍します。highslideフォルダが生成されます。

jsフォルダ・cssフォルダ作成・スクリプトアップロード

ギャラリーページを構築するブログのインデックステンプレートと同じ階層にjsフォルダ、cssフォルダを作成します。(すでにある場合は既存フォルダを使用します。これは、jsファイル、cssファイルを管理しやすくするために行います。ご自分ですでにファイル管理基準をお持ちの方はそちらに合わせて作業を行ってください。)

スクリプトアップロード

FTPソフトを使ってjsフォルダの中にhighslideフォルダをすべてをアップロードします。今回highslideJSについてはjsフォルダの中にcssファイル・imageファイルなども一緒にアップロードします。(すべてパッケージ化されていますので、異なる階層に移した場合、コード編集の手間がかかる為)

新規カテゴリ作成

ダッシュボード→[カテゴリ]にて”フォトギャラリー”で新規カテゴリ(トップカテゴリ)作成します。
出力ファイル/フォルダ名を英字にて正しいアドレス(photogallery)に修正。次に”フォトギャラリー”カテゴリの中に”flower”、”wedding”、”portrait”の名前で新規サブカテゴリ作成。先ほどと同じく出力ファイル名を正しくアドレスに修正。カテゴリ作成後に再構築。

テンプレート(カテゴリ別ブログ記事リスト)の編集

ダッシュボード→[デザイン]→[テンプレート]でテンプレートを編集します。カテゴリ毎でのテンプレートを切り替え表示させるための編集です。
アーカイブテンプレートの中の”カテゴリ別ブログ記事リスト”を編集。クリックでテンプレートを開きます。

カテゴリ毎でのテンプレート切り替えは条件分岐タグを使います。今回はjavascriptを読み込ませますので<head></head>内で条件分岐、実際にメイン部分にてイメージファイルを表示させますので<body></body>内のメイン部分で条件分岐のテンプレートタグを追加します。

変数設定(2つ)

※リリースページ開設当初誤った内容を記述しておりました。申し訳ございません。

<MTSetVarBlock name="top_cat_name"><MTTopLevelParent><$MTCategoryLabel$></MTTopLevelParent></MTSetVarBlock>
<MTSetVarBlock name="cat_name"><$MTCategoryLabel$></MTSetVarBlock>

カテゴリ別ブログ記事リストの最初の1行目に変数をセットするMTSetVerBlockを2つ追加。これはトップカテゴリ名を変数top_cat_nameの中に代入、カテゴリ名を変数cat_nameの中に代入し、以下のMTIf条件分岐タグでtop_cat_name 、cat_nameの値を検証、変数を各MTテンプレートタグ属性で使う為にセットします。

参照:

MTSetVarBlock | テンプレートタグリファレンス
http://www.movabletype.jp/documentation/appendices/tags/setvarblock.html

条件分岐タグ追加

<head></head>内にjsスクリプトを追加するための条件分岐タグを追加します。</head>の前に以下のコードを追加します。

<MTIf name="cat_name" eq="フォトギャラリー">
<MTElse>
	<MTIfIsAncestor child="flower">
		<$mt:Include module="JS_HighslideJS"$>
	</MTIfIsAncestor>
	<MTIfIsAncestor child="wedding">
		<$mt:Include module="JS_HighslideJS"$>
	</MTIfIsAncestor>
	<MTIfIsAncestor child="portrait">
		<$mt:Include module="JS_HighslideJS"$>
	</MTIfIsAncestor>
</MTIf>

コード最上部に追加したMTSetVarBlockを使っての変数cat_nameの値とeq="カテゴリ名"でマッチするかの条件分岐を行い。<MTElse>で条件に当てはまらない場合の振る舞いも追加します。その中に<MTIfIsAncestor child="サブカテゴリー名">を使って、該当するサブカテゴリであればモジュールテンプレートの内容を挿入するという形にしています。挿入するモジュールのなかにHighslideJSのスクリプトを追加記述します。

この条件分岐でフォトギャラリー以外のカテゴリには指定するjsスクリプトは挿入されないことになります。またフォトギャラリーカテゴリにもjsスクリプトは挿入されません。(このためにこの条件分岐を行っています)

参照:

MTIf | テンプレートタグリファレンス
http://www.movabletype.jp/documentation/appendices/tags/if.html
MTIfIsAncestor | テンプレートタグリファレンス
http://www.movabletype.jp/documentation/appendices/tags/ifisancestor.html

モジュールのネーミング

後々のことを考えて管理しやすいモジュール名をつけるようにします。カテゴリ別で挿入する(以下インクルード)モジュール名には、カテゴリ名を付けることでモジュールリストをみても連想できるようにわかりやすいネーミングを。

今回body内のイメージ・Exif等のHTMLタグについては、Asset_カテゴリ名(英字)等でモジュール管理面でもわかりやすいネーミングにします。jsスクリプトはJS_スクリプト名でもしくは+カテゴリ名(英字)で。

body内条件分岐タグ追加

body内での条件分岐を追加します。デフォルトのカテゴリ別ブログ記事リストのコードで<div id="content-inner">以下に条件分岐タグを追加します。※今回は条件分岐の変数がtop_cat_nameとなっていることに注意してください。

            <div id="content">
                <div id="content-inner">
<MTIf name="top_cat_name" eq="フォトギャラリー">
					<MTInclude module="Asset_PhotoGallery">
<MTElse>
                    <div id="alpha">
                        <div id="alpha-inner">
<mt:If name="datebased_archive">
                            <mt:Ignore><!-- Title for category-monthly entry listings --></mt:Ignore>
                            <h1 id="page-title" class="archive-title"><$mt:ArchiveTitle$>アーカイブ</h1>
<mt:Else>
                            <mt:Ignore><!-- Title for category entry listings --></mt:Ignore>
                            <h1 id="page-title" class="archive-title"><em><$mt:ArchiveTitle$></em>の最近のブログ記事</h1>
</mt:If>


<mt:Ignore><!-- Limit number of entries to the number set in Blog Entry Settings --></mt:Ignore>
<mt:Unless name="datebased_archive"><$mt:Var name="limit" value="auto"$></mt:Unless>
<mt:Entries limit="$limit">
                            <mt:Ignore><!-- Use the Entry Summary module for each entry published on this page --></mt:Ignore>
                            <$mt:Include module="ブログ記事の概要"$>
</mt:Entries>


                            <div class="content-nav">
                                <mt:ArchivePrevious><a href="<$mt:ArchiveLink$>">« <$mt:ArchiveTitle$></a> |</mt:ArchivePrevious>
                                <a href="<$mt:Link template="main_index"$>">メインページ</a> |
                                <a href="<$mt:Link template="archive_index"$>">アーカイブ</a>
                                <mt:ArchiveNext>| <a href="<$mt:ArchiveLink$>"><$mt:ArchiveTitle$> &raquo;</a></mt:ArchiveNext>
                            </div>


                        </div>
                    </div>


                    <$mt:Include module="サイドバー"$>

</MTIf>
                </div>
            </div>

今回は、メインコンテンツ部分すべてをフォトギャラリーしますので上記のように条件分岐コードを追加します。

また、サブカテゴリも含めての個別条件分岐タグを追加してもいいのですが、今回はすべてのトップカテゴリでカテゴリ別テンプレートを切り替えるという前提で考え、あまりややこしくならないように(可読しやすいように)トップカテゴリ内での条件分岐(サブカテゴリ別テンプレートの切り替え)はインクルードするモジュールの中で行うように設定します。このようにすることで他カテゴリでの条件分岐を追加する場合、<MTElse>前に

<MTElseIf name="top_cat_name" eq="他カテゴリ名">
	<$mt:Include module="Another_Category_Contents"$>

上記コードを追加するだけで見通しのいいコードを記述することができます。

<MTElse>を使って条件に合わない場合の振る舞いで元からのコードになるようにします。</MTIf>をモジュールインクルードサイドバー下に記述します。

以上で保存ボタンをクリック。保存することでレイアウト右側インクルードモジュールコンテンツに新規モジュール作成のリンクが生成されますので、そちらをクリックして新規モジュール作成作業に移ります。もしくは、テンプレートページに戻り、モジュールテンプレートで新規モジュール作成でインクルードするモジュールを作成します。

新規モジュールの作成

<head></head>内でのインクルードモジュール<$mt:Include module="JS_HighslideJS"$>の作成、以下のコードとなります。さらに詳しい設定については、Highslide JS API Referenceをご覧になって設定を変えてみてください。以下は、本ギャラリーと同じ設定コードとなります。

<link rel="stylesheet" type="text/css" href="<$MTBlogURL$>js/highslide/highslide.css" />
<script type="text/javascript" src="<$MTBlogURL$>js/highslide/highslide-with-gallery.packed.js"></script>
<script type="text/javascript">
	hs.graphicsDir = '<$MTBlogURL$>js/highslide/graphics/';
	hs.align = 'center';
	hs.transitions = ['expand', 'crossfade'];
	hs.outlineType = 'rounded-white';
	hs.fadeInOut = true;
	hs.dimmingOpacity = 0.8;
	hs.captionOverlay.position = "rightpanel";
	hs.captionOverlay.width = "400px";
	// define the restraining box
	hs.useBox = true;
	hs.width = 800;
	hs.height = 500;

	// Add the controlbar
	hs.addSlideshow({
		//slideshowGroup: 'group1',
		interval: 3000,
		repeat: true,
		useControls: true,
		fixedControls: 'fit',
		overlayOptions: {
			opacity: 1,
			position: 'bottom center',
			hideOnMouseOut: true
		}
	});


</script>

<body></body>内でのインクルードモジュール<$mt:Include module="Asset_PhotoGallery"$>の作成、以下のコードとなります。

<div id="gallery">
	<div id="gallery-inner">
	
		<div id="gallery-nav">
<MTSubCategories category="フォトギャラリー">
<MTSubCatIsFirst><ul></MTSubCatIsFirst>
<li><a href="<$MTCategoryArchiveLink$>" title="<$MTCategoryLabel$>"><$MTCategoryLabel$></a></li>
<MTSubCatIsLast></ul></MTSubCatIsLast>
</MTSubCategories>
		</div>
		
		<div id="gallery-contents">
<MTIfIsAncestor child="$cat_name">
	<MTAssets type="image" tag="$cat_name">
		<MTAssetsHeader>
			<ul id="highslide">
		</MTAssetsHeader>
        		<li>
            		<a class="highslide" href="<$MTAssetThumbnailURL width="600"$>" onclick="return hs.expand(this)"><img src="<$MTAssetThumbnailURL height="100"$>" alt="<$MTAssetLabel$>" height="100" /></a>
					<ul id="assetexif">
						<$MTAssetExif$>
					</ul>
				</li>
		<MTAssetsFooter>
			</ul>
		</MTAssetsFooter>
	</MTAssets>
</MTIfIsAncestor>
		</div>
		
	</div>
</div>

フォトギャラリーカテゴリにてサブカテゴリのナビゲーション表示を行うために<MTSubCategories category="フォトギャラリー ">カテゴリ指定でサブカテゴリリスト表示を行います。

次に<MTIfIsAncestor child="$cat_name">でchild属性にcat_nameの変数を代入できるように$をつけて$cat_nameにします。これでフォトギャラリーカテゴリのサブカテゴリ3つともにそれぞれ違う内容が表示されるようになります。

また、MTAssetsタグでtag属性に$cat_nameを指定することでサブカテゴリ名と同じタグを付けたイメージだけが生成されるようになるわけです。コードの短縮を考えた場合、このパターンがベストかと思われます。それからサブカテゴリナビゲーションもすべてのサブカテゴリに表示されるようになります。データを整理表示するのを考えた場合、サブカテゴリ名は英数字で作成することが望ましいです。

参照:

MTSubCategories | テンプレートタグリファレンス
http://www.movabletype.jp/documentation/appendices/tags/subcategories.html
MTAssets | テンプレートタグリファレンス
http://www.movabletype.jp/documentation/appendices/tags/assets.html

※ウィジット→カテゴリアーカイブでカテゴリ表示を行っている方へ。

以下カテゴリ内記事のカウントでリンク表示有無の条件分岐をはずすようにしなければ、各ページからギャラリーへのリンクが生成されませんので気をつけてください。

<mt:If tag="CategoryCount">
<mt:else>
</mt;If>

参照:

MTCategoryCount | テンプレートタグリファレンス
http://www.movabletype.jp/documentation/appendices/tags/categorycount.html

※カテゴリ毎でのテンプレート別表示は、さまざまな方法が考えられます。可読性やソースコードの再帰性のよいように自分なりに書き換えて実装してみるのがいいかと思います。今回ご紹介した方法はほんの一例です。

以上でカテゴリテンプレートの編集は終了です。保存ボタンをクリックし、後はギャラリーページ構築フローの通りにArchiveUploaderを使ってイメージファイルをスムーズにアップロード・登録、アイテムの管理ページにてアイテム毎にタグ付け、最後にすべてのページの再構築をすることでギャラリーページを構築することができます。

ギャラリー構築方法(JSON)

本サイトが推奨するHighslideJSを使ってJSONデータを使ってのギャラリー構築する作業内容を、トップカテゴリ"フォトギャラリー"で構築することを前提にご紹介します。

ギャラリー構築方法(HTML)を参考に、カテゴリ作成、テンプレートページ編集>変数設定、<head></head>内条件分岐タグ追加、<body></body>内条件分岐タグ追加までの作業を進めてください。尚、トップカテゴリのみの表示ですので余分な作業を行わないように気をつけてください。以下一通り作業を済ませた状態でのサンプルコードとなります。

テンプレート(カテゴリ別ブログ記事リスト)の編集

<head></head>内に条件分岐でインクルードするモジュールはJSONを読み込み表示させるためのスクリプトを配置するインクルードモジュールを以下のコードのように追加します。

<MTIf name="top_cat_name" eq="フォトギャラリー">
		<$mt:Include module="JS_jQueryJSON"$>
		<$mt:Include module="JS_HighslideJS"$>
</MTIf>
<MTSetVarBlock name="top_cat_name"><MTTopLevelParent><$MTCategoryLabel$></MTTopLevelParent></MTSetVarBlock>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" id="sixapart-standard">
<head>
    <$mt:Include module="HTMLヘッダー"$>
    <title><$mt:BlogName encode_html="1"$>: <$mt:ArchiveTitle$>アーカイブ</title>
<mt:Ignore>
    <!-- Include Next and Previous links if publishing a date-based archive -->
</mt:Ignore>
<mt:If name="datebased_archive">
    <mt:ArchivePrevious><link rel="prev" href="<$mt:ArchiveLink$>" title="<$mt:ArchiveTitle encode_html="1"$>" /></mt:ArchivePrevious>
    <mt:ArchiveNext><link rel="next" href="<$mt:ArchiveLink$>" title="<$mt:ArchiveTitle encode_html="1"$>" /></mt:ArchiveNext>
</mt:If>
<MTIf name="top_cat_name" eq="フォトギャラリー">
		<$mt:Include module="JS_jQueryJSON"$>
		<$mt:Include module="JS_HighslideJS"$>
</MTIf>
</head>
<body id="<$mt:BlogTemplateSetID$>" class="mt-archive-listing mt-<$mt:Var name="archive_class"$> <$mt:Var name="page_layout"$>">
    <div id="container">
        <div id="container-inner">


            <$mt:Include module="バナーヘッダー"$>


            <div id="content">
                <div id="content-inner">
<MTIf name="top_cat_name" eq="フォトギャラリー">
					<MTInclude module="Asset_PhotoGallery">
<MTElse>
                    <div id="alpha">
                        <div id="alpha-inner">
<mt:If name="datebased_archive">
                            <mt:Ignore><!-- Title for category-monthly entry listings --></mt:Ignore>
                            <h1 id="page-title" class="archive-title"><$mt:ArchiveTitle$>アーカイブ</h1>
<mt:Else>
                            <mt:Ignore><!-- Title for category entry listings --></mt:Ignore>
                            <h1 id="page-title" class="archive-title"><em><$mt:ArchiveTitle$></em>の最近のブログ記事</h1>
</mt:If>


<mt:Ignore><!-- Limit number of entries to the number set in Blog Entry Settings --></mt:Ignore>
<mt:Unless name="datebased_archive"><$mt:Var name="limit" value="auto"$></mt:Unless>
<mt:Entries limit="$limit">
                            <mt:Ignore><!-- Use the Entry Summary module for each entry published on this page --></mt:Ignore>
                            <$mt:Include module="ブログ記事の概要"$>
</mt:Entries>


                            <div class="content-nav">
                                <mt:ArchivePrevious><a href="<$mt:ArchiveLink$>">« <$mt:ArchiveTitle$></a> |</mt:ArchivePrevious>
                                <a href="<$mt:Link template="main_index"$>">メインページ</a> |
                                <a href="<$mt:Link template="archive_index"$>">アーカイブ</a>
                                <mt:ArchiveNext>| <a href="<$mt:ArchiveLink$>"><$mt:ArchiveTitle$> &raquo;</a></mt:ArchiveNext>
                            </div>


                        </div>
                    </div>


                    <$mt:Include module="サイドバー"$>
</MTIf>

                </div>
            </div>


            <$mt:Include module="バナーフッター"$>


        </div>
    </div>
</body>
</html>

新規モジュール作成

<head></head>内でのインクルードモジュール<$mt:Include module="JS_jQueryJSON"$>の作成、以下のコードとなります。

<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript">
      google.load("jquery", "1.3.2");
</script>
<script type="text/javascript">
$(function(){
      $("ul#highslidetag li a").click(function(){
         $("div#images").empty();
         var tag = $(this).text();
         var url = '<$MTBlogURL$> asset_'+tag+'.json';
             $.getJSON(url, function(data){
             		var list = '<ul>';
             		$.each(data.items, function(i,item){
							var title = (item.title) ? item.title : "none";
							var url = item.url;
							var img = item.thumbnail;
							list += '<li><a href="'+url+'" class="highslide" onclick="return hs.expand(this)"><img src="';
							list += img+'" alt="Highslide JS" title="Click to enlarge" height="100px" /></a><div class="highslide-caption"><p>';
							list += title+'</p><ul id="assetexif">';
									$.each(item.exifinfo, function(i,exif){
											list+='<li><strong>'+i+'</strong>:'+ exif+'</li>';
									});
							list += '</ul></div></li>';
					});
					list+= '</ul>';
					$("#images").append(list);
			});
	}).filter(':first').click();
});
</script>

※$.eachをネストしています。もし時間があるならちゃんと変数を設定することで早くなるかもしれないです。専門でないのでベンチマークとっていません。ご自分で作れる方は作ってみてください。titleについては値が存在しない場合は3項演算で"none"で表示させるようにしていますが、""にすることで空白に変わります。そのままvar title = item.title;であると値がない場合は、undef表示になります。

jQueryでハッシュキー、値の取り出し

※perl でいうハッシュのkey,valueの取り出しは、jQueryで以下のようなコードで取り出しできるようになりますね。

$.each(data, function(key,value){
	$("body").append(key:value);
});

 

<head></head>内でのインクルードモジュール<$mt:Include module="JS_HighslideJS"$>の作成、以下のコードとなります。さらに詳しい設定については、Highslide JS API Referenceをご覧になって設定を変えてみてください。以下は、本ギャラリーと同じ設定コードとなります。

<link rel="stylesheet" type="text/css" href="<$MTBlogURL$>js/highslide/highslide.css" />
<script type="text/javascript" src="<$MTBlogURL$>js/highslide/highslide-with-gallery.packed.js"></script>
<script type="text/javascript">
	hs.graphicsDir = '<$MTBlogURL$>js/highslide/graphics/';
	hs.align = 'center';
	hs.transitions = ['expand', 'crossfade'];
	hs.outlineType = 'rounded-white';
	hs.fadeInOut = true;
	hs.dimmingOpacity = 0.8;
	hs.captionOverlay.position = "rightpanel";
	hs.captionOverlay.width = "400px";
	// define the restraining box
	hs.useBox = true;
	hs.width = 800;
	hs.height = 500;

	// Add the controlbar
	hs.addSlideshow({
		//slideshowGroup: 'group1',
		interval: 3000,
		repeat: true,
		useControls: true,
		fixedControls: 'fit',
		overlayOptions: {
			opacity: 1,
			position: 'bottom center',
			hideOnMouseOut: true
		}
	});


</script>

<body></body>内でのインクルードモジュール<$mt:Include module="Asset_PhotoGallery"$>の作成、以下のコードとなります。

<div id="gallery">
	<div id="gallery-inner">
		<div id="gallery-nav">
			<ul id="highslidetag">
				<li><a href="#tagA">tagA</a></li><li><a href="#tagB">tagB</a></ll><li><a href="#tagC">tagC</a></li>
			</ul>
		</div>
    <div id="images">gallery here!</div>
	</div>
</div>

 

#highslidetagリストのテキストを読み込んでそれと同じファイル名のついたjsonファイルからデータを読み込み、hightslideJS用の属性を付けたHTMLコードでリスト形式で<div id="images>の中に流し込みます。

jsonテンプレート作成

Assetアイテムのjsonデータファイルの作成です。インデックステンプレートの新規作成でテンプレート名 JSON_Asset_Tagのような(ファイル+対象+タグ)ぐらいの連想しやすいテンプレート名で作成。出力ファイル名は、JS_jQueryJSONのコードをご覧頂くと解りますが、asset_'+tag+'.json'で作っていますので、asset_+タグ名(Assetaアイテムに付けるタグ名で).jsonで計画して作ってください。

以下がサンプルjsonテンプレートとなります。

{
	"title": "My Photography",
	"link": "http://weblibrary.s224.xrea.com/mt4plugins/assetexif/",
	"description": "",
	"modified": "<$MTDate format="%Y-%m-%dT%H:%M:%S" language="en"$>",
	"generator": "<$MTBlogURL$>",
	"items":[
		<MTAssets type="image" tag="tagA">{
			"id" : "<$MTAssetID$>",
			"title" : "<$MTAssetLabel$>",
			"description" : "<$MTAssetDescription$>",
			"url" : "<$MTAssetURL$>",
			"thumbnail" : "<$MTAssetThumbnailURL width="100"$>",
			"exifinfo" : <$MTAssetExif type="json"$>
		}<MTAssetsFooter><MTElse>,</MTElse></MTAssetsFooter>
                </MTAssets>
	]
}

MTAssetsのtag属性の値とファイル名のasset_*****.jsonとbody内のHTML<ul id="highslidetag">のリストの中のテキストを各揃えるようにしてください。そうすることで先ほどのjQueryスクリプトで作成するjsonファイルを読み込むことができるようになります。

以上でテンプレート編集は終了です。後はギャラリーページ構築フローの通りにArchiveUploaderを使ってイメージファイルをスムーズにアップロード・登録、アイテムの管理ページにてアイテム毎にタグ付け、最後にすべてのページの再構築をすることでギャラリーページを構築することができます。

ギャラリーデザインパターン

ギャラリー構築方法を理解し、実際にスクリプトを使ってページを構築できたら、今度はデザインしてみましょう!ギャラリーは一瞬でユーザーに印象を与えることができるページ、いわばあなたのデザインセンス・スキルをも表現できる場であると思います。シチュエーションや目的にあわせオリジナルのデザインを施してみてください。

以下、ギャラリーページデザインで参考にするといいリソースを紹介しておきます。

  • Ultimate Guide To Using WordPress For A Portfolio | Developer's Toolbox, How-To | Smashing Magazine
    デザイナーはじめクリエイティブのお仕事をされている方たちのポートフォリオデザインをまとめた記事です。システムはWordpressを使っていますが、基本的にはMovable Typeでも同じようなフローは構築可能です。目的・シチュエーション別に印象を与える見せ方、扱いなどについて参考にされるといいです。

  • 50 Beautiful And Creative Portfolio Designs | Design Showcase | Smashing Magazine
    個性的なポートフォリオデザインをいくつか紹介しています。他の方と同じパターンの見せ方よりはオリジナルデザインで独創的な方が印象に残りやすいです。ただ、情報が見やすいという点には気をつけたほうがいいかもしれないです。デザインの参考に。

  • Creating A Successful Online Portfolio | How-To | Smashing Magazine
    ポートフォリオページ作成において陥りやすい悪いポイントなどについて紹介されています。また、目的にあわせて効果的なデザインを施すための論理的な解説もあり、今後重要視される内容(目的を持ち期待効果を期待できるデザイン)となっていますので時間がある方はぜひ読んでみてください。当サイトもピックアップできる項目などがあれば翻訳表示したいとも思っておりますが、予定は未定でw。

トラックバック企画

その他ギャラリーページ構築に参考になるリソースなどがありましたら、記事にして教えてください。トラックバック受け付けています。皆さんでギャラリーデザインのリソースを共有しましょう。

トラックバック(0)

トラックバックURL: