tinyMCEで画像挿入の際に一覧表示させるためのPHPスクリプト

tinyMCEでは画像を挿入することができるが、そのダイアログで一覧を表示させるために、tinyMCEの呼び出しで、

  external_image_list_url : "tinyMCEImageList.php"  /* index.html からの相対パスならOK */

のように指定する必要がある。そこで、

http://wiki.moxiecode.com/index.php/TinyMCE:Configuration/external_image_list_url

を参考にしてPHPスクリプト(tinyMCEImageList.php)を書いてみた。

仕様

1. 基底クラス tinyMCEList を作成。
2. 各リスト用クラスはこの基底クラスを継承する。
3. そのクラスでは、 tinyMCEList#target() と tinyMCEList#set_listname() をオーバーライトする。
4. target() では該当ディレクトリで対象するファイル名であればTrueを返すこと。
5. set_listname() では、tinyMCEが使用するjavascript配列変数名を該当リスト用の名前に設定すること。
6. インスタンス生成後、HTTP header情報を出力して、tinyMCEList#javascript_list()を呼び出し出力する。

PHPスクリプト例(tinyMCEImageList.php)

<?php
define('DIR', './images');
define('ABSOLUTE_PATH', '/~foo/jquery-tinymce/images');

$l = new tinyMCEImageList(ABSOLUTE_PATH, DIR);
header('Content-type: text/javascript');
print $l->javascript_list();

/**
 * tinyMCEList class
 */
class tinyMCEList
{
	var $ap;
	var $dir;
	var $h;
	var $js_list;

	function __construct($ap, $d) {
		$this->ap = $ap;
		$this->dir = $d;
		$this->h = opendir($this->dir);
		$this->js_list = array();
	}

	function __destruct() {
		closedir($this->h);
	}

	function target($f) {
		return ($f != '.' && $f != '..' && is_file("$this->dir/$f"));
	}

	function set_listname() {
		$this->js_list[] = 'var tinyMCEList = new Array(';
	}

	function make_list() {
		$this->js_list = array();
		$this->set_listname();

		$d = array();
		while ($f = readdir($this->h)) {
			if ($this->target($f)) {
				$d[] = '  ["' . utf8_encode($f) . '", "' .
					utf8_encode("$this->ap/$f") . '"]';
			}
		}
		$this->js_list[] = implode(",\n", $d);
		$this->js_list[] = ');';
	}

	function javascript_list() {
		$this->make_list();
		return implode("\n", $this->js_list);
	}
}

/**
 * tinyMCEImageList class
 *
 * inheritance tinyMCEList class.
 */
class tinyMCEImageList extends tinyMCEList
{
	function target($f) {
		return (eregi("(\.jpe?g|\.gif|.png|\.bmp)$", $f) &&
			is_file("$this->dir/$f"));
	}

	function set_listname() {
		$this->js_list[] = 'var tinyMCEImageList = new Array(';
	}
}
?>