[OpenPNE3]opFreepagePlugin 0.9.2 リリース

Posted under OpenPNE3,php by uechoco on 水曜日 28 7月 2010 at 12 : 11 : 17

OpenPNE3にフリーページ機能を追加するopFreepagePluginの0.9.2をリリースしました。

リリースの詳細とインストール方法は http://plugins.openpne.jp/release/223 を御覧ください。

opFreepagePluginの0.9.0からの主な変更点は以下のとおりです。

  • OpenPNE 3.4系(Doctrine)対応 (balibaliさんからのpull request、ありがとうございます!)
  • テンプレート本文をTwigテンプレートエンジンで描画(Twig構文が使えます!)

Twig自体は管理画面のメールテンプレート機能で使われていましたので、その描画部分を参考にして作りました。sfSymfonyTemplatingViewPluginというOpenPNE3のリードコミッターの海老原さんが作ったプラグインを通してTwigを使用するような仕様になっています。このプラグインの使い方というよりは、Symfony Templatingの使い方がうまく読み取れずに苦戦しました(Engineの選定とテンプレートパスの決定部分など)。

一応動いていそうなので、しばらく様子見ます。

是非使ってみてください。


[OpenPNE3]opFreepagePluginをgithubに移行しました。

Posted under OpenPNE3,php,symfony by uechoco on 火曜日 1 12月 2009 at 00 : 22 : 59

OpenPNE 3.0.0がリリースされて間もない頃、[OpenPNE3]管理画面付きプラグイン(opFreepagePlugin)#1 開発準備、DBスキーマの設定の全6回のシリーズで、フリーページ機能を作るという目的で、OpenPNE3のプラグインの作成方法を公開していました。

OpenPNE3の開発環境もだいぶ変化してきており、メインコードはgithubに、BTSはredmineにそれぞれ移行しています。それに合わせて、プラグインも登録できるようになっていることを、手嶋屋の方から教えていただきました。

