plugins:eachblogdir

NP_EachBlogDir

(ver2.2.0から、NP_ImprovedMediaに統合しました。)

個別ディレクトリでウェブログを運用している際、現在アクセスしているウェブログに属するメディア・ファイルのみ、管理と記事への埋め込みができるようにします。また、NP_ImprovedMediaのMedia Control機能が利用できます。そのため、Orangoo projectsGreyBox (ver.5.53) を、LGPL ver.2.1のもと、同梱しています。

General Plugin info
作者: Mocchi
最新のバージョン: ver.2.1.1(2009/01/20)
入手先: http://japan.nucleuscms.org/bb/download.php?id=1610(61.7KB, Zip)
フォーラム参照先: http://japan.nucleuscms.org/bb/viewtopic.php?t=2576
セキュリティチェック: Mocchi (2009/01/20)

このプラグインの使い方

Nucleus CMSは、デフォルトの状態ではすべてのメディア・ファイルを一つのディレクトリ「media」に集約してしまいますが、このプラグインを利用することで、個別のディレクトリにメディア用ディレクトリ「media」を配置して、ウェブログが利用できるメディア・ディレクトリを専用のものに限定することができます。

複数ウェブログを以下のようなディレクトリ構成で運用している場合を想定します。

Nucleus CMS
Nucleus Admin : http://(Document Root)/nucleus/

Blog1(ShortName1, Default)
Weblog WWW URL: http://(Document Root)/index.php
Media File DIR: http://(Document Root)/media/

Blog2(ShortName2)
Weblog WWW URL: http://(Document Root)/(shortname2)/index.php
Media File DIR: http://(Document Root)/(shortname2)/media/

Blog3(ShortName3)
Weblog WWW URL: http://(Document Root)/(shortname3)/index.php
Media File DIR: http://(Document Root)/(shortname3)/media/

Blog4(ShortName4)
...

なお、mediaディレクトリの名前は任意ですが、どのウェブログディレクトリでも共通の名前にしてください。

具体的に言うと、管理領域(Nucleusディレクトリ)と同じ階層に、各ウェブログの短縮名のディレクトリを作成し、その中にindex.phpとメディアディレクトリを配置。 このようにしたときに、プラグイン内の改造を加えたmedia.phpが、それぞれのウェブログにおかれたメディアディレクトリを参照するようにします。

また、Nucleusのmedia.phpという、ファイルの記事への挿入やアップロードを行うプログラムを改良し、プラグインとして利用しやすくしてあります。以下の機能が使えます。

  1. アップロード、記事への挿入、ファイル名の変更そして削除を行う事ができます。
  2. 上記の主要4機能のインターフェースを改良してあります。
  3. ファイルの挿入時は、代替テキストの入力を必須としました。これはアクセシビリティの観点に拠ります。
  4. ファイル名変更時に、拡張子を変更する事はできません。
  5. プライベート・コレクション・ディレクトリ機能をオン・オフして、共有ディレクトリのみによる運用ができます。

インストール方法

  1. 圧縮フォルダを展開し、内容物をPLUGINフォルダにコピー。
  2. Nucleusにログインし、「管理ホーム」から、「プラグイン管理」の画面に移動。
  3. 画面下部の「新しいプラグインをインストール」で、「EachBlogDir」を選択し、「プラグインのインストール」ボタンをクリック。
  4. 「プラグインの管理」画面の「インストール済み」のリストに表示されているのを確認します。
  5. リスト右の「編集」で、オプションを変更することができます。

新規のウェブログを設置する際は、以下のようにします。

  1. 新規に作成するウェブログの短縮名を決めます。
  2. Nucleusがインストールされているディレクトリと同じ階層に、その短縮名のディレクトリを作成。
  3. 短縮名のディレクトリの中に、メディアディレクトリを作成します。ディレクトリの名前は、あなたがconfig.phpに記述したメディアディレクトリと同一の名前にしてください。
  4. Nucleusにログインし、「新規Blog作成」をクリック。
  5. 各種項目を入力しますが、「Blogの短縮名」は、先ほど決めたものにします。
  6. ボタン「Blogを作成」をクリック。
  7. 次の画面に表示される「方法1」のスクリプトをコピーし、テキストエディタを開いて貼り付け。
  8. テキストファイルの書き換えを行います。$CONF['Self'] = 'index.php'。そして、include('../config.php')
  9. テキストファイルはphpファイルとして、先ほど作成したディレクトリに保存。ファイル名は「index.php」としてください。
  10. 「URL」を変更します。「(Document Root)/短縮名のディレクトリ/index.php」
  11. 「作成!」をクリック。新規ウェブログを作成します。
  12. これまでの設定に不備があっても、「管理ホーム」のウェブログそれぞれの「設定」から修正することができます。
  13. 通常通り、「アイテムの追加」「アイテムの編集/削除」、スキンから誘導される「アイテムの編集」で使うことができます。

