福岡 ワードプレス システム開発 株式会社ジーティーアイ のブログ

microCMSはじめました

microCMSの使い方ですが…

まずは、microCMSのアカウントを登録してください!

https://microcms.io/

登録したら下記の順番で使えるところまで持っていきます。

  1. API設定で項目を作る
  2. コンテンツを作る
  3. PHPで呼び出して表示するテンプレートを作る
  4. 画面プレビューしてみる
  5. 公開する
  6. サイトで確認する
目次[閉じる]

microCMS 側のフィールド作成

microCMS 側にフィールドを作ってみます。

まず、API設定にアクセスします。

API基本設定

API名とエンドポイントを設定します。

API名は「ブログ」にして
エンドポイントは「blog」にしました。

API名

で、「API名」はテキトーに決めました。

たぶん、メニューで出てくるだけ…かな。

API名を決める

項目を作る

「APIスキーマ」メニューで項目作ります。

フィールドID表示名種類
date投稿日時日時
titleタイトルテキストフィールド
contentコンテンツリッチエディタ
imageイメージ画像
description概要テキストフィールド

今回は基本的なものだけ。

レイアウト決めて content2 とか画像2とか入れられると使い勝手よさそう。すべてがカスタムフィールドのイメージですね。

画面プレビューの設定ができる!

コンテンツを入力し始めたらすぐ気がつくんですが、「プレビュー」ボタンがあるんですよ。

プレビュー…ってヘッドレスだからどうやって出すんだろ!?って思ったら、この設定をしていないとダメですと。

今回、テストサイトの表示URLを入れました。

https://zti.jp/microcms/index.php?act=blog&{CONTENT_ID}&prev={DRAFT_KEY}

{DRAFT_KEY}と{CONTENT_ID}は含めないといけないのかな・・・

これだけ…あとの Webhook とか HTTPメソッド とかはいろいろできるんですが、今回は触れません。

コンテンツをつくるのじゃ!!

入れ物が出来たところなので、投稿しまくります!

もう普通に投稿画面です!なんの違和感もない。

この投稿画面は日本製だけあって、落ち着く感じです。

投稿に関してはなにも言うことなし!!

出来たら「公開」ボタンを押すと公開されます

画面プレビュー

画面プレビューボタンがあって、先に設定しておいたURLでプレビューできる。

すごいっすね。アイディア賞ですね。

画面プレビューボタンはこちら

とりあえず一覧表示してみる

今回作ったサンプルでトップページの「事例紹介」にある一覧がそうです。

https://zti.jp/microcms/

ここの表示部分のPHPを紹介します。

…の前に今回 index.php を介してすべてのページを表示している「なんちゃってフレームワーク」なので、それに沿って書いてます。「余計なことすんな!!」と思う方は各自ばらしてご利用ください。

テキトーにディレクトリ作ってその中に index.php を入れます。

<?php
/**
 * MICROCMS テスト
 */

define( 'MICROCMS_URL_BLOG', "https://yyyyyy.microcms.io/api/v1/blog" ); // ご自身のURLにしてください
define( 'MICROCMS_API_KEY', "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" );	// ご自身のAPIキーにしてください
// 一覧表示件数 ご自由に
define( 'DISPLAY_CONTENTS_COUNT', 6 );

global $posts; // WordPressのグローバル変数ではないです。

$act = htmlentities( $_GET['act'] );

if ( $act === "" ) { $act = "top"; }

$blog_id = htmlentities( $_GET['id'] );

// curl "https://yyyyyy.microcms.io/api/v1/blog" -H "X-API-KEY: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
$headers = array(
	"X-API-KEY: " . MICROCMS_API_KEY,
);
$ch      = curl_init();

// blog : curl "https://yyyyyy.microcms.io/api/v1/blog/WymCAd26C" -H "X-API-KEY: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
$opt = "?limit=".DISPLAY_CONTENTS_COUNT."&ver=".time();
if ( ! empty( $blog_id ) ) {
	$opt = "/" . $blog_id;
}
$access_url = MICROCMS_URL_BLOG . $opt;
curl_setopt( $ch, CURLOPT_URL, $access_url );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
// ヘッダー追加オプション
curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers );

$html = curl_exec( $ch );

curl_close( $ch ); //終了

$response = json_decode( $html );
$posts = $response->contents;
if ( $act == "blog" ) {
	$posts = $response;
}

require_once "template-". $act . ".php";

class Util {
	public static function get_image_sizes( $url ) {
		$imagesize = getimagesize( $url );
		if($imagesize){
//			echo $imagesize[0];  // width
//			echo $imagesize[1];  //height
//			echo $imagesize[2];  //画像の種類
//			echo $imagesize[3];  //サイズの文字列(width="X" height="Y")
		}else{
			return null;
		}
		return $imagesize;
	}
}

