Let's create! WordPressサイト制作とメンテ/エラー対応から、PHP/CSS/javascriptプログラミング、動画・音・イラスト等制作まで扱うコラム

GetSimple CMS CE(フラットファイル型)を改造してjson出力、ヘッドレスCMS的に扱ってみる

更新: 2023/11/19 3770文字

今回は、以前使ったフラットファイル型CMS・GetSimple CMSをちょっと改造してヘッドレスCMS(フロントがなく、APIなどでフロントに配信するタイプのCMS)みたいに扱ってみたいと思います。 ヘッドレスみたいに扱うのは、WordPress rest-apiで行いましたが、GetSimpleでもできるか、実験してみましょう。

今回使うGetSimple CMS~便利な新バージョン(COMMUNITY EDITION)があります

管理人が以前の記事を書いた後に調べたところ、CE(COMMUNITY EDITION)という新しいバージョンがありました。こちらの方が便利だったので、以下の公式サイトからダウンロードして使ってみます。 なお、旧バージョン使ってみた状況は、当サイト過去記事をご覧ください。

Community Editionの特徴については、以下の通りです。

PHP Version 8でもセーブできる!

管理人が試したところ、元のバージョンのGetSimple CMSでは、PHP Version 8以降で投稿をセーブできない(7.4までならok)という問題がありました。最近はサーバーでもデフォルトが8になってきているので、『カスタムしたけど使いどころがない』ということになってしまいます。

しかし、Get Simple CMS Community Editionではこの問題が修正されていました。 xamppでPHP Version 8.1.6を動かしていますが、セーブもきちんとできています。 (*CEじゃないプラグインについては、PHP Version 8非対応のものも相変わらずあります。)

ちょっとモダンな感じのテーマ(ResponsiveCE)がついてくる

デフォルトテーマのデザインが少し古臭い感じがありましたが、CEではちょっとモダンな感じのテーマがついてきます。名前の通りレスポンシブ対応です。

ただし、テーマはjson出力用にしかしないんで、使わないんですけど(笑)

管理画面も見やすくなった

CE用プラグイン『Massive Admin Theme』によるものなんですけど、以前のバージョンより管理画面が見やすくなっています。デザイン的にも、枠にborder-radiusや影つけたりとか・・

ログインページ背景がついたりとか。

そのほか、記事エディターも変化が。ビジュアルモードじゃなくて、ソース表示にしてみます。 htmlタグや文章、リンクなどが色分けされて見やすくなっています。これらはプラグイン『Massive Admin Theme』をオンにしている状態だとこうなります(プラグインオフで元に戻ります)。

GetSimple CMS CE用のjson出力テーマを作る方法(php:json_encode使用)

で、ヘッドレスみたいに扱う場合だと、jsonとかでデータを取ってくるといいので、json出力できるようなテーマを作ってみます。 構成はこれだけ(笑)『gs_output』がテーマフォルダで、これを本体の『theme』フォルダに入れてインストール。imagesファイルのなかみは、管理画面で表示するscreenshot.pngだけです。 その他のファイルはtemplate.php。構成上、これだけあれば機能するようです。

template.phpはこんな感じ。 上部の必要事項を他のテーマに合わせて書きつつ、おそらくGetSimple組み込みファンクションである『getxml』を使って記事をとり、(xmlで来るので)それを変換します。 phpの『json_encode』パラメータは、『JSON_UNESCAPED_UNICODE』を使いました。 ヘッダーアクセスコントロールについては今回は使いませんでしたが、他ドメインをまたぐとき・$_SERVERで呼び出し元判定するときは使うかも。あと、エンティティのデコードも試しただけで使いません。

この状態でCMSのトップにアクセスすると・・・ 記事データがjsonで出ます。トップページにはスラッグ『index』の、最初からあった記事が出ました。このページのスラッグは固定っぽいですね。

また、GetSimpleの仕様では『id=〇〇(スラッグ)』のパラメータで記事が切り替わるようになっており、あとから作った『page-001(スラッグ)』の記事にアクセスすると、このように該当ページがでてきます。構造上、『page-〇〇』とか『blog-〇〇』みたいなスラッグ命名規則を取り入れても良いかもしれません。

ちなみに、『JSON_UNESCAPED_UNICODE』パラメータを指定した効果については、本文などの中身が日本語で見やすくなるからです。 このパラメータを指定しない場合、『title:\u4e0b\u5c64\u30da\u30fc\u30b8001』のような表記になります。(目視データ確認が済んだら、いらないかな?)

カスタムフィールドを使って、アイキャッチ画像の項目を設定する方法

GetSimple CMSはデフォルト状態では、アイキャッチ画像の項目が無いようです。『domで取ってきて、最初の画像をアイキャッチ』とかやるのはめんどくさいので、 『カスタムフィールド』で対応してみます。 GetSimple CMS CE版では、前述の『Massive Admin Theme』オンの状態だと、CEプラグインダウンロード項目が出ます。管理画面からインストールできるのでラクです。『I18N Custom Fields』を探しましょう。

そこで、『I18N Custom Fields』をインストールして、オンにしました。『無効』って書いてあるけど、『押せば無効』って意味で、緑色の時は有効になっています。

デフォルト状態では、このように投稿画面オプションを開いても『画像』の欄はでてきません。 『Configure Custom Fields』の画面で『NAME:img_eyecatch,LABEL:アイキャッチ,TYPE:image,DEFAULT VALUE:null』を設定しました。

このように、別ウィンドウで画像選択画面が出てくるようになります。これで画像タグのなかに、画像urlを出力できますね。

フロントでjsonをとってきて、配列変換(json_decodeで、associativeはtrue)すると、任意の項目を取れる

で、フロントでjson_decodeしてみました。associativeパラメータをtrueにしてやると連想配列形式で扱えるそうです。 var_dumpしてやると・・・

こんな感じに。レイアウトに応じて好きな値をとって配置していきましょう。ほんとにヘッドレスCMSっぽくなってきましたね。

あとがき・まとめ

  • GetSimple CMS CEはPHP8対応しており、カスタムフィールドで画像なども付けられる
  • 本体はxmlで保存しているが、テーマ改造してjson_encodeするとjson形式で出せる
  • フロントではjson_decodeすると連想配列形式で扱える

まとめると、このようなところでしょうか。 『一覧や、特定の分類の記事』 『jsonページにアクセスされたときユーザー名がわかる(ユーザー設定→表示名を変えても、データ上のauthorやuserはわかる)』 など、課題はまだまだありますが、ヘッドレス的に扱えそうな感じはしたかと思います。本体も小さいので、ちょっとしたサイトなどにどうぞ。


【カテゴリ】- フラットファイルCMS
【タグ】-

関連記事