Facebookのiframeタブ用ページをモジュール化する
Movable Typeでiframeタブ用ページを管理する場合のモジュール化について紹介します。
1.モジュール化とは
モジュール化とは「部品化」という意味で、テンプレートで共通的に利用できる部分をMovable Typeのテンプレートモジュールとして切り出し、部品化します。
iframeタブを使ったページでは、HTML5のヘッダ・フッタ部分、JavaScriptの読み込みや「fb-root」のdiv要素など、共通化できる部分があるので、本エントリーではそれらをモジュール化してみます。
2.iframeヘッダーモジュール
まず、次のような「iframeヘッダー」というテンプレートモジュールを作成します。
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>foo</title>
<mt:GetVar name="head_css" />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<mt:GetVar name="head_js" />
</head>
<body style="margin:0; padding:0">
<div id="fb-root"></div>
head要素と「fb-root」のdiv要素までを設定しておきます。なお、iframeタブごとにCSSや利用するJavaScriptが異なる場合があるので、コンテンツとなるテンプレートに設定したCSSやJavaScriptを埋め込めるように、MTGetVarタグを設定しておきます。
…前略…
<mt:GetVar name="head_css" />
…中略…
<mt:GetVar name="head_js" />
…後略…
3.iframeフッターモジュール
次に「iframeフッター」というテンプレートモジュールを作成します。
<script>
(function() {
var e = document.createElement('script'); e.async = true;
e.src = document.location.protocol +
'//connect.facebook.net/ja_JP/all.js';
document.getElementById('fb-root').appendChild(e);
}());
window.fbAsyncInit = function() {
FB.init({
appId: '<mt:var name="appID">',
status: true,
cookie: true,
xfbml: true
});
FB.Canvas.setAutoResize();
};
</script>
</body>
</html>
iframe用のJavaScript読み込みとbody要素/html要素の終了タグを設定しておきます。関数FB.initにはappIDが必要なので、コンテンツとなるテンプレートから呼び出すときにappIDを取得できるようにしておきます。
FB.init({
appId: '<mt:var name="appID">',
4.インデックステンプレートでのモジュールの利用
モジュール化を行うことで、インデックステンプレートには次のように記述するだけですむようになります。
<mt:include module="iframeヘッダー" />
(iframeタブ用コンテンツ)
<mt:include module="iframeフッター" appID="xxxxxxxxxxxxxxx" />
実践例として、「Facebookページのiframeタブにタブメニューを表示する」に掲載しているインデックステンプレートは、次のようになります。赤色部分がモジュール化による変更箇所です。
<mt:SetVarBlock name="head_css">
<link type="text/css" href="css/jquery-ui.css" rel="stylesheet" />
<link type="text/css" href="css/styles.css" rel="stylesheet" />
</mt:SetVarBlock>
<mt:SetVarBlock name="head_js">
<script src="js/jquery-ui-1.8.11.custom.min.js"></script>
<script>
$(function(){
$('#tabs').tabs({
fx: { opacity: 'toggle', duration: 300 }
});
});
</script>
</mt:SetVarBlock>
<mt:include module="iframeヘッダー" />
<div id="tabs">
<mt:Pages tag="@facebook">
<mt:PagesHeader>
<ul>
</mt:PagesHeader>
<li><a href="#<mt:PageBasename regex_replace="/\.html/","" />"><mt:PageTitle /></a></li>
<mt:PagesFooter>
</ul>
</mt:PagesFooter>
</mt:Pages>
<mt:Pages tag="@facebook">
<div id="<mt:PageBasename regex_replace="/\.html/","" />">
<mt:PageBody />
</div>
</mt:Pages>
</div>
<mt:include module="iframeフッター" appID="xxxxxxxxxxxxxxx" />
変数head_cssや変数head_jsに設定する場合は、MTIncludeタグで「iframeヘッダー」を呼び出す前に記述します。
<mt:SetVarBlock name="head_css">
<link type="text/css" href="css/jquery-ui.css" rel="stylesheet" />
<link type="text/css" href="css/styles.css" rel="stylesheet" />
</mt:SetVarBlock>
<mt:SetVarBlock name="head_js">
<script src="js/jquery-ui-1.8.11.custom.min.js"></script>
<script>
$(function(){
$('#tabs').tabs({
fx: { opacity: 'toggle', duration: 300 }
});
});
</script>
</mt:SetVarBlock>
<mt:include module="iframeヘッダー" />
また、appIDは「iframeフッター」を呼び出すMTIncludeタグに、appIDモディファイとして設定します。
<mt:include module="iframeフッター" appID="xxxxxxxxxxxxxxx" />
5.ウェブページテンプレートでのモジュールの利用
iframeタブ用のページをウェブページテンプレートを使ってで作成・管理するのであれば、ウェブページテンプレートを次のように設定しておけばさらに効率良く管理できると思います(実際には通常のウェブページと振り分ける必要があるので、これだけではありません)。
<mt:PageBody mteval="1" />
ウェブページの本文には次のように記述します。
<mt:include module="iframeヘッダー" />
(iframeタブ用コンテンツ)
<mt:include module="iframeフッター" appID="xxxxxxxxxxxxxxx" />
- Facebookのテキスト投稿に背景色をつける方法
- Facebookで過去の投稿を探す方法
- Facebookアプリのアクセストークンの有効期限を確認する方法
- Facebookアプリのアクセストークンの有効期限を延長する方法
- Facebookページの投稿をGraph APIで取得する方法
- Facebookでハッシュタグを利用する方法
- Facebookのプロフィール写真変更をタイムラインに表示させない方法
- Facebookのテストユーザーでログイン画面からログインする方法
- Facebookアプリのテストユーザー作成方法(2016年版)
- Facebookの友達リストに「共通の友達」を表示する方法
- ウェブサイトにFacebookページのタイムラインを表示する方法
- Facebookで誕生日は知らせたいけどタイムラインに書き込んでほしくない場合の設定
- iPhone版:Facebookページの管理者が個人アカウントでFacebookページの投稿に「いいね!」をする方法
- Facebookページの管理者が個人アカウントでFacebookページの投稿に「いいね!」をする方法
- Facebookでメールアドレス検索されないようにする方法