増子良太のブログです

増子良太が書いているブログです。テーマをしぼらず、思いついたものをただひたすら書いていきます。

MT7に独自のコンテンツフィールドを追加する

      2017/12/12

この記事は「Movable Type Advent Calendar 2017」の12日目の記事です。 MovableTypeは2017年の10月に行われたMTDDCで、時期バージョンとなるMovable Type 7を4月にリリースすると発表がありました。 イベントに出席された方は知っているかもしれませんが、今回大きく変わる部分が、コンテンツタイプという概念です。 コンテンツタイプとは簡単にいうと、作成するページに応じて項目の数や種類などが設定でき、コンテンツに応じた管理画面にできるということです。 WordPressを使うよって人はカスタム投稿タイプを作って、カスタム投稿タイプにカスタムフィールドを作成して関連づけるということをしていると思いますが、それに近いイメージではないかなと思います。 今までは記事、もしくはウェブページという2つのコンテンツタイプしか存在せず、そこにカスタムフィールドをつけたり、ブログを複数に分けたりという対応をせざるを得ないというのがMTを使う上でのお決まりでしたが、その必要も無くなります。 今までのMTで商品紹介ページを作る場合、商品が多くなってくるとカテゴリ分けをしたくなります。「パソコン」だったり「周辺機器」だったり。 パソコンの中でもさらに種別をつけたくて「Mac」「Windows」 「Mac」の中でも「iMac」「Mac Book」 「iMac」の中でディスプレイサイズ、年式などなど。。。 分ければ分けるだけ、検索などでも探しやすくなったりはしますが、管理画面が複雑になっていきます。「パソコン」でブログを作ってその中でカテゴリを作って。。。 カテゴリはブログで1つしか使えないから、トップカテゴリを大項目、2階層目が中項目、その下が小項目。。。 タグはスペックを分けるのに使いましょう。16Gや32bitなどなど。。。 試行錯誤してできた管理画面にもブログや記事などの言葉が出てきて下記のようなマニュアルを作ってみたり。。。

これまでのたくさんの工夫と努力をしてきましたが、それが簡単にできるようです。 標準のコンテンツタイプとコンテンツフィールドでできることが増えたので、ほとんどの場合、このままでもコンテンツが作成できるかと思いますが もし自分で増やせるとしたらどうでしょう? 増やしてみたくなりますよね!(エンジニアのみなさん時間です まだコンテンツタイプの公式なプラグインの作り方などドキュメントはないので、少しだけソースを読んでみましょう。 registryの中に新たに「content_field_types」というものがあるようです。 lib/MT/ContentFieldType.pmの中になにやら色々と標準のコンテンツフィールドが定義されており、その中でlabelやdata_type、orderなどがあります。
  • label フィールド一覧に表示される名前?
  • data_type 保存するデータのタイプ?「integer」や「varchar」
  • order 表示される順番?
  • field_html 管理画面で表示されるHTML?
  • field_html_params 管理画面で表示されるHTMLに渡すパラメータ?
  • options コンテンツフィールドのオプション?。例えば数字だとMAX値とかMIN値とか。入力に何か制限かけたい時や、フィールド毎に設定をもたせたい場合に使う?
  • options_html 上記オプションを設定させるときに表示するHTMLの設定?
こんな感じで色々なことができるみたいです。 ここで書いたものはあくまでアルファバージョンのソースコードを読み解いた結果なので、リリースまであと4ヶ月くらいで全然別物になっていることもあるかもしれませんが、少なくとも項目を自由に増やしたり、増やし方も自由度が高くて開発できる人さえいれば、かなり柔軟な管理画面が作れそうです。 これまでもコールバックやプラグインなどの仕組みを使うと、全く別のCMSを作ることだってできるのですが、今回追加されているコンテンツタイプやコンテンツフィールドという仕組みにも、こうした細かく追加できるように作られているようです。 ここで、何か簡単なプラグインを作ってみる予定、、、でしたが、ちょっと時間不足でした。 時間を作れるタイミングで何か作ります。  

 - movabletype(mt), Perl