Net commonsアドオンモジュールセミナー第4回小ネタ集

Post on 31-May-2015

47.935 views 0 download

description

NetCommonsモジュール小ネタ集 ・日誌モジュールへのfacebook「いいね!」ボタンの付け方 ・メールのスレッド対応クイックハック ・パブリックスペースの閲覧制限モジュール

Transcript of Net commonsアドオンモジュールセミナー第4回小ネタ集

NetCommons アドオンモジュール セミナー第4回目

0

※NetCommonsは[大学共同利用機関]情報・システム研究機構の登録商標です。

モジュール小ネタ集 <ダウンロード付き>

自己紹介

今回は自己紹介に凝ってみました。

(*^。^*)

1

自己紹介。その①

本名:永原 篤

ながはら あつし

ハンドル:永原 ひつじ

twitter@nagasheep

facebook:atsushi.nagahara

趣味:山登り

2

自己紹介。その②

株式会社オープンソース・ワークショップ 代表取締役

• データベースが必要なWebサイト構築が得意。NetCommonsをベースに、モジュールをアドオンしたりして開発。

http://opensource-workshop.jp

3

自己紹介。その③

内閣府認証NPO法人コモンズネット 理事

• NetCommonsの情報交換には、コモンズネットに入るしかないでしょう。

• ビジネスでNetCommonsを使われている皆さん、もちろん(^-^)コモンズネットの会員様ですよね?

http://www.commonsnet.org

4

自己紹介。その④

PHP技術者認定機構 副理事長 COO

• PHPの試験団体を運営しています。

• 協賛会社を募集しています。費用は無料。仕事でPHPをお使いなら、協賛して頂ければ、会社Webへリンクも貼りますよ。

• 学割もスタートしました。

http://www.phpexam.jp

5

自己紹介。その⑤

OSSコンソーシアム 理事兼CMSビジネス部会リーダ

• OSSを扱う企業が集まった業界団体です。

• 組み込みやビジネスアプリなど、いくつかの部会があります。

• 業界団体として情報発信することで、会社のブランド力を高めませんか。

• イベント:CMSインサイド。毎月開催中

http://osscons.jp

6

おまけ

みなさん、NetCommonsの公式キャラクター、陽菜ちゃんのツイッターはフォローしていますか?

7

陽菜ちゃんtwitter

8

twitter

@MidorikawaHina

• イベントなどの情報もつぶやいています。

• NetCommons情報のGetには欠かせません!

おまけ②

今年のNetCommonsユーザカンファレンスは一味違う!

http://www.netcommons.org/userconf/

ビジネスを意識したイベントになっています。事例紹介も多くある。無料です。

懇親会もたった1,000円!!

8/7(火)です。いますぐ申し込みを!

9

宣伝はやりきったので

いよいよ本題に入りたいと思います。

10

NetCommons アドオンモジュール セミナー第4回目

11

※NetCommonsは[大学共同利用機関]情報・システム研究機構の登録商標です。

日誌の facebook「いいね!」対応

facebook「いいね!」

最近、世間を騒がせているfacebook

みなさん、facebookって何?とかの説明は要らないですよね?

NetCommonsの日誌も、facebookへの投稿ボタンがあります。

しかし!facebookといえば「いいね!」

12

facebook「いいね!」

「いいね!」の効果があるとかないとかケースバイケースだとか、世間では分析記事もたくさんありますが。

単純ミーハー技術的興味で

「つけてみたいから付けてみました!」

ということで、方法の公開です。

13

「いいね!」ポイント

① … サンプル

② … 注意点

③ … appId

④ … OGP

⑤ … 日誌モジュールPHP側

⑥ … サイトのヘッダ部分

⑦ … 「いいね!」ボタンのジェネレート

⑧ … 日誌モジュール画面側

14

ポイント① … サンプル

弊社Webサイトで試しています。

15

この部分

ポイント② … 注意点

カスタマイズ例はNetCommons2.3.3.0です。たぶん、最新でも動くと思いますが、試してください。

(永原が忙しすぎて最新で試せなかった。申し訳ない。。。)

既存ファイルをカスタマイズします。アップデートなどは自己責任ですよ。

16

ポイント③ … appId

「いいね!」ボタンを付けるには、facebookにサイトの情報を登録し、appId(App ID/API Key)というものを取得する必要があります。

