【MT】MTOSにAnotherCustomFieldsプラグインを導入

MTOSにAnotherCustomFieldsプラグインを導入しました。（だいぶ昔だけど覚書があったので投稿）

AnotherCustomFieldsは、藤本氏が開発したプラグインです。

[公式サイト](http://www.h-fj.com/mtplugins/anothercustomfields.php) にライセンスについての記載がありますので、ご一読ください。
また、プラグインの解説書もあるのようなので、詳しく知りたい方は購入してください。

> ライセンス
> AnotherCustomFieldsプラグインは、デュアルライセンスで配布します。
> 
> MTOSと組み合わせる場合はGPLv2に従い、MTOSにご自由にインストールしてお使いいただくことができます。
> 一方、商用ライセンスのMovable Typeと組み合わせる場合は、ライセンス料（インストール先1件につき5,000円）をお支払いください。
> 
> AnotherCustomFieldsプラグインの解説書（PDF）は、有償（9,800円）での販売とさせていただきます。
> 解説書やライセンスをご希望の方は、メールフォームよりお問い合わせください。

下記が導入した環境です。

|環境|バージョン|
|:--|:--|
|MTOS|5.2.13|
|AnotherCustomFields|1.23|

「[AnotherCustomFields](http://www.h-fj.com/mtplugins/anothercustomfields.php)」からプラグインをダウンロードします。
プラグインのフォルダ内にある plugins > AnotherCustomFields > config.yaml のファイルを開きます。
config.yamlをテキストエディタなどで開くと既に記述ありますが、記述は残したまま最後に下記のように追記することでカスタムフィールドを追加できます。
下記が追記するテンプレートです。

~~~
schema_version: 1.00
object_types:
  entry:
    カスタムフィールド名:
      type: string
      size: 255
      revisioned: 1
      acf:
        type: タイプ名
        label: ラベル名
        tag: タグ名
~~~

カスタムフィールドを複数追加したい場合は下記の記述のカスタムフィールド名からタグ名までの情報を最後にコピペして追加してください。
下記が2つのカスタムフィールドを追加する記述例になります。

~~~
schema_version: 1.00
object_types:
  entry:
    カスタムフィールド名:
      type: string
      size: 255
      revisioned: 1
      acf:
        type: text
        label: ラベル名
        tag: タグ名
    カスタムフィールド名:
      type: string
      size: 255
      revisioned: 1
      acf:
        type: text
        label: ラベル名
        tag: タグ名
~~~

###注意

config.yamlファイルの最後に改行を入れないとエラーが表示される場合があります。
おそらくサーバーの環境によるもので、改行を入れなくてもエラーにならない場合もあります。
下記のようなエラーが表示されたときは、最後に改行を残しておくとエラーが表示されなくなります。

~~~
Got an error: Error reading /home/xxxx/config.yaml: Failed to load YAML document from string
~~~

##schema_version

「schema_version: 1.00」を変更することで、データベース上にカスタムフィールドが追加されます。
そのため、カスタムフィールドを追加したときのバージョンの数字を「schema_version: 1.01」のように変更してアップロードしてください。
shcema_versionを変更すると、MTにアクセスしたときに「アップグレード開始」の画面が表示されます。
このときにデータベースにカラムが追加されます。
カスタムフィールドを追加してもschema_versionを変更せずにデータベース上にカスタムフィールド名のカラムがないとエラーが表示されます。
カスタムフィールドを追加したときは必ずschema_versionを変更してください。

phpMyAdminからデータベースの「mt_entry」を確認すると「entry_カスタムフィールド名」の名称でカラムが追加されています。
この追加されたカラムの文字コードを「utf8_general_ci」に変更してください。
おそらく最初の文字コードは「ujis_japanese_ci」になっているかと思います。
「ujis_japanese_ci」のままだと「~や①」などの文字を入力して保存すると「?」になってしまいます。
そのような文字を使う場合は、「utf8_general_ci」などに文字コードを変更してください。

##カスタムフィールド名

データベースに追加されるカラム名になります。
カラム名として使用できる半角英数字で入力してください。
アンダーバーも使える？

##タイプ名

タイプ名とは一行テキストなのか、複数行のテキストなのかなどカスタムフィールドのタイプを入力します。

一行テキストの場合は下記のように入力します。

```
     type: text
```

複数行テキストの場合は下記のように入力します。

```
     type: textarea
```

プラグインの作者のページには下記のようなタイプが追加可能と記載があります。
それぞれどのような記載するのかはわかりません。
詳細は、マニュアルを購入するなどして確認してください。

> 2-2.表示できるフィールドのタイプ
> 
> 以下のようなタイプのフィールドを表示することができます。
> 
> 1行テキスト入力
> 複数行テキスト入力
> 日本の郵便番号
> 日本の電話番号
> チェックボックス
> セレクト
> ラジオボタン
> 画像
> 動画
> 音声
> ファイル

##ラベル名

ラベル名はMTの管理画面でカスタムフィールドの入力欄の上に表示される文字になります。
何の項目の入力なのかわかるように記述するのがよろしいかと思います。
日本語もOKです。

##タグ名

有償になりますが、プラグインの制作者である藤本氏が解説書（PDF）を販売しております。
もっと詳しく知りたい方は、「[AnotherCustomFields](http://www.h-fj.com/mtplugins/anothercustomfields.php)」から購入してください。

```
<mt:If tag="column00Text">
テキスト<mt:column00Text>
</mt:If>

<mt:Entries blog_ids="2">
<mt:If tag="HMText01"><mt:HMText01></mt:If>
</mt:Entries>
```

##エラー表示されたときの対処

config.yamlをアップロードし、MTの管理画面にアクセスするとアップデートが開始されます。
アップデート中にエラーが表示されたときは、phpMyAdminなどでデータベースにアクセスしてください。

「mt_entry」内に追加したカスタムフィールドのカラムが追加されています。
データベースに書き込まれる前にエラーが表示されたときは、追加されていません。
追加されているときは、追加された途中のカラムを削除して、「config.yaml」を修正するなどして、再度MTの管理画面にアクセスしてアップデートを試みてください。

例えば、「text01」というカスタムフィールド名にconfig.yamlに記述していた場合は、データベースのカラムに「entry_text01」と追加されています。
記述したカスタムフィールド名の頭に`entry_`という文字が付与されてデータベースのカラムに登録されます。

##サンプルコード（全文）

```
name: AnotherCustomFields
id: AnotherCustomFields
author_name: <__trans phrase="Hajime Fujimoto">
author_link: http://www.h-fj.com/blog/
description: <__trans phrase="This plugins adds another custom fields functionality.">
plugin_link: http://www.h-fj.com/blog/mt5plgdoc/anothercustomfields.php
doc_link: http://www.h-fj.com/blog/mt5plgdoc/anothercustomfields.php
l10n_class: AnotherCustomFields::L10N
version: 1.23
callbacks:
  init_app: $AnotherCustomFields::AnotherCustomFields::ContextHandlers::install_tags
  restore: $AnotherCustomFields::AnotherCustomFields::BackupRestore::restore
applications:
  cms:
    callbacks:
      template_param.edit_entry: $AnotherCustomFields::AnotherCustomFields::CMS::edit_entry
      template_param.edit_page: $AnotherCustomFields::AnotherCustomFields::CMS::edit_entry
      template_param.edit_category: $AnotherCustomFields::AnotherCustomFields::CMS::edit_category
      template_param.edit_folder: $AnotherCustomFields::AnotherCustomFields::CMS::edit_category
      template_param.edit_blog: $AnotherCustomFields::AnotherCustomFields::CMS::edit_blog
      template_param.edit_website: $AnotherCustomFields::AnotherCustomFields::CMS::edit_blog
      template_param.cfg_prefs: $AnotherCustomFields::AnotherCustomFields::CMS::cfg_prefs
      template_param.edit_author: $AnotherCustomFields::AnotherCustomFields::CMS::edit_author
#      template_param.edit_asset: $AnotherCustomFields::AnotherCustomFields::CMS::edit_asset_adm
      template_param.footer: $AnotherCustomFields::AnotherCustomFields::CMS::add_footer
      template_param.header: $AnotherCustomFields::AnotherCustomFields::CMS::add_header
      template_param.asset_insert: $AnotherCustomFields::AnotherCustomFields::CMS::asset_insert
      cms_pre_save.entry: $AnotherCustomFields::AnotherCustomFields::CMS::pre_save_entry
      cms_pre_save.page: $AnotherCustomFields::AnotherCustomFields::CMS::pre_save_entry
      cms_pre_save.category: $AnotherCustomFields::AnotherCustomFields::CMS::pre_save_category
      cms_pre_save.folder: $AnotherCustomFields::AnotherCustomFields::CMS::pre_save_category
      cms_pre_save.blog: $AnotherCustomFields::AnotherCustomFields::CMS::pre_save_blog
      cms_pre_save.website: $AnotherCustomFields::AnotherCustomFields::CMS::pre_save_blog
      cms_pre_save.author: $AnotherCustomFields::AnotherCustomFields::CMS::pre_save_author
#      cms_pre_save.asset: $AnotherCustomFields::AnotherCustomFields::CMS::pre_save_author
      cms_post_save.entry: $AnotherCustomFields::AnotherCustomFields::CMS::post_save_entry
      cms_post_save.page: $AnotherCustomFields::AnotherCustomFields::CMS::post_save_entry
      cms_post_save.category: $AnotherCustomFields::AnotherCustomFields::CMS::post_save_category
      cms_post_save.folder: $AnotherCustomFields::AnotherCustomFields::CMS::post_save_category
      cms_post_save.blog: $AnotherCustomFields::AnotherCustomFields::CMS::post_save_blog
      cms_post_save.website: $AnotherCustomFields::AnotherCustomFields::CMS::post_save_blog
      cms_post_save.author: $AnotherCustomFields::AnotherCustomFields::CMS::post_save_author
      cms_save_filter.entry: $AnotherCustomFields::AnotherCustomFields::CMS::save_filter
      cms_save_filter.page: $AnotherCustomFields::AnotherCustomFields::CMS::save_filter
      cms_save_filter.category: $AnotherCustomFields::AnotherCustomFields::CMS::save_filter
      cms_save_filter.folder: $AnotherCustomFields::AnotherCustomFields::CMS::save_filter
      cms_save_filter.blog: $AnotherCustomFields::AnotherCustomFields::CMS::save_filter
      cms_save_filter.author: $AnotherCustomFields::AnotherCustomFields::CMS::save_filter
      cms_save_filter.asset: $AnotherCustomFields::AnotherCustomFields::CMS::save_filter
      cms_pre_preview: $AnotherCustomFields::AnotherCustomFields::CMS::preview
acf_field_types: $AnotherCustomFields::AnotherCustomFields::CMS::load_acf_field_types
acf_field_classes:
  entry: 1
  category: 1
  blog: 1
  author: 1
#  asset: 1
acf_restore_classes:
  entry:
    - entry
    - page
  category:
    - category
    - folder
  blog:
    - blog
    - website
  author:
    - author
#  asset:
#    - asset
#    - file
#    - image
#    - video
#    - audio
tags:
  function:
    ACFOptionValue: $AnotherCustomFields::AnotherCustomFields::ContextHandlers::field_option_value
    ACFOptionLabel: $AnotherCustomFields::AnotherCustomFields::ContextHandlers::field_option_label
    ACFOptionCount: $AnotherCustomFields::AnotherCustomFields::ContextHandlers::field_option_count


schema_version: 1.02
object_types:
  entry:
    recruittext01:
      type: string
      size: 255
      revisioned: 1
      acf:
        type: textarea
        label: 募集職種
        tag: RecruitText01
    recruittext02:
      type: string
      size: 255
      revisioned: 1
      acf:
        type: textarea
        label: 雇用形態
        tag: RecruitText02
    recruittext03:
      type: string
      size: 255
      revisioned: 1
      acf:
        type: textarea
        label: 応募資格
        tag: RecruitText03
```


#参考サイト

+ [【MTOS】MTOS にカスタムフィールドを追加するプラグイン...](http://mamiline.tumblr.com/post/115414067510/mtosmtos-%E3%81%AB%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3)
+ [帰ってきたネコブログ &raquo; AnotherCustomFieldsを使ってみた](http://www.nekonotechno.com/nekopress/?p=2043)