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

TIPS

Home

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を拡張するプラグインが完成します!

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

12 / 08 月曜日 2008

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

開発チームの川原です。

プラグインの作り方の記事もとうとう4回目になりました。

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

今回は、OpenPNE3のテンプレート拡張について解説します。

OpenPNE2のカスタマイズは、特定ページ(例えばpage_h_home)に新しい機能を加えるとき、
そのページのアクションを編集して、さらにテンプレートを編集して…。
といった作業が必要でした。

OpenPNE3は、プラグインを追加するだけで
特定ページに、新たな部品を追加することができます。

この仕組みをテンプレート拡張と呼んでいます。

OpenPNE3のテンプレートでは、複数のテンプレート部品(パーツ)によって
構成される仕組みになっています。
パーツにはIDを持っていて、その前後に別のパーツを挿入することが可能です。

op32.png

図で説明するとこんな具合です。
今回作る「My News!機能」を実装するためには
ホームとプロフィールに新しく部品を挿入する必要がありそうです。

ホームには今のところ idが information のパーツと
homeTopSampleBox というパーツが配置されています。

informationの下に、新たに「My News!」のフォームを挿入したいという
ことになります。
フォームの作り方は次回にやる予定なので、今回は
informationの下に文字を表示できるようにしてみます。

まずは、新たに挿入するテンプレートを追加します。
opSamplePlugin/apps/pc_frontend/modules/hello/templates
に新たに _sampleParts.php
を追加します。これは、informationの下に表示するパーシャルです。

symfonyのパーシャルについてはこちら。
http://www.symfony-project.org/book/1_2/07-Inside-the-View-Layer#Templating(英語)

とりあえず、内容は Hello world!! としてみました。

OpenPNE3のホームである、member/home に上に今回作成したテンプレートを挿入したいので
opSamplePlugin/apps/pc_frontend/modules
に、新たにmember ディレクトリ。さらにその中に config ディレクトリを作成します。
config ディレクトリに、 view.yml ファイルを作成して編集します。

homeSuccess:
  customize:
    sampleParts:
      template: [hello, sampleParts]
      parts: [information]
      target: [after]

symfony ではもはやおなじみのYAMLです。

memberモジュールで、
homeSuccessテンプレート(homeアクションが成功したときに呼び出されるテンプレート)
の設定をここで追加しています。

customize によってテンプレート拡張を実現します。
3行目の samplePartsというのはテンプレート名です。
template で特定のパーシャルを指定します。
parts で指定したID のどこに配置するかを target で定めます。
afterなので information の後に挿入されることになります。
これにより、homeSuccess の information の後に hello/sampleParts が挿入されるようになります。

設定ファイルを追加、編集した後には必ず、

symfony cc

でキャッシュを削除してください。

ws000023.PNG
ホームにアクセスすると、こうなっているはずです。

これで、ホームやプロフィールに新たに部品を追加する方法はわかりました。
次回は、今回のパーシャルにフォームを挿入します。

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

12 / 01 月曜日 2008

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

とうとう12月になってしまいました。
健康的な生活を送っている人であれば、
あと、31回寝ればお正月なんです。恐ろしいですね。

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

本日もOpenPNE3のプラグインについて、解説していきます。

前回では、新しくページを作ることができましたが、拡張を作る上で
どうしても避けて通れないのは、データをどのように保存するかです。

そこで、プラグイン独自のデータベースモデルを作成する方法を載せておきます。

とりあえず、この連載の最終目標として何を作るかだけ先に決めてしまいます。
OpenPNE.jpにある
MyNews機能であれば、簡単にできる気がするのでやってしまいましょう!

MyNews機能

プラグイン用のデータベースモデルの作成法は
symfonyのマニュアルにある通りです。
http://www.symfony-project.org/book/1_2/17-Extending-Symfony#Plug-In%20File%20Structure(英語)

プラグインのディレクトリ直下に「config」ディレクトリが作られているはずです。
その下に、「schema.yml」を作ります。

MyNewsを作る上で、
必要なフィールドは次のようになると思います。

ID     (1対1のモデルにしてもよいのですが、今回はこのテーブルのための固有のキーを割り振ることにします。)
メンバーID(コアにあるmemberモデルの外部キーとなりそうです。)
本文
更新日時

このモデルを作成するために、新しく作成した「schema.yml」を次のようにします。

