[OpenPNE3]新規登録を受け付ける(オープン制)

Written by uechoco 1月 31
この記事を読む時間:132くらい

OpenPNE3を初めてインストールしたときは、管理画面が変わってしまっていて、オープン制にする方法がわからない人もいるかもしれません。

通常、OpenPNE3.0.0をインストールしてアクセスすると、以下のようにメールアドレスとパスワード欄が用意されてはいますが、新規登録ページへのリンクはありません。

index_login_disable

現在のバージョンでは実運用する人はなかなかいないと思いますので、試験設置の方がほとんどだと思います。そういう場合はオープン制の方が便利ですよね。もちろんオープン制にするオプションはあるのですが、プラグイン式になったため分かりにくくなっています。まずは管理画面にアクセスします。デフォルトではadmin/passwordで入れると思います。左メニューから「プラグイン設定」を選択します。

plugin-list

プラグイン一覧の中から「opAuthMailAddressPlugin」を探し、右側の「設定」をクリックします。下図の画面に遷移したら、招待モードを「」にすれば完了です。

opauthmailaddressrequestregisterurl

するとログインフォームの下に「新規登録」というリンクが増えます。

index_login_enable

新規登録方法はおなじみの方法です。メールアドレスを入力すると、そのメールアドレスに新規登録用のURLが記載されたメールが届きます。ブラウザでアクセスしてプロフィールなどを入力すれば新しいメンバーが追加されます。

[Linux]r8168ドライバが再起動後にr8169に戻る

Written by uechoco 1月 31
この記事を読む時間:13くらい

Linux(CentOS 5.2)にて、NICのr8168ドライバとr8169ドライバの誤認問題がありますが、USB経由か何かでr8168モジュールをダウンロードして、モジュールのインストールに成功している人は多々見受けられます。

しかしながら私の環境では、一度r8168ドライバをインストールしたはずなのに、再起動すると再びr8169ドライバを認識してしまいます。毎回モジュールのインストールをしているわけにもいかないので、思案していたところ、r8168.koが/lib/modules/2.6.18-92.el5/kernel/drivers/net/にインストールされたことを見たので、もしやと思ったら、同じディレクトリ内にr8169.koもありました。試しにr8169.koをr8169.ko.escapeに改名して再起動したところ、最初からr8168ドライバを認識するようになりました。

一応動いてるから、これで万事OK?

[OpenPNE3]ログイン状態に応じてフッターを書きかえる

Written by uechoco 1月 30
この記事を読む時間:327くらい

 OpenPNE2では、HTML挿入機能としてログイン前フッターとログイン後フッターを書きかえる機能がありました。OpenPNE2で存在していた機能は原則としてOpenPNE3でも実装される予定ですが、いつになるかはわかりません。今回は手ごろなフッター書き換えを学んで、OpenPNEテンプレートカスタマイズの感覚を掴みたいと思います(OpenPNE 3.0.0対応)。

 OpenPNE3のフッターを見てみます。
index_friend_list_full

 現状、OpenPNE3のフッターは、ログイン前もログイン後も下図のような「Powered by OpenPNE」という文字列です。
index_friend_list_partial

 この文字列は、内部のテンプレートで直書きになっているので、管理画面などから書き換えることはできません。ここを直接書き換えて、ログイン前とログイン後のフッターを変化させたいと思います。

#1 _footer.phpテンプレートの編集

 フッターのテンプレートは、/apps/pc_frontend/templates/_footer.phpにあります。このファイルはOpenPNE3.0.0では以下のようになっています。

[phpcode]

Powered by OpenPNE

[/phpcode]

 これを、以下のように書き換えます。

[phpcode]
getMember()) && $member->getIsActive()): ?>

Powered by OpenPNE(ログイン後)

Powered by OpenPNE(ログイン前)


[/phpcode]

  • $sf_user->isAuthenticated()の返り値のtrue/falseで判断すると、ほとんどの場合は困りませんが、仮登録者の本登録フォームなどで不具合が発生します。仮登録ユーザも「仮登録者として登録済み」と判断され、認証が通ってしまうのが原因です。これはOpenPNE3で認証識別子credentialsとしてSNSMemberだけでなく、SNSRegisterBeginやSNSRegisterFinishなどを用意していることから分かります。
  • 本登録済みのメンバーかどうかを判断するには、$sf_user->getMember()でMemberクラスのインスタンスの取得を試みて、取得できた場合、getIsActive()メソッドのtrue/falseでアクティベート(本登録)済みかどうかを判断します。

