はじめに
Data APIで使用できるようですが、今回は、Movabletype7のコンテンツデータを使ってみます。
あと、jQuery版FullCalendar Ver3を使用します。それ以外のjavascriptのものでも使用できると思います。
参考
Movabletypeコンテンツデータ
記事
https://www.omakase.net/blog/2022/11/movabletypecontent.html
Movabletypeコンテンツデータ2
記事
https://www.omakase.net/blog/2023/02/movabletypecontent2.html
FullCalendarについて
記事
https://www.omakase.net/blog/2023/03/fullcalendar.html
方法
まずカテゴリを作ります。
これは、イベントの色分けに使用します。
あと、アーカイブリストで月単位・カテゴリ単位など作成するとリスト化できるので。
あとからMTタグで使用するので、MTタグと対比は下記です。
<mt:CategoryLabel>
<mt:CategoryBasename>
コンテンツタイプを作成します。こんな感じ
FullCalendarで使用できるように項目を準備します。一応詳細用にWYSIWYGで内容も準備しておきます、
FullCalendarで連動用
FullCalendarで連動できるように、デザインのテンプレートでJSのデータを作成します。
追加した感じ
ファイル名はevents.js。パスを指定したい場合ここでパス指定します。
javascriptで使用する変数はeventsで、ここを変更する場合はご自由に・・・
ここでは全件作成するサンプルですが、javascriptで表示する手前limit(コンテンツタイプではlastnは使えません)で最新のXX件って指定しておくことで
数年後重いとかないかと、カレンダーは、最新のXX件分しか表示しませんなどで対応を。。。
ここで種別の色を指定しているので・・・・カテゴリ増えたら。。追加が必要です。。はい・・
ここでコンテンツタイプにイベント終了など追加して色替えなどもお好みで!
最新の100件・・
<mt:Contents content_type="イベントカレンダー" limit="100">
var events = [
<mt:Contents content_type="イベントカレンダー">
<mt:Var name="class" value="">
<mt:ContentField content_field="種別"><mt:CategoryBasename setvar="class"></mt:ContentField>
<mt:If name="class" eq="event1">
<mt:setvarblock name="color">#ff0000</mt:setvarblock>
<mt:mt:ElseIf name="class" eq="event2">
<mt:setvarblock name="color">#0000ff</mt:setvarblock>
<mt:Else>
</mt:If>
{title: '<mt:ContentField content_field="イベント名"><mt:ContentFieldValue></mt:ContentField>',start: '<mt:ContentField content_field="開始日時"><mt:ContentFieldValue format="%Y-%m-%dT%H:%M:%S"$></mt:ContentField>',end: '<mt:ContentField content_field="終了日時"><mt:ContentFieldValue format="%Y-%m-%dT%H:%M:%S"$></mt:ContentField>',url:'<mt:ContentPermalink>',color:'<mt:Var name="color">'},
</mt:Contents>
];
出来上がるとこんな感じ
var events = [
{title: 'イベントだよ',start: '2023-02-14T12:00:00',end: '2023-02-18T15:00:00',url:'サーバーURL/2023/02/14/event.html',color:'#ff0000'},
];
イベントカレンダーの詳細
上記の参考のURLを参照してください。
アーカイブマッピングはお好みで、指定しないとHTMLできませんよ。
カスタムを選択してパスは下記みたいな感じで
event/%y/%m/%-f
詳細ページを作るには、コンテンツタイプアーカイブで作成します。
お好みで月別、カテゴリ別も同様に作ります。
月別の日付は、デフォルトは公開日ですので、公開日単位のアーカイブになります。イベント開始日ではないので注意してください。
イベント開始日にする場合は、別途設定が必要です。
<p><mt:ContentField content_field="イベント名"><mt:ContentFieldValue></mt:ContentField></p>
<p><mt:ContentField content_field="種別"><mt:CategoryLabel></mt:ContentField></p>
<p><mt:ContentField content_field="開始日時"><mt:ContentFieldValue></mt:ContentField></p>
<p><mt:ContentField content_field="終了日時"><mt:ContentFieldValue></mt:ContentField></p>
<p><mt:ContentField content_field="内容"><mt:ContentFieldValue></mt:ContentField></p>
コンテンツデータでデータを作ります。
これで一通り準備完了です。
番外編
参考URLでも説明していますが・・
コンテンツタイプアーカイブリスト(年、カテゴリ)
下記で新規して。
先にカテゴリ別アーカイブを作る
event/%-c/%i
<mt:Contents content_type="イベントカレンダー ">
<p><mt:ContentField content_field="開始日時"><mt:ContentFieldValue></mt:ContentField></p>
<p><mt:ContentField content_field="イベント名"><mt:ContentFieldValue></mt:ContentField></p>
<p><mt:ContentField content_field="種別"><a href="<mt:CategoryArchiveLink>" class="label category text-xsmaller"><mt:CategoryLabel></a></mt:ContentField></p>
<p><a href="<mt:ContentPermaLink>">詳細</a></p>
</mt:Contents>
次に年別アーカイブを作る
event/%y/%i
カテゴリリストをつけたい場合は・・・
<mt:CategorySets content_type="イベントカレンダー">
<mt:ArchiveList type="ContentType-Category">
<mt:ArchiveListHeader>
<section>
<div><mt:CategorySetName></div>
<ul>
</mt:ArchiveListHeader>
<li><a href="<mt:ArchiveLink>"><mt:ArchiveTitle></a></li>
<mt:ArchiveListFooter>
</ul>
</section>
</mt:ArchiveListFooter>
</mt:ArchiveList>
</mt:CategorySets>
年別リストをつけたい場合は・・・
<mt:ArchiveList type="ContentType-Yearly" content_type="イベントカレンダー">
<mt:ArchiveListHeader>
<section>
<div>年別アーカイブ</div>
<ul>
</mt:ArchiveListHeader>
<li><a href="<mt:ArchiveLink>"><mt:ArchiveTitle></a></li>
<mt:ArchiveListFooter>
</ul>
</section>
</mt:ArchiveListFooter>
</mt:ArchiveList>
FullCalendar Ver3系を設定します。
FullCalendarのdemos\background-events.htmlをサンプルにします。
HTMLはこんな感じ
日本語化して、下記を追加します。
ここのパスは、Movabletypeで指定したパスを使用します。
<script src='../../events.js'></script>
上記の部分は、キャッシュされるのでとか。MTに組み込む場合は・・
<$mt:Date format="%Y%m%d"$ setvar="nowdate">
<script src='../../events.js?<mt:Var name="nowdate">'></script>
JSでやりたい兄貴は・・こんな感じで
<script>
$(function(){
var js_pth = '../../events.js?'+Math.random();
include(js_pth);
function include(astrFile)
{
var script = document.createElement('script');
script.src = astrFile;
script.type = 'text/javascript';
script.defer = true;
document.getElementsByTagName('head').item(0).appendChild(script);
}
});
</script>
次に下記の部分
eventsのeventsになってしまっていますが、右側の名前がMovabletypeで作成したものの名前です。
events: events
defaultDateはコメントにして現在日で表示にしています。
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8' />
<link href='../fullcalendar.min.css' rel='stylesheet' />
<link href='../fullcalendar.print.min.css' rel='stylesheet' media='print' />
<script src='../lib/moment.min.js'></script>
<script src='../lib/jquery.min.js'></script>
<script src='../fullcalendar.min.js'></script>
<script src='../../events.js'></script>
<script src='../locale-all.js'></script>
<script>
$(document).ready(function() {
$('#calendar').fullCalendar({
header: {
left: 'prev,next today',
center: 'title',
right: 'month,agendaWeek,agendaDay,listMonth'
},
locale:'ja',
navLinks: true, // can click day/week names to navigate views
events: events
});
});
</script>
<style>
body {
margin: 40px 10px;
padding: 0;
font-family: "Lucida Grande",Helvetica,Arial,Verdana,sans-serif;
font-size: 14px;
}
#calendar {
max-width: 900px;
margin: 0 auto;
}
</style>
</head>
<body>
<div id='calendar'></div>
</body>
</html>
こんな感じ・・まぁ。FullCalendarの機能です。はい。
クリックすると作成したMovabletypeで作成した詳細ページに飛びます。
あとは、上記のHTMLをMTの表示した場所にテンプレートで組み込みすれば完了です。
月別アーカイブ等の公開日単位の変更について
アーカイブしたい日付形式の項目を必須にします。カテゴリもアーカイブする場合も同様です。
アーカイブマッピングの日付と時刻フィールド選択できるようになるので設定します。
これは、記事の時、カスタムフィールドにはなかったから何気に便利・・コンテンツデータからの機能です。
さいごに・・
コンテンツデータ便利ですよね・・スライダーとか、バナー管理、商品登録、関連企業登録とか・・・