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

TIPS

Home

OpenPNE3でのiPhone対応をたくらんでみる

07 / 01 水曜日 2009

開発チームの川原です。

この前、とあるイベントでOpenPNEはiPhone対応はしないのですか?
というご意見をいただきました。

ということで、週末を使ってiPod touch / iPhone的な
OpenPNE3のインターフェイスを作ってみようかとたくらんでみました。

OpenPNE + iPhone

OpenPNE + iPhone

と、まだログイン画面しか作られていませんが、iPhoneインターフェイスライクなものになっています!

iuiという、iPhone用のライブラリを利用しています。
http://code.google.com/p/iui/

週末を利用して作っているのでペースは遅いかもしれませんが、完成したら
本線の方の取り込みについて考えたいと思います。

https://trac.openpne.jp/svn/OpenPNE3/branches/kawahara/iui
上で作業しているので、興味があったら是非いじってみてください!

*ちなみに、川原はiPhoneや iPod touchを持っていない上に、Mac使いではないのでWindows版のSafariでしか動作検証がされていません。

OpenPNE3 機能対応状況をまとめました

06 / 26 金曜日 2009

開発チームの海老原です。
現時点における OpenPNE3 の機能実装状況をまとめました。

今村さんがまとめてくれたスプレッドシート(OpnePNE3の機能一覧)をアップデートし、更新した項目の備考欄に「○○月対応予定項目」を追記しました。現時点で対応が遅れている項目については、備考欄が赤字になっています。

現時点で対応が遅れている項目は、

  • 日記コメント記入履歴(opDiaryPlugin)
  • 日記メール投稿(opDiaryPlugin)
  • 日記コメントメール投稿(opDiaryPlugin)
  • トピック・イベント検索(opCommunityTopicPlugin)
  • 写真付き書き込み(opCommunityTopicPlugin)
  • メッセージ検索(opMessagePlugin)
  • SNS設定 – お気に入りフィード使用設定(管理機能)
  • SNS設定 – ログイン制限(管理機能)
  • SNS設定 – アフィリエイト用タグ(管理機能)
  • SNS内名称設定(管理機能)
  • 画像・書込み管理(管理機能)
  • 携帯版配色変更(管理機能)

となります。

未実装機能の実装やプラグイン開発にご協力いただける方は、こちらのエントリをご覧ください。一緒に OpenPNE 3 を盛り上げていきましょう!

opWikiPlugin を作ってみよう #1

06 / 12 金曜日 2009

  • TIPS
  • Kousuke Ebihara

OpenPNE開発チームの海老原です。

不定期ではありますが、 OpenPNE 3.2.x に向けたプラグインの作成チュートリアルを連載していこうと思います。

はじめに

OpenPNE 3 向けのプラグイン作成チュートリアルには、川原君の「プラグインの作り方」シリーズが存在しますが、これは OpenPNE 3 開発の初期の段階から執筆されたもので、いまでは内容が古くなってしまっています。プラグインのリリースをどうおこなえばよいかといったようなプログラミング以外に関するトピックもなく、このチュートリアルだけでプラグイン作成の全貌を把握することは難しくなってきたといえます。

また、現在開発を進めている OpenPNE 3.2 系は、ORM の Doctrine 化にはじまり、数多くの大きな機能改善がおこなわれます(その様子は開発版である OpenPNE 3.1.x を追うことで知ることができます)。
これらの改善は OpenPNE 3.0 ではおこなえなかったことや不充分だったことを実現するためのものであり、非常に意義のあることです。
しかし、開発者が自分自身でチェンジログからそれぞれの変更を充分に理解し、自作のプラグインに反映させていくのは極めて大変な作業です。

これらの状況を解決することが、このチュートリアルの目的です。つまり読者は、

  • ・最新の OpenPNE に向けたプラグイン作成方法を知ることができる
  • ・プラグイン開発工程全体の流れを知ることができる
  • ・OpenPNE3.2 の新機能や変更点を知ることができる
  • というメリットを享受することができます。
    続きを読む

OpenPNE 3.1 を CentOS 5 にインストールしてみました

05 / 30 土曜日 2009

OpenPNE開発チームの小川です。

前回はレンタルサーバに OpenPNE 3 をインストールする例を紹介しましたが、今回は自分で管理しているサーバへのインストール例として OpenPNE 3.1.0 を最小セットアップ状態の CentOS 5.3 にインストールする手順をご紹介します。

OpenPNE 3.1 の一般的なインストール方法は、OpenPNE3.1 セットアップ手順 をご覧ください。

続きを読む

OpenPNE3 をさくらのレンタルサーバにインストールしてみました

05 / 13 水曜日 2009

OpenPNE開発チームの小川です。

OpenPNE 3 のリリース以来、「OpenPNE 3 ってレンタルサーバでも動くの?」という質問をたくさんもらっていましたので、今回はその実証のため OpenPNE 3.0.4 を「さくらのレンタルサーバ」のスタンダードで設置してみました。

結論としてはまったく問題なく設置できたましたので、その手順を紹介します。

続きを読む

OpenPNE3の機能について

04 / 20 月曜日 2009

OpenPNE開発チームの今村です。

OpenPNE3の機能一覧表を作成いたしました。
OpenPNE3のことをもっと知りたいという方々へ参考になれば幸いです。

まだまだ未実装の機能が多々ありますが開発チームも頑張っていきます!
また、未実装で興味のある機能があれば是非プラグイン作成にチャレンジしてみてください。
是非、一緒にOpenPNE3を盛り上げていきましょう!!

機能をまとめたスプレッドシートのリンク先OpnePNE3の機能一覧

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

