jQuery を 用いて ヘッダー や フッター の 共通パーツ を 読み込む
楽天GOLD や ヤフーショッピングトリプル では PHP が 使えないので ヘッダー や フッダー の 共通化 が 難しいのですよね…
なので jQuery で できないか ということで 調べてみました
調べてみると 単純に load を 使って 読み込んだるだけで リンク先 や 画像の参照先 の 事まで 考えられているものが 少なくて 自分の思っているものにたどり着くには 時間がかかりました…
多分 こういう事を 行いたいって人が 少数なのだと思いますが 決して ゼロ ではないと思いますので 簡単にですが ソース を 残しておこうと思います
get_template_part
いろいろな情報をもとに 作成したので もっと良いコードが 存在するかもしれませんが 今の最終型は こんな感じなりました
これは get_template_part という 新しい関数 の プロパティ を 追加 しています
(function( $ ) {
$.fn.get_template_part = function( options ){
// オプション
options = $.extend({
fileDir : '.',
fileName : '',
defaultDir : '/resources/template/'
}, options);
// オプションが無い場合
if( ! options.fileName ) return true;
var target = this;
// データを取得後 置換
$.ajax({
type: 'get',
url: options.fileDir + options.defaultDir + options.fileName + '.html',
dataType: 'html',
success: function( data ) {
data = data.replace( /\{\$fileDir\}/g, options.fileDir );
$(target).append(data);
}
});
}
})( jQuery );
template
共通パーツ となる テンプレート は こんな感じです
<div class="container">
<div class="clearfix">
<h1>ヘッダーサンプル</h1>
</div>
<div class="clearfix">
<nav>
<ul>
<li><a href="{$fileDir}/">トップ</a></li>
<li><a href="{$fileDir}/parts/sample-1.html">サンプル1</a></li>
<li><a href="{$fileDir}/parts/sample-2.html">サンプル1</a></li>
<li><a href="https://www.google.co.jp/" target="_blank">Google</a></li>
</ul>
</nav>
</div>
</div>
呼び出し
こちらで 対象の ファイル を 読み込みます
jQuery(function($){
var fileDir = '.';
$('#header').get_template_part({
'fileDir' : fileDir,
'fileName' : 'header',
});
$('#footer').get_template_part({
'fileDir' : fileDir,
'fileName' : 'footer',
});
});
ざっくりと 説明しますと fileDir を ‘..’ とか ‘../..’ とかにして 自分の階層から見て root の index までの 階層を 書けば そこに defaultDir である ‘/resources/template/’ と fileName と ‘.html’ を くっつけて ajax で 取ってきます
その データ の {$fileDir} を fileDir に replace します
で 最後に append する と言うものですね
最後に
エラー処理 だとか 色々省いているので 安全ではないかもしれません
詳しい方 こうしたら良いとか 助言を ください
よろしくお願いします!!
I referred to jQueryでWEBサイトの共通部分をインクルードする方法(相対パスVer.もアリ) - ENUM blog.
http://enum-kabu.com/blog/post-1723/
I referred to プラグイン作成 · maepon.
https://gist.github.com/maepon/4754210