お客さんのレンタルサーバー
クライアントが用意したレンタルサーバーへftp接続している状況でmicroCMSを使用したい、というパターンではJamstack構成を組めない。
PHPが使用できるなら、それが最も手っ取り早くmicroCMSを組むこめる方法かもしれない。
microCMSが提供しているSDKを利用するべきか
microCMSでは、PHPを使用するためのSDKが用意されている。
しかし、このSDKを利用するためには、composerというPHPのバージョン管理アプリが必要となる。
このcomposerを、人さまのサーバーに勝手にインストールしてよいはずがない。
SDKを利用せず、PHPのみの実装
SDKは使わないでPHPだけで書く方法はあって、それは簡単に実装できた。
一覧ページと個別ページだけなら、2ファイルだけで済む。
実際にはAPIキーの隠蔽は別途行うのでアクセス権限を設定したディレクトリに変数を格納しておく必要があるが、わかりやすく2ファイルだけにすると以下のようになる。
一覧ページ
archive.php
<?php
// API呼び出し
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://XXXXXXXXXXXXXXXXXXX.microcms.io/api/v1/news');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
$headers[] = 'X-MICROCMS-API-KEY: XXXXXXXXXXXXXXXXX';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($ch);
curl_close($ch);
// 取得したら表示
$result = json_decode($response, true);
foreach ($result['contents'] as $contents) {
$url = 'http://XXXXXXXXXXXXX?id=' . $contents['id'];
ShowHtml(
$contents['title'],
$contents['createdAt'],
$url,
$contents['linkbool']
);
}
function ShowHtml($title, $createAt, $url, $linkbool)
{
echo '<meta name="viewport" content="width=device-width, initial-scale=1.0">';
echo '<h2>タイトル:' . $title . '</h2>';
echo '<p>作成日:' . $createAt . '</p>';
echo '<p>URL: <a href="' . $url . '">' . $url . '</a></p>';
echo '<p>詳細画面へ遷移boolian:' . $linkbool . '</p><hr>';
};
?>
記事ページ
single.php
<?php
$id = $_GET['id'];
// クエリパラメータを取得
if (isset($id) == true) {
GetContent($id);
} else {
echo 'Set query parameters';
}
function GetContent($id)
{
// API呼び出し
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://XXXXXXXXXXXX.microcms.io/api/v1/news/' . $id);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
$headers[] = 'X-MICROCMS-API-KEY: XXXXXXXXXXXXXXXXXX';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($ch);
curl_close($ch);
// 取得したら表示
$result = json_decode($response, true);
ShowHtml(
$result['title'],
$result['createdAt'],
$result['updatedAt'],
$result['body']
);
}
// コンテンツ表示部
function ShowHtml($title, $createAt, $updatedAt, $body)
{
echo '<meta name="viewport" content="width=device-width, initial-scale=1.0">';
echo '<h2>タイトル:' . $title . '</h2>';
echo '<p>作成日:' . $createAt . '</p>';
echo '<p>更新日:' . $updatedAt . '</p>
';
echo '<article style="background-color: aliceblue;">本文:
' . $body . '</article>';
}
?>