使用上の注意

  • 代替テキストは英数字40文字、日本語20文字に制限されています。
  • 変更後のファイル名は、英数字30文字に制限されています。日本語は使用できません。
  • ファイルを削除するときは、ほんとうに削除していいのか、少し考える時間を設けるとよいでしょう。

オプション

プライベート・コレクションのオン・オフ

デフォルトでは、Nucleusインストール時と同様に、プライベート・コレクション・ディレクトリ機能がオンとなっています。オフにすることで、メンバー間の共有ディレクトリの使用を徹底することができます。 なお、メディア・ディレクトリにフォルダが作成されていない状態でこの機能をオフにすると、エラーとなります。その場合は、FTPソフトかサーバ提供環境でディレクトリを作成してください。

Media Controlページに表示するファイル数

表示ファイル数を5件から50件の間で指定できます。

GreyBoxユーティリティの利用

Ver.1.2 budling GreyBoxでは、GreyBoxユーティリティによってMedia Controlを開くオプションが追加されています(下図、左はオフ、右はオン)。

:plugins:offgreybox.png :plugins:ongreybox.png

グローバル設定の日付の付加による動作の違い

Nucleusのグローバル設定にある「アップロードするファイル名の頭に日付を付加する」オプションにより一覧画面での日付とファイル名の表示およびファイル名変更時の動作が異なります。

「はい」のとき

  • 一覧画面での日付の表示は、「登録日」となり、ファイルの先頭に追加されている日付が入ります。
  • 一覧画面でのファイル名の表示は、先頭の日付を取り去ったものとなります。
  • ファイル名変更時に、ファイル名の先頭に日付(数字8桁)+ハイフンがついていないファイルは、そのファイルの最終更新日を先頭に追加します。

「いいえ」のとき

  • 一覧画面での日付の表示は、「更新日」となります。
  • 一覧画面でのファイル名の表示は、ファイル名そのままとなります。
  • ファイル名変更時に、ファイル名の先頭に日付を付加する事はありません。

スキン変数の実装

スキンに変数を記述することで、スキンから機能を呼び出すことができます。以下の2つの記述を、スキンに追加してください。なお、テンプレートからの呼び出しはサポートしていません。

<head></head>要素内

<%if(hasplugin,EachBlogDir)%>
<%EachBlogDir(head)%>
<%endif%>

<body></body>要素内

<%if(hasplugin,EachBlogDir)%>
<%EachBlogDir(anchor)%>
<%endif%>

すると、<%EachBlogDir(anchor)%>を追加したところにアンカー「ファイル管理」が出現します。このアンカーをクリックすることで、機能の呼び出しをすることができます。なお、こうして呼び出されたMedia Controlは、ボタン「文書に挿入」を持たず、ファイルのアップロード・削除・ファイル名の変更のみ利用できます。

他のプラグインとの競合

NP_ImageManager、NP_ImprovedMedia、NP_Mediatocuと同時に使う事はできません。

イベントの発生

すでにアップロードされているメディア・ファイルの名前を変更する前後、削除する前後にイベントを発生します。それぞれ、「PreMediaRename」、「PostMediaRename」、「PreMediaErase」、「PostMediaErase」です。 Nucleus CMSのバージョン3.3以降では、メディア・ファイルをアップロードする前後のイベント「PreMediaUpload」と「PostMediaUpload」を、コアが提供しています。

なお、NP_ActionLogPlusをこのプラグインと一緒に利用している場合、外部ファイルに関する履歴に「ファイル削除」と「ファイル名変更」が加わります。このプラグインが発生するイベント「PostRenameMedia」と「PostDeleteMedia」をキャッチするからです。NP_ActionLogPlusはNucleus CMSのvar.3.3以降を使用した際に発生するイベント「PostMediaUpload」もキャッチします。

名前いつパラメータ
PreRenameMedia 選択したメディア・ファイルのファイル名が変更される前 collection
(値渡し)選択したメディア・ファイルが保存されているコレクション・ディレクトリ
oldfilename
(値渡し)選択したメディア・ファイルの以前のファイル名
newfilename
(値渡し)選択したメディア・ファイルの現在のファイル名
PostRenameMedia 選択したメディア・ファイルのファイル名が変更された後 collection
(値渡し)選択したメディア・ファイルが保存されているコレクション・ディレクトリ
oldfilename
(値渡し)選択したメディア・ファイルの以前のファイル名
newfilename
(値渡し)選択したメディア・ファイルの現在のファイル名
PreDeleteMedia 選択したメディア・ファイルが削除される前 collection
(値渡し)削除したメディア・ファイルが保存されていたコレクション・ディレクトリ
filename
(値渡し)削除したメディア・ファイルのファイル名
PostDeleteMedia 選択したメディア・ファイルが削除された後 collection
(値渡し)削除したメディア・ファイルが保存されていたコレクション・ディレクトリ
filename
(値渡し)削除したメディア・ファイルのファイル名
PreMediaUpload (Nucleus CMS ver.3.3以降)選択したメディア・ファイルがアップロードされる前 collection
(参照渡し)アップロードするメディア・ファイルが保存されるコレクション・ディレクトリ
uploadfile
(値渡し)アップロードするメディア・ファイルがサーバ上で一時的に保存されているファイルの名前
filename (参照渡し)アップロードした後のファイル名
PostMediaUpload (Nucleus CMS ver.3.3以降)選択したメディア・ファイルがアップロードされた後 collection
(値渡し)選択したメディア・ファイルが保存されたコレクション・ディレクトリ
mediadir
(値渡し)アップロードしたメディア・ファイルが保存されたコレクション・ディレクトリのサーバにおけるパス
filename
(値渡し)アップロードした後のファイル名