propel:
  _attributes: { package: plugins.opSamplePlugin.lib.model }

  member_news:
    id: ~
    member_id : { type: integer, foreignTable: member, foreignReference: id }
    content:    { type: longvarchar }
    updated_at: ~

前回同様 YAML はタブ文字ではなく、スペース2文字でインデントするということに気を付けてください。

id と指定したフィールドに関しては、特に何もオプションを指定しないと
自動的にプライマリーキーとなり、オートインクリメントが有効になります。

●●●_id とやることにより、●●●テーブルの外部キーになります。
同じ「schema.yml」ファイル上に、そのテーブルがあれば、自動的にそのテーブルの外部キーになりますが、
memberテーブルの宣言は別の場所にあるので、しっかりと foreignTableを指定します。

* アルファ版の段階で、コアのモデルを利用するときはモデルの変更が行われることが
 ありますのでご注意ください。

updated_atは更新時に自動的に更新時時刻が登録されるフィールドになります。

このファイルを保存した後、

symfony openpne:install

コマンドを利用して、データベースモデルを再構築してください。

* 将来的には、OpenPNE3のすべてのデータベースモデルを初期化しないで
新しく作成したモデルを追加することができるようになる予定です。

これで、新たなテーブルが追加されているはずです。
ws000015.PNG
ws000018.PNG

次回は、OpenPNE3の「テンプレート拡張機能」を利用して
ホームとプロフィールのページにパーツを挿入する方法について投稿する予定です。

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

11 / 20 木曜日 2008

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

開発チームの川原です。
寒くて風邪をひかないか心配な今日この頃です。

この記事は、
OpenPNE3プラグインの作り方#1
の続きです。

前回作成された 「plugins/opSamplePlugin/app/pc_frontend/modules/hello」
下には 「actions」と「templates」の2つのディレクトリが作られているはずです。

「actions」ディレクトリの中には、最初から「actions.class.php」が
用意されています。

中身はこうなっています。

…(省略)…
class helloActions extends sfActions
  {
  /**
  * Executes index action
  *
  * @param sfRequest $request A request object
  */
  public function executeIndex($request)
  {
    $this->forward(‘default’, ‘module’);
  }
}

ここに、アクションを記していきます。

$this->forword('default','module');

となっているため、前回の 「Module “hello” created」
のページにフォワードしてしまいます。
ws000005.PNG

return sfView::SUCCESS;

に置き換えてしまいましょう。

…(省略)…
class helloActions extends sfActions
  {
  /**
  * Executes index action
  *
  * @param sfRequest $request A request object
  */
  public function executeIndex($request)
  {
    return sfView::SUCCESS;
  }
}

次に、テンプレートを編集します。
「templates」ディレクトリには、最初から「indexSuccess.php」が
用意されています。

executeIndex() で sfView::SUCCESS が返されると
このテンプレートを表示します。
中身は空白のファイルなので、もぞもぞと入力してしまいます。

とりあえず、

Hello world!

とベタベタに出してみようと思います。

前回のように
http://sns.example/hello
アクセスすると、こうなるはずです

ws000007.PNG

このままでは、ログインしていなくても見ることができてしまいます。
そこで、「hello」ディレクトリの中に、新しく「config」ディレクトリを作成して、
「security.yml」というファイルを作成します。

中身はこのようにします。

all:
  is_secure: on
  credentials: SNSMember

YAMLなので、インデントにはタブでなくて半角スペース2つで。
その後、 symfony cc でキャッシュを削除してください

そうすると、ログインした状態でないと
http://sns.example/hello
にアクセスできなくなります。

ログインしてアクセスすると、下のようにメニューまで付いたページになります。
ws000008.PNG

これで、SNS中に新しいページを作ることができるようになりました。

次回は、プラグイン独自のデータベースモデルを追加してみます。

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

11 / 17 月曜日 2008

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

ws000006.PNG
開発チームの川原です。

OpenPNE3では、プラグインとしてあらゆる機能を追加することができます。
ただいま、自分が実装を手掛けているOpenSocialの機能もプラグインとして作成しています

OpenPNE3はsymfonyフレームワークを利用していますが、
symfonyのプラグインとは違ったプラグインの構造を持っています。
さらに、プラグインの骨組みを作成するためのタスクも用意されているようです。

今回は、そのタスクを利用してプラグインの骨組みを作成してみます。

コンソールでOpenPNE3がインストールされたディレクトリに移動します。
* 以下、「/var/www/OpenPNE3」にOpenPNE3をインストールした想定で説明します。

