主夫ときどきプログラマ

データベース、Webエンジニアリング、コミュニティ、etc

OpenPNE3.4に自作Pluginを追加してみる

AddressテーブルをPluginで追加してみる

Plugin の雛形を作る。

以下のタスク(コマンド)を実行することで雛形のフォルダを構成してくれる
作成したいPluginの名前は「opSamplePlugin」

# symfony opGenerate:plugin opSamplePlugin

すると、/plugin の下に opSamplePlugin フォルダが、その中に、
/app, /lib, /test フォルダが作成される。

Schemaを設定する

Pluginで独自のDBを設定し使用する場合、schema.ymlを設定する必要がある。
/plugin/opSamplePlugin/config/doctrine/schema.yml
を用意し、テーブルを設定する。
(例)

Address:
  columns:
    id: { type: integer(4), primary: true, autoincrement: true, comment: "Serial number" }
    first_name: { type: string(64), notnull: true }
    family_name: { type: string(64), notnull: true }
    mail: { type: string(512), notnull: true }
    is_activate: { type: boolean, notnull: true, default: 1 }
    is_public: { type: boolean, notnull: true, default: 1}
    member_id: { type: integer(4), notnull: false }
  indexes:
    mail_UNIQUE:
      fields: [mail(10)]
      type: unique

文法についてはYAMLなので直観的でわかり易い。
/config/doctrine/schema.yml にOpenPNE本体の設定があるので、参考にすると良い。

*Indexを設定する時に、カラムのStringサイズが大きいとTEXT型になるので、key_lengthを設定する必要がある。
*fields: [mail(10)] <= key_lengthを10に指定。通常なら [mail] だけでよい。

openpne:migrate タスクを実行

openpneのタスクを実行し、schema.ymlのモデルファイルを作成する。

# symfon openpne:migrate --target=opSamplePlugin

--targetを指定しないと次で操作するsns_configにデータが追加されないようだ

/lib/model/doctrine/opSamplePlugin
/plugin/openSamplePlugin/lib/filter
/plugin/openSamplePlugin/lib/form
/plugin/openSamplePlugin/lib/model
に、それぞれのモデルファイルが作成される。

PluginのConfigを変更

先のタスクを実行すると、sns_configテーブルにname="opSamplePlugin_needs_data_load" が存在するレコードが追加される。
追加されたこのレコードを編集することで、目的のプラグイン分のテーブルだけをDBに作成することができる。

レコードの valueの値を1に設定する。

DBの追加

もう一度migrateタスクを実行し、Pluginで設定されたschema.ymlをDBに反映する。

# symfon openpne:migrate --target=opSamplePlugin

DBへのテーブル追加ができていたら成功!