やりたいこと
PHPでサイトを作っていて、ヘッダーやフッターなどの共通パーツは外部化してインクルードしている。
ページによって、その共通パーツの中身をちょこっと変えたいときがある。
例えば、
ヘッダーに設置したお問合せボタンのリンク先をAのページではあっち、Bのページではそっちにリンク張りたい。でもA用とB用のヘッダーファイルを作るのは面倒だから1ファイルで済ましたい。みたいな感じ。
ガッツリ変えるならファイル分けたほうがいいかもしれないけど、ちょこっとだけのとき用。
※コメントいただき、タイトルと本文を編集しました。
①リンクの出し分け
http://自分のサイト.com/a/ 以下にアクセスした際は、Yahooにリンクをはる。
http://自分のサイト.com/abc/ 以下にアクセスした際は、Googleにリンクをはる。
ヘッダー.php
<?php
$path = $_SERVER['SCRIPT_NAME'];
//ファイルのパスを取得 (例) /a/index.php
if (strpos($path, '/a/') !== false) {
//strpos($path, '★ここに検索する文字列を書く★')
$url = 'http://www.yahoo.co.jp/';
//処理を書く
}
elseif (strpos($path, '/abc/') !== false) {
$url = 'https://www.google.co.jp/';
}
<header>
<a href="<?php echo $url; ?>">おすすめのサイト</a>
</header>
上記では実現できないような検索をしたいときは、正規表現を使う。
ヘッダー(正規表現).php
<?php
$path = $_SERVER['SCRIPT_NAME'];
if (preg_match('|★正規表現1★|', $path)) {
$url = 'http://www.yahoo.co.jp/';
//処理を書く
}
elseif (preg_match('|★正規表現2★|', $path)) {
$url = 'https://www.google.co.jp/';
}
<header>
<a href="<?php echo $url; ?>">おすすめのサイト</a>
</header>
?>
②複数行HTMLの出し分け
ヒアドキュメントを使うと便利。
ヘッダー.php
<header>
<div class="bunsyou">
<?php
$path = $_SERVER['SCRIPT_NAME'];
if (strpos($path, '/a/') !== false): ?>
「http://自分のサイト.com/a/ 」<br>
以下にアクセスした際は、<br>
この文章が<br>
表示される。<br>
<?php elseif (strpos($path, '/abc/') !== false): ?>
「http://自分のサイト.com/abc/」<br>
以下にアクセスした際は、<br>
略
<?php endif; ?>
</div>
</header>
ヘッダー(正規表現).php
<header>
<div class="bunsyou">
<?php
$path = $_SERVER['SCRIPT_NAME'];
if (preg_match('|/a/|', $path)): ?>
「http://自分のサイト.com/a/ 」<br>
以下にアクセスした際は、<br>
この文章が<br>
表示される。<br>
<?php elseif (preg_match('|/abc/|' $path)): ?>
「http://自分のサイト.com/abc/」<br>
以下にアクセスした際は、<br>
略
<?php endif; ?>
</div>
</header>
おまけ
昔こういうのも書いた。
ユーザーエージェントを取得して、端末によってHTMLを変更する
コピペ用
<?php
$path = $_SERVER['SCRIPT_NAME'];
if(strpos($path, '') !== false){
$url = '';
}elseif(strpos($path, '') !== false){
$url = '';
}elseif(strpos($path, '') !== false){
$url = '';
}elseif(strpos($path, '') !== false){
$url = '';
}
?>
<?php
$path = $_SERVER['SCRIPT_NAME'];
if(preg_match('||', $path)){
$url = '';
}elseif(preg_match('||', $path)){
$url = '';
}elseif(preg_match('||', $path)){
$url = '';
}elseif(preg_match('||', $path)){
$url = '';
}
?>
<?php echo $url; ?>