$ cd /var/www/OpenPNE3

次に、プラグイン作成タスクを実行します。
今回は「opSamplePlugin」という名前でプラグインを作成することにします。
現状ではプラグイン名の命名規則は未定ですが、
「opなんやらかんやらPlugin」
という方向で考えられているようです。

以下のタスクを実行することにより、 OpenPNE3の「plugins」ディレクトリ下に
「opSamplePlugin」が追加されるはずです。

$ symfony opGenerate:plugin opSamplePlugin

新しく追加された「opSamplePlugin」ディレクトリの中には、4つの空のディレクトリが作られます。

apps
conf
i18n
lib

symfonyプラグインとの大きな違いは、「apps」ディレクトリを配置できることにあります。
この下に、アプリケーションごとのモジュールを配置することができます。
これらの作成を自動的に行うためのタスクも用意されているようです!

PCからのSNSメンバーが利用するpc_frontendアプリケーションに
「hello」モジュールを追加してみます。

以下のタスクで「apps」ディレクトリ下に
空の「modules」ディレクトリが含まれた「pc_frontend」ディレクトリが作成されます。

$ symfony opGenerate:app opSamplePlugin pc_frontend

さらに、「pc_frontend」に「hello」モジュールを追加します。
以下のタスクで「pc_frontend/modules」ディレクトリ内に「hello」ディレクトリが作成されます。

$ symfony opGenerate:module opSamplePlugin pc_frontend hello

http://sns.example/

がOpenPNE3のURLであったとき、

http://sns.example/hello

にアクセスして以下のページが出れば完了です!

ws000005.PNG

次回の投稿では、今回作成した骨組みを利用して実際にアプリを作っていきます。

OpenPNEのOpenID(プロバイダー)機能の使い方

08 / 22 金曜日 2008

  • TIPS
  • Mamoru Tejima

OpenPNEはVer2.12からOpenIDを発行する機能が搭載されています。

使い方は以下の通り。

1.OpenPNE2.12以上のSNSを用意する

2.config.phpを変更する

define(‘OPENPNE_IS_OPENID_SERVER’, true);

とします。

サーバの準備はここまでで完了です。

次は利用する方法。

3.SNSに通常メンバーとしてログインする

4.マイページ確認で自分のメンバーIDを確認する

この例の場合は7です。

5.OpenIDのURLを決定する

http://(SNSのURL)/openid/(メンバーID)

が自分のOpenIDになります。

この例の場合は
http://sns.openpne.jp/openid/7
です。

6.OpenIDを利用して外部のサービスにログインする

私のお気に入りサービス。Mindmisterにログインします。

OpenIDURLを入力してログインボタンを押す。

「許可」を押してログイン完了。

ロリポップ!レンタルサーバーでOpenPNEの設置方法が掲載されています。

04 / 04 金曜日 2008

ロリポップ!レンタルサーバー – OpenPNE の設置

人気のオープンソースのSNSエンジン『 OpenPNE 』の設置方法です。
※このマニュアルでは、お客様のURLを http://hoge.lolipopjp として、
■ OpenPNEのアドレスを http://hoge.lolipopjp/sns 、
■ OpenPNEの本体を http://hoge.lolipopjp/openpne
で展開するものとしてご説明します。

lolipop上でOpenPNEを設置するための方法が掲載されています。

Symfony tutorial から始めよう

04 / 02 水曜日 2008

OpenPNE本線開発チーム(小川さん、海老原君、きわさん)は目下2.12.0のリリースに向けて作業がたて込んでいます。

忙しいのは山々ですが、OpenPNE3のベースフレームワークである、symfonyをさわっていかなければなりません。

私がMy first symfony project

から勉強を始めていきます。

http://d.hatena.ne.jp/openpne/20080222

この二つのサイトを読めば、symfonyプロジェクトを試すことが出来ます。

symfonyを試すためのテスト環境を、20ユーザー分用意しました。試してみたい方は、ぜひコメントください。

GoogleAppsとOpenPNEをSlavePNE接続する

09 / 02 日曜日 2007

GoogleAppsとOpenPNE2.8.3を連携させる方法を紹介します。

GoogleAppsで提供されているGmailのPOP3サーバ(SSL)を認証サーバとして、OpenPNEをSlavePNE接続します。

GoogleAppsとOpenPNEをSlavePNE接続 説明ムービー

ページの先頭に戻る