目次

プラグインの概要

このプラグインは、Nucleusのmedia.phpという、ファイルの記事への挿入やアップロードを行うプログラムを改良し、プラグインとして利用しやすくしたものです。 Orangoo projectsGreyBox (ver.5.54) を、LGPL ver.2.1のもと、同梱しています。

機能は以下です

  1. アップロード、記事への挿入、ファイル名の変更そして削除、サブディレクトリの作成・削除・名前変更を行う事ができます。
  2. media.phpのNucleus Mediaウィンドウから、インターフェースを改良してあります。
  3. ファイルの挿入時は、代替テキストの入力を必須としました。これはアクセシビリティの観点に拠ります。
  4. プライベート・コレクション・ディレクトリ機能をオン・オフして、共有ディレクトリのみによる運用ができます。
  5. オプションで指定することにより、NP_EachBlogDirで提供していた機能を利用することができます。

サポートとバグ報告

サポートフォーラムにおいて行います。 このヘルプの最新は、NP_ImprovedMedia - Nucleus CMS WIKIで参照することができます。

インストール

  1. 圧縮フォルダを展開し、内容物をPLUGINフォルダにコピー。
  2. Nucleusにログインし、「管理ホーム」から、「プラグイン管理」の画面に移動。
  3. 画面下部の「新しいプラグインをインストール」で、「ImprovedMedia」を選択し、「プラグインのインストール」ボタンをクリック。
  4. 「プラグインの管理」画面の「インストール済み」のリストに表示されているのを確認します。
  5. リスト右の「編集」で、オプションを変更することができます。
  6. 通常どおり、アイテムの編集画面で外部ファイルを呼び出すボタンをクリックすると、ファイルのアップロード画面が開きます。ファイルのアップロードが成功すると、記事への埋め込みを行う画面となります。

アンインストール

オプションデータを持ちますが、そのままプラグイン管理で削除すれば、きれいになくなります。

他のプラグインとの競合

NP_ImageManager、NP_EachBlogDir、NP_Mediatocuと同時に使う事はできません。その他のプラグインは、おそらく大丈夫だと思います。

使用上の注意

スキン変数の実装

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

<head></head>要素内

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

<body></body>要素内

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

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

オプションの解説

以下の4つのオプションを持ちます。

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

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

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

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

GreyBoxユーティリティの利用

GreyBoxの提供する効果によってMedia Controlを開くオプションを追加しています。 このオプションを利用しない方は、このプラグインの構成ファイルのうち、ディレクトリ「greybox」を削除するとよいでしょう。

それぞれのウェブログがある個別ディレクトリでのファイル管理

NP_EachBlogDirで提供していた、それぞれのウェブログがある個別ディレクトリでのファイル管理機能を利用することができます。 このオプションは、アップロードしてブログで利用するファイルが、そのブログに属している状態を作り出します。詳しくはこのヘルプのそれぞれのウェブログがある個別ディレクトリでのファイル管理についてを参照してください。

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

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

「はい」のとき

「いいえ」のとき

それぞれのウェブログがある個別ディレクトリでのファイル管理について

複数ウェブログを以下のようなディレクトリ構成で運用する事で、アップロードしたファイルがウェブログに属し、ウェブログ管理チームに所属しているユーザのみ、そのファイルを利用することができるようにします。

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

Blog1(ShortName1, Default)
Weblog Path: /(Document Root)/index.php
Media  DIR : /(Document Root)/media/

Blog2(ShortName2)
Weblog Path: /(Document Root)/(shortname2)/index.php
Media  DIR : /(Document Root)/(shortname2)/media/

Blog3(ShortName3)
Weblog Path: /(Document Root)/(shortname3)/index.php
Media  DIR : /(Document Root)/(shortname3)/media/

Blog4(ShortName4)
...

なお、メディア・ディレクトリの名前は任意ですが、どのウェブログのディレクトリでも共通の名前にしてください。PHPスクリプト・ファイルの名前は、index.phpでなくとも構いません。

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

新規のウェブログの設置方法

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

アンインストールの際、プラグインはそっくりなくなるのですが、このプラグインを利用して作成したアイテムにおいて、MEDIAファイルへのアンカー切れが発生します。 その時は、それぞれのMEDIAディレクトリの内容をコレクション・ディレクトリごとコピーし、config.phpに書いた$DIR_MEDIAへ移動してください。アンカーが回復します。

メディアディレクトリの名前は、すべて統一されたものにしてください。 たとえば、あなたがconfig.phpに記述したメディアディレクトリの名前が「media」なら、 それぞれのウェブログのフォルダにあるメディアディレクトリも、同じように「media」ディレクトリとしてください。

イベントの発生

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

なお、NP_ActionLogPlusをこのプラグインと一緒に利用している場合、外部ファイルに関する履歴に「ファイル削除」と「ファイル名変更」、「サブ・ディレクトリの作成」、「サブ・ディレクトリの名前変更」、「サブ・ディレクトリの削除」が加わります。このプラグインが発生するイベント「PostRenameMedia」と「PostDeleteMedia」、「PostSubdirCreate」、「PostSubdirRename」、「PostSubdirRemove」をキャッチするからです。このプラグインは「PostMediaUpload」もキャッチします。

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

バージョン履歴

2010.02.28 Ver.3.0.1
2009.02.09 Ver.3.0.0
2009.02.09 Ver.2.2.0
2009.01.20 Ver.2.1.1
2009.01.11 Ver.2.1.0
2009.01.06 Ver.2.0.2公開中止
2008.02.08 Ver.2.0.2
2008.01.31 Ver.2.0.1
2008.01.15 Ver.2.0
2007.11.20 Ver.1.3
2007.11.06 Ver.1.2(Bundling GreyBox)
2007.11.01 Ver.1.2
2007.06.21 Ver.1.1
2007.02.17 Ver.1.0.2 (RC3)
2006.12.31 Ver.1.0.1 (RC2)
2006.12.29 Ver.1.0 (RC1)
2006.12.22 Beta
2006.12.20 Alpha

動作の仕組み

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

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

  1. 変数「action」によりイベント「AdminPrePageHead」、「BookmarkletExtraHead」が発生した際、XHTML要素「head」にJavaScript関数を挿入。 action.php経由でプラグインの出力するMedia Controlをポップアップ表示するJavaScript関数「AddMedia()」を埋め込む。
  2. また同時に、JavaScript関数「includeImage()」と「includeOtherMedia()」もヘッダに追加。
  3. 追加したJavaScript関数はXHTMLファイルに直接埋め込まれているため、コアのJavaScript関数「AddMedia()」よりも呼び出し優先される。
  4. JavaScript関数「AddMedia()」はMedia Controlにユーザを誘導し、JavaScript関数「includeImage()」と「includeOtherMedia()」は代替テキスト入力を代行する。
  5. 追加したJavaScript関数「AddMedia()」は、blogidもしくはitemidをget変数としてMedia Controlに渡す。
  6. blogid(ない場合はitemid)を用いてグローバル変数の$DIR_MEDIAと$CONF[’MediaURL’]を置き換える。
  7. Media Controlが自分を呼び出す際は、必ずblogidをget変数として渡す。
  8. あとはコアの機能を利用して、ポップアップや埋め込みのコードが生成される。

表示される時

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