[OpenPNE3]管理画面付きプラグイン(opFreepagePlugin)#2 管理画面の作成

Posted under OpenPNE3,php,symfony by uechoco on 火曜日 17 2月 2009 at 09 : 22 : 26

 前回はopFreepagePluginの初期設定として、ディレクトリの作成とDBスキーマの作成を行いました。今回は管理画面内のプラグイン独自の設定画面を開発方法を学びます。開発を行う前に、OpenPNE3のプラグイン設定画面の仕組みを説明します。

 OpenPNE3では、プラグインごとに設定画面が持てるような仕組みを持っていて、設定画面がある場合はプラグイン一覧からリンクが張られています。

00_plugin_list

 プラグイン独自の設定画面を作成するには、プラグイン内にpc_backendアプリケーション用のディレクトリを用意し、そこにプラグインと同名のモジュールを追加します。つまり、プラグインと同名のモジュールがあるかないかで設定画面の有無を判断しています。例えば、opFreepagePluginであれば、/plugins/opFreepagePlugin/apps/pc_backend/modules/opFreepagePlugin/actionsディレクトリを持っていれば「設定画面あり」とみなされます。

 では具体的にopFreepagePluginに設定画面を追加してみます。まずはターミナルで

BASH:
  1. ./symfony opGenerate:app opFreepagePlugin pc_backend

を実行し、/plugins/opFreepagePlugin/apps/pc_backend/modulesディレクトリを作成します。続いて

BASH:
  1. ./symfony opGenerate:module opFreepagePlugin pc_backend opFreepagePlugin

を実行し、pc_backendアプリケーション用のopFreepagePluginモジュールを追加します。デフォルトでactions.class.phpとindexSuccess.phpも作られます。また、この時点で既にプラグイン一覧にはopFreepagePluginの設定画面へのリンクが表示されています。

/actions/actions.class.phpにはexecuteIndex()メソッドが最初から記述されています。これを下記のように書き換え、さらにexecuteList()メソッドを追加します。

php:
  1. public function executeIndex($request)
  2.   {
  3.     $this->redirect('opFreepagePlugin/list');
  4.   }
  5.  
  6.  /**
  7.   * Executes list action
  8.   *
  9.   * @param sfRequest $request A request object
  10.   */
  11.   public function executeList($request)
  12.   {
  13.     $this->freepage_list = FreepagePeer::doSelect(new Criteria());
  14.     return sfView::SUCCESS;
  15.   }

上記記述で追加したlistアクションはフリーページの一覧を表示するアクションで、opFreepagePluginの設定画面を開くと最初に表示されることを想定しています。このlistアクションに対応するビューとして、/templates/listSuccess.phpを作成します。

php:
  1. <?php slot('submenu') ?>
  2. <?php include_partial('submenu') ?>
  3. <?php end_slot() ?>
  4.  
  5. <h2><?php echo __('一覧') ?></h2>
  6.  
  7. <table>
  8.   <thead>
  9.     <tr>
  10.       <th>ID</th>
  11.       <th><?php echo __('Title') ?></th>
  12.       <th><?php echo __('Body') ?></th>
  13.       <th><?php echo __('AppType') ?></th>
  14.       <th><?php echo __('Auth') ?></th>
  15.       <th><?php echo __('Created At') ?></th>
  16.       <th><?php echo __('Updated At') ?></th>
  17.     </tr>
  18.   </thead>
  19.   <tbody>
  20.     <?php foreach ($freepage_list as $freepage): ?>
  21.     <tr>
  22.       <td><?php echo link_to($freepage->getId(), 'opFreepagePlugin/edit?id='.$freepage->getId()) ?></td>
  23.       <td><?php echo $freepage->getTitle() ?></td>
  24.       <td><?php echo '(' . strlen($freepage->getBody()) . __('文字') . ')' ?></td>
  25.       <td><?php echo $freepage->getAppType() ?></td>
  26.       <td><?php echo ($freepage->getAuth() ? 'あり' : 'なし') ?></td>
  27.       <td><?php echo $freepage->getCreatedAt() ?></td>
  28.       <td><?php echo $freepage->getUpdatedAt() ?></td>
  29.     </tr>
  30.     <?php endforeach; ?>
  31.   </tbody>
  32. </table>
  33. <?php echo link_to(__('新規追加'), 'opFreepagePlugin/new') ?>

listSuccess.phpの冒頭でsubmenuという名前の部分テンプレートをスロットとして読み込んでいます。この冒頭3行は管理画面のビューの典型的なパターンですので覚えて損はないです。そのほかの部分はfreepageテーブルの内容を表形式に出力し、編集や新規作成へのリンクを加えています。

 最後に先ほど触れたsubmenuという名前の部分テンプレートを/templates/_submenu.phpに作成します。