動作の仕組み

備忘録として残しておきます。

アイテムの追加/編集の時

  1. action変数により「AdminPrePageHead」 、「BookmarkletExtraHead」、「PreSendContentType」のイベントが発生した際、headにJavascriptを挿入。 /plugin/eachblogdir/media.phpをポップアップ表示するジャバスクリプト関数AddMedia()を埋め込む。
  2. また同時に、ジャバスクリプト関数includeImageとincludeOtherMediaもヘッダに追加。
  3. 追加したジャバスクリプト関数はXHTMLファイルに直接埋め込まれているため、コアのfunction AddMedia()より呼び出し優先される。
  4. AddMediaはプラグインのmedia.phpにユーザを誘導し、includeImageとincludeOtherMediaは代替テキスト入力を代行する。

表示される時

  1. action変数により、「InitSkinParse」のイベントが発生したとき、つまりスキンの初期化の直前に、プラグイン内のある関数が実行される。
  2. 関数は、blogオブジェクトからshortnameを参照し、それを用いてグローバル変数の$DIR_MEDIAと$CONF[MEDIA']を置き換える。
  3. 画像へのアンカーが、スキン変数<%popup%>、<%image%>において、置き換えられる。
  4. イベント発生をPreItemにしなかったのは、ポップアップで呼び出されるウィンドウにも変更を適用したかったから。

開発履歴

  • 2009.01.20 Ver.2.1.1
    • Super Admin権限を持つユーザのみ利用できるようにしていたが、ウェブログの編集権限をひとつでも持つユーザにまで利用範囲を広げた。
    • インターフェースの改善
  • 2009.01.11 Ver.2.1.0
    • URL内の任意の文字列を渡すことによってディレクトリ操作が可能になる脆弱性を防ぐため、ファイル名とディレクトリに関する処理を修正。
    • インターフェースを改善。
    • グローバル設定のAllowUploadを反映するように修正。
    • プラグインの利用をウェブログ・グループに所属しているユーザに限定。
    • Ver 2.0でマージしたファイル・アップロードに関するコードを削除。アップロードに関しても、コアの機能を最大限に利用します。
    • ヘルプファイルを更新。
  • 2008.01.31 Ver.2.0.1
    • GreyBox機能がオフの際のコード埋め込み不具合を修正
    • ヘルプファイル更新
  • 2008.01.15 Ver.2.0
    • コードの見直しに伴い、バージョンをあげた。
    • ファイル・アップロード、ファイル名変更、ファイル削除の各プラグイン・イベントを設定。
    • プラグイン・イベントに関するNucleus CMSのバージョン間での違いを吸収するために、ファイル・アップロードに関するコードをマージ。
    • Internet Explorerでファイルを開く際に、ポップアップしないJavaScriptのバグを修正。
    • ヘルプの更新。
    • プラグイン関連のディレクトリ構造の変更。
  • 2007.11.20 Ver.1.3(非公開)
    • スキン変数を実装。スキンからの呼び出しを可能とした。
    • スキンから呼び出された際は、ボタン「文書へ挿入」を非表示にした。
    • GreyBoxを含むパッケージにした。
  • 2007.11.06 Ver.1.2(Bundling GreyBox) * 2007.11.06 Ver.1.2(Bundling GreyBox)
    • GreyBoxユーティリティによるウィンドウオープンを実装。
  • 2007.11.01 Ver.1.2
    • ヘッダ追加情報の上書き状態を修正。オプションの追加。パースエラーの修正。Nucleus3.3のコードを合体。ヘルプの更新。
    • プラグイン関連のディレクトリ構造の変更。
  • 2007.06.21 Ver.1.1
    • プライベート・コレクションのオン・オフを追加。パースエラーの修正。ヘルプの更新。
  • 2007.02.17 Version 1.0.2 (Release Candidate 3)
    • リリースキャンディデート3
  • 2006.12.31 Version 1.0.1 (Release Candidate 2)
    • リリースキャンディデート2
  • 2006.12.29 Version 1.0.0 (Release Candidate 1)
    • リリースキャンディデート1
  • 2006.12.22 Beta
    • ベータバージョン
  • 2006.12.20 Alpha
    • アルファバージョン
 
plugins/eachblogdir.txt · 最終更新: 2009/02/09 14:03 by mocchi