ファイル名によりサイドバーのデザインを自動切替

ウェブページやブログでは、サイドバーのデザインが統一されていて、全ページ同じ場合がよくあります。これをファイル名によって自動的に別のデザインになるようにPHPを使ってやってみました。

ページのファイル名によってデザインを自動的に変更

サーバーの写真

例えば、トップページだけ、サイドバーなどの共通部分のページのデザインを変更したいと思うことがよくあります。この場合、PHPを使って、ファイル名によってPHPで条件判断をさせてやれば、これを実現することができます。

色々と試行錯誤していたら、うまく自動的に切り替えて表示させることができましたので、紹介します。

PHPを使ってファイル名を取得します

PHPの substr() 機能を使います

substr() の機能は文字列の一部分を取り出すことです。

substr(string, start, [length])

substr() は文字列 string の、 start で指定した位置から length バイト分の文字列を取り出して返します。 start が正の場合、取り出される文字列は、 string の 0 から数えて start 番目から始まる文字列となります。

start が負の場合、取り出される文字列は、 string の後ろから数えて start 番目から始まる文字列となります。

PHPの substr() 機能を使ってファイル名を取得します

<?php
$f_name = substr($_SERVER['SCRIPT_NAME'],-9,9);
?>

この例では、「$_SERVER['SCRIPT_NAME']」は、サーバーの ドメイン名楽天 の後ろのパスとファイル名を表しています。例えば「hogehoge.jp/***/index.php」なら「/***/index.php」を表しています。

この中の後ろから9番目の文字から9文字を取り出すと、「index.php」となります。

ファイル名によりサイドバーのデザインを自動切替します

次のように、ファイル名が「index.php」の時の動作と、ファイル名が「index.php」以外の時の動作を切り替えることができます。

もちろん、ファイル名が「index.php」以外の時の動作が無い時は、「else」以降を削除します。

サイドバーに限らず、ヘッダーやフッターやメニューなど共通で読み込むファイルには、この方法が使えます。インデックスページだけに限らず特定のページだけ別の動作をさせたい場合に有効です。

<?php
$f_name = substr($_SERVER['SCRIPT_NAME'],-9,9);
if ($f_name == "index.php"){
ファイル名が「index.php」の時の動作
}
else {
ファイル名が「index.php」以外の時の動作
}
?>

また、否定の演算子を使うことで、判定を逆にすることもできます。HTMLタグをそのまま記述するには次のようにします。

<?php $f_name = substr($_SERVER['SCRIPT_NAME'],-9,9);
if ($f_name != "index.php") {
print <<<EOD
ファイル名が「index.php」以外の時の動作、HTMLタグをそのまま記述
EOD;
}
?>

HTMLタグをそのまま記述するには次のように記述することもできます。好きな方法を使ってください。

<?php $f_name = substr($_SERVER['SCRIPT_NAME'],-9,9);
if ($f_name == "index.php") { ?>
ファイル名が「index.php」の時の動作、HTMLタグをそのまま記述
<?php } else { ?>
ファイル名が「index.php」以外の時の動作、HTMLタグをそのまま記述
<?php } ?>

ファイル名によりサイドバーの表示を自動で変えるメリット

ファイル名によってデザインが別のファイルを用意する必要が無くなります。例えば、「index.php」の場合は、サイドバーにメニューを表示して、それ以外のページではメニューを表示しないようにできます。ファイルの数が少なくなるので、ファイルの管理が楽になります。

また、インデックスページでは、画像を表示して、それ以外の普通のページでは、表示の速いテキスト表示にすることもできます。要はあなたのアイデア次第です。

PHPの basemane() 機能を使ってファイル名を取得する方法

substr() の機能でもファイル名は取得できますが、PHPの basemane() 機能を使ってもファイル名を取得することができます。こちらの方が文字数を指定する必要がなく簡単です。

<?php $f_name = basemane($_SERVER['SCRIPT_NAME']);
if ($f_name == "index.php") { ?>
ファイル名が「index.php」の時の動作、HTMLタグをそのまま記述
<?php } else { ?>
ファイル名が「index.php」以外の時の動作、HTMLタグをそのまま記述
<?php } ?>

ここで、「$_SERVER['SCRIPT_NAME']」は、サーバーの ドメイン名から後ろのパスとファイル名を表しています。例えば「hogehoge.jp/***/index.php」なら「/***/index.php」を表しています。これからファイル名basename()でファイル名だけを取り出すのです。