php:
  1. <li><strong><?php echo __('フリーページ') . __('プラグイン') ?></strong></li>
  2. <li><?php echo link_to(__('一覧'), 'opFreepagePlugin/list') ?></li>
  3. <li><?php echo link_to(__('新規追加'), 'opFreepagePlugin/new') ?></li>

とりあえずこれでフリーページの一覧は表示できるようになりました。まだ新規作成や編集のリンクは動いていませんが、試しにフリーページをデータベースに直接登録してみると、以下のような画面になります。

01_opfreepage_list

 今回はここまでです。おさらいですが、管理画面にプラグイン独自の設定画面を追加するには、プラグイン名と同名のモジュールを作成すればよいということを忘れないでください。

 次回は管理画面の残りの機能として、新規作成・編集・削除画面を作ります。フォームの使い方勉強にもなりそうです。


[OpenPNE3]管理画面付きプラグイン(opFreepagePlugin)#1 開発準備、DBスキーマの設定

Posted under OpenPNE3,php,symfony by uechoco on 日曜日 15 2月 2009 at 22 : 22 : 33

OpenPNE3のプラグインの作り方は公式ページにもありますが、あちらは管理画面を使わないプラグインでした。今回は管理画面側の設定画面も込みのプラグインのサンプルとしてopFreepagePlugin(フリーページプラグイン)を作ってみたいと思います。フリーページはOpenPNE2からある機能ですが、現時点ではOpenPNE3の開発ロードマップには含まれていないため、当分、公式には作られないと思われる機能です。方針としてはOpenPNE2のフリーページと同等の機能をOpenPNE3で実装していきたいと思います。

プラグイン作成の参考としてこの記事をご覧になる方もいると思いますので、この連載記事で学べること、を先に列挙しておきます。

  • 一般的なOpenPNE3プラグインの作成手順(opGenerateコマンドなどを使用する方法)が学べます。
  • 独自にDBテーブルを持つプラグインの作成方法が学べます。
  • 独自のDBテーブルをフォームから操作する方法が学べます。
  • 管理画面にプラグイン独自の設定画面を追加する方法が学べます。
  • PC、モバイルの両方に独自のページを追加する方法が学べます。
  • プラグイン独自にルーティングを拡張する(プラグイン内からrouting.ymlと同等の定義をする)方法が学べます。
  • OpenPNE3プラグインのパッケージングの方法が学べます。

連載記事のボリュームとしては、6?7回の分量を想定しています。作り方には興味ないけどプラグインだけ欲しいという方は、opFreepagePlugin-0.9.0.tgzをダウンロードしてください。勝手プラグイン(非公式プラグイン)ですので、動作保証は致しません。フィードバックは歓迎しますが、トラブルが発生してもその責任は負えません。OpenPNE3.0.0で動作確認をしています。

プラグインの作成方法を学ぶ前に、これからどんなプラグインを作るのかを知っておいたほうが良いので、関連のあるサムネイルを列挙します。

さて、いよいよプラグイン作りの開始です。第1回目はプラグインの初期設定として、opFreepagePlugin用のディレクトリの作成とDBスキーマの作成、そのDBスキーマに対応したモデルなどのファイルの作成を行います。

まずはプラグインのディレクトリを作ります。ターミナル上でOpenPNE3のルートディレクトリまで移動して以下のコマンドを実行します。以降そのルートディレクトリを基準に話を進めます。

BASH:
  1. ./symfony opGenerate:plugin opFreepagePlugin

すると、/plugins/opFreepagePluginディレクトリが作成され、apps、config、i18n、libの4つの空ディレクトリが作成されます。

次に、DBスキーマを作成します。/plugins/opFreepagePlugin/config/schema.ymlファイルを作成し、

TEXT:
  1. propel:
  2.   _attributes: { package: plugins.opFreepagePlugin.lib.model }
  3.   freepage:
  4.     id: ~
  5.     title:      { type: longvarchar }
  6.     body:       { type: longvarchar }
  7.     app_type:   { type: varchar(16), required: true, default: 'pc'}
  8.     auth:       { type: tinyint, required: true, default: 1}
  9.     created_at: ~
  10.     updated_at: ~

と入力します。今回はfreepageというテーブルをの中に、idカラム(PRIMARY KEY・AUTO_INCREMENT)、titleカラム(TEXT型)、bodyカラム(TEXT型)、app_type(VARCHAR型、'pc'と'mobile'を想定)、auth(BOOL型、ログイン認証のあり=1と、なし=0を想定)、created_at(DATETIME型)、updated_at(DATETIME型)といったカラムを定義しています。

 DBスキーマのファイルを作成したら、スキーマを元にモデルやフォーム、フィルタを自動生成させます。

BASH:
  1. ./symfony openpne:install