このファイルを index.php で保存してください。

一覧表示部

一覧表示するテンプレートを template-top.php にしました。

<?php
global $posts;
?><!DOCTYPE html>
<html lang="ja" class="col1">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>microCMSやってみたよ</title>
<meta name="description" content="microCMSやってみたよ のトップページ">
</head>


<body>


                        <h2>事例紹介</h2>
                        <div class="entry-list">
	                    <?php
	                    foreach ( $posts as $content_item ) {

		                    ?>
                            <!--
                            <?php var_dump( $content_item ); ?>
                            -->
                            <div class="entry-list_item">
                                <div class="entry">
                                    <figure class="entry_thumb">
                                        <a href="index.php?act=blog&id=<?php echo $content_item->id; ?>"><img src="<?php echo $content_item->image->url; ?>" alt="<?php echo $content_item->title; ?>" width="270" height="180"></a>
                                    </figure>
                                    <div class="entry_inner">
                                        <p class="entry_title"><a href="index.php?act=blog&id=<?php echo $content_item->id; ?>"><?php echo $content_item->title; ?></a></p>
	                                    <div class="entry_status">
		                                    <ul class="entry_date">
			                                    <?php if ( date('Ymd', strtotime( $content_item->updatedAt ) ) > date( 'Ymd', strtotime( $content_item->date ) ) ) { ?>
				                                    <li class="entry_date_item">更新日:<time datetime="<?php echo $content_item->updatedAt; ?>"><?php echo date( 'Y年m月d日', strtotime( $content_item->updatedAt ) ); ?></time></li>
			                                    <?php } ?>
			                                    <li class="entry_date_item">公開日:<time datetime="<?php echo $content_item->date; ?>"><?php echo date( 'Y年m月d日', strtotime( $content_item->createdAt ) ); ?></time></li>
		                                    </ul>
	                                    </div>
	                                    <div class="entry_description"><?php echo $content_item->description; ?></div>
	                                    <div class="ently_read-more">
		                                    <a href="index.php?act=blog&id=<?php echo $content_item->id; ?>" class="btn dir-arw_r"><span class="icon_arrow_s_right"></span> 続きを読む</a>
	                                    </div>
                                    </div>
                                </div>
                            </div>
		                    <?php
	                    }
	                    ?>
                        </div>

</body>
</html>

大事な部分しか書いてません。

これを template-top.php として保存してください。

サイトの一部に入れる場合はちょっと調整が必要です。

コンテンツページ表示

上記の一覧からクリックした先のページです。

template-blog.php を作ります。

記事の部分だけ…っすね。

<?php
global $posts;
?><!DOCTYPE html>
<html lang="ja" class="col1">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title><?php echo $posts->title; ?> | microCMSやってみたよ</title>
<meta name="description" content="<?php echo $posts->description; ?>">
</head>


<body>

	<article>

		<header class="article-header">
			<h1 class="entry_title"><?php echo $posts->title; ?></h1>
			<div class="entry_status">
				<ul class="entry_date">
					<?php if ( date('Ymd', strtotime( $posts->updatedAt ) ) != date( 'Ymd', strtotime( $posts->createdAt ) ) ) { ?>
								<li class="entry_date_item">更新日:<time datetime="<?php echo $posts->updatedAt; ?>"><?php echo date( 'Y年m月d日', strtotime( $posts->updatedAt ) ); ?></time></li>
					<?php } ?>
								<li class="entry_date_item">公開日:<time datetime="<?php echo $posts->createdAt; ?>"><?php echo date( 'Y年m月d日', strtotime( $posts->createdAt ) ); ?></time></li>
				</ul>
			</div>

		</header>


		<div class="article-body"><?php if ( $posts->image->url ) {
			$sizes = Util::get_image_sizes( $posts->image->url ); ?>
		<div class="article-visual" itemprop="image" itemscope="" itemtype="https://schema.org/ImageObject">
				<img src="<?php echo $posts->image->url; ?>" alt="<?php echo $posts->description; ?>">
				<meta itemprop="url" content="<?php echo $posts->image->url; ?>">
				<meta itemprop="width" content="<?php echo $sizes[0]; ?>">
				<meta itemprop="height" content="<?php echo $sizes[1]; ?>">
			</div><?php } ?><?php echo $posts->content; ?></div><!--article-body-->



	</article>

</body>
</html>

template-blog.php として保存します。

階層はこんな感じになる

.
├── index.php
├── template-blog.php
└── template-top.php

あじもそっけもないっすね(笑)

普通に使う場合も次に書いてみます。

次のページでは「ページの一部として表示する方法」を書いています。記事一覧を部分的に表示できます。

1 2 3

この記事をシェアする

記事一覧へ戻る

関連記事 Relation Entry

IP あなたが接続中のIPアドレス:216.73.216.31