共通項目の変数化

ページのタイトルはタイトルタグやパンくずでも使用しますね。
その場合タイトル文字列を変数に入れて配置することで、あとで変更するときに一箇所変更するだけで、すべてに反映されます。

<?php $title = 'ページタイトル'; ?>
<!DOCTYPE html>
<html lang="ja">
<head>
	<meta charset="utf-8">
	<title><?= $title ?></title>
</head>
<body>
<h1><?= $title ?></h1>
<ol class="breadcrumb">
	<li><a href="/">HOME</a></li>
	<li><?= $title ?></li>
</ol>
</body>
</html>

コンポーネントのインクルード

ヘッダー・フッターなどは全ページで共通のものを使用することが多いですね。
その場合は共通部分を外部ファイルにしてインクルードすることで更新しやすくなります。

たとえば共通部分をheader.phpfooter.phpというファイルで作成して、incディレクトリに入れているとします。

<?php define("ROOT", $_SERVER['DOCUMENT_ROOT']); ?>
<?php require_once ROOT."/inc/header.php"; ?>
<div>
	<p>コンテンツ</p>
</div>
<?php require_once ROOT."/inc/footer.php"; ?>

インクルードパスは$_SERVER['DOCUMENT_ROOT']でルートから読み込むようにしておけば、あとあと階層が変わったときでも変更の必要がありません。

インクルードの種類

インクルードの方法はrequire_once他にも下記のようなものがあります。

require_once エラーが発生すると処理が停止。1度だけインクルードする。
require エラーが発生すると処理が停止。複数インクルードできる。
include_once エラーが発生しても処理は継続。1度だけインクルードする。
include エラーが発生しても処理は継続。複数インクルードできる。

読み込みが完了できないと致命的な場合はrequire、問題ない場合はincludeを、ページで一つだけ表示する場合はonceを付ける、複数表示の場合は付けないという使い分けになるかと思います。

指定日にコンテンツを切り替える

クライアントワークだと何日の0時に更新したいといった要望は結構ありますね。
その場合、日付機能を使えば指定した日にコンテンツを切り替えることができます。

<?php
date_default_timezone_set('Asia/Tokyo');
$date_now = strtotime(date('Y-m-d H:i'));
if ($date_now < strtotime('2018-03-15 00:00')) : ?>
<p>2018年3月16日 0時まで表示</p>
<?php else: ?>
<p>2018年3月16日 0時以降に表示</p>
<?php endif; ?>

ページを丸ごと切り替えたいときは、前述のインクルードと併用することで可能です。

URLパラメータを利用して一部分のコンテンツを切り替える

例えばページの一部をタブで切り替えたいといったとき、タブの数だけページを作成すると重複したコンテンツができてしまい更新が煩わしいですね。
URLのパラメータを利用することで、1ファイルでコンテンツを切り替えることができます。

<?php $tab = (int)filter_input(INPUT_GET, 'tab'); ?>
<div>
<?php if($tab === 1): ?>
	<p>コンテンツ1</p>
<?php elseif($tab === 2): ?>
	<p>コンテンツ2</p>
<?php else: ?>
	<p>指定されていない場合のコンテンツ</p>
<?php endif; ?>
</div>

例えばファイル名をtab.phpとした場合tab.php?tab=1tab.php?tab=2でアクセスするとコンテンツを切り替えることができます。

CSVから直接テーブルを作成する

Excelの表からテーブルで作成するというのはあたまにありますね。頻繁に更新するデータだと結構更新が大変です。
そんなときはCSVで書き出してそのまま読み込んで表示してみましょう。

カンマ区切りのCSVでしたら下記のようにします。

<table>
<?php
$rows = @file('data.csv');
foreach($rows as $row):
$row = explode(',', $row);
?>
<tr>
	<?php foreach($row as $col): ?>
		<td><?= $col ?></td>
	<?php endforeach; ?>
</tr>
<?php endforeach; ?>
</table>

ランダムでバナーを表示

ランダムでバナーを表示したいとかたまにあったりなかったり。
1〜3までのランダムな数を表示したい場合は、rand(1, 3)で取得できるので、あとはswitchなどで切り替えます。

<?php
switch (rand(1, 3)) {
	case 1:
		echo '<a href="01.html"><img src="img/01.jpg"></a>';
		break;
	case 2:
		echo '<a href="02.html"><img src="img/02.jpg"></a>';
		break;
	case 3:
		echo '<a href="03.html"><img src="img/03.jpg"></a>';
		break;
	}
?>

HTMLファイルでもPHPを使いたい

すでにHTMLで運営しているサイトですと、リンクなどの関係で拡張子を変更することが難しいことがあります。
レンタルサーバーで.httpaccesファイルの設置が許可されているのなら、下記のように作成することでhtml拡張子のままPHPを動かすことができます。

AddType x-httpd-php .php .phps .html

この書き方はレンタルサーバーによっても変わってきます。
実際使用するにはサーバー会社に確認してください。

以上です。
そこはJS使った方がいいのではという部分もあるかと思いますが、簡単なPHPでも組合わせたりすることでいろいろ便利にすることができると思います。