OpenPNE3自体は3.1系に突入し、symfony 1.4化&ORMのDoctrine化が進行していますので、opFreepagePluginはレガシーコードになっています。そして、サンプルで作っているので、日本語パラダイスで、国際化に対応しておらず、表示もしょぼいです(笑

それでも、せっかくプラグインの登録ができるとのことでしたので、redmineに登録してみました。そして、opFreepagePluginのソースコードをgithub.comで公開しました。

gitやredmineなどの慣れない操作、そしてsymfony 1.4やDoctrineなどの慣れないコードがいろいろありますが、せっかくの機会ですので、ちょっとずつ改善していこうかと思います。


[OpenPNE3]管理画面付きプラグイン(opFreepagePlugin)#6 プラグインのパッケージング

Posted under OpenPNE3,php,symfony by uechoco on 土曜日 7 3月 2009 at 01 : 05 : 26

前回まででopFreepagePluginの開発部分は完了しました。今回はプラグインのバージョン情報を定義し、アーカイブ化することで、外部に公開できるファイルにしたいと思います。なお、このプラグインのパッケージング方法はOpenPNE 3.0.0で確認しているものです。近いうちにプラグインリリース用symfony拡張コマンドを充実させる予定もあるようですので、その点は加味してご覧ください。

プラグインのパッケージングは非常に簡単です。まずはプラグイン情報が書かれたpackage.xmlを作成します。これもコマンド1つで作成できます。今回はopFreepagePluginをバージョン0.9.0、ステータスをbeta、リリース文を"First release"とします。以下のようなコマンドになります。

BASH:
  1. ./symfony opPlugin:define opFreepagePlugin 0.9.0 beta "First release"

以下のような出力がなされます。

BASH:
  1. [uechooc@localhost pneroot]$ ./symfony opPlugin:define opFreepagePlugin 0.9.0 beta "First release"
  2. >> sfPearFrontendPlugin Attempting to discover channel "plugins.openpne.jp"...
  3. >> sfPearFrontendPlugin downloading channel.xml ...
  4. >> sfPearFrontendPlugin Starting to download channel.xml (598 bytes)
  5. >> sfPearFrontendPlugin .
  6. >> sfPearFrontendPlugin ...done: 598 bytes
  7. >> sfPearFrontendPlugin Auto-discovered channel "plugins.openpne.jp", alias
  8. >> sfPearFrontendPlugin "plugins.openpne.jp", adding to registry
  9. >> sfPearFrontendPlugin Attempting to discover channel "pear.symfony-project.com"...
  10. >> sfPearFrontendPlugin downloading channel.xml ...
  11. >> sfPearFrontendPlugin Starting to download channel.xml (663 bytes)
  12. >> sfPearFrontendPlugin ...done: 663 bytes
  13. >> sfPearFrontendPlugin Auto-discovered channel "pear.symfony-project.com", alias
  14. >> sfPearFrontendPlugin "symfony", adding to registry
  15. >> sfPearFrontendPlugin Attempting to discover channel
  16. >> sfPearFrontendPlugin "plugins.symfony-project.org"...
  17. >> sfPearFrontendPlugin downloading channel.xml ...
  18. >> sfPearFrontendPlugin Starting to download channel.xml (639 bytes)
  19. >> sfPearFrontendPlugin ...done: 639 bytes
  20. >> sfPearFrontendPlugin Auto-discovered channel "plugins.symfony-project.org", alias
  21. >> sfPearFrontendPlugin "symfony-plugins", adding to registry
  22. >> sfPearFrontendPlugin Analyzing
  23. >> sfPearFrontendPlugin apps/mobile_frontend/modules/freepage/actions/actions.class.php
  24. >> sfPearFrontendPlugin Analyzing
  25. >> sfPearFrontendPlugin apps/mobile_frontend/modules/freepage/templates/indexSuccess.php
  26. >> sfPearFrontendPlugin Analyzing
  27. >> sfPearFrontendPlugin apps/pc_backend/modules/opFreepagePlugin/actions/actions.class.php
  28. >> sfPearFrontendPlugin Analyzing
  29. >> sfPearFrontendPlugin apps/pc_backend/modules/opFreepagePlugin/templates/editSuccess.php
  30. >> sfPearFrontendPlugin Analyzing
  31. >> sfPearFrontendPlugin apps/pc_backend/modules/opFreepagePlugin/templates/indexSuccess.php
  32. >> sfPearFrontendPlugin Analyzing
  33. >> sfPearFrontendPlugin apps/pc_backend/modules/opFreepagePlugin/templates/listSuccess.php
  34. >> sfPearFrontendPlugin Analyzing
  35. >> sfPearFrontendPlugin apps/pc_backend/modules/opFreepagePlugin/templates/newSuccess.php
  36. >> sfPearFrontendPlugin Analyzing
  37. >> sfPearFrontendPlugin apps/pc_backend/modules/opFreepagePlugin/templates/_form.php
  38. >> sfPearFrontendPlugin Analyzing
  39. >> sfPearFrontendPlugin apps/pc_backend/modules/opFreepagePlugin/templates/_submenu.php
  40. >> sfPearFrontendPlugin Analyzing
  41. >> sfPearFrontendPlugin apps/pc_frontend/modules/freepage/actions/actions.class.php
  42. >> sfPearFrontendPlugin Analyzing
  43. >> sfPearFrontendPlugin apps/pc_frontend/modules/freepage/templates/indexSuccess.php
  44. >> sfPearFrontendPlugin Analyzing config/config.php
  45. >> sfPearFrontendPlugin Analyzing lib/opFreepagePluginRouting.class.php
  46. >> sfPearFrontendPlugin Analyzing lib/filter/FreepageFormFilter.class.php
  47. >> sfPearFrontendPlugin Analyzing lib/filter/base/BaseFreepageFormFilter.class.php
  48. >> sfPearFrontendPlugin Analyzing lib/form/FreepageForm.class.php
  49. >> sfPearFrontendPlugin Analyzing lib/form/base/BaseFreepageForm.class.php
  50. >> sfPearFrontendPlugin Analyzing lib/model/Freepage.php
  51. >> sfPearFrontendPlugin Analyzing lib/model/FreepagePeer.php
  52. >> sfPearFrontendPlugin Analyzing lib/model/map/FreepageMapBuilder.php
  53. >> sfPearFrontendPlugin Analyzing lib/model/om/BaseFreepage.php
  54. >> sfPearFrontendPlugin Analyzing lib/model/om/BaseFreepagePeer.php

いろいろなファイルを解析していますが、これらはパッケージ内に含まれるファイル一覧を作成し、それぞれのファイルのチェックサムを取得している処理です。package.xmlには様々な設定項目があるのですが、コマンドラインで指定できる項目以外は固定で挿入されてしまいます。例えば、ライセンスはApache Licenseで固定されています。

パッケージ情報が生成できたので、アーカイブを作成します。これもコマンド一発です。以下のコマンドはopFreepagePluginのアーカイブををカレントディレクトリに作成します。

BASH:
  1. ./symfony opPlugin:archive opFreepagePlugin ./

このコマンドを実行後、カレントディレクトリにはopFreepagePlugin-0.9.0.tgzというファイルが作成されています。バージョン名が付加されたtgzファイルですね。あとはこのファイルを公開すれば完成です。PEARのチャンネルサーバがあればコマンドラインからのインストールにも対応できると思うのでいいですね。plugins.openpne.jpなんかが一般開放されるとうれしいのですが。

以上でこの連載シリーズは終了です。OpnePNE3のプラグインが増えるといいですね!技術的な知識がある運営者ならばプラグインで独自の機能を作って自分のSNSを盛り上げることも可能でしょう。OpenSocialとsymfonyプラグインの双方で拡張できるOpenPNE3の可能性は無限大です!


[OpenPNE3]管理画面付きプラグイン(opFreepagePlugin)#5 ルーティング拡張でプラグイン独自のURL

Posted under OpenPNE3,php,symfony by uechoco on 日曜日 1 3月 2009 at 10 : 10 : 25

前回まででほとんどの機能は完成しています。今回は利便性の向上を目的として、ルーティングの拡張を行います。前回までの内容ですと、フリーページにアクセスする際は/freepage/id/1といったURLでした。どうせなら、/id/というのを削りたいですね。しかしながら、プラグインとして追加する以上、サイト管理者にrouting.ymlを書き換えてもらうなどという対応はよろしくありません。OpenPNE3のベースとなるsymfonyではプラグインからルーティングを拡張するための仕組みが用意されていますsymfony 1.1 日本語 マニュアル 第17章 - symfonyを拡張する - プラグインの機能にもその記述があります。OpenPNE3.0系ではこの機能にのっとってルーティング拡張をしているようです。

早速試してみましょう。/plugins/opFreepagePlugin/config/config.phpを新規作成し、以下の内容を追加します。

php:
  1. <?php
  2. $this->dispatcher->connect('routing.load_configuration', array('opFreepagePluginRouting', 'listenToRoutingLoadConfigurationEvent'));
  3. ?>

そして、/plugins/opFreepagePlugin/lib/opFreepagePluginRouting.class.phpを新規作成し、以下の内容を記述します。

php:
  1. <?php
  2. class opFreepagePluginRouting
  3. {
  4.   static public function listenToRoutingLoadConfigurationEvent(sfEvent $event)
  5.   {
  6.     $routing = $event->getSubject();
  7.  
  8.     $routes = array(
  9.       'freepage_id' => new sfPropelRoute(
  10.         '/freepage/:id',
  11.         array('module' => 'freepage', 'action' => 'index'),
  12.         array('id' => '\d+'),
  13.         array('model' => 'Freepage', 'type' => 'object')
  14.       ),
  15.     );
  16.  
  17.     $routes = array_reverse($routes);
  18.     foreach ($routes as $name => $route)
  19.     {
  20.       $routing->prependRoute($name, $route);
  21.     }
  22.   }
  23. }

さきほどご紹介したマニュアルのページとは少しソースコードの形式が違っていますね。これはopDiaryPluginのルーティング拡張部分を参考にしたコードです。特徴としては、配列によって簡単にルーティング設定を追加することができるようになっています。

これだけでURLが変わります。

BASH:
  1. ./symfony cc

でキャッシュをクリアして、新しいルーティングを適応させます。

試しに/freepage/1、/mobile_frontend.php/freepage/1とURLを打ってみてください。ちゃんとアクセスできると思います。

次回は最終回です。OpenPNE3のプラグインのパッケージング方法をご紹介したいと思います。


[OpenPNE3]管理画面付きプラグイン(opFreepagePlugin)#4 PC/モバイルの動作画面の作成

Posted under OpenPNE3,php,symfony by uechoco on 金曜日 27 2月 2009 at 11 : 36 : 23

前回まででopFreepagePluginの管理画面側は完成しています。今回はいよいよPCとモバイルの動作画面を作ります。

まずはPC版から。symfonyコマンドでpc_frontendのappとmoduleを作ります。moduleはfreepageという名前にします。

BASH:
  1. ./symfony opGenerate:app opFreepagePlugin pc_frontend
  2. ./symfony opGenerate:module opFreepagePlugin pc_frontend freepage

新しく作られたapps/pc_frontend/modules/freepage/actions/actions.class.phpのexecuteIndexメソッドを変更します。

php:
  1. public function executeIndex($request)
  2.   {
  3.     // forward 404 page unless freepage does exist
  4.     $this->forward404Unless($this->freepage = FreepagePeer::retrieveByPk($request->getParameter('id')), sprintf('Object freepage does not exist (%s).', $request->getParameter('id')));
  5.  
  6.     if ($this->freepage->getAuth()) {
  7.       if (($member = $this->getUser()->getMember()) && $member->getIsActive()) {
  8.         // ok
  9.       } else {
  10.         $this->forward404('This page is for sns members.');
  11.       }
  12.     }
  13.  
  14.     // forward 404 page unless app_type is 'pc';
  15.     $this->forward404Unless($this->freepage->getAppType() == 'pc', sprintf('This page is for %s application.', $this->freepage->getAppType()));
  16.  
  17.     $this->getResponse()->setTitle($this->freepage->getTitle());
  18.   }

このIndexアクションでは、

  • idがパラメータとして存在するか
  • パラメータidがfreepageテーブルに存在するか
  • 該当フリーページが認証付きページの場合、認証済みのユーザであるかどうか
  • 該当フリーページがPC用かどうか

をチェックしています。認証済みユーザの認証部分の処理はもっとスマートな方法がありそうですね。近いうちに調べてみます。続いてさきほど自動生成されたapps/pc_frontend/modules/freepage/templates/indexSuccess.phpにも変更を加えます。

php:
  1. <?php echo $sf_data->getRaw('freepage')->getBody(); ?>

今回は本質的ではないのでデザインを考慮していません。大事なポイントは、HTMLエンティティがエスケープされていない生のデータを取得して、表示しているところです。こうしないと管理画面で苦労して書いたタグがそのまま出てしまうことになるので、生データを出力します。

これでPC版は完成です。(http://example.com/freepage/id/1)
03_opfreepage_pc

続いてモバイル版も作りましょう。ほとんど同じ手順で作ることができます。まずはmobile_frontend appを作り、freepage moduleを追加します。

BASH:
  1. ./symfony opGenerate:app opFreepagePlugin mobile_frontend
  2. ./symfony opGenerate:module opFreepagePlugin mobile_frontend freepage

自動生成されたapps/mobile_frontend/modules/freepage/actions/actions.class.phpを書き換えます。PC版との違いはPC/mobile判定部分だけです。

php:
  1. public function executeIndex($request)
  2.   {
  3.     // forward 404 page unless freepage does exist
  4.     $this->forward404Unless($this->freepage = FreepagePeer::retrieveByPk($request->getParameter('id')), sprintf('Object freepage does not exist (%s).', $request->getParameter('id')));
  5.  
  6.     if ($this->freepage->getAuth()) {
  7.       if (($member = $this->getUser()->getMember()) && $member->getIsActive()) {
  8.         // ok
  9.       } else {
  10.         $this->forward404('This page is for sns members.');
  11.       }
  12.     }
  13.  
  14.     // forward 404 page unless app_type is 'mobile';
  15.     $this->forward404Unless($this->freepage->getAppType() == 'mobile', sprintf('This page is for %s application.', $this->freepage->getAppType()));
  16.  
  17.     $this->getResponse()->setTitle($this->freepage->getTitle());
  18.   }
  19. [/phpocde]
  20.  
  21. そしてapps/mobile_frontend/modules/freepage/templates/indexSuccess.phpを変更します。こちらはデザインが入っていないのでPC版の同ファイルと同じ内容です。
  22. [phpcode]
  23. <?php echo $sf_data->getRaw('freepage')->getBody(); ?>

モバイル版も完成です。(http://example.com/mobile_frontend.php/freepage/id/1)
04_opfreepage_mobile

次回はルーティングの調整をします。


次ページへ »

Copyright © 2012 うえちょこ@ぼろぐ. WP Theme created by Web Top.