-オープンソースのSNSエンジン OpenPNEプロジェクト-

OpenPNE3プラグインの作り方#5

12 / 15 月曜日 2008

この記事は OpenPNE3.0.x のものです。現在の最新安定版では動作しない箇所が存在します。

開発チームの川原です!

OpenPNE3プラグインの作り方#1
OpenPNE3プラグインの作り方#2
OpenPNE3プラグインの作り方#3
OpenPNE3プラグインの作り方#4

今回は、フォームを作成して、ホームに表示させるまでをガイドしたいと思います。
前回までやってきた後のことを想定しています。

opSamplePlugin/lib/form にはあらかじめ、
MemberNewsForm.class.php が存在すると思います。

これは、モデルの構築時に自動的に作成されるクラスで、
何も加工せずに利用すると、
すべてのフィールドが編集できるフォームを提供しています。
(id , member_id, content, update_at フィールドが編集できるフォーム)

しかしながら今回、編集してもらいたい項目は、 content フィールドだけなので、
そのように対応できるようにします。
以下のように編集してください。

MemberNewsForm.class.php

<?php

(コメント行省略)
class MemberNewsForm extends BaseMemberNewsForm
{
  public function configure()
  {
    $this->setWidgets(array(
      ‘content’ => new sfWidgetFormTextarea()
    ));

    $this->setValidators(array(
      ‘member_id’ => new sfValidatorPropelChoice(array(‘model’ => ‘Member’, ‘column’ => ‘id’)),
      ‘content’ => new sfValidatorString(array(‘required’ => false))
    ));

    $this->widgetSchema->setNameFormat(‘member_news[%s]’);
  }
}

フォームの作成法については以下を参考にしてください。

・The symfony Forms Book – 第1章 – フォームの作成
http://www.symfony-project.org/book/forms/1_2/ja/01-Form-Creation

・The symfony Forms Book – 第4章 – Propelとの統合(symfony1.1時点)
http://symfony.xrea.jp/1.1/forms_book/04-Propel-Integration.html

さらに、このフォームを、前回作成したパーシャルに挿入します。

前回作成した、opSamplePlugin/apps/pc_frontend/modules/hello/templates/_sampleParts.php を以下のように変更します。

_sampleParts.php

<?php
$criteria = new Criteria();
$criteria->add(MemberNewsPeer::MEMBER_ID,$sf_user->getMember()->getId());
$memberNews = MemberNewsPeer::doSelectOne($criteria);

$form = new MemberNewsForm($memberNews);

include_box(‘MyNews’,’MyNews’,”,array(‘form’=>$form,’url’=>’hello/updateNews’));

モデルの操作についてはこちらを参考にしてください。

・The Definitive Guide to symfony – 第8章 – モデルレイヤーの内側(symfony1.1時点)
http://symfony.xrea.jp/1.1/book/08-Inside-the-Model-Layer.html

このコードでは、先ほど編集したフォームのインスタンスを作成しています。
コンストラクタに、モデルのインスタンスを渡すことにより、
現在、DBに登録されている内容がデフォルト値として設定されます。
フォームを出力するときには、OpenPNE3用パーツを挿入するための PartsHelper(最初からロードされています)
に含まれている、include_box() を利用しています。

include_box($id, $title = ”, $body = ”, $option = array()) の説明

$id : このパーツのIDです。同一ページで同じIDを利用しないように注意してください。
$title : このパーツのタイトル部に表示させる文字列です。
$body : このパーツの内容ですが、今回はフォームを表示させるので空白です。
$option : パーツのオプションです。formを渡すときは、’form’パラメータに
 フォームのインスタンスを渡してください。
 また、’url’パラメータで、formがsubmitされた時のアクション先を指定します。
 とりあえずは、次回作成する予定の ‘hello/updateNews’ を指定しています。

編集後、更新するとOpenPNEのホームがこうなっているかと思います。

現在は、submitすると、 hello/updateNews アクションを作成していないため、エラーとなります。
次回は、肝心のアクションを作成します。
おそらく、次回で MyNewsを拡張するプラグインが完成します!

トラックバック:1

トラックバック from 浅倉卓司@blog風味? 09-01-19 (月) 17:21

[PHP][OpenPNE] OpenPNE3のプラグインの作り方を読んでて気になったんだけど、…

 OpenPNE3を使ってみようと思ってとりあえずプラグインの書き方を読んでみたら「OpenPNE3プラグインの作り方#5」「同#6」でちょっと気になる部分があったのでメモ。  #5で入力フォームの…

ページの先頭に戻る