表示すべき画像を特定しています。
showPictureByID()という関数では、渡されたentryIDから、配列image_arrayの中にあるオブジェクト1つ1つと照らし合わせて順番を割り出すgetNumFromID()関数を実行しています。
そうすることで、アドレスバーのURLの#/以降にentryIDを指定すると、正しくentryIDの画像が表示されるようになります。
アドレスバーとタイトルの更新
次はFlash内部で画像をクリックした際に、画像とともに、URLアドレスとタイトルを変化させます。
アドレスバーにURLをセットするには、SWFAddress.setValue(id:String)を使用します。これは、アドレスバーの「#/」以降の内容をidの内容にします。そして、このSWFAddress.setValue()が、SWFAddressEvent.CHANGEを発生させることになります。そして、そのイベントハンドラにて画像を読み込んだり、XMLを読み込む処理を行います。
また、タイトルバーに文字列を設定するには、SWFAddress.setTitle(title:String)を使用します。
今回は、クリックで表示した画像のエントリータイトルを設定することにしました。
その部分は次のようになります。
ASまとめ
今回のSWFAddress対応のために、スクリプトを修正しています。
修正点は、主に次の関数です。
- onLoaded()関数
- showPicture()関数
- nextPicture()関数
また、myLoader.load(myURLRequest);は、SWFAddressEvent.CHANGEのイベントハンドラ内に移動しています。
htmlへの組み込み
SWFAddressのhtmlへの組み込みはシンプルです。
<head>で、次のようにjsファイルをリンクしておきます。
サーバーには、swfaddress.jsをFTPするのを忘れないようにしてください。
SWFObjectの利用
SWFObjectは、JavaScriptがオフの場合やFlash Playerがない場合に代替htmlを表示する仕組みです。この代替部分は、id名がついた<div>でデザインします。
そこで、その<div>の中をMTで出力します。SWFObjectもダウンロードしておきます。これはjsファイルがメインになります。
※ 今回使用しているSWFObjectはバージョン2.0で、上記ページのリンク先、code.google.comから入手できます。
<div>内容の作成
タイトルとサムネイル、★の結果を並べました。以下には上から3件分のソースを示しました。
まず、このhtmlで今までに出てこなかったのは、サムネイルの作成方法ですが、サムネイルは、次のMTタグで作成できます。
このとき、widthまたはheightを指定してどのくらいのサイズのサムネイルかを指定しますが、今回は、横100ピクセルで統一したサムネイルを作成しています。
width、heightには、数値だけを指定してピクセル数を基準にしたり、scaleで実際のサイズの何パーセントという指定も可能です。
※ 詳細は、テンプレートタグリファレンス:MTAssetThumbnailURLをご覧ください。
タイトルリンクの作成
タイトルは<mt:EntryTitle>で取得できます。
また、そのリンク先のURLは、~.html#/○○と○○の部分だけがダイナミックに変わることが、SWFAddressの仕様で決まっているため、次のように表現できます。
※ <$mt:BlogURL$>は、このブログのトップページのフルパスを返します。
★を表示するimgタグ
一番仕組みが複雑なのは、★を表示する仕組みです。画像のsrcに使用されている、r1~r5.jpgの数字と★の数は連動しています。
前回、MTで★の数を計算するように作ったので、そこを利用して画像ファイル名を選びます。
その★の数を求める部分は、photo.xmlを作るテンプレート内にすでにありますが、再利用するために、その部分を、さらにテンプレートモジュールに分割します。
テンプレートモジュールとは、Flashでいう関数のようなものです。
ただし、関数と違い戻り値を設定できないので、テンプレートモジュール内で変数を設定するか、実際にHTMLを出力する必要があります。
今回は、前者の方法を使いました。
テンプレートモジュールの利用
テンプレートモジュールを呼び出すときは、次のようにします。
テンプレートモジュールは、テンプレート一覧画面の中でも,下の方にあります。ここで、テンプレートモジュールを作成します。
前回の★の数を求める部分をそのままを抜き出し、テンプレートモジュールにしました。
すると、photo.xmlを書き出すテンプレートではモジュール化した部分を呼び出して使用するため、次のようにできます。
<$mt:Include module="makerating"$>が、テンプレートモジュール「makerating」を呼び出しているところです。また、テンプレートモジュール「makerating」の計算結果が変数「result」に残ります。この変数はテンプレートが終了しても残るため、呼び出した次の行で<$mt:GetVar$>を使用して値を取り出します。
photo.xmlだけでなく、HTMLの出力でも同じテンプレートを利用すると次のようになります(一部だけを抜粋)。
そして、<$mt:Include$>の次の行では、変数「result」を、srcで指定する画像ファイル名の一部として使用しています。
htmlのテンプレートを作成
ここまでを整理しました。
上記は、<div id="container">の部分に相当します。htmlとして必要な要素が他にもありますので、それらを追加します。
また、上記のhtml用テンプレートをさらに「サムネイルインデックス」という名前のテンプレートモジュールとして登録して、 次のようなインデックステンプレートを作成しました。
SWFObjectをhtmlへ組み込む
SWFObjectをhtmlに組み込むときには、swfobject.jsとのリンクと、実際にswfを指定するJavaScriptの記述が必要です。
具体的には、次のように<head>内に記述します。
※ 詳細についてはマニュアルを参照ください。
上記をindex.htmlを出力するためのインデックステンプレートに組み込みます。
この中には、SWFAddressとSWFObjectへのリンク行なども入っています。
まとめ
最終回は、SWFAddressとSWFObjectを利用して、FlashコンテンツをWEBサイトに置く方法を紹介しました。
もっともシンプルなhtmlであれば、Flashのパブリッシュだけでも可能ですが、SWFAddressを利用することでFlashコンテンツの苦手な中身の状態をURLに反映させることもできます。
MTと連携しているからこそできるのは、たとえばFlashのバージョンが条件を満たさないとかJavaScriptオフになっているなど、Flashでの再生条件に一致しない場合のHTML作成です。
このhtmlを作成する1つの狙いは、Flashコンテンツであっても検索エンジンが検索しやすい状態を作成することにあります。
検索エンジンはJavaScriptをオフにした状態のページやFlashの中にあるテキストまでしか理解できないため、外部テキストなどで更新する場合は肝心の情報が検索対象になりません。
しかし、htmlにある画像のサムネイルとaltは検索も可能です。また、そこからリンクしているタイトルごとの固別URLはFlashでありながら、写真を指定して表示できます。
一番最初に紹介したように、MTとFlashが連携することで、携帯電話を使った更新など意外な広がりを持ちます。また、構築が安価で気軽に始められるのがこの組み合わせの利点です。
基本は、連載でお伝えしたとおりです。あとは、演出やデザイン、アイデアなどで飾り付けを行ってつくりあげていただければと思います。
最後にこの連載で作成したサンプルサイト「My First Blog g」とFLAファイル等です。