#2 結果の確認

 ログイン画面、仮登録者の本登録画面、ログイン済みメンバーのホーム画面の3つ見てみると、ログイン済みの画面だけフッターが書き変わっているのがわかると思います。

  1. ログイン画面(メンバーではない)
    index_member_login
  2. 仮登録者の本登録画面(メンバーではあるが、本登録が済んでいない)
    index_member_registerinput
  3. ログイン済みメンバーのホーム画面(本登録済みのメンバー)
    home

#3 お好みでCSSも

 /web/css/main.cssにフッターのCSSを定義した部分があります。例えば「#Footer p」のtext-alignをcenterにするとかできます。

今回の記事に関して、あってるとか、まちがってるとか、もっといい方法があるとかがあれば、コメントなどでアドバイスください。

[OpenPNE3]ガジェット対応プラグイン作成の入門(あしあと機能のガジェット化)

Written by uechoco 1月 30
この記事を読む時間:755くらい

 OpenPNE3では、プラグイン式に機能を増やすことができるようになりました。プラグインで機能を増やした時、実際に画面に表示させる方法としては以下のようなものが挙げられます。

  • 新しくページを作成する・・・(OpenPNE公式Webサイトのブログ記事の「OpenPNE3プラグインの作り方#2」が該当します。)
  • テンプレート拡張を利用する・・・(テンプレート拡張、およびそのサンプルは「OpenPNE3プラグインの作り方#4」にあります。)
  • ガジェットとして追加する・・・ホーム画面(マイホームやフレンドホームなど)やサイドバナー領域は、ガジェットと呼ばれる部品を配置することができます。ガジェットの配置は、管理者が管理画面で変更できます。ホーム画面の検索ボックス、インフォメーションボックス、プロフィール写真、フレンドリスト、マイフレンド最新日記、コミュニティ最新書き込みなど、ほとんどの構成要素がガジェット仕様になっています。目ぼしいサンプルが見当たらなかったので、今回作り方を取り上げたいと思います。

 下図が管理画面のガジェットの配置設定画面です。プラグインなどで提供されたガジェットを自由に追加・変更・削除できます。

pc_frontend_home_gadget

 下図はガジェットが実際に表示されているホーム画面。検索ボックス以下のほとんどのコンテンツがガジェットで作られています。今回入門サンプルとして作成する「最新のあしあと」というガジェットも表示されています。

pc_frontend_home_gadget_view

 さて、今回はこのガジェット対応したプラグインを作成しますが、プラグインをゼロから作ることは本質的でない部分を含みますので、既にプラグインとして機能が完成されているものに対してガジェット対応を試みたいと思います。おそらくガジェットの作成方法を学ぶ方法としては最適だと思います。このような経緯から、今回は「あしあと」機能を題材に取り上げました。

※ここからは、ソースコードを解読して仕様を推測していますので、100%正しいプログラムとは限りません。唯一の保証は、私の環境では動作確認ができたということだけです。

あしあと機能は「/ashiato/list」ページを見ると既に実装されていることがわかります。プラグインとしてはopAshiatoPluginとして実装されています。ここに改造を加えていきます。ソースコードの参考にしたのは、自分の最新ブログを表示するblogHomeUserというガジェットです。

#1 gadget.ymlの作成

 /plugins/opAshiatoPlugin/configディレクトリにgadget.ymlを追加します。このファイルは、プラグイン(opAshiatoPlugin)に含まれるすべてのガジェットの情報を記述するためのものです。

  1. ashiatoHomeList:
  2.   caption:
  3.     ja_JP: "最新のあしあと"
  4.   description:
  5.     ja_JP: "最新のあしあとの一覧を表示します"
  6.   component: [ashiato, ashiatoHomeList]
  • 冒頭のashiatoHomeListはガジェットの名前です。この名前でOpenPNE3のデータベースに登録されます。暇な人はopenpne3のデータベース内のgadgetという名前のテーブルの中身を見てみてください。多くのガジェットが登録されていますが、nameカラムは個々のガジェット名前を指しています。
  • captionはガジェットの表示名称を示しています。ja_JPですので日本語の表示名称です。最初に使われているところを見るとすれば、管理画面でガジェットを追加しようとした時に見る、ガジェットの日本語名でしょう。
  • descriptionはガジェットの説明を示しています。こちらもja_JPですので日本語表示です。同様に管理画面でガジェットを追加するときに見かけます。
  • componentsはガジェットの実行処理方法を指定しています。ガジェットの実装プログラムは、symfonyのコンポーネント機能で実装します。今回の場合はashiatoモジュールのashiatoHomeListコンポーネントがこのガジェットの実装プログラムです。

#2 コンポーネントの記述

 前述の通り、ガジェットの実装プログラムはsymfonyのコンポーネント機能を用いて記述します。コンポーネントは各モジュールのactionsディレクトリの中のcomponents.class.phpに書くという決まりがあるので、/plugins/opAshiatoPlugin/apps/pc_frontend/modules/ashiato/actionsディレクトリにcomponents.class.phpを追加します。

[phpcode]
id = $this->getRequestParameter(‘id’, $this->getUser()->getMemberId());
$this->pager = AshiatoPeer::getAshiatoMemberListPager($this->id, 1, 5);
}
}
[/phpcode]

  • ashiatoHomeListコンポーネントの実行メソッド名はexecuteAshiatoHomeList()です。execute+先頭大文字のコンポーネント名です。
  • プログラムの内容は、自分のユーザのmember_idを取得し、そのユーザの最新5県の足跡(ページャ付き)を取得します。基本的にはactions.class.phpのパクリです。

