jQueryでWEBサイトの共通部分をインクルードする方法(相対パスVer.もアリ)

数十ページ以上の中・大規模ページ制作の場合headerやfooterなどの共通部分はPHPやSSIでのインクルードで対応していると思いますが、サーバーの環境や、案件によってJSだけで対応する場合もあります。

そんな際に使うjQueryで共通部分のソースを読み込むサンプルソースを作成しました。
共通化する場合hrefはrootパス指定がメジャーですが、相対パスでも指定出来るソースも準備しています。

ディレクトリ構造は下記の様になっていてpartsディレクトリに共通化ファイルを入れています。

160126




Rootパス バージョン

まずはheader、footerを読み込んだ下記DEMOをご確認ください。

header.html

<div class="inr">
	<div id="logo"><img src="/test/ic_root/images/logo.png" alt=""></div>
	<ul id="navi" class="clearfix">
		<li><a href="/test/ic_root/">Menu</a></li>
		<li><a href="/test/ic_root/">Menu</a></li>
		<li><a href="/test/ic_root/">Menu</a></li>
		<li><a href="/test/ic_root/">Menu</a></li>
		<li><a href="/test/ic_root/">Menu</a></li>
	</ul>
</div>

hrefsrcは上記ソースの様に階層が変わってもリンクされる様にルートパスで設定してソース部分だけを保存します。

script.js

//ヘッダーファイルパス
//ヘッダーファイルパス
var headerhtml = '/test/ic_root/parts/header.html';
//ヘッダーの読み込み
$.ajax({
  type: 'get',
  url: headerhtml,
  dataType: 'html',
  success: function(data) {
      $("#header-area").append(data);
  }
});
//フッターファイルパス
var footerhtml = '/test/ic_root/parts/footer.html';
//フッターの読み込み
$.ajax({
  type: 'get',
  url: footerhtml,
  dataType: 'html',
  success: function(data) {
      $("#footer-area").append(data);
  }
});

変数「headerhtml」にファイルパスを指定してajaxで読み込みます。あとは$("#header-area")appendします。非常にシンプルに読み込めましたね。

相対パス バージョン

ルートパスはシンプルでしたが、環境によっては相対にしたい場合もあると思います。そんな場合はこちらを。

index.html(読み込み元)

<script type="text/javascript">
	var dir = '../'
	headerInclude(dir);
	footerInclude(dir);
</script>

header.html

<div class="inr">
	<div id="logo"><img src="{$root}images/logo.png" alt=""></div>
	<ul id="navi" class="clearfix">
		<li><a href="{$root}">Menu</a></li>
		<li><a href="{$root}">Menu</a></li>
		<li><a href="{$root}">Menu</a></li>
		<li><a href="{$root}">Menu</a></li>
		<li><a href="{$root}">Menu</a></li>
	</ul>
</div>

ルートパスバージョンと違う所はscriptに階層を指定している所です。
これで相対の階層を判別します。
hrefsrcは「{$root}」と指定します。その下層であれば「{$root}lower/」です。

script.js

//ヘッダーファイルパス
var headerhtml = 'parts/header.html';
//ヘッダーの読み込み
function headerInclude(directory){
  $.ajax({
    type: 'get',
    url: directory + headerhtml,
    dataType: 'html',
    success: function(data) {
        data = data.replace(/\{\$root\}/g, directory);
        $("#header-area").append(data);
        console.log(data)
    }
  });
}
//フッターファイルパス
var footerhtml = 'parts/footer.html';
//フッターの読み込み
function footerInclude(directory){
  $.ajax({
    type: 'get',
    url: directory + footerhtml,
    dataType: 'html',
    success: function(data) {
      console.log(data)
        data = data.replace(/\{\$root\}/g, directory);
        $("#footer-area").append(data);
    }
  });
}

先ほど指定した階層を変数「headerhtml」「footerhtml」と結合して相対パスを作ります。
hrefsrcは指定した「{$root}」をreplaceをつかって階層の値に差し替えます。

これでどちらのバージョンにも対応出来ました。
以上になります。

Share

  • このエントリーをはてなブックマークに追加

Follow(SNSで定期購読)

コメント

  1. […] – ENUM blog さんの 記事を 参考にさせていただきましたhttp://enum-kabu.com/blog/post-1723/ プラグイン作成 · maepon さんの 記事を […]

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>