BLOG

ブログ

2022.06.23

microCMSをphpで使ってみる

人気のヘッドレスCMSであるmicroCMSを使い、フロント側をNextやNuxtで作成した場合、GitHubにpushして、VercelNetlifyなどでデプロイする流れになりますが、慣れていない方にはまだまだ敷居が高いのではないでしょうか?

microCMSのAPIは様々な言語で利用できますが、phpではSDKを用意してくれています。
これを利用すればレンタルサーバーでも簡単にmicroCMSを利用することができます。
SDKは以下にあります。

https://github.com/microcmsio/microcms-php-sdk

phpのパッケージ管理システムであるcomposerはあらかじめインストールしてください。

https://getcomposer.org/

composerでsdkをインストールします。

$ composer init
$ composer require microcmsio/microcms-php-sdk

ドメインやAPIキーの設定を行います。

<?php

require_once('vendor/autoload.php');

$client = new \Microcms\Client(
  "YOUR_DOMAIN",  // YOUR_DOMAIN is the XXXX part of XXXX.microcms.io
  "YOUR_API_KEY"  // API Key
);

ページの取得してみます。シンプルで最高です。

<?php $data = $client->get("pages", "abcdefghi");?>
<h1><?php echo h($data->title);?></h1>
<div><?php echo h($data->body);?></div>

getパラメータからID取得してブログの単一記事の取得

<?php 
$id = $_GET['id'];
try {
  $content = $client->get("blog", $id);
} catch (Exception $e) {
  if ($e->getCode() == 404) {
    header("Location: ../404.php");
    exit;
  }
}
?>
<h1><?php echo $content->title;?></h1>
<div><?php echo $content->body;?></div>

ページナビゲーション付き記事一覧の取得

<?php 
$limit = 10;
if (isset($_GET['page'])) {
  if ($_GET['page'] === '1') {
    $offset = 0;
  } else {
    $page = $limit * $_GET['page'];
    $offset = $page - $limit;
  }
} else {
  $offset = 0;
}

try {
  $lists = $client->list("blog", [
    "limit" => $limit,
    "orders" => ["-createdAt"],
    "fields" => ["id", "title", "image01"],
    "depth" => 1,
    "offset" => $offset,
  ]);
  $pagecounts = ceil($lists->totalCount / $limit);
  $contents = $lists->contents;
} catch (Exception $e) {
  if ($e->getCode() == 404) {
    header("Location: ../404.php");
    exit;
  }
}
 ?>

<?php foreach ($contents as $content): ?>
<li>
<a href="?id=<?php echo $content->id; ?>"><?php echo $content->title; ?></a>
</li>
<?php endforeach; ?>

<div id="pageNavi">
<ul>
<?php for ($i=1; $i <= $pagecounts; $i++): ?>
<li><a href="?page=<?php echo $i; ?>"><?php echo $i; ?></a></li>
<?php endfor; ?>
</ul>
</div>

Lighthouseの結果も良好です。
phpの8を使いましたが速いです。

他にも以下のことが可能です。
・下書きプレビュー機能
・画像のwebp形式対応による高速読み込み
・OGP対応
・セッションハイジャック対策、メールヘッダインジェクション対策を行ったお問い合わせフォームの設置
・お問い合わせをkintoneやhubspotに送信

jamstackも良いけど使い慣れたphpもシンプルで良いなーと思いました。

阿部

CONTACT

下記のフォームに必要事項を記入してください。※お問い合わせの際には個人情報保護方針のご確認をお願い致します。

会社名
お名前必須
ご住所
郵便番号
都道府県
市区町村
町名番地等
建物名
お電話番号必須
- -
メールアドレス必須
お問い合わせ内容必須
メッセージ