こんにちは、ディレクターの八木です。 桜舞い散る4月ということで、今回は MT1年生さん向けにMovable Typeのちょっとした小ワザを紹介します。
今回のテーマはこちらです。
MTの標準機能だけで「公開ページの内容を指定日時に予約更新する」方法
しかも使う機能はとてもシンプルです。
この2つだけで実現できます。
Movable Typeのエンジニアからすると初歩的な仕組みなのですが、 案外この使い方はされていない気がします。
「キャンペーン開始にあわせてLPページを更新したい。
でも、キャンペーン開始は 1日の深夜0時。
手動で更新するのはさすがに辛い……」
そんな経験、ありませんか?
この記事では
MTの標準機能だけで予約更新を実現する方法を紹介します。
例えば 常設のLPページがあるとします。
https://example.com/campaign/
このページを
に合わせて内容を更新したい。
こんなとき、実務では次のような対応になりがちです。
特にLPページは静的HTMLで管理されていることも多く、 「予約更新」が難しいケースもあります。
通常、MTの標準機能では、 公開済みページを裏で編集して差し替える仕組みがありません。
こういうときに MT使いのウェブ制作者なら、 CheckRelease, Workflow, PublicDraft といったプラグインを 思い浮かべると思います。 これらの有償プラグインは公開ページの編集・予約差し替えはもちろん、リビジョン管理もできて、承認フローも組めて 強力です。
でも「そこまで本格的なワークフローは必要ない。シンプルに、指定時刻にページ内容が差し替わればいい」というケースも多いです。
今回の方法のポイントはこれです。
「最新の記事1件を表示するページ」をインデックステンプレートで作る
そして
という仕組みを利用します。
仕組みはとてもシンプルです。
記事(公開日時指定)
┃
┃ 公開時間になる
▼
再構築:インデックステンプレート
<mt:Entries lastn="1">
┃
▼
LPページの内容が差し替わる
インデックステンプレートは 常に最新記事を出力する構造になっています。
そのため、
新しい記事が公開ステータスに変わるタイミングで、
ページの内容が自動で差し替わり
結果として
LPページの予約更新
が実現されるわけです。
まずLPの内容を 記事として管理します。
話を簡単にするため、 今回は次のようなシンプルな構成にします。
・本文:LPページのHTMLをそのまま貼り付け
・カテゴリ:キャンペーン
差し替え用のLP記事は、次のように予約公開にて保存します。
公開状態:日時指定
公開日時:※キャンペーン開始日時をセット※
次にLPページ用の インデックステンプレートを作ります。
例:
<mt:Ignore>キャンペーンLP</mt:Ignore>
<mt:Entries category="キャンペーン" lastn="1">
<mt:EntryBody>
</mt:Entries>
このテンプレートは
「キャンペーンカテゴリの最新記事」
を表示する構造になっています。
今回のポイントは lastn="1" です。 最新1件の記事だけを表示する指定です。
そのため、新しい記事が公開ステータスに変わるタイミングで、 インデックスページの内容も自動で更新されます。
LPページはインデックステンプレートから生成するため、
記事アーカイブは必要ありません。
でもそれだと投稿画面のプレビューでページの見た目を確認できません。
そのため
プレビュー用の「記事アーカイブテンプレート」
を1つ作っておくと便利です。
このテンプレートは、「公開しない」設定 にします。
例:
<mt:Ignore>プレビュー用テンプレート</mt:Ignore>
<base href="<mt:SiteURL><mt:If tag="EntryCategory" eq="キャンペーン">campaign/</mt:If>">
<mt:EntryBody>
これで記事投稿画面から LPの見た目をプレビューできます。
この方法はとてもシンプルですが、 万能ではありません。
あくまで
特定ページの内容差し替え
用途のテクニックです。
この方法はLP以外にも応用できます。
例えば
など、 日時で内容が切り替わるページに便利です。
今回は
Movable Typeの標準機能だけで 公開ページを予約更新する方法
を紹介しました。
ポイントはこの2つです。
シンプルな方法ですが、 意外と実務では使い所がある小ワザです。
特に
などの場面では使えます。
MT1年生の方はもちろん、
ベテランの方も「そういえばこの方法あったね」と思い出していただけたら嬉しいです。