URLは以下。ここの詳しい情報はググってください。

https://developers.facebook.com/apps/

17

ポイント④ … OGP

OGPって何?

Open Graph Protocol

Webサイトの情報を表す方法の一つ。facebookはこの方法を採用している。

詳しくはググればいっぱい出てきます。

18

ポイント④ … OGPの動き

19

日誌詳細画面

OGP情報 HTMLの<head>タグ内

いいね!ボタン 日誌の詳細画面テンプレート

facebook

いいね!

ページ確認

詳細画面の PHPロジック 必要な情報を

画面に渡す

カスタマイズが必要なのは3ヵ所

appId

appId

ポイント⑤ … 日誌PHP

Journal_View_Main_Detailクラス

• webapp/modules/journal/view/main/detail

• カスタマイズ内容はソース見ながら。

• ポイントは以下2つの変数をテンプレートに渡しているだけ。

facebook_og_url

facebook_og_image

20

ポイント⑥ … ヘッダ部分

header.html ファイル

• webapp/templates/main

• カスタマイズ内容はソース見ながら。

• ポイントは以下

<html> タグの追加属性

<meta>で以下の情報を出力

og:locale、og:title、og:type、og:url、og:image、og:site_name、fb:app_id

21

ポイント⑦ …「いいね!」ボタン

「いいね!」ボタンへのリンクはfacebook内の以下のURLで生成できます。

http://developers.facebook.com/docs/reference/plugins/like/

いくつかの方式の出力がありますが、今回はiframe方式を使用しています。

22

ポイント⑧ … 日誌詳細画面

journal_view_main_item.html ファイル • webapp/modules/journal/templates/default

• 良い子はdefaultをコピーして、別テンプレートでやりましょう。

• カスタマイズ内容はソース見ながら。

• ポイントは以下

⑦で生成した「いいね!」ボタンを埋め込む

23

「いいね!」対応ここまで

24

さあ、時間は大丈夫かな?

NetCommons アドオンモジュール セミナー第4回目

25

※NetCommonsは[大学共同利用機関]情報・システム研究機構の登録商標です。

掲示板メールのスレッド対応

掲示板メールのスレッド対応

お題2つ目。

掲示板メールのスレッド対応

これは、以前2.3.3.0で実験した時の結果を報告します。

参照実装コードもあり。

26

結果イメージ(画面側)

27

画面側はカスタマイズしていません。

結果イメージ(メール側)

28

画面側と同じスレッド表示が出来てますね。

掲示板メールのスレッド対応

プロトコルの話があります。

さあ、これを眠らずに聞ける人は何人いるか!!w

セミナーでは「さらっと」やりますね(^^)

29

メールスレッド:目的

NetCommons には掲示板、日誌にメールでの通知機能がある。

これは非常に便利である。

しかし、このメールはスレッド対応していないため、記事の経緯を追い難い。

そこで、掲示板のメール送信機能をスレッド対応させてみた。

30

メールスレッド:実験結果

意図していた通りのスレッド対応が行えた。

ただし、複数のファイルにカスタマイズが必要であった。

31

メールスレッド:検討ポイント①

--- 記事周知のメールにスレッドが必要か

Webを見ればスレッドになっている、というのは確かなんですが、メールソフト内でもスレッド表示できるるのは、やっぱり便利かなと思います。

32

メールスレッド:検討ポイント②

--- メールを識別する Message-ID のフォーマット

RFC2822 を参考にします。

ユニークにする、という部分がポイント。

BASE_URLの値(NetCommons のURL)を使用します。

localhost の場合は、テストなどいろいろしていたら、スレッドがおかしくなる可能性もありますが、 localhostは特殊な環境ということでOK かなと。

33

メールスレッド:実験環境

// NetCommons バージョン

参考実装は 2.3.2.0 に対して行った。

34

メールスレッド:スレッドについて

Message-ID、In-Reply-To、References

RFC2822

http://www.ietf.org/rfc/rfc2822.txt

RFC2822 - 日本語翻訳されているページ

http://srgia.com/docs/rfc2822j.html

35

メールヘッダ拡大

36

NetCommons のメール送信処理

PHPMailer を使用している。

Version: 2.0.0 rc3

PHPMailer のメインとなる class.phpmailer.php はカスタマイズされていない。

37

Message-ID, In-Reply-To, References

--- 基本

RFC2822 を参考に実装する。

