質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

1496閲覧

PHPで作成するページについて、ヘッダーなど全てのページで同じ部分は共通化させ、メイン部分だけ異ならせたい。

minyouyuu

総合スコア39

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/07/23 13:03

編集2019/07/24 12:50

現在、PHPを用いてwebサイトを構築中です。
だいたい完成したのですが、保守性に劣るかなと考えています。

PHP

1**top.php** 2<div class="pages"> 3 <a href="page.php" class="pager">1</a> 4 <a href="page2.php" class="pager">2</a> 5 <a href="page3.php" class="pager">3</a> 6</div> 7 8**page.php** 9<!DOCTYPE html> 10<html lang="ja"> 11<head> 12 <meta charset="UTF-8"> 13 <title>タイトル</title> 14 <link rel="stylesheet" href="style.css"> 15</head> 16<body> 17<div id="container"> 18 <!-- global navigation --> 19 <?php include( $_SERVER['DOCUMENT_ROOT'] . 'global_navigation.php'); ?> 20 <!-- hero image--> 21 <div class="l-content-expanded"> 22 <a href="#"><img id="hero-image" src="images.png" alt="ヘッダー画像"></a> 23 </div> 24 <!-- content --> 25 <div class="l-content-fixed" id="content"> 26 <!-- main --> 27 <?php include( $_SERVER['DOCUMENT_ROOT'] . 'main.php'); ?> 28 <!-- sidebar --> 29 <aside class="l-sidebar"> 30 <!-- categories --> 31 <?php include( $_SERVER['DOCUMENT_ROOT'] . 'categories.php'); ?> 32 <!-- recommend posts --> 33 <?php include( $_SERVER['DOCUMENT_ROOT'] . 'recommend.php'); ?> 34 </aside> 35 </div> 36 <!-- footer --> 37 <?php include( $_SERVER['DOCUMENT_ROOT'] . 'footer.php'); ?> 38 <!-- JavaScript --> 39 <script src="btn-active.js"></script> 40</div> 41</body> 42</html>

top.phpはwebサイトのトップページで、各ページへのリンクを設置しています。
そして、各リンクが押下されると、各ページへ遷移します。

各ページは、カテゴリーやフッターなどは全て共通なので、別ファイルにして、それをpage.php内でincludeする形にしました。

各ページで唯一異なるのが、main.phpで、ここに各ページの本文を書く予定にしており、各ページでmain2.php、main3.phpなど、読み込ませるファイルを変える予定です。

なので、page.phpをコピーし、page2.php、page3.phpを作成し、それぞれ、main.php、main2.php、main3.phpを呼び出す形にする形です。

しかし、この場合、page.phpの内容を変えたくなった場合、page2.php、page3.phpも修正する必要が出てきます。

なので、page.phpはコピーせずに、トップ画面でリンクが押下されたら、page.php内のmain.php部分にリンクに合った各ファイルが自動的に読み込ませるような形にしたいです。

top.phpからリンクのurlをpage.phpに渡して、page.phpがそのリンクに合った本文をincludeする形かなと考えていますが、どのようにすればよいか分かりません。

具体的なコードでなくてもよいので、「こんな感じで実装すればよい!」というようなものをご教授くださるとありがたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/07/24 12:31

既に解決されてますが、質問内容からするとタイトルが大きすぎる気がします。 起きている問題や困っていることの詳細などにされたほうが良いかと思います。 このままですと同じタイトルで別内容が続くことなり、タイトルだけで何が問題だったか捉えられなくなります。 タイトルだけでも調整いただけますか?
guest

回答3

0

すでに組み込んでいるものも含めて候補がいくつかあります

  • ページを1つにしてコンテツ部分だけphpでincludeする
  • ページを複数用意して共通部分だけphpでincludeする
  • ページを1つにしてコンテツ部分をjsで非同期に読み込む
  • ページを複数用意して共通部分をjsで非同期に読み込む

投稿2019/07/24 02:54

yambejp

総合スコア114572

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ちょっと何がやりたいのか理解できていないのですが

テンプレートを共通化したい

のであれば、テンプレートエンジンを採用すると良いです。
テンプレートとそれに必要なコンテンツを変数で準備してやれば、サクッと構築できます。

また、ざっと見た処理内容であれば、静的サイトジェネレータの得意な分野に見えるので、php を使用することが目的でなければ、そちらを調査してみても良いと思います。

クリックしたときにサクッと表示したい

のであれば、vue 等の SPA 的な技術を採用すると良いです。
共通部分以外のコンテンツをサクッと差し替えて表示することが可能です。

投稿2019/07/23 22:23

編集2019/07/23 22:28
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

試しに書いてみたけどテストしてません。
example.com/page.php?id=[数字]

PHP

1if(isset($_GET['id'])) { 2$param = $_GET['id']; 3} 4$param = preg_replace('/[^0-9]/', '', $param); 5include('./main' . $param . '.php');

この時id以外にパラメータがないと想定してます。

投稿2019/07/23 13:12

編集2019/07/25 00:49
kyoya0819

総合スコア10429

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kyoya0819

2019/07/23 15:59

あとファイルが存在しない時の処理も考えてません。
minyouyuu

2019/07/24 12:29

ありがとうございます!おっしゃるとおりの方法で実装したところ、思いどおりのものができました。
退会済みユーザー

退会済みユーザー

2019/07/24 13:11

ディレクトリトラバーサル
kyoya0819

2019/07/24 22:35

一応replaseを使う方法を追記しときました。
退会済みユーザー

退会済みユーザー

2019/07/24 22:55

利用前提が include なんで、最低限がホワイトリスト形式だと思います。 こんな感じかなぁ。。。 $page = ["content1", "content2", "content3", "content4", ]; if (isset($page[$id])){ include('./main' . $page[$id] . '.php'); } else { header('location: index.php'); exit(); }
kyoya0819

2019/07/25 00:49

失礼しました。気をつけます。
minyouyuu

2019/07/25 10:55 編集

皆さま、ありがとうございます。パラメータに不正な値が入れられることも考慮しないといけないのですね...勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問