12 / 22 月曜日 2008

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

開発チームの川原です!

(過去の記事)
OpenPNE3プラグインの作り方#1
OpenPNE3プラグインの作り方#2
OpenPNE3プラグインの作り方#3
OpenPNE3プラグインの作り方#4
OpenPNE3プラグインの作り方#5

My News作りは今回で最終回です!

あと残されている基本的な作業は

  • フォームによるポストに対するアクションの作成
  • プロフィール画面にMy Newsを表示する

この2つになるかと思います。

まずは、アクションを作ります。
第2回目でテスト動作に使用した
plugins/opSamplePlugin/apps/pc_frontend/modules/hello/actions/actions.class.php
に投稿がされた時のアクションを記していきます。

前回、ポスト先のアクション名は updateNews としていたはずです。
そのため、このファイルで宣言している helloActions クラスに
新たなメソッドを宣言します。
メソッド名は executeアクション名()
(アクション名の最初は大文字に変える)にします。

<?php
// (コメント行省略)..

class helloActions extends sfActions
{
  // (コメント行省略)..
  public function executeIndex($request)
  {
    return sfView::SUCCESS;
  }

  public function executeUpdateNews($request)
  {
    // POSTリクエストかどうかを確認する
    if ($request->isMethod(sfRequest::POST))
    {
      // member_news から 自分のメンバーIDが一致する1行を取りだす
      $criteria = new Criteria();
      $criteria->add(MemberNewsPeer::MEMBER_ID,$this->getUser()->getMember()->getId());
      $memberNews = MemberNewsPeer::doSelectOne($criteria);

      // 前回作成した memberNewsFormの初期値として先ほど取りだした1行をセットする
      $memberNewsForm = new MemberNewsForm($memberNews);

      // POSTされたパラメータを取得する
      $param = $request->getParameter(‘member_news’);
      $param['member_id'] = $this->getUser()->getMember()->getId();

      // パラメータをバインドする
      $memberNewsForm->bind($param);

      // 入力された値が妥当かどうかを確かめる
      if ($memberNewsForm->isValid())
      {
        // データベースに保存
        $memberNewsForm->save();
      }
    }
    // 最後に自分のホームにリダイレクトする
    return $this->redirect(‘@homepage’);
  }
}

アクションでは、
$this->getUser()->getMemer()
で自分のメンバー情報が取得できることを覚えておくと今後ラクになると思います。
(自分の情報がセットされた クラスMember のインスタンスです。
 また、テンプレートでは $sf_user で $this->getUser() が取得できます。
 よって、 $sf_user->getMember() で自分のメンバー情報が取得できます。)

アクション部はこういった感じです。
ホームにあるMy Newsのフォームでポストすることにより
正しく登録できることが確認できるでしょうか?

最後に、プロフィール画面から他人が見られるようにします。
第4回のように、テンプレート拡張を利用します。

パーシャルを追加します。

plugins/opSamplePlugin/apps/pc_frontend/modules/hello/templates

_sampleParts2.php を追加します。
これを、My Newsが表示されるものにします。
下のように編集してください。

<?php
// idパラメータ(プロフィールページを表示するとき指定しているメンバーID)
// を取得します。自己プロフィールのように id がない場合は、自分のメンバーIDを $memberIdに代入する
$memberId = $sf_request->getParameter(‘id’, $sf_user->getMember()->getId());

// member_news テーブルから取得した $memberIdと一致する1行を取り出す
$criteria = new Criteria();
$criteria->add(MemberNewsPeer::MEMBER_ID, $memberId);
$memberNews = MemberNewsPeer::doSelectOne($criteria);

$body = “”;
// もし行が存在した場合は、contentフィールドの内容を$bodyに代入する
if ($memberNews)
{
  $body = $memberNews->getContent();
}

// Partsヘルパー(OpenPNE3独自のヘルパー)に含まれる
// include_box関数を使って $body を出力する
// include_boxの仕様は前回の記事で説明
include_box(‘MyNews’,'MyNews’,nl2br($body));


plugins/opSamplePlugin/apps/pc_frontend/modules/member/config/view.yml

を次のようにします。

homeSuccess:
…(省略)…
      target: [after]

profileSuccess:
  customize:
    sampleParts2:
      template: [hello, sampleParts2]
      parts: [profile]
      target: [before]

templateに今回作成した、 sampleParts2 を指定します。
プロフィールの上に表示したいので、 targetはbeforeです!

設定ファイル編集後はやっぱり symfony cc でキャッシュ削除をします。
これでプロフィール画面は次のようになるはずです。

後はフォームのtextareaの幅を調節すれば、現行の My News同様に扱うことができるでしょう。
(ついでに更新日時を表示するのを忘れていた!)

今回はかなりシンプルなアプリを作成してみましたが、
symfonyはprotype.jsを利用することができるので
凝ればAjaxでバリバリ動くリッチなWebアプリを作ることだって可能です。

symfony1.2の日本語資料も最近ようやく増え始めてきたので
ぜひOpenPNE3を使って、面白いアプリを作ってみてください。

「こんなの作ってみた!」という嬉しい報告をお待ちしています。

以後も、プラグイン開発関連の情報は引き続き発信していきたいと思いますので、
よろしくお願いします。

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の「テンプレート拡張機能」を利用して
ホームとプロフィールのページにパーツを挿入する方法について投稿する予定です。

OpenPNE×手嶋屋提供サービスのお知らせ

  • 大規模ホスティング
  • 技術サポート
  • カスタマイズ
  • OpenPNE Manager
  • お客さまサポート

ページの先頭に戻る