38

Message-ID

"Message-ID:" フィールドはユニークなメッセージ識別子を提供する。

これは、掲示板の場合、以下のように設定できる。

<bbs_[post_id]@[BASE_URL]>

[post_id] は掲示板のキー

[BASE_URL] はNetCommons のURL

例:<bbs_9@opensource-workshop.jp/nc>

39

In-Reply-To

"In-Reply-To:" フィールドは、返信しようとしているメッセージの "Message-ID:" フィールドの内容を含む。

例:

<bbs_8@opensource-workshop.jp/nc>

40

References

"References:" フィールドの内容は、親メッセージの "References:" フィールドの後に親メッセージの "Message-ID:" フィールドの内容を続けたもの。

例:

<bbs_7@opensource-workshop.jp/nc> <bbs_8@opensource-workshop.jp/nc> <bbs_9@opensource-workshop.jp/nc>

41

NetCommons 2.3.2.2 での参考実装①

以下、参考実装の圧縮ファイルに含まれています。

// 掲示板の共通コンポーネントにメールスレッド用ヘッダデータ(Message-ID、In-Reply-To、References)を生成して返す関数を追加

webapp/modules/bbs/components/View.class.php

function getMailThreadHeader() を追加

// 掲示板メール送信から、NetCommons メールコンポーネントのsend() を呼ぶ際にメールスレッド用ヘッダデータを渡す

webapp/modules/bbs/action/main/mail/Mail.class.php

42

NetCommons 2.3.2.2 での参考実装②

続き

// NetCommons メールコンポーネントから、PHPMailer のsend() を呼ぶ際にメールスレッド用ヘッダデータを渡す

webapp/components/mail/Main.class.php

// PHPMailer のsend(), CreateHeader() をカスタマイズして、メールヘッダにMessage-ID、In-Reply-To、References を設定する。

maple/includes/mail/phpmailer/class.phpmailer.php

43

掲示板メールのスレッド対応:完了

ちゃんと寝ずに聞いてた人は

ダウンロードしてね。

44

NetCommons アドオンモジュール セミナー第4回目

45

※NetCommonsは[大学共同利用機関]情報・システム研究機構の登録商標です。

パブリックスペースの 閲覧制限モジュール

まずは画面で

46

http://lime.opensource-workshop.jp/jumptest/

デモします!

非常に簡単なデモです。

肝は?

47

httpステータス

301 Moved Permanently

を返しているだけです。

肝のファイルとコード

48

pagejump¥view¥main¥init¥Init.class.php

header( "HTTP/1.1 301 Moved Permanently" );

header( "Location: " . $this->env['url'] );

ブロックが表示された時に動く部分です。

注意点①

49

現在のコードでは 301 固定です。

ブロックごとに選べるようにしたいんですが、今は時間が取れず(>_<)

用途に合わせて302(found)や307(Temporary Redirect)に変更してください。

注意点②

50

この方法はNetCommons的なルールに則っているわけではありません。

たまたま、NetCommonsが出力をバッファしてから処理しているので、NCがhttpレスポンスを返す前に、モジュールで勝手に処理してるだけです。

将来のバージョンアップでどうなるかはわからないですよ。ということ。

注意点③

51

モバイル対応していません。

モバイルではページが見えるので要注意。

モバイル管理で隠しページにしてください。

注意点④

52

ページ内の他のブロックを指定されたら見えます。

http://lime.opensource-workshop.jp/?action=announcement_view_main_init&block_id=70

NetCommonsは基本的に、ブロック単位でのアクセスが可能です。

注意点⑤

53

ここまでの注意点を理解頂き、その上で使えるとことにお使いください。

あえて見せたくはないが、ブロック指定までして来たら仕方なし。という用途を想定。

NetCommons アドオンモジュール セミナー第4回目

54

※NetCommonsは[大学共同利用機関]情報・システム研究機構の登録商標です。

ダウンロードURL

天の声

ちゃんと寝ずに聞いてた人か、 陽菜twitterをフォローしてくれた人は

ダウンロードしてね。

55

本日のセミナー資料

56

ソース関係

http://netcommons.opensource-workshop.jp

pptスライド

http://opensource-workshop.jp/press/

ありがとうございました

57

お問い合わせ&お仕事依頼は

株式会社オープンソース・ワークショップ

http://opensource-workshop.jp