を行い、指示に従ってDB情報を入力するとOpenPNE3内のすべてのDB関連ファイルが一新され、その過程でopFreepagePlugin用のファイルも作成されます。しばらくしてコマンドが完了すると、/plugins/opFreepagePlugin/libディレクトリの中にmodel、form、filterなどのディレクトリが作成されていて、それぞれ自動生成された以下のクラスファイルが格納されています。

├─form
│  │  FreepageForm.class.php
│  └─base
│          BaseFreepageForm.class.php
├─model
│  │  Freepage.php
│  │  FreepagePeer.php
│  ├─om
│  │      BaseFreepage.php
│  │      BaseFreepagePeer.php
│  └─map
│          FreepageMapBuilder.php
└─filter
    │  FreepageFormFilter.class.php
    └─base
            BaseFreepageFormFilter.class.php

 これでプラグイン開発の準備が整いました。次回は管理画面のプラグイン独自の設定ページの作成に移ります。


[ソフト]MindManagerのマクロでちょっと便利に

Posted under ソフトウェア by uechoco on 火曜日 3 2月 2009 at 23 : 54 : 35

勝間和代さんの必須アイテムとしても知られているMindManagerですが、私も愛用しているものの、機能がたくさんあって正直使いこなせていません。最近はVBAライクなマクロ言語が内蔵されていることを知りました。プログラマがMindManagerを使うのだから、オリジナルのマクロの1つや2つ書いて当然じゃないかと勝手に妄想し、処理が非常に単純だけれども割と使えるマクロを考えてみました。

で、最初に選んだのが「トピック文字列結合マクロ」。あってもよさそうな機能なのに見つからなかったし、探す時間が面倒なのでマクロにしました。実行すると

capst_0002

capst_0003

となる感じです。

ソースコードはこんな感じ。

Visual Basic:
  1. Sub Main
  2.     Dim i As Integer
  3.     Dim n As Integer
  4.     Dim pTopic As Topic
  5.     Dim s As String
  6.  
  7.     ' 準備
  8.     n = ActiveDocument.Selection.Count
  9.     If (n = 0) Then
  10.         Exit Sub
  11.     End If
  12.  
  13.     ' 文字列の結合
  14.     For i = 1 To n
  15.         Dim t As Topic
  16.         Set t = ActiveDocument.Selection.Item(i)
  17.         s = s & t.Text
  18.     Next i
  19.  
  20.     ' 初期トピックの兄弟として追加
  21.     Set pTopic = ActiveDocument.Selection.Item(1)
  22.     pTopic.ParentTopic.AddSubTopic(s)
  23. End Sub

  • ActiveDocumentは現在開いてるマップのこと
  • ActiveDocument.Selectionは現在開いてるマップで選択されているオブジェクトの集合
  • ActiveDocument.Selection.Countは選択されているオブジェクトの個数を返す
  • ActiveDocument.Selection.Item(i)は選択されているオブジェクトの参照を1-baseの添え字で取り出す。表示順とは限らない。
  • Topic.AddSubTopic(text)は、textという文字列のサブトピックを追加すること
  • 選択されているオブジェクトは通常のトピックであるという使用前提のもとに記述している
  • SetはVB6(VBA)にて、参照を代入するときに明示的に記述する必要がある

 久しぶりにVB6(VBA)書きましたが、phpの方がいいです(笑 Set構文は初めて知りました。Setしないとエラーが起きていつまでも動かなかったです。ActiveDocumentやSelectionの仕様はマクロエディタの機能の1つ「オブジェクトブラウザ」を使うと少しわかった気になります。
 自力で調べるのはしんどいですね。海外でMindManagerの入門的なページがないか探してみようかな。でも、マクロを覚えるとMindManagerをもっと好きになれるかもしれません。


[情報]UQコミュニケーションズのWiMAX無料モニタ募集が始まった

Posted under 情報収集 by uechoco on 火曜日 3 2月 2009 at 20 : 35 : 15

昨日UQコミュニケーションズのWebサイト見て、何も変わってないなと思ってたら、今日アップデートしてWebサイトが一新されていました。同時に、無料モニタ募集が開始されていました。募集期間は2/3?2/15です。5000名がモニタ対象人数です。サービス開始日時も、総務省への報告書よりも2日早い2009/02/26?だそうです。

モニターに選ばれないかなぁ。。。


[情報]UQコミュニケーションズのWiMAXサービス開始は2009/2/28からなのか。

Posted under 情報収集 by uechoco on 月曜日 2 2月 2009 at 07 : 00 : 13

UQコミュニケーションズの2008年度第3四半期(10月?12月)の進捗状況の報告書の冒頭に、サービス開始予定日が2009/02/28って書いてあった。今月の終わりですね。あと、開始時の試験サービスエリアは東京23区と横浜市に加えて、川崎市も前倒しで追加されたみたい。無料らしいけど、具体的にはどういう風に利用できるんですかね?場合によってはemobile解約する気満々です。いよいよWiMAXの到来ですね。


« 前ページへ次ページへ »

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