###htmlでimportみたいなことってできるの?
例えば、あるサイトを作ろうとしたときに、phpやhtmlファイルを複数作ったとして、bodyのheaderとfooterは全ページ共通の場合、それぞれのファイルにそれをいちいち書くのは面倒だし、変更も一括でしたいですよね?
そういうときってどのような解決方法がありますか?
phpを使ってechoする方法も考えましたが、なんともスマートでない気がする…
追記:たくさんのご回答ありがとうございます。一ヶ月前ほどにhtmlやcss,phpを学び始めたばかりで何ができて何ができないのか全然わからず、曖昧な質問の仕方になってしまいました、すみません。
html単体でも他の言語のように簡単にimportできるものかと思っていましたが、どうやら難しそうなので、phpのincludeで利用するのが一番自分の想定していた使い方に近かったのでベストアンサーとさせていただきます。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答10件
0
ベストアンサー
ぶっちゃけPHP使ってるならinclude文で良いような気がします。
header.php
1<header> 2 <div>site header</div> 3</header>
footer.php
1<footer> 2 <div>site footer</div> 3</footer>
page.php
1<html> 2 ... 3 <body> 4 <?php include "./header.php"; ?> 5 <main> 6 <!-- Your page content here --> 7 </main> 8 <?php include "./footer.php"; ?> 9 </body> 10</html>
投稿2020/01/15 23:25
総合スコア322
0
「HTML Importsってものがあったけど普及前に廃止されたので覚えなくていい」ってことを覚えておく。
もう使えない技術を半端に古い情報に騙されて使い出すのは初心者がやりがちな間違い。
https://developer.mozilla.org/ja/docs/Web/Web_Components/HTML_Imports
https://qiita.com/ka-miyata/items/63e41e4105d7aeb44d6c
2013の情報見ても全く役に立たない。
https://www.html5rocks.com/ja/tutorials/webcomponents/imports/
htmlから別のhtmlを読み込むなんて簡単にできそうなことが実はできない。
一番簡単なのはPHP使う方法なので最初はこれでいい。
PHPでも単純なincludeからWordPressのテーマ、フレームワークと徐々に洗練されていくので自分のレベルに合わせて選ぶ。
投稿2020/01/16 01:17
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/01/16 01:26
2020/01/16 01:46
2020/01/16 02:11
2020/01/16 02:32
2020/01/16 02:41
退会済みユーザー
2020/01/16 02:54
2020/01/16 03:02
2020/01/16 03:03 編集
2020/01/16 06:21
0
以下のHTMLパーツ2つが、それぞれHTMLファイルとして/partsディレクトリ直下にあるとします。
HTML
1<!-- /parts/header.html --> 2<p>ここは、共通ヘッダーです。<a href="/parts/header.html">このhtmlファイル</a>を読み込んで表示しています</p>
HTML
1<!-- /parts/footer.html --> 2<p>ここは、共通フッターです。<a href="/parts/footer.html">このhtmlファイル</a>を読み込んで表示しています</p>
各ページにFilament GroupのScott JehlさんのHTMLインクルード手法を使って、以下のように取り込みます。
HTML
1<!-- /index.html --> 2<!DOCTYPE html> 3<html lang="ja"> 4<head><title>テスト</title></head> 5 <body> 6 <iframe src="/parts/header.html" onload="this.before((this.contentDocument.body||this.contentDocument).children[0]);this.remove()"></iframe> 7 <p>ここは、ページ固有のコンテンツです。</p> 8 <iframe src="/parts/footer.html" onload="this.before((this.contentDocument.body||this.contentDocument).children[0]);this.remove()"></iframe> 9 </body> 10</html>
ブラウザで表示させChromeデベロッパーツールのElementsタブなどで現在のDOM状態を確認すると、以下のようになっていると思います。
HTML
1<!-- /index.html --> 2<!DOCTYPE html> 3<html lang="ja"> 4 <head><title>テスト</title></head> 5 <body> 6 <p>ここは、共通ヘッダーです。<a href="/parts/header.html">このhtmlファイル</a>を読み込んで表示しています</p> 7 <p>ここは、ページ固有のコンテンツです。</p> 8 <p>ここは、共通フッターです。<a href="/parts/footer.html">このhtmlファイル</a>を読み込んで表示しています</p> 9 </body> 10</html>
この手法だとJSがOFFになっていても通常のiframeにフォールバックします。
また共通部分の内容を変えただけで変更がないメインコンテンツ部分のブラウザ側キャッシュが無駄になることもありません。
その他メリット・デメリットについては上で挙げたリンク先の記事をご覧ください。
要件に合うようでしたらご検討ください。
投稿2020/01/16 01:28
総合スコア805
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
PHPでもテンプレート的に組めばいいと思います。
全コントローラーから最後に読み込ませて可変部分だけ渡してそこだけechoすると良いです。
雑な例(動作未確認)
tmp.php
php
1<html> 2<title>hoge[ページ<?=$title?>]</title> 3<body> 4<p><?=$hello?></p> 5</body> 6</html>
a.php
php
1$title='a'; 2$hello='こんにちは'; 3require_once 'tmp.php';
b .php
php
1$title='b'; 2$hello='ニーハオ'; 3require_once 'tmp.php';
テンプレートエンジン(Smarty,Twigなど)使えばもっとそれっぽく簡潔な記述でできます。
投稿2020/01/15 22:33
編集2020/01/16 03:17総合スコア80875
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/16 06:15
2020/01/16 06:21
0
コンテンツをパーツに分けて管理したい要件と読みました。
方法は色々ありますが、出力に静的なものを想定しているのであれば、静的サイトジェネレーターで作成するのがお手軽です。
投稿2020/01/15 21:39
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/15 22:20
退会済みユーザー
2020/01/15 22:34
0
自分もあまり詳しくないのですが、
HTMLだけで完結したいのであれば、
<iframe>タグで似たようなことは可能かと思います。
(正しい使い方かどうかはわかりませんが)
しかし、一般的にはサーバーサイド言語のフレームワーク(Laravelやexpressなど)、その他使っているツール(WordPressなど)の機能で実現するものだと思います。
各フレームワークやツールのドキュメントを読むと、大体そういう機能は載ってると思います。
その機能を主軸としてググりたいなら、「使ってる機能の名前」+「テンプレート」とググると見つかると思います。
「テンプレート」だけだと色んな意味や機能がヒットしてしまうので、このワードが最適解かどうかはわからないです。
もっと適切な探し方を思いつく方がいたら、コメントいただければ幸いです。
投稿2020/01/15 22:49
総合スコア975
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
既に色々回答が来てるのですが、以下の方法もありますよ的なアドバイスを1つ
SSI(Server Side Includes)を
<!--#include file="footer.html" -->:
これを使用するにはWebサーバーの設定変更が必要な場合がありますので、使用されているサーバーの設定を確認する必要があります。
私は以下のサイトを参考にしました
http://www.tohoho-web.com/wwwssi.htm#Include
投稿2020/01/21 01:40
総合スコア33
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
質問者さんが使っているフレームワークは何ですか? 例えば、ASP.NET ならマスターページという機能があって、やりたいこと (複数ページで共通のヘッダーとフッターを使う) は容易に実現できます。質問者さんが使うフレームワークもしくは開発環境 (オーサリングソフト?) にそう言う機能がないか探してはいかがです?
投稿2020/01/15 22:22
編集2020/01/15 22:27退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。