#3 コンポーネントのテンプレート

 コンポーネントにもアクションと同じように実行結果を表示するためのテンプレートが対応しています。ashiatoHomeListコンポーネントのテンプレートとして、/plugins/opAshiatoPlugin/apps/pc_frontend/modules/ashiato/templatesディレクトリに_ashiatoHomeList.phpを追加してください。

[phpcode]
“最新のあしあと”,
‘pager’ => $pager,
‘moreInfo’ => ‘ashiato/list’
)
);
}
?>
[/phpcode]

  • 最初のif文は、あしあとが取れたときだけ表示するというものです。
  • include_parts関数はOpenPNEのヘルパー関数で、別の場所のテンプレートを呼び出します。今回はAshiatoLatestListBoxという名前のテンプレートパーツを呼び出しています。
  • ユーザホーム・フレンドホームなど、2か所以上で似たような出力をする場合は、このテンプレートに直接HTMLを記述するよりはinclude_partsなどで別のテンプレートパーツを呼びだしたほうが開発者にとって効率的だと思います。

#4 テンプレートパーツの記述

 さきほど呼びだそうとしたテンプレートパーツの本体を記述します。/plugins/opAshiatoPlugin/apps/pc_frontend/ディレクトリにtemplates/ディレクトリを追加し、_partsAshiatoLatestListBox.phpファイルを追加します。これが実際のガジェットのHTML出力部分になっています。

[phpcode]

    getResults() as $ashiato) : ?>
    getMemberRelatedByMemberIdFrom(); ?>

  • getUpdatedAt(); ?>getName(), ‘member/profile?id=’ . $member->getId()); ?>

[/phpcode]

#5 プラグインの再構成

 今回は新しいDBテーブルなどを追加していないので、「./symfony cc」コマンドでキャッシュを初期化するだけでカスタマイズ部分が有効になると思います。もし、DBを新たに追加するような変更をした場合は「./symfony openpne:install」コマンドですべてのデータベースを再構築してください。

#6 管理画面から、あしあとガジェットを登録

 管理画面にログインし、[デザイン設定]-[ガジェット設定]-[ホーム画面ガジェット設定]にて、適当なところにあしあとガジェットを追加してください。

home-gadget-settings
admin-latest-gadget-add
admin-latest-gadget-set

#7 実際に表示されているかどうかを確認する

 SNS本体に戻って、最新のあしあと5件が実際に表示されているかどうかを確認してください。もちろん、あしあとが既にあるという前提です。

ashiato_gadget_view

終わり

 無事にあしあとの一覧が表示されましたでしょうか?おそらく、ガジェット式のプラグインは今後も増えていくと思います。ガジェットの情報がもっとあるの良いのですが・・・。この記事に関して間違っている点や改良点、アドバイスなどがありましたら、コメントなどでお知らせください。

[OpenPNE3]のDBテーブル一覧

Written by uechoco 1月 29
この記事を読む時間:43くらい

とりあえず、今後の遊びのためにもOpenPNE3のデータベースのテーブル一覧が欲しいと思って、DBDesignerにリバースエンジニアリングさせてみました。リレーションとかまでリバースエンジニアリングさせるとカオスな結果になったので、テーブルをアルファベット順に列挙しただけのものになっています。

openpne300

以下のzipの中に、A4横4等分してPDF化したもの、DBDesignerのxml、上記のpngファイルの3点を収めました。適当にダウンロードしてトイレのドアの裏にでも貼ってください。

OpenPNE3.0.0 DBDesigner仕様 DBテーブル一覧(zip)