OSDN Git Service

merged 3.3 beta1
authorkimitake <kimitake@1ca29b6e-896d-4ea0-84a5-967f57386b96>
Wed, 12 Jul 2006 07:13:31 +0000 (07:13 +0000)
committerkimitake <kimitake@1ca29b6e-896d-4ea0-84a5-967f57386b96>
Wed, 12 Jul 2006 07:13:31 +0000 (07:13 +0000)
git-svn-id: https://svn.sourceforge.jp/svnroot/nucleus-jp/nucleus-jp/trunk@145 1ca29b6e-896d-4ea0-84a5-967f57386b96

150 files changed:
utf8/action.php
utf8/atom.php
utf8/config.php
utf8/createaccount.html
utf8/extra/fancyurls/.htaccess
utf8/extra/fancyurls/archive
utf8/extra/fancyurls/archives
utf8/extra/fancyurls/blog
utf8/extra/fancyurls/category
utf8/extra/fancyurls/fancyurls.config.php
utf8/extra/fancyurls/item
utf8/extra/fancyurls/member
utf8/index.php
utf8/license.txt
utf8/media/readme.txt
utf8/nucleus/documentation/devdocs/custominstall.html
utf8/nucleus/documentation/devdocs/index.html
utf8/nucleus/documentation/devdocs/plugins.html
utf8/nucleus/documentation/devdocs/sqltables.html
utf8/nucleus/documentation/devdocs/styles/manual.css
utf8/nucleus/documentation/devdocs/xmlrpc.html
utf8/nucleus/documentation/help.html
utf8/nucleus/documentation/history.html
utf8/nucleus/documentation/index.html
utf8/nucleus/documentation/pics/chmod_menu.png
utf8/nucleus/documentation/pics/chmod_window.png
utf8/nucleus/documentation/pics/screen4.png
utf8/nucleus/documentation/pics/screen5.png
utf8/nucleus/documentation/pics/skinsandtemplates.png
utf8/nucleus/documentation/skins.html
utf8/nucleus/documentation/styles/manual.css
utf8/nucleus/documentation/tips.html
utf8/nucleus/forgotpassword.html
utf8/nucleus/forms/additemform.template
utf8/nucleus/forms/commentform-closed.template
utf8/nucleus/forms/commentform-loggedin.template
utf8/nucleus/forms/commentform-notloggedin.template
utf8/nucleus/forms/loginform-loggedin.template
utf8/nucleus/forms/loginform-notloggedin.template
utf8/nucleus/forms/membermailform-loggedin.template
utf8/nucleus/forms/membermailform-notloggedin.template
utf8/nucleus/forms/nucleusbutton.template
utf8/nucleus/forms/searchform.template
utf8/nucleus/images/button-alignright.gif
utf8/nucleus/images/button-left.gif
utf8/nucleus/images/button-link.gif
utf8/nucleus/images/globe.gif
utf8/nucleus/javascript/admin.js
utf8/nucleus/javascript/bookmarklet.js
utf8/nucleus/javascript/compatibility.js
utf8/nucleus/javascript/edit.js
utf8/nucleus/javascript/index.html
utf8/nucleus/javascript/numbercheck.js
utf8/nucleus/javascript/opennew.js
utf8/nucleus/javascript/templateEdit.js
utf8/nucleus/language/english.php
utf8/nucleus/language/index.html
utf8/nucleus/libs/ACTION.php
utf8/nucleus/libs/ACTIONS.php [new file with mode: 0644]
utf8/nucleus/libs/ADMIN.php
utf8/nucleus/libs/BODYACTIONS.php [new file with mode: 0644]
utf8/nucleus/libs/BaseActions.php [new file with mode: 0644]
utf8/nucleus/libs/ENCAPSULATE.php [new file with mode: 0644]
utf8/nucleus/libs/ITEMACTIONS.php [new file with mode: 0644]
utf8/nucleus/libs/NOTIFICATION.php
utf8/nucleus/libs/PAGEFACTORY.php
utf8/nucleus/libs/PARSER.php
utf8/nucleus/libs/PLUGIN.php
utf8/nucleus/libs/PLUGINADMIN.php
utf8/nucleus/libs/SEARCH.php
utf8/nucleus/libs/SKIN.php
utf8/nucleus/libs/TEMPLATE.php
utf8/nucleus/libs/entity.php [new file with mode: 0644]
utf8/nucleus/libs/include/admin-add.template
utf8/nucleus/libs/include/admin-edit.template
utf8/nucleus/libs/include/bookmarklet-add.template
utf8/nucleus/libs/include/bookmarklet-edit.template
utf8/nucleus/libs/include/index.html
utf8/nucleus/libs/include/readme.txt
utf8/nucleus/libs/index.html
utf8/nucleus/libs/mb_emulator/convert.table
utf8/nucleus/libs/mb_emulator/history.html
utf8/nucleus/libs/mb_emulator/history.txt
utf8/nucleus/libs/mb_emulator/mb-emulator.ini
utf8/nucleus/libs/mb_emulator/mb-emulator.php
utf8/nucleus/libs/mb_emulator/sjistouni.table
utf8/nucleus/libs/mb_emulator/unitosjis.table
utf8/nucleus/libs/mysql.php [new file with mode: 0644]
utf8/nucleus/libs/showlist.php [new file with mode: 0644]
utf8/nucleus/libs/skinie.php
utf8/nucleus/libs/vars4.0.6.php
utf8/nucleus/libs/vars4.1.0.php
utf8/nucleus/libs/xmlrpc.inc.php
utf8/nucleus/libs/xmlrpcs.inc.php
utf8/nucleus/nucleus.gif
utf8/nucleus/nucleus2.gif
utf8/nucleus/plugins/NP_SkinFiles.php
utf8/nucleus/plugins/index.html
utf8/nucleus/plugins/skinfiles/css.gif
utf8/nucleus/plugins/skinfiles/generic.png
utf8/nucleus/plugins/skinfiles/image.gif
utf8/nucleus/plugins/skinfiles/index.php
utf8/nucleus/plugins/skinfiles/php.gif
utf8/nucleus/styles/addedit.css
utf8/nucleus/styles/bookmarklet.css
utf8/nucleus/styles/logo.gif
utf8/nucleus/styles/manual.css
utf8/nucleus/styles/popups.css
utf8/nucleus/styles/quickb-hover.jpg
utf8/nucleus/styles/quickb.jpg
utf8/nucleus/upgrades/index.html
utf8/nucleus/upgrades/index.php
utf8/nucleus/upgrades/upgrade.functions.php
utf8/nucleus/upgrades/upgrade.php
utf8/nucleus/upgrades/upgrade0.95.php
utf8/nucleus/upgrades/upgrade0.96.php
utf8/nucleus/upgrades/upgrade1.0.php
utf8/nucleus/upgrades/upgrade1.1.php
utf8/nucleus/upgrades/upgrade1.5.php
utf8/nucleus/upgrades/upgrade2.0.php
utf8/nucleus/upgrades/upgrade2.5.php
utf8/nucleus/upgrades/upgrade3.0.php
utf8/nucleus/upgrades/upgrade3.1.php
utf8/nucleus/upgrades/upgrade3.2.php
utf8/nucleus/xmlrpc/index.html
utf8/readme.html
utf8/robots.txt
utf8/rsd.php
utf8/skins/default/default_left.css
utf8/skins/default/default_right.css
utf8/skins/default/favicon.ico
utf8/skins/default/footer.inc
utf8/skins/default/head.inc
utf8/skins/default/header.inc
utf8/skins/default/images/bg.gif
utf8/skins/default/images/commentquote01.gif
utf8/skins/default/images/commentquote02.gif
utf8/skins/default/images/header.jpg
utf8/skins/default/images/header_sm.jpg
utf8/skins/default/images/nucleus.gif
utf8/skins/default/images/shadow.gif
utf8/skins/default/navigation.inc
utf8/skins/default/nicetitle.css
utf8/skins/default/nicetitle.js
utf8/skins/default/preview-large.png
utf8/skins/default/preview.png
utf8/skins/default/readme.html
utf8/skins/default/sidebar.inc
utf8/skins/readme.txt
utf8/xml-rss2.php

index 5e34126..380109c 100755 (executable)
@@ -1,36 +1,36 @@
-<?php\r
-/* \r
- * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/) \r
- * Copyright (C) 2002-2005 The Nucleus Group\r
- *\r
- * This program is free software; you can redistribute it and/or\r
- * modify it under the terms of the GNU General Public License\r
- * as published by the Free Software Foundation; either version 2\r
- * of the License, or (at your option) any later version.\r
- * (see nucleus/documentation/index.html#license for more info)  \r
- */\r
-\r
-/**\r
- * File containing actions that can be performed by visitors of the site,\r
- * like adding comments, etc...\r
- * @license http://nucleuscms.org/license.txt GNU General Public License\r
- * @copyright Copyright (C) 2002-2005 The Nucleus Group\r
- * @version $Id: action.php,v 1.5 2005-04-20 06:49:45 kimitake Exp $\r
- * $NucleusJP$\r
- */\r
-\r
-$CONF = array();\r
-include('./config.php');                       // common functions\r
-include_once($DIR_LIBS . 'ACTION.php');\r
-\r
-$action = requestVar('action');\r
-\r
-$a =& new ACTION();\r
-$errorInfo = $a->doAction($action);\r
-\r
-if ($errorInfo)\r
-{\r
-       doError($errorInfo['message'], new SKIN($errorInfo['skinid'])); \r
-}\r
-\r
-?>\r
+<?php
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2006 The Nucleus Group
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+
+/**
+ * File containing actions that can be performed by visitors of the site,
+ * like adding comments, etc...
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2006 The Nucleus Group
+ * @version $Id: action.php,v 1.6 2006-07-12 07:11:45 kimitake Exp $
+ * $NucleusJP: action.php,v 1.5 2005/04/20 06:49:45 kimitake Exp $
+ */
+
+$CONF = array();
+include('./config.php');
+
+// common functions
+include_once($DIR_LIBS . 'ACTION.php');
+
+$action = requestVar('action');
+$a =& new ACTION();
+$errorInfo = $a->doAction($action);
+
+if ($errorInfo) {
+       doError($errorInfo['message'], new SKIN($errorInfo['skinid']) );
+}
+
+?>
\ No newline at end of file
index c0131cd..59de2f1 100755 (executable)
@@ -1,54 +1,53 @@
-<?php\r
-\r
-/*\r
- * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)\r
- * Copyright (C) 2002-2005 The Nucleus Group\r
- *\r
- * This program is free software; you can redistribute it and/or\r
- * modify it under the terms of the GNU General Public License\r
- * as published by the Free Software Foundation; either version 2\r
- * of the License, or (at your option) any later version.\r
- * (see nucleus/documentation/index.html#license for more info)\r
- */\r
-\r
-/**\r
- * Nucleus Atom Syndication\r
- * @license http://nucleuscms.org/license.txt GNU General Public License\r
- * @copyright Copyright (C) 2002-2005 The Nucleus Group\r
- * @version $Id: atom.php,v 1.5 2005-04-20 06:49:45 kimitake Exp $\r
- * $NucleusJP$\r
- */\r
-\r
-header("Pragma: no-cache");\r
-\r
-$CONF = array();\r
-$CONF['Self'] = 'atom.php';\r
-\r
-include('./config.php');\r
-\r
-if (!$CONF['DisableSite']) {\r
-       // get feed into $feed\r
-       ob_start();\r
-               selectSkin('feeds/atom');\r
-               selector();\r
-       $feed = ob_get_contents();\r
-       ob_end_clean();\r
-       \r
-       // create ETAG (hash of feed)\r
-       // (HTTP_IF_NONE_MATCH has quotes around it)\r
-       $eTag = '"'.md5($feed).'"';\r
-       header('Etag: '.$eTag);\r
-       \r
-       // compare Etag to what we got\r
-       if ($eTag == serverVar('HTTP_IF_NONE_MATCH')) { \r
-               header("HTTP/1.0 304 Not Modified");\r
-               header('Content-Length: 0');\r
-       } else {\r
-               header("Content-Type: application/xml");\r
-               // dump feed\r
-               echo $feed;\r
-       }\r
-               \r
-}\r
-\r
-?>\r
+<?php
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2006 The Nucleus Group
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+
+/**
+ * Nucleus Atom Syndication
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2006 The Nucleus Group
+ * @version $Id: atom.php,v 1.6 2006-07-12 07:11:45 kimitake Exp $
+ * $NucleusJP: atom.php,v 1.5 2005/04/20 06:49:45 kimitake Exp $
+ */
+
+header('Pragma: no-cache');
+
+$CONF = array();
+$CONF['Self'] = 'atom.php';
+
+include('./config.php');
+
+if (!$CONF['DisableSite']) {
+       // get feed into $feed
+       ob_start();
+               selectSkin('feeds/atom');
+               selector();
+               $feed = ob_get_contents();
+       ob_end_clean();
+
+       // create ETAG (hash of feed)
+       // (HTTP_IF_NONE_MATCH has quotes around it)
+       $eTag = '"' . md5($feed) . '"';
+       header('Etag: ' . $eTag);
+
+       // compare Etag to what we got
+       if ($eTag == serverVar('HTTP_IF_NONE_MATCH') ) {
+               header('HTTP/1.0 304 Not Modified');
+               header('Content-Length: 0');
+       } else {
+               header("Content-Type: application/xml");
+               // dump feed
+               echo $feed;
+       }
+
+}
+
+?>
\ No newline at end of file
index f21b3ec..9acc3df 100755 (executable)
@@ -1,38 +1,38 @@
-<?php\r
-\r
-// This file contains variables with the locations of the data dirs\r
-// and basic functions that every page can use\r
-\r
-// mySQL connection information\r
-$MYSQL_HOST = 'hostname';\r
-$MYSQL_USER = 'username';\r
-$MYSQL_PASSWORD = 'password';\r
-$MYSQL_DATABASE = 'databasename';\r
-$MYSQL_PREFIX = '';\r
-\r
-// main nucleus directory\r
-$DIR_NUCLEUS = '/your/path/to/nucleus/';\r
-\r
-// media dir\r
-$DIR_MEDIA = '/your/path/to/media/';\r
-\r
-// extra skin files for imported skins\r
-$DIR_SKINS = '/your/path/to/skins/';\r
-\r
-// these dirs are normally subdirs of the nucleus dir, but\r
-// you can redefine them if you wish\r
-$DIR_PLUGINS = $DIR_NUCLEUS . 'plugins/';\r
-$DIR_LANG = $DIR_NUCLEUS . 'language/';\r
-$DIR_LIBS = $DIR_NUCLEUS . 'libs/';\r
-\r
-if (!@file_exists($DIR_LIBS . 'globalfunctions.php')) {\r
-       echo "Configuration error, please run the install script or modify config.php";\r
-       exit;\r
-}\r
-\r
-// include libs\r
-include($DIR_LIBS.'globalfunctions.php');\r
-if (!extension_loaded('mbstring')) {\r
-include($DIR_LIBS.'mb_emulator/mb-emulator.php');\r
-}\r
+<?php
+
+// This file contains variables with the locations of the data dirs
+// and basic functions that every page can use
+
+// mySQL connection information
+$MYSQL_HOST = 'hostname';
+$MYSQL_USER = 'username';
+$MYSQL_PASSWORD = 'password';
+$MYSQL_DATABASE = 'databasename';
+$MYSQL_PREFIX = '';
+
+// main nucleus directory
+$DIR_NUCLEUS = '/your/path/to/nucleus/';
+
+// media dir
+$DIR_MEDIA = '/your/path/to/media/';
+
+// extra skin files for imported skins
+$DIR_SKINS = '/your/path/to/skins/';
+
+// these dirs are normally subdirs of the nucleus dir, but
+// you can redefine them if you wish
+$DIR_PLUGINS = $DIR_NUCLEUS . 'plugins/';
+$DIR_LANG = $DIR_NUCLEUS . 'language/';
+$DIR_LIBS = $DIR_NUCLEUS . 'libs/';
+
+if (!@file_exists($DIR_LIBS . 'globalfunctions.php')) {
+       echo "Configuration error, please run the install script or modify config.php";
+       exit;
+}
+
+// include libs
+include($DIR_LIBS.'globalfunctions.php');
+if (!extension_loaded('mbstring')) {
+include($DIR_LIBS.'mb_emulator/mb-emulator.php');
+}
 ?>
\ No newline at end of file
index b447be7..bd5f621 100755 (executable)
@@ -1,40 +1,40 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-<html>\r
-<head>\r
-       <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />\r
-       <title>メンバーアカウントの作成</title>\r
-       <style type="text/css">@import url(nucleus/styles/manual.css);</style>\r
-</head>\r
-<body>\r
-       <h1>アカウントの作成</h1>\r
-\r
-       <form method="post" action="action.php">\r
-\r
-       <div>\r
-       <input type="hidden" name="action" value="createaccount" />\r
-               ユーザー名: \r
-               <br />\r
-               <input name="name" size="20" /> <small>(only a-z, 0-9)</small>\r
-               <br />\r
-               <br />          \r
-               本名: \r
-               <br />\r
-               <input name="realname" size="40" />\r
-               <br />\r
-               <br />          \r
-               Email:\r
-               <br />\r
-               <input name="email" size="40" /> <small>(利用可能なものを。パスワードはここに送信されます。)</small>\r
-               <br />\r
-               <br />          \r
-               URL: \r
-               <br />\r
-               <input name="url" size="60" />\r
-               <br />\r
-               <br />\r
-               <input type="submit" value="アカウントの作成" />\r
-       </div>\r
-\r
-       </form>\r
-</body>\r
-</html>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+<head>
+       <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />
+       <title>メンバーアカウントの作成</title>
+       <style type="text/css">@import url(nucleus/styles/manual.css);</style>
+</head>
+<body>
+       <h1>アカウントの作成</h1>
+
+       <form method="post" action="action.php">
+
+       <div>
+       <input type="hidden" name="action" value="createaccount" />
+               ユーザー名: 
+               <br />
+               <input name="name" size="20" /> <small>(only a-z, 0-9)</small>
+               <br />
+               <br />          
+               本名: 
+               <br />
+               <input name="realname" size="40" />
+               <br />
+               <br />          
+               Email:
+               <br />
+               <input name="email" size="40" /> <small>(利用可能なものを。パスワードはここに送信されます。)</small>
+               <br />
+               <br />          
+               URL: 
+               <br />
+               <input name="url" size="60" />
+               <br />
+               <br />
+               <input type="submit" value="アカウントの作成" />
+       </div>
+
+       </form>
+</body>
+</html>
index 7d6a8b1..85cc6c1 100755 (executable)
@@ -1,18 +1,18 @@
-<FilesMatch "^item$">\r
-    ForceType application/x-httpd-php\r
-</FilesMatch>\r
-<FilesMatch "^archive$">\r
-    ForceType application/x-httpd-php\r
-</FilesMatch>\r
-<FilesMatch "^member$">\r
-    ForceType application/x-httpd-php\r
-</FilesMatch>\r
-<FilesMatch "^archives$">\r
-    ForceType application/x-httpd-php\r
-</FilesMatch>\r
-<FilesMatch "^category$">\r
-    ForceType application/x-httpd-php\r
-</FilesMatch>\r
-<FilesMatch "^blog$">\r
-    ForceType application/x-httpd-php\r
+<FilesMatch "^item$">
+    ForceType application/x-httpd-php
+</FilesMatch>
+<FilesMatch "^archive$">
+    ForceType application/x-httpd-php
+</FilesMatch>
+<FilesMatch "^member$">
+    ForceType application/x-httpd-php
+</FilesMatch>
+<FilesMatch "^archives$">
+    ForceType application/x-httpd-php
+</FilesMatch>
+<FilesMatch "^category$">
+    ForceType application/x-httpd-php
+</FilesMatch>
+<FilesMatch "^blog$">
+    ForceType application/x-httpd-php
 </FilesMatch>
\ No newline at end of file
index a37827f..dd348b7 100755 (executable)
@@ -1,12 +1,20 @@
-<?php\r
-\r
-include('./fancyurls.config.php');\r
-include('./config.php');\r
-\r
-$data = explode("/",serverVar('PATH_INFO'));\r
-$blogid = intval($data[1]);\r
-$archive = $data[2];\r
-\r
-selector();\r
-\r
+<?php
+
+include('./fancyurls.config.php');
+include('./config.php');
+
+// default to default implementation (/archive/1/2005-12)
+// if blogid was not filled out by plugins
+if (($blogid == 0) && ($archive == ''))
+{
+       $data = explode("/",serverVar('PATH_INFO'));
+       if (count($data) > 2)
+       {
+               $blogid = intval($data[1]);
+               $archive = $data[2];
+       }
+}
+
+selector();
+
 ?>
\ No newline at end of file
index 5c36175..b1031e3 100755 (executable)
@@ -1,11 +1,19 @@
-<?php\r
-\r
-include('./fancyurls.config.php');\r
-include('./config.php');\r
-\r
-$data = explode("/",serverVar('PATH_INFO'));\r
-$archivelist = intval($data[1]);\r
-\r
-selector();\r
-\r
+<?php
+
+include('./fancyurls.config.php');
+include('./config.php');
+
+// default to default implementation (/archives/1)
+// if archivelist was not filled out by plugins
+if ($archivelist == 0)
+{
+       $data = explode("/",serverVar('PATH_INFO'));
+       if (count($data) > 1)
+       {
+               $archivelist = intval($data[1]);
+       }
+}
+
+selector();
+
 ?>
\ No newline at end of file
index 99f6351..0b4cf08 100755 (executable)
@@ -1,11 +1,19 @@
-<?php\r
-\r
-include('./fancyurls.config.php');\r
-include('./config.php');\r
-\r
-$data = explode("/",serverVar('PATH_INFO'));\r
-$blogid = intval($data[1]);\r
-\r
-selector();\r
-\r
+<?php
+
+include('./fancyurls.config.php');
+include('./config.php');
+
+// default to default implementation (/blog/1234)
+// if blogid was not filled out by plugins
+if ($blogid == 0)
+{
+       $data = explode("/",serverVar('PATH_INFO'));
+       if (count($data) > 1)
+       {
+               $blogid = intval($data[1]);
+       }
+}
+
+selector();
+
 ?>
\ No newline at end of file
index eacbe4d..bdd8e31 100755 (executable)
@@ -1,11 +1,19 @@
-<?php\r
-\r
-include('./fancyurls.config.php');\r
-include('./config.php');\r
-\r
-$data = explode("/",serverVar('PATH_INFO'));\r
-$catid = intval($data[1]);\r
-\r
-selector();\r
-\r
+<?php
+
+include('./fancyurls.config.php');
+include('./config.php');
+
+// default to default implementation (/category/1234)
+// if catid was not filled out by plugins
+if ($catid == 0)
+{
+       $data = explode("/",serverVar('PATH_INFO'));
+       if (count($data) > 1)
+       {
+               $catid = intval($data[1]);
+       }
+}
+
+selector();
+
 ?>
\ No newline at end of file
index 6a8ea9f..881051e 100755 (executable)
@@ -1,40 +1,59 @@
-<?\r
-       /*\r
-               About\r
-               -----\r
-               This directory contains extra files to make the 'fancy urls' feature even more\r
-               fancier, by eliminating the 'index.php'-part of the URL\r
-       \r
-               Installation\r
-               ------------\r
-               \r
-               1. Copy all files in this directory (except for index.html) to your main nucleus dir\r
-                  (where your index.php and action.php file are)\r
-                  \r
-                  If you have an already existing .htaccess file (most ftp-programs don't show hidden files\r
-                  by default, so don't start uploading it without checking your server). If you do, download\r
-                  that old one first, and copy the contents of the new .htaccess file (from the fancyurls\r
-                  folder) in your old one, and upload that... \r
-\r
-               2. Edit this file so that $CONF['Self'] points to your main directory. \r
-                       NOTE: this time, and only this time, the URL should NOT end in a slash\r
-\r
-               3. Also edit the $CONF['Self'] variable in your index.php, if you don't want to\r
-                  end up with index.php/item/1234 urls when people come via that way\r
-\r
-               4. Enable 'Fancy URLs' in the Nucleus admin area (nucleus management / edit settings)\r
-\r
-               5. Off you go!\r
-               \r
-               If it doesn't work:\r
-               -------------------\r
-               \r
-               Remove the files again (don't forget the hidden file .htaccess). Voila.\r
-               \r
-       */\r
-\r
-       \r
-       // remember: this URL should _NOT_ end with a slash. \r
-       $CONF['Self'] = 'http://www.yourhost.com/yourpath';\r
-       \r
+<?php
+       /*
+               About
+               -----
+               
+               This directory contains extra files to make the 'fancy urls' feature even more
+               fancier, by eliminating the 'index.php'-part of the URL
+       
+               Installation
+               ------------
+               
+               1. Copy all files in this directory (except for index.html) to your main nucleus dir
+                  (where your index.php and action.php file are)
+                  
+                  If you have an already existing .htaccess file (most ftp-programs don't show hidden files
+                  by default, so don't start uploading it without checking your server). If you do, download
+                  that old one first, and copy the contents of the new .htaccess file (from the fancyurls
+                  folder) in your old one, and upload that... 
+
+               2. Edit fancyurls.config.php so that $CONF['Self'] points to your main directory. 
+                       NOTE: this time, and only this time, the URL should NOT end in a slash
+
+               3. Edit index.php to look like this: 
+                  
+                       $CONF = array();
+
+                       include('./fancyurls.config.php'); 
+                       include('./config.php');
+
+                       selector();
+                       
+               4. Enable 'Fancy URLs' in the Nucleus admin area (nucleus management / edit settings)
+
+               5. Off you go!
+               
+               If it doesn't work:
+               -------------------
+               
+               Remove the files again (don't forget the hidden file .htaccess). Voila.
+               
+       */
+
+       
+       // remember: this URL should _NOT_ end with a slash. 
+       $CONF['Self'] = 'http://www.yourhost.com/yourpath';
+
+    /*
+       Advanced: keywords to use in fancy URLs. 
+       
+       If you want to change these, you'll also need to rename the stub files 
+       and update the contents of the .htaccess file accordingly
+    */
+    $CONF['ItemKey'] = 'item';
+    $CONF['ArchiveKey'] = 'archive';
+    $CONF['ArchivesKey'] = 'archives';
+    $CONF['MemberKey'] = 'member';
+    $CONF['BlogKey'] = 'blog';
+    $CONF['CategoryKey'] = 'category'; 
 ?>
\ No newline at end of file
index 27b1f15..23eb1bd 100755 (executable)
@@ -1,11 +1,19 @@
-<?php\r
-\r
-include('./fancyurls.config.php');\r
-include('./config.php');\r
-\r
-$data = explode("/",serverVar('PATH_INFO'));\r
-$itemid = intval($data[1]);\r
-\r
-selector();\r
-\r
+<?php
+
+include('./fancyurls.config.php');
+include('./config.php');
+
+// default to default implementation (/item/1234)
+// if itemid was not filled out by plugins
+if ($itemid == 0)
+{
+       $data = explode("/",serverVar('PATH_INFO'));
+       if (count($data) > 1)
+       {
+               $itemid = intval($data[1]);
+       }
+}
+
+selector();
+
 ?>
\ No newline at end of file
index 96c3add..d2e14c2 100755 (executable)
@@ -1,11 +1,19 @@
-<?php\r
-\r
-include('./fancyurls.config.php');\r
-include('./config.php');\r
-\r
-$data = explode("/",serverVar('PATH_INFO'));\r
-$memberid = intval($data[1]);\r
-\r
-selector();\r
-\r
+<?php
+
+include('./fancyurls.config.php');
+include('./config.php');
+
+// default to default implementation (/member/1234)
+// if memberid was not filled out by plugins
+if ($memberid == 0)
+{
+       $data = explode("/",serverVar('PATH_INFO'));
+       if (count($data) > 1)
+       {
+               $memberid = intval($data[1]);
+       }
+}
+
+selector();
+
 ?>
\ No newline at end of file
index 08f3be6..6db732a 100755 (executable)
@@ -1,10 +1,11 @@
-<?php\r
-// This file will generate and return the main page of the site\r
-$CONF = array();\r
-$CONF['Self'] = 'index.php';\r
-\r
-include('./config.php');\r
-\r
-selector();\r
-\r
-?>\r
+<?php
+
+// This file will generate and return the main page of the site
+$CONF = array();
+$CONF['Self'] = 'index.php';
+
+include('./config.php');
+
+selector();
+
+?>
index 13a56b1..dcfa4c2 100755 (executable)
-                   GNU GENERAL PUBLIC LICENSE\r
-                      Version 2, June 1991\r
-\r
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.\r
-                       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\r
- Everyone is permitted to copy and distribute verbatim copies\r
- of this license document, but changing it is not allowed.\r
-\r
-                           Preamble\r
-\r
-  The licenses for most software are designed to take away your\r
-freedom to share and change it.  By contrast, the GNU General Public\r
-License is intended to guarantee your freedom to share and change free\r
-software--to make sure the software is free for all its users.  This\r
-General Public License applies to most of the Free Software\r
-Foundation's software and to any other program whose authors commit to\r
-using it.  (Some other Free Software Foundation software is covered by\r
-the GNU Library General Public License instead.)  You can apply it to\r
-your programs, too.\r
-\r
-  When we speak of free software, we are referring to freedom, not\r
-price.  Our General Public Licenses are designed to make sure that you\r
-have the freedom to distribute copies of free software (and charge for\r
-this service if you wish), that you receive source code or can get it\r
-if you want it, that you can change the software or use pieces of it\r
-in new free programs; and that you know you can do these things.\r
-\r
-  To protect your rights, we need to make restrictions that forbid\r
-anyone to deny you these rights or to ask you to surrender the rights.\r
-These restrictions translate to certain responsibilities for you if you\r
-distribute copies of the software, or if you modify it.\r
-\r
-  For example, if you distribute copies of such a program, whether\r
-gratis or for a fee, you must give the recipients all the rights that\r
-you have.  You must make sure that they, too, receive or can get the\r
-source code.  And you must show them these terms so they know their\r
-rights.\r
-\r
-  We protect your rights with two steps: (1) copyright the software, and\r
-(2) offer you this license which gives you legal permission to copy,\r
-distribute and/or modify the software.\r
-\r
-  Also, for each author's protection and ours, we want to make certain\r
-that everyone understands that there is no warranty for this free\r
-software.  If the software is modified by someone else and passed on, we\r
-want its recipients to know that what they have is not the original, so\r
-that any problems introduced by others will not reflect on the original\r
-authors' reputations.\r
-\r
-  Finally, any free program is threatened constantly by software\r
-patents.  We wish to avoid the danger that redistributors of a free\r
-program will individually obtain patent licenses, in effect making the\r
-program proprietary.  To prevent this, we have made it clear that any\r
-patent must be licensed for everyone's free use or not licensed at all.\r
-\r
-  The precise terms and conditions for copying, distribution and\r
-modification follow.\r
-\r
-                   GNU GENERAL PUBLIC LICENSE\r
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\r
-\r
-  0. This License applies to any program or other work which contains\r
-a notice placed by the copyright holder saying it may be distributed\r
-under the terms of this General Public License.  The "Program", below,\r
-refers to any such program or work, and a "work based on the Program"\r
-means either the Program or any derivative work under copyright law:\r
-that is to say, a work containing the Program or a portion of it,\r
-either verbatim or with modifications and/or translated into another\r
-language.  (Hereinafter, translation is included without limitation in\r
-the term "modification".)  Each licensee is addressed as "you".\r
-\r
-Activities other than copying, distribution and modification are not\r
-covered by this License; they are outside its scope.  The act of\r
-running the Program is not restricted, and the output from the Program\r
-is covered only if its contents constitute a work based on the\r
-Program (independent of having been made by running the Program).\r
-Whether that is true depends on what the Program does.\r
-\r
-  1. You may copy and distribute verbatim copies of the Program's\r
-source code as you receive it, in any medium, provided that you\r
-conspicuously and appropriately publish on each copy an appropriate\r
-copyright notice and disclaimer of warranty; keep intact all the\r
-notices that refer to this License and to the absence of any warranty;\r
-and give any other recipients of the Program a copy of this License\r
-along with the Program.\r
-\r
-You may charge a fee for the physical act of transferring a copy, and\r
-you may at your option offer warranty protection in exchange for a fee.\r
-\r
-  2. You may modify your copy or copies of the Program or any portion\r
-of it, thus forming a work based on the Program, and copy and\r
-distribute such modifications or work under the terms of Section 1\r
-above, provided that you also meet all of these conditions:\r
-\r
-    a) You must cause the modified files to carry prominent notices\r
-    stating that you changed the files and the date of any change.\r
-\r
-    b) You must cause any work that you distribute or publish, that in\r
-    whole or in part contains or is derived from the Program or any\r
-    part thereof, to be licensed as a whole at no charge to all third\r
-    parties under the terms of this License.\r
-\r
-    c) If the modified program normally reads commands interactively\r
-    when run, you must cause it, when started running for such\r
-    interactive use in the most ordinary way, to print or display an\r
-    announcement including an appropriate copyright notice and a\r
-    notice that there is no warranty (or else, saying that you provide\r
-    a warranty) and that users may redistribute the program under\r
-    these conditions, and telling the user how to view a copy of this\r
-    License.  (Exception: if the Program itself is interactive but\r
-    does not normally print such an announcement, your work based on\r
-    the Program is not required to print an announcement.)\r
-\r
-These requirements apply to the modified work as a whole.  If\r
-identifiable sections of that work are not derived from the Program,\r
-and can be reasonably considered independent and separate works in\r
-themselves, then this License, and its terms, do not apply to those\r
-sections when you distribute them as separate works.  But when you\r
-distribute the same sections as part of a whole which is a work based\r
-on the Program, the distribution of the whole must be on the terms of\r
-this License, whose permissions for other licensees extend to the\r
-entire whole, and thus to each and every part regardless of who wrote it.\r
-\r
-Thus, it is not the intent of this section to claim rights or contest\r
-your rights to work written entirely by you; rather, the intent is to\r
-exercise the right to control the distribution of derivative or\r
-collective works based on the Program.\r
-\r
-In addition, mere aggregation of another work not based on the Program\r
-with the Program (or with a work based on the Program) on a volume of\r
-a storage or distribution medium does not bring the other work under\r
-the scope of this License.\r
-\r
-  3. You may copy and distribute the Program (or a work based on it,\r
-under Section 2) in object code or executable form under the terms of\r
-Sections 1 and 2 above provided that you also do one of the following:\r
-\r
-    a) Accompany it with the complete corresponding machine-readable\r
-    source code, which must be distributed under the terms of Sections\r
-    1 and 2 above on a medium customarily used for software interchange; or,\r
-\r
-    b) Accompany it with a written offer, valid for at least three\r
-    years, to give any third party, for a charge no more than your\r
-    cost of physically performing source distribution, a complete\r
-    machine-readable copy of the corresponding source code, to be\r
-    distributed under the terms of Sections 1 and 2 above on a medium\r
-    customarily used for software interchange; or,\r
-\r
-    c) Accompany it with the information you received as to the offer\r
-    to distribute corresponding source code.  (This alternative is\r
-    allowed only for noncommercial distribution and only if you\r
-    received the program in object code or executable form with such\r
-    an offer, in accord with Subsection b above.)\r
-\r
-The source code for a work means the preferred form of the work for\r
-making modifications to it.  For an executable work, complete source\r
-code means all the source code for all modules it contains, plus any\r
-associated interface definition files, plus the scripts used to\r
-control compilation and installation of the executable.  However, as a\r
-special exception, the source code distributed need not include\r
-anything that is normally distributed (in either source or binary\r
-form) with the major components (compiler, kernel, and so on) of the\r
-operating system on which the executable runs, unless that component\r
-itself accompanies the executable.\r
-\r
-If distribution of executable or object code is made by offering\r
-access to copy from a designated place, then offering equivalent\r
-access to copy the source code from the same place counts as\r
-distribution of the source code, even though third parties are not\r
-compelled to copy the source along with the object code.\r
-\r
-  4. You may not copy, modify, sublicense, or distribute the Program\r
-except as expressly provided under this License.  Any attempt\r
-otherwise to copy, modify, sublicense or distribute the Program is\r
-void, and will automatically terminate your rights under this License.\r
-However, parties who have received copies, or rights, from you under\r
-this License will not have their licenses terminated so long as such\r
-parties remain in full compliance.\r
-\r
-  5. You are not required to accept this License, since you have not\r
-signed it.  However, nothing else grants you permission to modify or\r
-distribute the Program or its derivative works.  These actions are\r
-prohibited by law if you do not accept this License.  Therefore, by\r
-modifying or distributing the Program (or any work based on the\r
-Program), you indicate your acceptance of this License to do so, and\r
-all its terms and conditions for copying, distributing or modifying\r
-the Program or works based on it.\r
-\r
-  6. Each time you redistribute the Program (or any work based on the\r
-Program), the recipient automatically receives a license from the\r
-original licensor to copy, distribute or modify the Program subject to\r
-these terms and conditions.  You may not impose any further\r
-restrictions on the recipients' exercise of the rights granted herein.\r
-You are not responsible for enforcing compliance by third parties to\r
-this License.\r
-\r
-  7. If, as a consequence of a court judgment or allegation of patent\r
-infringement or for any other reason (not limited to patent issues),\r
-conditions are imposed on you (whether by court order, agreement or\r
-otherwise) that contradict the conditions of this License, they do not\r
-excuse you from the conditions of this License.  If you cannot\r
-distribute so as to satisfy simultaneously your obligations under this\r
-License and any other pertinent obligations, then as a consequence you\r
-may not distribute the Program at all.  For example, if a patent\r
-license would not permit royalty-free redistribution of the Program by\r
-all those who receive copies directly or indirectly through you, then\r
-the only way you could satisfy both it and this License would be to\r
-refrain entirely from distribution of the Program.\r
-\r
-If any portion of this section is held invalid or unenforceable under\r
-any particular circumstance, the balance of the section is intended to\r
-apply and the section as a whole is intended to apply in other\r
-circumstances.\r
-\r
-It is not the purpose of this section to induce you to infringe any\r
-patents or other property right claims or to contest validity of any\r
-such claims; this section has the sole purpose of protecting the\r
-integrity of the free software distribution system, which is\r
-implemented by public license practices.  Many people have made\r
-generous contributions to the wide range of software distributed\r
-through that system in reliance on consistent application of that\r
-system; it is up to the author/donor to decide if he or she is willing\r
-to distribute software through any other system and a licensee cannot\r
-impose that choice.\r
-\r
-This section is intended to make thoroughly clear what is believed to\r
-be a consequence of the rest of this License.\r
-\r
-  8. If the distribution and/or use of the Program is restricted in\r
-certain countries either by patents or by copyrighted interfaces, the\r
-original copyright holder who places the Program under this License\r
-may add an explicit geographical distribution limitation excluding\r
-those countries, so that distribution is permitted only in or among\r
-countries not thus excluded.  In such case, this License incorporates\r
-the limitation as if written in the body of this License.\r
-\r
-  9. The Free Software Foundation may publish revised and/or new versions\r
-of the General Public License from time to time.  Such new versions will\r
-be similar in spirit to the present version, but may differ in detail to\r
-address new problems or concerns.\r
-\r
-Each version is given a distinguishing version number.  If the Program\r
-specifies a version number of this License which applies to it and "any\r
-later version", you have the option of following the terms and conditions\r
-either of that version or of any later version published by the Free\r
-Software Foundation.  If the Program does not specify a version number of\r
-this License, you may choose any version ever published by the Free Software\r
-Foundation.\r
-\r
-  10. If you wish to incorporate parts of the Program into other free\r
-programs whose distribution conditions are different, write to the author\r
-to ask for permission.  For software which is copyrighted by the Free\r
-Software Foundation, write to the Free Software Foundation; we sometimes\r
-make exceptions for this.  Our decision will be guided by the two goals\r
-of preserving the free status of all derivatives of our free software and\r
-of promoting the sharing and reuse of software generally.\r
-\r
-                           NO WARRANTY\r
-\r
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY\r
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN\r
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES\r
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED\r
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS\r
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE\r
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,\r
-REPAIR OR CORRECTION.\r
-\r
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\r
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR\r
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,\r
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING\r
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED\r
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY\r
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER\r
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE\r
-POSSIBILITY OF SUCH DAMAGES.\r
-\r
-                    END OF TERMS AND CONDITIONS\r
-\r
-           How to Apply These Terms to Your New Programs\r
-\r
-  If you develop a new program, and you want it to be of the greatest\r
-possible use to the public, the best way to achieve this is to make it\r
-free software which everyone can redistribute and change under these terms.\r
-\r
-  To do so, attach the following notices to the program.  It is safest\r
-to attach them to the start of each source file to most effectively\r
-convey the exclusion of warranty; and each file should have at least\r
-the "copyright" line and a pointer to where the full notice is found.\r
-\r
-    <one line to give the program's name and a brief idea of what it does.>\r
-    Copyright (C) <year>  <name of author>\r
-\r
-    This program is free software; you can redistribute it and/or modify\r
-    it under the terms of the GNU General Public License as published by\r
-    the Free Software Foundation; either version 2 of the License, or\r
-    (at your option) any later version.\r
-\r
-    This program is distributed in the hope that it will be useful,\r
-    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-    GNU General Public License for more details.\r
-\r
-    You should have received a copy of the GNU General Public License\r
-    along with this program; if not, write to the Free Software\r
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\r
-\r
-\r
-Also add information on how to contact you by electronic and paper mail.\r
-\r
-If the program is interactive, make it output a short notice like this\r
-when it starts in an interactive mode:\r
-\r
-    Gnomovision version 69, Copyright (C) year name of author\r
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\r
-    This is free software, and you are welcome to redistribute it\r
-    under certain conditions; type `show c' for details.\r
-\r
-The hypothetical commands `show w' and `show c' should show the appropriate\r
-parts of the General Public License.  Of course, the commands you use may\r
-be called something other than `show w' and `show c'; they could even be\r
-mouse-clicks or menu items--whatever suits your program.\r
-\r
-You should also get your employer (if you work as a programmer) or your\r
-school, if any, to sign a "copyright disclaimer" for the program, if\r
-necessary.  Here is a sample; alter the names:\r
-\r
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program\r
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.\r
-\r
-  <signature of Ty Coon>, 1 April 1989\r
-  Ty Coon, President of Vice\r
-\r
-This General Public License does not permit incorporating your program into\r
-proprietary programs.  If your program is a subroutine library, you may\r
-consider it more useful to permit linking proprietary applications with the\r
-library.  If this is what you want to do, use the GNU Library General\r
-Public License instead of this License.\r
+                   GNU GENERAL PUBLIC LICENSE
+                      Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                           Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                   GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                           NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                    END OF TERMS AND CONDITIONS
+
+           How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
index 3cd7c76..308d3a1 100755 (executable)
@@ -1,15 +1,15 @@
-Nucleus Media Directory\r
------------------------\r
-\r
-Uploaded images will end up in the media directory.\r
-\r
-Subdirectories work as follows:\r
-\r
-* numeric (e.g. /media/1/)\r
-\r
-Media files for a certain member (directory name is the memberid)\r
-\r
-* other directories (e.g. /media/common/)\r
-\r
-Global media collections that can be used by any member that is on a team. In order to create a new collection, simply create a new directory and assure write access is enabled for it.\r
-\r
+Nucleus Media Directory
+-----------------------
+
+Uploaded images will end up in the media directory.
+
+Subdirectories work as follows:
+
+* numeric (e.g. /media/1/)
+
+Media files for a certain member (directory name is the memberid)
+
+* other directories (e.g. /media/common/)
+
+Global media collections that can be used by any member that is on a team. In order to create a new collection, simply create a new directory and assure write access is enabled for it.
+
index d963fb3..04841d7 100755 (executable)
@@ -1,67 +1,67 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja-JP" xml:lang="ja-JP">\r
-<head>\r
-       <!-- $Id: custominstall.html,v 1.4 2005-03-19 08:34:53 kimitake Exp $ -->\r
-       <!-- $NucleusJP$ -->\r
-       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\r
-       <title>Nucleus - インストールスクリプトのカスタマイズ</title>\r
-       <link rel="stylesheet" type="text/css" href="styles/manual.css" />\r
-</head>\r
-<body>\r
-\r
-<div class="heading">\r
-インストールスクリプトのカスタマイズ\r
-</div>\r
-\r
-<p class="note">注:この機能はバージョン2.2以降のものです。</p>\r
-\r
-<h1>イントロダクション</h1>\r
-\r
-<p>\r
-<a href="index.html">開発者向けドキュメントの目次へ戻る</a>\r
-</p>\r
-\r
-<p>このドキュメントにはNucleusのインストール・スクリプトをどのようにカスタムするかという情報が書かれています。二つの方法でカスタマイズが可能です:</p>\r
-\r
-<ol>\r
-       <li>スキンの自動インストール</li>\r
-       <li>プラグインの自動インストール</li>\r
-</ol>\r
-\r
-<h1>設定</h1>\r
-\r
-<p><code>install.php</code>をエディタで開き、次のコードを探してください:</p>\r
-\r
-<pre><code>    // array with names of plugins to install. Plugin files must be present in the nucleus/plugin/\r
-    // directory.\r
-    //\r
-    // example:\r
-    //     array('NP_TrackBack', 'NP_MemberGoodies')\r
-    $aConfPlugsToInstall = array();\r
-\r
-\r
-    // array with skins to install. skins must be present under the skins/ directory with\r
-    // a subdirectory having the same name that contains a skinbackup.xml file\r
-    //\r
-    // example:\r
-    //     array('base','rsd')\r
-    $aConfSkinsToImport = array();</code></pre>\r
-\r
-<p>やるべき事はこのコードを変更するだけです:自動インストールしたいプラグインとスキンの名前を、例のような配列リストにしてください。</p>\r
-\r
-<h1>ファイルの取り込み</h1>\r
-\r
-<p>設定を変更した次は、ディストリビューションにファイルを追加する必要があります。</p>\r
-\r
-<h2>プラグインとスキン</h2>\r
-\r
-<p>プラグインは、<code>nucleus/plugins/</code>ディレクトリにファイルをおいてください。プラグインを手動でインストールする場合にするのと全く同じです。</p>\r
-\r
-<p>スキンは、手動でインポートする時と同様に、<code>skins/</code>直下にディレクトリをおいてください。<code>skinbackup.xml</code>をそこに入れておくことをお忘れ無く。</p>\r
-\r
-<h1>忘れてはいけないこと</h1>\r
-\r
-<p>再配布する前に、カスタマイズされたインストールスクリプトをテストすることを忘れないでください。</p>\r
-\r
-</body>\r
-</html>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="ja-JP" xml:lang="ja-JP">
+<head>
+       <!-- $Id: custominstall.html,v 1.5 2006-07-12 07:11:46 kimitake Exp $ -->
+       <!-- $NucleusJP: custominstall.html,v 1.4 2005/03/19 08:34:53 kimitake Exp $ -->
+       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+       <title>Nucleus - インストールスクリプトのカスタマイズ</title>
+       <link rel="stylesheet" type="text/css" href="styles/manual.css" />
+</head>
+<body>
+
+<div class="heading">
+インストールスクリプトのカスタマイズ
+</div>
+
+<p class="note">注:この機能はバージョン2.2以降のものです。</p>
+
+<h1>イントロダクション</h1>
+
+<p>
+<a href="index.html">開発者向けドキュメントの目次へ戻る</a>
+</p>
+
+<p>このドキュメントにはNucleusのインストール・スクリプトをどのようにカスタムするかという情報が書かれています。二つの方法でカスタマイズが可能です:</p>
+
+<ol>
+       <li>スキンの自動インストール</li>
+       <li>プラグインの自動インストール</li>
+</ol>
+
+<h1>設定</h1>
+
+<p><code>install.php</code>をエディタで開き、次のコードを探してください:</p>
+
+<pre><code>    // array with names of plugins to install. Plugin files must be present in the nucleus/plugin/
+    // directory.
+    //
+    // example:
+    //     array('NP_TrackBack', 'NP_MemberGoodies')
+    $aConfPlugsToInstall = array();
+
+
+    // array with skins to install. skins must be present under the skins/ directory with
+    // a subdirectory having the same name that contains a skinbackup.xml file
+    //
+    // example:
+    //     array('base','rsd')
+    $aConfSkinsToImport = array();</code></pre>
+
+<p>やるべき事はこのコードを変更するだけです:自動インストールしたいプラグインとスキンの名前を、例のような配列リストにしてください。</p>
+
+<h1>ファイルの取り込み</h1>
+
+<p>設定を変更した次は、ディストリビューションにファイルを追加する必要があります。</p>
+
+<h2>プラグインとスキン</h2>
+
+<p>プラグインは、<code>nucleus/plugins/</code>ディレクトリにファイルをおいてください。プラグインを手動でインストールする場合にするのと全く同じです。</p>
+
+<p>スキンは、手動でインポートする時と同様に、<code>skins/</code>直下にディレクトリをおいてください。<code>skinbackup.xml</code>をそこに入れておくことをお忘れ無く。</p>
+
+<h1>忘れてはいけないこと</h1>
+
+<p>再配布する前に、カスタマイズされたインストールスクリプトをテストすることを忘れないでください。</p>
+
+</body>
+</html>
index 91a4a0e..0b401d4 100755 (executable)
@@ -1,34 +1,34 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja-JP" xml:lang="ja-JP">\r
-<head>\r
-       <!-- $Id: index.html,v 1.4 2005-03-19 08:34:53 kimitake Exp $ -->\r
-       <!-- $NucleusJP$ -->\r
-       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\r
-       <title>Nucleus - 開発者用ドキュメント</title>\r
-       <link rel="stylesheet" type="text/css" href="styles/manual.css" />\r
-</head>\r
-<body>\r
-\r
-<div class="heading">\r
-開発者マニュアル\r
-<i>2003年8月12日</i>\r
-</div>\r
-\r
-<h1>はじめに</h1>\r
-\r
-<p>\r
-このマニュアルにはNucleusの開発者だけに向けた情報が記載されています。\r
-</p>\r
-\r
-<h1>目次</h1>\r
-\r
-<ul>\r
-       <li><a href="xmlrpc.html">XML-RPC インターフェース</a></li>\r
-       <li><a href="plugins.html">Nucleus プラグイン API</a></li>\r
-       <li><a href="custominstall.html">インストールスクリプトのカスタマイズ</a></li>        \r
-       <li><a href="sqltables.html">データベースの構造</a></li>\r
-</ul>\r
-\r
-</body>\r
-</html>\r
-\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="ja-JP" xml:lang="ja-JP">
+<head>
+       <!-- $Id: index.html,v 1.5 2006-07-12 07:11:46 kimitake Exp $ -->
+       <!-- $NucleusJP: index.html,v 1.4 2005/03/19 08:34:53 kimitake Exp $ -->
+       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+       <title>Nucleus - 開発者用ドキュメント</title>
+       <link rel="stylesheet" type="text/css" href="styles/manual.css" />
+</head>
+<body>
+
+<div class="heading">
+開発者マニュアル
+<i>2003年8月12日</i>
+</div>
+
+<h1>はじめに</h1>
+
+<p>
+このマニュアルにはNucleusの開発者だけに向けた情報が記載されています。
+</p>
+
+<h1>目次</h1>
+
+<ul>
+       <li><a href="xmlrpc.html">XML-RPC インターフェース</a></li>
+       <li><a href="plugins.html">Nucleus プラグイン API</a></li>
+       <li><a href="custominstall.html">インストールスクリプトのカスタマイズ</a></li>        
+       <li><a href="sqltables.html">データベースの構造</a></li>
+</ul>
+
+</body>
+</html>
+
index 33611d2..8262620 100755 (executable)
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja-JP" xml:lang="ja-JP">\r
-<head>\r
-       <!-- $Id: plugins.html,v 1.6 2005-03-19 08:39:53 kimitake Exp $ -->\r
-       <!-- $NucleusJP: plugins.html,v 1.5 2005/03/19 08:34:53 kimitake Exp $ -->\r
-       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\r
-       <title>Nucleus - プラグイン API</title>\r
-       <link rel="stylesheet" type="text/css" href="styles/manual.css" />\r
-       <style type="text/css">\r
-               /* refence parameters (greenish) */\r
-               .ref {\r
-                       background-color: #afa; \r
-                       color: #000;\r
-               }\r
-               \r
-               /* object parameters */\r
-               .obj {\r
-                       color: #00f;\r
-               }\r
-               .obj:after {\r
-                       content: " (object)";\r
-               }\r
-               \r
-               /* read-only parameters (non-ref; reddish) */\r
-               .ro {\r
-                       background-color: #faa;\r
-                       color: #000;\r
-               }\r
-       </style>\r
-</head>\r
-<body>\r
-\r
-<p class="heading">&nbsp;</p>\r
-<div class="heading">\r
-プラグイン API\r
-<i>2005年3月5日</i>\r
-</div>\r
-\r
-<div class="note-trans"><strong>訳者注:</strong> \r
-       <ul>\r
-               <li>このドキュメントの原文は以下のURLにあります。<br />\r
-                <a href="http://nucleuscms.org/documentation/devdocs/plugins.html">http://nucleuscms.org/documentation/devdocs/plugins.html</a></li>\r
-           <li>誤訳にお気づきの方は<a href="http://japan.nucleuscms.org/bb/viewforum.php?f=7">こちら</a>へご連絡いただけると助かります。</li>\r
-       </ul>\r
-</div>\r
-\r
-<div class="note"><strong>注:</strong> \r
-       <ul>\r
-               <li>このドキュメントは基本的なプラグインの書き方についての情報を提供しています。さらに質問がある方は <a href="http://forum.nucleuscms.org/viewforum.php?f=10">Plugin\r
-         Development Forum</a> (<a href="http://japan.nucleuscms.org/bb/viewforum.php?f=5">日本語フォーラム</a>)をご覧ください。</li>\r
-               <li>Nucleusバージョン1.5以降に導入されたメソッドとイベントには、導入時のバージョン情報を付記しています。それらの機能を利用するときは、<code>getMinNucleusVersion</code> を適切に設定するのを忘れないでください。</li>\r
-       </ul>\r
-</div>\r
-\r
-<h1>はじめに</h1>\r
-\r
-<p>\r
-<a href="./index.html">開発者向けドキュメントの目次へ戻る</a>\r
-</p>\r
-\r
-<p>\r
-このドキュメントはNucleusプラグインの作り方についての解説です。 \r
-</p>\r
-\r
-<h1><a name="toc"></a><a name="top"></a>目次</h1>\r
-\r
-<ul>\r
-       <li><a href="#introduction">イントロダクション</a></li>\r
-       <li><a href="#firstplug">はじめてプラグインを書いてみる</a></li>\r
-       <li><a href="#nucleusplugin"><code>NucleusPlugin</code> クラスの概要</a></li>\r
-       <li><a href="#skinvars"><code>&lt;%plugin(...)%&gt;</code> スキン変数</a></li>\r
-       <li><a href="#templatevars"><code>&lt;%plugin(...)%&gt;</code> テンプレート変数</a></li>        \r
-       <li><a href="#actions"><code>action.php</code> を使ったアクション</a></li>\r
-       <li><a href="#events">イベントとイベント登録の仕方</a></li>\r
-       <li><a href="#options">オプションを保存する</a></li>\r
-       <li><a href="#tables">データベース・テーブル</a></li>\r
-       <li><a href="#admin">プラグイン管理エリアの提供</a></li>\r
-       <li><a href="#help">ヘルプページの提供</a></li>\r
-       <li><a href="#dependency">プラグイン依存チェック</a></li>\r
-<!--   <li><a href="#parser">Using the <code>PARSER</code> class</a></li>\r
-       <li><a href="#"></a></li>\r
-       <li><a href="#"></a></li>\r
-       <li><a href="#"></a></li>\r
-       <li><a href="#"></a></li>-->\r
-</ul>\r
-\r
-<h1>イントロダクション <a name="introduction" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
-\r
-<p>\r
-Nucleusプラグインによって、誰もがNucleusの提供する機能を、Nucleus内部のPHPコードを変更することなく拡張することができます。プラグインはあるメソッドを実装したシンプルなPHPスクリプトで、Nucleusユーザー同士で簡単に交換することができます。インストールは簡単で、プラグインディレクトリにファイルをアップし、Nucleusにそれを認識させるだけです。\r
-</p>\r
-\r
-<p>\r
-プラグインの利点は以下のとおりです。</p>\r
-\r
-<ul>\r
-       <li>実装について詳しくしらなくてもNucleusフレームワークに簡単に機能を追加できる</li>\r
-       <li>必要なプラグインだけをインストールでき、ページ生成にかかる時間を節約できる</li>\r
-</ul>\r
-\r
-<p>\r
-すべてのプラグインファイルは <code>config.php</code> に記述されたディレクトリに置く必要があります。一般的に、それは <code>/your/path/nucleus/plugins/</code>  になるでしょう。プラグインファイル名は <code>NP<i>_name</i>.php</code> という形式を用いることにより認識されます。プラグインによっては、追加ファイルを格納する同名のサブディレクトリや、管理エリアを必要とします。</p>\r
-\r
-<div class="note">\r
-<b>注:</b> プラグイン名は大文字・小文字を識別しますので、<code>Np_</code> や <code>np_</code> ではなく、<code>NP_</code> で始まることに気をつけてください。またプラグインがサブディレクトリを使用する場合は、サブディレクトリの名称は<em>すべて小文字にします</em>。</div>\r
-\r
-\r
-\r
-\r
-<h1>はじめてプラグインを書いてみる<a name="firstplug" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
-\r
-<p>\r
-では、シンプルなプラグインを書いてみましょう。基本的にプラグインは、あらかじめ定義された <code>NucleusPlugin</code> クラスを継承したPHPクラスです。以下は<code>HelloWorld</code>プラグインの例です。</p>\r
-\r
-<pre class="example"><code>&lt;?\r
-\r
-class NP_HelloWorld extends NucleusPlugin {\r
-\r
-       // プラグインの名前\r
-       function getName() {\r
-               return 'Hello World'; \r
-       }\r
-       \r
-       // プラグインの作者\r
-       function getAuthor()  { \r
-               return 'Wouter Demuynck'; \r
-       }\r
-       \r
-       // プラグインのサイトURL\r
-       // mailto:foo@bar.com の形式も可\r
-       function getURL() \r
-       {\r
-               return '../../index.html'; \r
-       }\r
-       \r
-       // プラグインのバージョン\r
-       function getVersion() {\r
-               return '1.0'; \r
-       }\r
-       \r
-       // インストール済みのプラグインリストに表示される説明文\r
-       function getDescription() { \r
-               return 'Just a sample plugin.';\r
-       }\r
-\r
-       function doSkinVar($skinType) {\r
-               echo 'Hello World!';\r
-       }\r
-       \r
-}\r
-?&gt;</pre>\r
-\r
-<ol>\r
-       <li>\r
-               このコードをコピーし、 <code>NP_HelloWorld.php</code> と名づけて保存し、プラグインディレクトリに置きます。<em>最後の <code>?&gt;</code> の後や、最初の <code>&lt;?</code> の前にスペースがないことを確認しましょう</em>。ところでNP は &quot;Nucleus Plugin&quot; って意味ですよ :-)\r
-       </li>\r
-       <li>Nucleusの管理画面を開き、<em>Nucleusの管理>プラグインの管理</em>にいきます。</li>\r
-       <li><em>HelloWorld</em> プラグインがインストール可能な状態になっているはずですので、インストールします。すべてがうまくいけば、インストール済みプラグインリストに追加されます。</li>\r
-       <li>スキンを編集し、実際のページに表示する箇所に次の文を挿入します。\r
-         <pre class="example"><code>&lt;%plugin(HelloWorld)%&gt;</code></pre>\r
-       注意:カッコ内の名称 (HelloWorld) は大文字小文字を識別します!</li>\r
-       <li>さて、編集したスキンから生成されるページを見てみましょう。プラグイン変数を追加した場所に &quot;Hello\r
-  World&quot; と見えますね?</li>\r
-</ol>\r
-\r
-<p>ここまではそれほど難しくなかったと思います。さらに読み進めて理解してください。</p>\r
-\r
-\r
-<h1>NucleusPlugin クラスの概要 <a name="nucleusplugin" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
-\r
-<p>すべてのプラグインは、<code>NucleusPlugin</code> というPHPクラスを継承しなければなりません。難しそうに聞こえても心配ご無用、大丈夫です。このPHPクラスの継承によって、プラグインに必要なメソッドだけを実装でき、いくつかの補助ファンクションにアクセスでき、つまりはあなたの人生はよりラクになります。</p>\r
-\r
-<p>下記は <code>NucleusPlugin</code> が提供する、再実装可能なメソッドの概要です。このクラス自身のソースコードを見たければ、<code>nucleus/libs/PLUGIN.php</code>にあります。</p>\r
-\r
-<table summary="An overview of the redefinable methods in the class NucleusPlugin">\r
-       <caption>\r
-       <code>NucleusPlugin</code> クラスの概要(再定義可能なメソッド)\r
-       </caption>\r
-       <tr>\r
-               <th>メソッド名</th><th>説明</th>\r
-       </tr>\r
-       <tr>\r
-               <td><code>getName()</code></td>\r
-               <td>プラグイン名を返します。インストール済みプラグインリストに表示されます。デフォルトの実装では <code>Undefined</code> を返すため、必ず再定義されないといけません。</td>           \r
-       </tr>\r
-       <tr>\r
-               <td><code>getAuthor()</code></td>\r
-               <td>プラグインの作者名を返します。インストール済みプラグインリストに表示されます。デフォルトの実装では <code>Undefined</code> を返すため、必ず再定義されないといけません。</td>          \r
-       </tr>\r
-       <tr>\r
-               <td><code>getURL()</code></td>\r
-               <td>プラグインをダウンロード可能な、またはプラグインの追加情報のあるサイトのURLを返します。そのようなサイトがない場合は作者のメールアドレスへの mailto:リンクが適切です。デフォルトの実装では <code>Undefined</code> を返すため、必ず再定義されないといけません。</td>             \r
-       </tr>\r
-       <tr>\r
-               <td><code>getDescription()</code></td>\r
-               <td>プラグインに関する説明文(長文)を返します。インストール済みプラグインリストに表示されます。デフォルトの実装では <code>Undefined</code> を返します。</td>             \r
-       </tr>\r
-       <tr>\r
-               <td><code>getVersion()</code></td>\r
-               <td>プラグインの現在のバージョンを返します。デフォルトは <code>0.0</code> を返します。</td>             \r
-       </tr>\r
-       <tr>\r
-               <td><code>getMinNucleusVersion()</code></td>\r
-               <td>(v2.0b) 最低限必要なNucleusのバージョンを返します。デフォルトは <code>155</code> (v1.55)を返します。後に導入されたプラグイン関連機能を利用している場合は、このファンクションを実装するようお願いします(例: v2.0 => 200)。ただし、Nucleus v1.55 はこのファンクションを使用しないため、新機能を利用したプラグインが(対応する前のシステムに)インストールされる可能性が残っています。</td>\r
-       </tr>\r
-       <tr>\r
-               <td><code>getMinNucleusPatchLevel()</code></td>\r
-               <td>(v3.1) 最低限必要なNucleusのバージョン(<code>getMinNucleusVersion</code>)での、最低限必要なパッチレベルを返します。デフォルトは <code>0</code> を返します。このファンクションは主に新しいプラグインの機能がNucleusの最新版のパッチによって可能になる場合に用いられます。</td>\r
-       </tr>\r
-       <tr>\r
-               <td><code>init()</code></td>\r
-               <td>プラグインを初期化します。このメソッドはプラグインオブジェクトが生成された直後に呼び出され、<code>plugid</code>属性がセットされます。デフォルトではこのメソッドは何もしません。</td>\r
-       </tr>\r
-       <tr>\r
-               <td><code>doSkinVar($skinType)</code></td>\r
-               <td><code>&lt;%plugin(...)%&gt;</code> スキン変数によってプラグインが呼び出されたときにこのメソッドが呼ばれます。<code>$skinType</code> パラメータはプラグインが呼ばれた場所のスキンタイプに該当します(<code>item</code>,\r
-      <code>archive</code>, ...)。パラメータが一つしかないことに混乱しないでください。複数パラメータを渡すことも<strong>可能</strong>です。<a href="#skinvars"><code>doSkinVar</code> メソッドの実装に関する詳細情報はこちら</a>。デフォルトではこのメソッドはなにも出力しません。</td>             \r
-       </tr>\r
-       <tr>\r
-               <td><code>doTemplateVar(&amp;$item)</code></td>\r
-               <td>基本的に <code>doSkinVar</code> と同じですが、今度は<em>テンプレート</em>内(<code>item\r
-                   header/body/footer</code> と <code>dateheader/footer</code>)での<code>&lt;%plugin(...)%&gt;</code> 変数からの呼び出しになります。デフォルトではこのメソッドはテンプレートをスキンタイプとみなして\r
-      <code>doSkinVar</code> メソッドに処理を渡します。<a href="#templatevars"><code>doTemplateVar</code> メソッドの実装に関する詳細情報はこちら</a></td>              \r
-       </tr>\r
-       <tr>\r
-               <td><code>doTemplateCommentsVar(&amp;$item, &amp;$comment)</code></td>\r
-               <td>(v2.0b) 基本的に <code>doSkinVar</code> と同じですが、今度は<em>テンプレート</em>内(コメント部分)での<code>&lt;%plugin(...)%&gt;</code> 変数からの呼び出しになります。デフォルトではこのメソッドはテンプレートをスキンタイプとみなして\r
-      <code>doSkinVar</code> メソッドに処理を渡します。<a href="#templatevars"><code>doTemplateCommentsVar</code> \r
-      メソッドの実装に関する詳細情報はこちら</a></td>               \r
-       </tr>   \r
-       <tr>\r
-               <td><code>doAction($type)</code></td>\r
-               <td>プラグインがユーザーインタラクションを求めたとき、 <code>action.php</code>を介してこのメソッドがそれを与えます。.\r
-                 これはNucleus自身が新しいコメントや投票を処理するのに使用するスクリプトです。正しいパラメータを用いることで、プラグインからの\r
-                 <code>doAction</code> メソッドを呼び出せます。<code>$type</code> はオプションのメッセージタイプに該当します。<code>doAction</code> メソッド内で、リクエストからの追加の変数にアクセスできます。デフォルトではこのメソッドがエラーメッセージをトリガーすると<code>'No\r
-         Such Action'</code>という文字列を返します。<a href="#actions"><code>doAction</code> に関する詳細情報はこちら</a></td>         \r
-       </tr>\r
-       <tr>\r
-               <td><code>install()</code></td>\r
-               <td>このメソッドはプラグインがインストールされた際に呼ばれます。データベース・テーブルの生成やプラグインオプションの生成などの初期化作業を行うことができます。デフォルトではこのメソッドは何もしません。</td>\r
-       </tr>\r
-       <tr>\r
-               <td><code>unInstall()</code></td>\r
-               <td>プラグインがアンインストールされた際に呼ばれます。この時点でデータベースに作られたプラグイン情報を消去すると良いです。デフォルトではこのメソッドは何もしません。</td>\r
-       </tr>\r
-       <tr>\r
-               <td><code>getEventList()</code></td>\r
-               <td>プラグインはイベント登録が可能です。イベントはNucleusが何かアクションを起こすたびに生成されます。たとえば、<code>AddItem</code> イベントは、このイベントを登録しているすべてのプラグインを呼び出します。呼び出されるメソッドは <code>event_AddItem($params)</code>になります。 <code>$params</code> パラメータは、例えば <code>AddItem</code>        の <code>itemid</code> のような、情報フィールドを複数持つ連想配列です。デフォルトではどのイベントにも登録されていないことを示す空の配列を返します。<a href="#events">イベントに関する詳細情報\r
-         はこちら</a></td>         \r
-       </tr>\r
-       <tr>\r
-               <td><code>getTableList()</code></td>\r
-               <td>このメソッドはプラグインが生成したデータベース・テーブルの配列を返します。これはNucleusが提供するバックアップ機能で利用されるので、プラグインテーブルをバックアップに含めることができます。デフォルトでは空の配列を返します。</td>\r
-       </tr>\r
-       <tr>\r
-               <td><code>hasAdminArea()</code></td>\r
-               <td>プラグインが独自の管理エリアをもつ場合 1 を、そうでない場合 0 を返します。デフォルトでは <code>0</code> を返します。</td>\r
-       </tr>\r
-       <tr>\r
-               <td><code>getPluginDep()</code></td>\r
-               <td>(v3.2) プラグイン名の配列を返します。Nucleusはこれらのプラグインが前もってインストールされてない場合、プラグインのインストールを拒否します。デフォルトでは空の配列が返されます。<a href="#dependency">プラグイン依存に関する詳細情報はこちら</a></td>\r
-       </tr>\r
-</table>\r
-\r
-<p>実装可能なメソッドの次は、<code>NucleusPlugin</code> クラスが提供する、再実装<strong>すべきでない</strong>幾つかの特殊メソッドです。これらはプラグイン内で、<code>$this-&gt;functionName()</code>シンタックスを利用して呼び出します。</p>\r
-\r
-<table summary="An overview of the auxiliary methods in the class NucleusPlugin. You should NOT redefine these">\r
-       <caption>\r
-       <code>NucleusPlugin</code> クラスの概要(再定義不可能なメソッド)\r
-       </caption>\r
-       <tr>\r
-               <th>メソッド名</th>\r
-               <th>説明</th>\r
-       </tr>\r
-       <tr>\r
-               <td>\r
-                       <code>createOption(...)</code>\r
-                       <br /><code>createBlogOption(...)</code>(v2.2)\r
-                       <br /><code>createCategoryOption(...)</code>(v2.2)\r
-                       <br /><code>createMemberOption(...)</code>(v2.2)\r
-                       <br /><code>createItemOption(...)</code>(v3.2)\r
-               </td>\r
-               <td><a href="#options" title="More info on options">新しいオプションを生成します。</a></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>\r
-                       <code>deleteOption(...)</code>\r
-                       <br /><code>deleteBlogOption(...)</code>(v2.2)\r
-                       <br /><code>deleteCategoryOption(...)</code>(v2.2)\r
-                       <br /><code>deleteMemberOption(...)</code>(v2.2)\r
-                       <br /><code>deleteItemOption(...)</code>(v3.2)\r
-               </td>\r
-               <td><a href="#options" title="More info on options">オプションを削除します。</a></td>               \r
-       </tr>\r
-       <tr>\r
-               <td>\r
-                       <code>setOption(...)</code>\r
-                       <br /><code>setBlogOption(...)</code>(v2.2)\r
-                       <br /><code>setCategoryOption(...)</code>(v2.2)\r
-                       <br /><code>setMemberOption(...)</code>(v2.2)                         \r
-                       <br /><code>setItemOption(...)</code>(v3.2)\r
-               </td>\r
-               <td><a href="#options" title="More info on options">オプションに値をセットします。</a></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>\r
-                       <code>getOption(...)</code>\r
-                       <br /><code>getBlogOption(...)</code>(v2.2)\r
-                       <br /><code>getCategoryOption(...)</code>(v2.2)\r
-                       <br /><code>getMemberOption(...)</code>(v2.2)                          \r
-                       <br /><code>getItemOption(...)</code>(v3.2)\r
-               </td>\r
-               <td><a href="#options" title="More info on options">オプションの値を取得します。</a></td>         \r
-       </tr>\r
-       <tr>\r
-               <td>\r
-                       <code>getAllBlogOptions(...)</code>(v2.2)\r
-                       <br /><code>getAllCategoryOptions(...)</code>(v2.2)\r
-                       <br /><code>getAllMemberOptions(...)</code>(v2.2)                              \r
-                       <br /><code>getAllItemOptions(...)</code>(v3.2)\r
-               </td>\r
-               <td><a href="#options" title="More info on options">与えられたオプションにより、すべての値(コンテクストごとの一つの値)の連想配列を返します。</a></td>            \r
-       </tr>   \r
-       <tr>\r
-               <td>\r
-                       <code>getBlogOptionTop(...)</code>(v3.2)\r
-                       <br /><code>getMemberOptionTop(...)</code>(v3.2)\r
-                       <br /><code>getCategoryOptionTop(...)</code>(v3.2)\r
-         <br /><code>getItemOptionTop(...)</code>(v3.2)\r
-               </td>\r
-               <td><a href="#options" title="More info on options">与えられたオプションにより、すべての値のうちの最初の値を返します。</a></td>\r
-       </tr>\r
-       <tr>\r
-               <td><code>getID()</code></td>\r
-               <td>このプラグインのIDを返します(このIDはNucleus内部で利用されるものです)。</td>               \r
-       </tr>\r
-       <tr>\r
-               <td><code>getAdminURL()</code></td>\r
-               <td>プラグインの管理エリアが置かれたURLを返します(そのような管理エリアがない場合は、この情報は無効です)。</td>              \r
-       </tr>\r
-       <tr>\r
-               <td><code>getDirectory()</code></td>\r
-               <td>プラグインの追加ファイルが格納されたサーバーのファイルシステムのパスを返します(そのようなファイルがない場合は、この情報は無効です)。結果は&quot;<code>.../nucleus/plugins/<em>plugname</em>/</code>&quot;のようになります。</td>           \r
-       </tr>\r
-       <tr>\r
-               <td><code>getShortName()</code></td>\r
-               <td>"NP_"部分を省き、全てを小文字にしたプラグインのクラス名を返します。この情報は <code>getAdminURL</code> と <code>getDirectory</code> で使用されます。</td>              \r
-       </tr>\r
-\r
-</table>\r
-\r
-<h1>スキン変数<a name="skinvars" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
-\r
-<h2>解説</h2>\r
-\r
-<p>\r
-独自のスキン変数を生成し、<code>&lt;%plugin(<em>PlugName,parameters</em>)%&gt;</code> または <code>&lt;%PlugName(parameters)%&gt;</code>で呼び出すことが出来ます(すでに存在するスキン変数とかぶらない場合)。パラメータはカンマ区切りです。</p>\r
-\r
-<p>\r
-スキン変数を扱うには、<code>doSkinVar</code> メソッドを実装する必要があります。いくつかの例を以下に示します。</p>\r
-\r
-<pre class="example"><code>function doSkinVar($skinType)\r
-function doSkinVar($skinType, $param1, $param2)\r
-function doSkinVar($skinType, $skinVar, $param1, $param2)\r
-function doSkinVar($skinType, $skinVar, $param1 = 'default value')</code></pre>\r
-\r
-<ul>\r
-       <li><code>$skinType</code> パラメータは、'index', 'item', 'archive', 'archivelist', 'member', 'error',\r
-  'search', 'imagepopup',  <a href="#templatevars" title="Information on templatevars">'template'</a>のうちの一つを取ります</li>\r
-       <li><code>$skinVar</code> は、スキン変数のタイプとして解釈される実質的に最初のパラメータになります(例:<code>&lt;%plugin(PlugName,VarType)%&gt;</code>)。</li>\r
-       <li><code>doSkinVar()</code>(パラメータ無し)を使い、PHPファンクションの<code>func_get_args()</code>を用いてパラメータを取得することができます。引数の数の異なる、タイプの違うスキン変数を扱うときに便利です。</li>\r
-</ul>\r
-\r
-<h2>ノート</h2>\r
-\r
-<ul>\r
-       <li>(v2.0b) グローバル変数としてパースされている <code>$currentSkinName</code> を使ってスキンの名前を取得できます。</li>\r
-</ul>\r
-\r
-\r
-\r
-\r
-<h1>テンプレート変数<a name="templatevars" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
-\r
-<h2>解説</h2>\r
-\r
-<p>\r
-テンプレートプラグイン変数はスキンプラグイン変数と同様に働きますが以下の2点が異なります。</p>\r
-\r
-<ol>\r
-       <li>スキン内ではなくテンプレート内から呼ばれます。</li>\r
-       <li>$skinTypeパラメータを取りません。代わりに現在パースされているアイテムやコメントの情報付きの追加パラメータを取ります。\r
-    <ul>\r
-                       <li><code>doTemplateVar</code> メソッドは <code>&amp;$item</code> パラメータを取ります。</li>\r
-                       <li><code>doTemplateCommentsVar</code> メソッドは <code>&amp;$item</code> と <code>&amp;$comment</code> パラメータを取ります。</li>\r
-         </ul>\r
-               <strong>&amp;マークに注意!</strong>\r
-       </li>\r
-</ol>\r
-       \r
-<p>テンプレート変数はスキン変数と同じ要領で呼ばれます(<code>&lt;%plugin(PlugName,parameters)%&gt;</code> または <code>&lt;%PlugName(parameters)%&gt;</code>)。</p>\r
-\r
-<p>\r
-デフォルトでは、全てのテンプレート変数は'<code>template</code>'を<code>skintype</code>パラメータとして、<code>doSkinVar</code> メソッドに渡ります。</p>\r
-\r
-<p>\r
-独自の実装を提供したい場合は、<code>doTemplateVar</code> メソッドや <code>doTemplateCommentsVar</code> メソッドを再定義する必要があります。<code>skintype</code>パラメータが無くなる以外はdoSkinVarと同様に働きます。</p>\r
-\r
-<pre class="example"><code>function doTemplateVar(&amp;$item)\r
-function doTemplateVar(&amp;$item, $param1, $param2)\r
-function doTemplateVar(&amp;$item, $type, $param1, $param2)\r
-function doTemplateVar(&amp;$item, $type, $param1 = 'default value')\r
-function doTemplateCommentsVar(&amp;$item, &amp;$comment)\r
-function doTemplateCommentsVar(&amp;$item, &amp;$comment, $param1, $param2)\r
-function doTemplateCommentsVar(&amp;$item, &amp;$comment, $type, $param1, $param2)\r
-function doTemplateCommentsVar(&amp;$item, &amp;$comment, $type, $param1 = 'default value')</code></pre>\r
-\r
-<h2>ノート</h2>\r
-\r
-<ul>\r
-       <li>(v2.0b) グローバル変数として内部で利用される <code>$currentSkinName</code> を使ってテンプレートの名前を取得できます。</li>\r
-</ul>\r
-\r
-\r
-\r
-\r
-<h1>アクション<a name="actions" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
-\r
-<p>プラグインは <code>action.php</code> を通してアクションを行うことができ、同様のスクリプトがコメントや投票の受け取りにも使用されてます。GETまたはPOSTのどちらかを通して呼び出せます。必要なパラメータは\r
-<code>action</code>('plugin'と指定)、<code>name</code>(プラグイン名)、<code>type</code>(リクエストされたアクションの種類)です。</p>\r
-\r
-<p>これらのアクションを有効にするために、<code>doAction($actionType)</code> メソッドをプラグイン内で実装する必要があります。リクエストからの追加パラメータは\r
-<code>requestVar('<em>name</em>')</code> で取得できます(<code>requestVar</code> はPHPが付加する magic_quotes_gpc に配慮しています)。</p>\r
-\r
-<p>\r
-<code>doAction</code> メソッドが文字列を返すとき、エラーとして解釈され、エラーメッセージが表示されます。</p>\r
-\r
-\r
-\r
-\r
-\r
-\r
-<h1>イベント<a name="events" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
-\r
-<p>\r
-Nucleusプラグインはなにか重要なことが起きたときに発生するイベントに登録可能です。プラグインはイベント発生の際にアクションを実行したり、テキストを出力したりできます。</p>\r
-\r
-<h2>例</h2>\r
-\r
-<p>\r
-下記は <code>PreAddComment</code> イベント(blogにコメントが追加される直前に生成されるイベント)にプラグインが登録する例です。</p>\r
-\r
-<pre class="example"><code>class NP_Acronyms extends NucleusPlugin {\r
-  ...\r
-  function getEventList() { return array('PreAddComment'); }\r
-  ...\r
-  function event_PreAddComment(&amp;$data) {\r
-    // 頭字語 HTML を置き換え\r
-    $data['comment']['body'] = \r
-        strreplace('HTML',\r
-                   '&lt;acronym title="HyperText Markup Language"&gt;HTML&lt;/acronym&gt;',\r
-                   $data['comment']['body']);\r
-  }\r
-}\r
-</code></pre>\r
-\r
-<p>このプラグインはコメント中の'HTML'というテキストを'<code>&lt;acronym title=&quot;HyperText\r
-Markup Language&quot;&gt;HTML&lt;/acronym&gt;</code>'に置き換えます。acronymタグはHTMLタグで、頭字語についての追加情報を提供します。</p>\r
-\r
-<h2>イベント登録の仕方</h2>\r
-\r
-<p>イベント登録に必要なステップは以下になります。</p>\r
-\r
-<ol>\r
-       <li><code>getEventList</code> メソッドから返る配列にイベント名を追加します。</li>\r
-       <li><code>event_EventName($data)</code> という形でメソッドを生成し、この中でイベントを処理します。</li>\r
-</ol>\r
-\r
-<p>複数のプラグインが同じイベントに登録できます。管理エリアのプラグインリストの順序に従ってプラグインに通知が行きます。リストの上にあるプラグインほど早く通知されます。</p>\r
-\r
-<h2>パラメータ</h2>\r
-\r
-<p><code>event_EventName</code> メソッドはひとつだけ <code>$data</code> パラメータを持ち、それはイベントごとに内容が異なります。これは連想配列です。この連想配列に渡されたオブジェクトや配列は<strong>参照形式</strong>で渡されるため、これらに加えた変更は記憶されます。</p>\r
-\r
-<p>以下のイベントリストは、パラメータ変更がNucleusに知られるかどうかを示すために色を使い分けています。</p>\r
-\r
-<ul>\r
-       <li><var class="ref">参照渡し(緑)</var>: この種のパラメータに変更を加えるとNucleusに知られます。</li>\r
-       <li><var class="ro">値渡し(赤)</var>: プラグインイベントハンドラに渡される前に値がコピーされます。これらの変数への変更は自動的に破棄されます。.</li>\r
-</ul>\r
-\r
-<p>パラメータとして渡されるオブジェクトは<var class="obj">object</var>.として示されます。ほとんどのオブジェクトは参照渡しで、<var class="obj ref">object\r
-by ref</var>のように示されます。</p>\r
-\r
-<h2>イベントリスト</h2>\r
-\r
-<table summary="An overview of events to which a Nucleus Plugin can subscribe, and what parameters are passed along to the method that handles the event">\r
-       <caption>\r
-       プラグインが登録できるイベント</caption>\r
-       <tr>\r
-               <th>名前</th>\r
-               <th>いつ</th>\r
-               <th>パラメータ</th>\r
-       </tr>\r
-       <tr>\r
-               <td>PreSkinParse</td>\r
-               <td>スキンのパースの直前</td>\r
-               <td><dl>\r
-                       <dt class="obj ref">skin</dt>\r
-                       <dd>パースする<code>SKIN</code>オブジェクト</dd>\r
-                       <dt class="ro">type</dt>\r
-                       <dd>スキンタイプ('index', 'item', 'archive', 'archivelist',\r
-                 'member', 'error', 'search', 'imagepopup', 'fileparser'のいずれか)</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PostSkinParse</td>\r
-               <td>スキンのパースの直後</td>\r
-               <td><dl>\r
-                       <dt class="obj ref">skin</dt>\r
-                       <dd>パースする<code>SKIN</code>オブジェクト</dd>\r
-                       <dt class="ro">type</dt>\r
-                       <dd>スキンタイプ('index', 'item', 'archive', 'archivelist', 'member', 'error', 'search',\r
-                 'imagepopup', 'fileparser'のいずれか)</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PreItem</td>\r
-               <td>アイテムのパース前、ただしアイテムヘッダーのパース後</td>\r
-               <td><dl>\r
-                       <dt class="ref obj">blog</dt>\r
-                       <dd><code>BLOG</code> オブジェクト</dd>\r
-                       <dt class="ref obj">item</dt>\r
-                       <dd>アイテムデータを持つオブジェクト</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PostItem</td>\r
-               <td>アイテムのパース後、ただしアイテムフッターのパース前</td>\r
-               <td><dl>\r
-                       <dt class="ref obj">blog</dt>\r
-                       <dd><code>BLOG</code> オブジェクト</dd>\r
-                       <dt class="ref obj">item</dt>\r
-                       <dd>アイテムデータを持つオブジェクト</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PreComment</td>\r
-               <td>コメントの表示前</td>\r
-               <td><dl>\r
-                       <dt class="ref">comment</dt>\r
-                       <dd>コメントデータを持つ連想配列</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PostComment</td>\r
-               <td>コメントの表示後</td>\r
-               <td><dl>\r
-                       <dt class="ref">comment</dt>\r
-                       <dd>コメントデータを持つ連想配列</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PreDateHead</td>\r
-               <td>日付ヘッダーのパース前</td>\r
-               <td><dl>\r
-                       <dt class="obj ref">blog</dt>\r
-                       <dd><code>BLOG</code> オブジェクト</dd>\r
-                       <dt class="ro">timestamp</dt>\r
-                       <dd>日付ヘッダーのタイムスタンプ</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PostDateHead</td>\r
-               <td>日付ヘッダーのパース後</td>\r
-               <td><dl>\r
-                       <dt class="obj ref">blog</dt>\r
-                       <dd><code>BLOG</code> オブジェクト</dd>\r
-                       <dt class="ro">timestamp</dt>\r
-                       <dd>日付ヘッダーのタイムスタンプ</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PreDateFoot</td>\r
-               <td>日付フッターのパース前</td>\r
-               <td><dl>\r
-                       <dt class="ref obj">blog</dt>\r
-                       <dd><code>BLOG</code> オブジェクト</dd>\r
-                       <dt class="ro">timestamp</dt>\r
-                       <dd>日付フッターのタイムスタンプ</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PostDateFoot</td>\r
-               <td>日付フッターのパース後</td>\r
-               <td><dl>\r
-                       <dt class="ref obj">blog</dt>\r
-                       <dd><code>BLOG</code> オブジェクト</dd>\r
-                       <dt class="ro">timestamp</dt>\r
-                       <dd>日付フッターのタイムスタンプ</dd>\r
-               </dl></td>              \r
-       </tr>   \r
-       <tr>\r
-               <td>LoginSuccess</td>\r
-               <td>ログイン成功後</td>\r
-               <td><dl>\r
-                       <dt class="obj ref">member</dt>\r
-                       <dd><code>MEMBER</code> オブジェクト</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>LoginFailed</td>\r
-               <td>ログイン失敗後</td>\r
-               <td><dl>\r
-                       <dt class="ro">username</dt>\r
-                       <dd>ログイン時に使われたユーザー名</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>Logout</td>\r
-               <td>ログアウト後</td>\r
-               <td><dl>\r
-                       <dt class="ro">username</dt>\r
-                       <dd>ログアウト時のユーザー名</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PreBlogContent</td>\r
-               <td>blogの内容がスキン変数を通して挿入される前</td>\r
-               <td><dl>\r
-                       <dt class="obj ref">blog</dt>\r
-                       <dd><code>BLOG</code> オブジェクト</dd>\r
-                       <dt class="ro">type</dt>\r
-                       <dd>呼び出されたスキン変数 ('blog', 'otherblog', 'archive', 'archivelist', 'item', 'searchresults',\r
-                         'othersearchresults', 'categorylist', 'otherarchive', 'otherarchivelist')</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PostBlogContent</td>\r
-               <td>blogの内容がスキン変数を通して挿入された後</td>\r
-               <td><dl>\r
-                       <dt class="obj ref">blog</dt>\r
-                       <dd><code>BLOG</code> オブジェクト</dd>\r
-                       <dt class="ro">type</dt>\r
-                       <dd>呼び出されたスキン変数 ('blog', 'otherblog', 'archive', 'archivelist', 'item', 'searchresults',\r
-                 'othersearchresults', 'categorylist', 'otherarchive', 'otherarchivelist')</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PreAddComment</td>\r
-               <td>コメントがデータベースに追加される前</td>\r
-               <td><dl>\r
-                       <dt class="ref">comment</dt>\r
-                       <dd>コメントデータ(連想配列)</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PostAddComment</td>\r
-               <td>コメントがデータベースに追加された後</td>\r
-               <td><dl>\r
-                       <dt class="ref">comment</dt>\r
-                       <dd>コメントデータ(連想配列)</dd>\r
-                       <dt class="ref">commentid</dt>\r
-                       <dd>コメントのID</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PostRegister</td>\r
-               <td>新規ユーザーの登録後</td>\r
-               <td><dl>\r
-                       <dt class="obj ref">member</dt>\r
-                       <dd>新しい<code>MEMBER</code> オブジェクト</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PostAddItem</td>\r
-               <td>アイテムがデータベースに追加された後</td>\r
-               <td><dl>\r
-                       <dt class="ro">itemid</dt>\r
-                       <dd>データベースに出来た新しい itemid</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PreAddItem</td>\r
-               <td>アイテムがデータベースに追加される直前</td>\r
-               <td><dl>\r
-                       <dt class="ref">title</dt>\r
-                       <dd>タイトル</dd>\r
-                       <dt class="ref">body</dt>\r
-                       <dd>本文</dd>\r
-                       <dt class="ref">more</dt>\r
-                       <dd>拡張テキスト</dd>\r
-                       <dt class="ref obj">blog</dt>\r
-                       <dd><code>BLOG</code> オブジェクト</dd>\r
-                       <dt class="ref">authorid</dt>\r
-                       <dd>執筆者ID</dd>\r
-                       <dt class="ref">timestamp</dt>\r
-                       <dd>UNIX タイムスタンプ</dd>\r
-                       <dt class="ref">closed</dt>\r
-                       <dd>1 (コメント不可) or 0 (コメント可)</dd>\r
-                       <dt class="ref">draft</dt>\r
-                       <dd>1 (ドラフト) or 0 (非ドラフト)</dd>\r
-                       <dt class="ref">catid</dt>\r
-                       <dd>カテゴリーID</dd>\r
-               </dl></td>              \r
-       </tr>   \r
-       <tr>\r
-               <td>PreUpdateItem</td>\r
-               <td>データベースにあるアイテムが更新される直前</td>\r
-               <td><dl>\r
-                       <dt class="ro">itemid</dt>\r
-                       <dd>アイテム ID</dd>\r
-                       <dt class="ref">title</dt>\r
-                       <dd>タイトル</dd>\r
-                       <dt class="ref">body</dt>\r
-                       <dd>本文</dd>\r
-                       <dt class="ref">more</dt>\r
-                       <dd>拡張テキスト</dd>\r
-                       <dt class="ref obj">blog</dt>\r
-                       <dd><code>BLOG オブジェクト</code> object</dd>\r
-                       <dt class="ref">closed</dt>\r
-                       <dd>1 (コメント不可) or 0 (コメント可)</dd>\r
-                       <dt class="ref">catid</dt>\r
-                       <dd>カテゴリーID</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PrepareItemForEdit</td>\r
-               <td>アイテムをデータベースから取得した直後で、編集のためにユーザーに表示される前</td>\r
-               <td><dl>\r
-                       <dt class="ref">item</dt>\r
-                       <dd>アイテムデータを持つ連想配列</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PreUpdateComment</td>\r
-               <td>コメントが更新され、データベースに保存される直前</td>\r
-               <td><dl>\r
-                       <dt class="ref">body</dt>\r
-                       <dd>コメント本文</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PrepareCommentForEdit</td>\r
-               <td>コメントをデータベースから取得した直後で、編集のためにユーザーに表示される前</td>\r
-               <td><dl>\r
-                       <dt class="ref">comment</dt>\r
-                       <dd>コメントデータ(連想配列)</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PrePluginOptionsEdit</td>\r
-               <td>\r
-                       (v2.0b) 'プラグインオプションの編集'フォームが生成される前\r
-                       <br />(v2.2) パラメータ追加\r
-                       <br />(v3.2) 各オプションにパラメータ追加\r
-               </td>\r
-               <td><dl>\r
-                       <dt class="ro">context</dt>\r
-                       <dd>(v2.2) <code>global</code>, <code>blog</code>, <code>member</code>, <code>item</code>, <code>category</code>のいずれか</dd>\r
-                       <dt class="ref">options</dt>\r
-                       <dd>次のインデックスをもつ連想配列: <code>name</code>, <code>value</code>, <code>oid</code>, <code>description</code>, <code>type</code>, <code>typeinfo</code>, <code>contextid</code>, <code>extra</code> 。追加オプションをここに加えることも可能(それらで何かの処理をするときはPostPluginOptionsUpdateの記述も必要)<br />\r
-                       <code>extra</code>フィールドを用いて、オプションに追加HTML(たとえばフォームのコントロール)を追加できます。もしそうする場合、 <code>extra</code> に追加する前に <code>pid</code> と <code>getID()</code> を比較し、さらに <code>name</code> をチェックすべきです。</dd>\r
-                       <dt class="ro">plugid</dt>\r
-                       <dd>プラグイン ID (これが気になるなら、<code>GetID()</code>を見ると理解できる)(コンテクストがglobalのときのみ存在)</dd>\r
-                       <dt class="ro">contextid</dt>\r
-                       <dd>コンテクスト ID (blogid, memberid, catid, itemid コンテクストによる)</dd>\r
-               </dl></td>              \r
-       </tr>   \r
-       <tr>\r
-               <td>PrePluginOptionsUpdate</td>\r
-               <td>\r
-                       (v3.2) プラグインオプションが更新される前。(このイベントを使ってオプションの新しい値を評価したり変更したりできます)\r
-               </td>\r
-               <td><dl>\r
-                       <dt class="ro">context</dt>\r
-                       <dd>(v2.2) <code>global</code>, <code>member</code>, <code>blog</code>, <code>item</code>, <code>category</code>のいずれか</dd>\r
-                       <dt class="ro">plugid</dt>\r
-                       <dd>プラグイン ID (これが気になるなら、<code>GetID()</code>を見ると理解できる)</dd>\r
-                       <dt class="ro">optionname</dt>\r
-                       <dd>オプション名</dd>\r
-                       <dt class="ro">contextid</dt>\r
-                       <dd>コンテクスト ID (blogid, memberid, catid, itemid コンテクストによる)</dd>\r
-                       <dt class="ref">value</dt>\r
-                       <dd>そのオプションの新しい値</dd>\r
-               </dl></td>\r
-       </tr>\r
-       <tr>\r
-               <td>PostPluginOptionsUpdate</td>\r
-               <td>\r
-                       (v2.0b) プラグインオプションの更新後<br />\r
-               (v2.2) コンテクストによって異なるパラメータ</td>\r
-               <td><dl>\r
-                       <dt class="ro">context</dt>\r
-                       <dd>(v2.2) <code>global</code>, <code>member</code>, <code>blog</code>, <code>item</code>, <code>category</code>のいずれか</dd>\r
-                       <dt class="ro">plugid</dt>\r
-                       <dd>プラグイン ID (これが気になるなら、<code>GetID()</code>を見ると理解できる)(globalコンテクスト)</dd>\r
-                       <dt class="ro">blogid</dt>\r
-                       <dd>(v2.2) blog ID (blog コンテクスト)</dd>                       \r
-                       <dt class="ref obj">blog</dt>\r
-                       <dd>(v2.2) BLOG オブジェクト (blog コンテクスト)</dd>                       \r
-                       <dt class="ro">memberid</dt>\r
-                       <dd>(v2.2) member ID (member コンテクスト)</dd>                   \r
-                       <dt class="ref obj">member</dt>\r
-                       <dd>(v2.2) MEMBER オブジェクト (member コンテクスト)</dd>                   \r
-                       <dt class="ro">catid</dt>\r
-                       <dd>(v2.2) category ID (category コンテクスト)</dd>                       \r
-                       <dt class="ro">itemid</dt>\r
-                       <dd>(v2.2) item ID (item コンテクスト)</dd>\r
-                       <dt class="ref obj">member</dt>\r
-                       <dd>(v2.2) ITEM オブジェクト (item コンテクスト)</dd>\r
-               </dl></td>              \r
-               \r
-       </tr>   \r
-       <tr>\r
-               <td>PostAuthentication</td>\r
-               <td>(v2.0b) ログイン処理の完了後。ページリクエストごとに発生</td>\r
-               <td><dl>\r
-                       <dt class="ro">loggedIn</dt>\r
-                       <dd><code>$member->isLoggedIn()</code>の戻り値</dd>\r
-               </dl></td>              \r
-       </tr>           \r
-       <tr>\r
-               <td>PreAddItemForm</td>\r
-               <td>(v2.0b) アイテム追加フォーム(ブックマークレットまたは管理エリア)が生成される直前</td>\r
-               <td><dl>\r
-                       <dt class="ref">contents</dt>\r
-                       <dd>連想配列への参照。そのうちの'title',\r
-                         'body', 'more'にはフォームフィールドへの初期値を与えることができます。複数のプラグイン間でこれらの値の変更を避けるには、処理後に'hasBeenSet'の値を1にセットします(かつ処理前にこの値をチェックするようにします)</dd>\r
-                       <dt class="ref obj">blog</dt>\r
-                       <dd><code>BLOG</code> オブジェクトへの参照</dd>\r
-               </dl></td>              \r
-       </tr>           \r
-       <tr>\r
-               <td>AddItemFormExtras</td>\r
-               <td>(v2.0b) アイテム追加ページまたはブックマークレット内部のどこか。<code>template</code> ファイルの類を別に用意しなくても、ここでプラグインがカスタムフィールドを追加できる。</td>\r
-               <td><dl>\r
-                       <dt class="ref obj">blog</dt>\r
-                       <dd><code>BLOG</code> オブジェクトへの参照</dd>\r
-               </dl></td>              \r
-       </tr>                   \r
-       <tr>\r
-               <td>EditItemFormExtras</td>\r
-               <td>\r
-                       (v2.0b) アイテム編集ページまたはブックマークレット内部のどこか。<code>template</code> ファイルの類を別に用意しなくても、ここでプラグインがカスタムフィールドを追加できる。<br />\r
-                       <br />                  \r
-                       あまり多くのデータを追加しないこと。また以下のように<strong>正しいXHTML</strong>を生成してください。               <pre class="example"><code>&lt;h3&gt;プラグイン名&lt;/h3&gt;\r
-&lt;p&gt;追加フォームの内容&lt;/p&gt;</code></pre>\r
-               このようにして、正しい構造を保ちつつ複数のプラグインがオプションを保持できます。またフィールド名の重複を避けるためにプレフィックスを用いてください(例 <code>plug_tb_url</code>)。</td>\r
-               <td><dl>\r
-                       <dt class="ref obj">blog</dt>\r
-                       <dd><code>BLOG</code> オブジェクトへの参照</dd>\r
-                       <dt class="ro">variables</dt>\r
-                       <dd>\r
-                               (read-only) 編集されるアイテムに関する全ての情報を持つ連想配列: 'itemid',\r
-                                 'draft', 'closed', 'title', 'body', 'more', 'author', 'authorid',\r
-                                 'timestamp', 'karmapos', 'karmaneg', 'catid'\r
-                       </dd>                   \r
-                       <dt class="ro">itemid</dt>\r
-                       <dd>アイテム IDへのショートカット</dd>\r
-               </dl></td>              \r
-       </tr>                           \r
-       <tr>\r
-               <td>BlogSettingsFormExtras</td>\r
-               <td>(v2.0) blog設定ページにフォームを追加可能<br /><br />                        \r
-                       あまり多くのデータを追加しないこと。また以下のように<strong>正しいXHTML</strong>を生成してください。               <pre class="example"><code>&lt;h4&gt;プラグイン名&lt;/h4&gt;\r
-&lt;form method="post" action="..."&gt;&lt;p&gt;\r
-追加フォームの内容&lt;/p&gt;&lt;/form&gt;</code></pre>\r
-                       このようにして、正しい構造を保ちつつ複数のプラグインがオプションを保持できます。またフィールド名の重複を避けるためにプレフィックスを用いてください(例 <code>plug_tb_url</code>)。</td>\r
-               <td><dl>\r
-                       <dt class="obj ref">blog</dt>\r
-                       <dd><code>BLOG</code> オブジェクトへの参照</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PreDeleteItem</td>\r
-               <td>(v2.0) アイテムがデータベースから削除される直前</td>\r
-               <td><dl>\r
-                       <dt class="ro">itemid</dt>\r
-                       <dd>削除されるアイテムID</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PostDeleteItem</td>\r
-               <td>(v2.0) アイテムがデータベースから削除された直後</td>\r
-               <td><dl>\r
-                       <dt class="ro">itemid</dt>\r
-                       <dd>削除されたアイテムID</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PreDeleteCategory</td>\r
-               <td>(v2.0) カテゴリーがデータベースから削除される直前</td>\r
-               <td><dl>\r
-                       <dt class="ro">catid</dt>\r
-                       <dd>削除されるカテゴリー ID</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PostDeleteCategory</td>\r
-               <td>(v2.0) カテゴリーがデータベースから削除された直後</td>\r
-               <td><dl>\r
-                       <dt class="ro">catid</dt>\r
-                       <dd>削除されたカテゴリー ID</dd>\r
-               </dl></td>              \r
-       </tr>   \r
-       <tr>\r
-               <td>PreDeleteBlog</td>\r
-               <td>(v2.0) blogがデータベースから削除される直前</td>\r
-               <td><dl>\r
-                       <dt class="ro">blogid</dt>\r
-                       <dd>削除されるblogID</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PostDeleteBlog</td>\r
-               <td>(v2.0) blogがデータベースから削除された直後</td>\r
-               <td><dl>\r
-                       <dt class="ro">blogid</dt>\r
-                       <dd>削除されたblogID</dd>\r
-               </dl></td>              \r
-       </tr>   \r
-       <tr>\r
-               <td>PreDeleteMember</td>\r
-               <td>(v2.0) メンバーがデータベースから削除される直前</td>\r
-               <td><dl>\r
-                       <dt class="ref obj">member</dt>\r
-                       <dd><code>削除されるメンバーに関するMEMBER</code> オブジェクトへの参照</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PostDeleteMember</td>\r
-               <td>(v2.0) メンバーがデータベースから削除された直後</td>\r
-               <td><dl>\r
-                       <dt class="ref obj">member</dt>\r
-                       <dd><code>削除されるメンバーに関するMEMBER</code> オブジェクトへの参照</dd>\r
-               </dl></td>              \r
-       </tr>   \r
-       <tr>\r
-               <td>PreDeleteTeamMember</td>\r
-               <td>(v2.0) メンバーがweblogチームから削除される直前</td>\r
-               <td><dl>\r
-                       <dt class="ref obj">member</dt>\r
-                       <dd><code>MEMBER</code> オブジェクトへの参照</dd>\r
-                       <dt class="ro">blogid</dt>\r
-                       <dd>blogID</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PostDeleteTeamMember</td>\r
-               <td>(v2.0) メンバーがweblogチームから削除された直後</td>\r
-               <td><dl>\r
-                       <dt class="ref obj">member</dt>\r
-                       <dd><code>MEMBER</code> オブジェクトへの参照</dd>\r
-                       <dt class="ro">blogid</dt>\r
-                       <dd>blogID</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PreDeleteComment</td>\r
-               <td>(v2.0) コメントがデータベースから削除される直前</td>\r
-               <td><dl>\r
-                       <dt class="ro">commentid</dt>\r
-                       <dd>削除されるコメントID</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PostDeleteComment</td>\r
-               <td>(v2.0) コメントがデータベースから削除された直後</td>\r
-               <td><dl>\r
-                       <dt class="ro">commentid</dt>\r
-                       <dd>削除されたコメントID</dd>\r
-               </dl></td>              \r
-       </tr>           \r
-       <tr>\r
-               <td>ActionLogCleared</td>\r
-               <td>(v2.0) アクションログが消去された後</td>\r
-               <td>なし</td>         \r
-       </tr>\r
-       <tr>\r
-               <td>PreDeleteTemplate</td>\r
-               <td>(v2.0) テンプレートがデータベースから削除される直前</td>\r
-               <td><dl>\r
-                       <dt class="ro">templateid</dt>\r
-                       <dd>削除されるテンプレートID</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PostDeleteTemplate</td>\r
-               <td>(v2.0) テンプレートがデータベースから削除された直後</td>\r
-               <td><dl>\r
-                       <dt class="ro">templateid</dt>\r
-                       <dd>削除されたテンプレートID</dd>\r
-               </dl></td>              \r
-       </tr>           \r
-       <tr>\r
-               <td>PreDeleteSkin</td>\r
-               <td>(v2.0) スキンがデータベースから削除される直前</td>\r
-               <td><dl>\r
-                       <dt class="ro">skinid</dt>\r
-                       <dd>削除されるスキンID</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PostDeleteSkin</td>\r
-               <td>(v2.0) スキンがデータベースから削除された直後</td>\r
-               <td><dl>\r
-                       <dt class="ro">skinid</dt>\r
-                       <dd>削除されたスキンID</dd>\r
-               </dl></td>              \r
-       </tr>   \r
-       <tr>\r
-               <td>PreDeletePlugin</td>\r
-               <td>(v2.0) プラグインがデータベースから削除される直前</td>\r
-               <td><dl>\r
-                       <dt class="ro">plugid</dt>\r
-                       <dd>削除されるプラグインID</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PostDeletePlugin</td>\r
-               <td>(v2.0) プラグインがデータベースから削除された直後</td>\r
-               <td><dl>\r
-                       <dt class="ro">plugid</dt>\r
-                       <dd>削除されたプラグインID</dd>\r
-               </dl></td>              \r
-       </tr>           \r
-       <tr>\r
-               <td>PreDeleteBan</td>\r
-               <td>(v2.0) 禁止IPがデータベースから削除される直前</td>\r
-               <td><dl>\r
-                       <dt class="ro">blogid</dt>\r
-                       <dd>禁止IPが削除されるblogのID</dd>\r
-                       <dt class="ro">iprange</dt>\r
-                       <dd>禁止されたIPレンジ</dd>                     \r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PostDeleteBan</td>\r
-               <td>(v2.0) 禁止IPがデータベースから削除された直後</td>\r
-               <td><dl>\r
-                       <dt class="ro">blogid</dt>\r
-                       <dd>禁止IPが削除されたblogのID</dd>\r
-                       <dt class="ro">iprange</dt>\r
-                       <dd>禁止されたIPレンジ</dd>                     \r
-               </dl></td>              \r
-       </tr>                   \r
-       <tr>\r
-               <td>PreAddCategory</td>\r
-               <td>(v2.0) 新しいカテゴリーがデータベースに生成される直前</td>\r
-               <td><dl>\r
-                       <dt class="ref obj">blog</dt>\r
-                       <dd><code>BLOG</code> オブジェクトの参照</dd>\r
-                       <dt class="ref">name</dt>\r
-                       <dd>新しいカテゴリー名</dd>                    \r
-                       <dt class="ref">description</dt>\r
-                       <dd>新しいカテゴリーの説明</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PostAddCategory</td>\r
-               <td>(v2.0) 新しいカテゴリーがデータベースに生成された直後</td>\r
-               <td><dl>\r
-                       <dt class="ref obj">blog</dt>\r
-                       <dd><code>BLOG</code> オブジェクトへの参照</dd>\r
-                       <dt class="ro">name</dt>\r
-                       <dd>新しいカテゴリー名</dd>                    \r
-                       <dt class="ro">description</dt>\r
-                       <dd>新しいカテゴリーの説明</dd>\r
-                       <dt class="ro">catid</dt>\r
-                       <dd>新しいカテゴリー ID</dd>                    \r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PreAddBlog</td>\r
-               <td>(v2.0) 新しいblogが生成される直前</td>\r
-               <td><dl>\r
-                       <dt class="ref">name</dt>\r
-                       <dd>新しい blog名</dd>\r
-                       <dt class="ref">shortname</dt>\r
-                       <dd>新しい blogの短縮名</dd>\r
-                       <dt class="ref">timeoffset</dt>\r
-                       <dd>新しい blogのタイムオフセット</dd>\r
-                       <dt class="ref">description</dt>\r
-                       <dd>新しい blogの説明</dd>\r
-                       <dt class="ref">defaultskin</dt>\r
-                       <dd>新しいblogのデフォルトスキンのID</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PostAddBlog</td>\r
-               <td>(v2.0) 新しいblogが生成された直後</td>\r
-               <td><dl>\r
-                       <dt class="ref obj">blog</dt>\r
-                       <dd>新しい<code>BLOG</code> オブジェクト</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PreAddPlugin</td>\r
-               <td>(v2.0) プラグインが追加される直前</td>\r
-               <td><dl>\r
-                       <dt class="ref">file</dt>\r
-                       <dd>新しいプラグインのファイル名</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PostAddPlugin</td>\r
-               <td>(v2.0) プラグインが追加された直後</td>\r
-               <td><dl>\r
-                       <dt class="ref obj">plugin</dt>\r
-                       <dd>新しく追加されたプラグインのオブジェクト</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PreAddTeamMember</td>\r
-               <td>(v2.0) メンバーがblogチームに追加される直前</td>\r
-               <td><dl>\r
-                       <dt class="ref obj">blog</dt>\r
-                       <dd><code>BLOG</code> オブジェクト</dd>\r
-                       <dt class="ref obj">member</dt>\r
-                       <dd><code>MEMBER</code> オブジェクト</dd>\r
-                       <dt class="ref">admin</dt>\r
-                       <dd>新しく追加されたメンバーが管理権限を持っているかどうかを示すブール値</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PostAddTeamMember</td>\r
-               <td>(v2.0) メンバーがblogチームに追加された直後</td>\r
-               <td><dl>\r
-                       <dt class="ref obj">blog</dt>\r
-                       <dd><code>BLOG</code> オブジェクト</dd>\r
-                       <dt class="ref obj">member</dt>\r
-                       <dd><code>MEMBER</code> オブジェクト</dd>\r
-                       <dt class="ro">admin</dt>\r
-                       <dd>新しく追加されたメンバーが管理権限を持っているかどうかを示すブール値</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PreAddTemplate</td>\r
-               <td>(v2.0) 新しいテンプレートが生成される直前(注:テンプレートが複製されたときも呼ばれる)</td>\r
-               <td><dl>\r
-                       <dt class="ref">name</dt>\r
-                       <dd>新しいテンプレート名</dd>\r
-                       <dt class="ref">description</dt>\r
-                       <dd>新しいテンプレートの説明</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PostAddTemplate</td>\r
-               <td>(v2.0) 新しいテンプレートが生成された直後</td>\r
-               <td><dl>\r
-                       <dt class="ro">name</dt>\r
-                       <dd>新しいテンプレート名</dd>\r
-                       <dt class="ro">description</dt>\r
-                       <dd>新しいテンプレートの説明</dd>\r
-                       <dt class="ro">templateid</dt>\r
-                       <dd>新しいテンプレートID</dd>\r
-               </dl></td>              \r
-       </tr>   \r
-       <tr>\r
-               <td>PreAddSkin</td>\r
-               <td>(v2.0) 新しいスキンが生成される直前(注:スキンが複製されたときも呼ばれる)</td>\r
-               <td><dl>\r
-                       <dt class="ref">name</dt>\r
-                       <dd>新しいスキン名</dd>\r
-                       <dt class="ref">description</dt>\r
-                       <dd>新しいスキン名の説明</dd>\r
-                       <dt class="ref">type</dt>\r
-                       <dd>スキンのコンテントタイプ</dd>\r
-                       <dt class="ref">includeMode</dt>\r
-                       <dd>新しいスキンのインクルードモード</dd>\r
-                       <dt class="ref">includePrefix</dt>\r
-                       <dd>新しいスキンのインクルードプレフィックス</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PostAddSkin</td>\r
-               <td>(v2.0) 新しいスキンが生成された直後</td>\r
-               <td><dl>\r
-                       <dt class="ro">name</dt>\r
-                       <dd>新しいスキン名</dd>\r
-                       <dt class="ro">description</dt>\r
-                       <dd>新しいスキンの説明</dd>\r
-                       <dt class="ro">type</dt>\r
-                       <dd>スキンのコンテントタイプ</dd>\r
-                       <dt class="ro">includeMode</dt>\r
-                       <dd>新しいスキンのインクルードモード</dd>\r
-                       <dt class="ro">includePrefix</dt>\r
-                       <dd>新しいスキンのインクルードプレフィックス</dd>\r
-                       <dt class="ro">skinid</dt>\r
-                       <dd>新しいスキンID</dd>\r
-               </dl></td>              \r
-       </tr>           \r
-       <tr>\r
-               <td>PreAddBan</td>\r
-               <td>(v2.0) 新しい禁止IPが追加される直前</td>\r
-               <td><dl>\r
-                       <dt class="ref">blogid</dt>\r
-                       <dd>blogID</dd>\r
-                       <dt class="ref">iprange</dt>\r
-                       <dd>禁止されたIPレンジ</dd>\r
-                       <dt class="ref">reason</dt>\r
-                       <dd>禁止された理由を記述したテキストメッセージ</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PostAddBan</td>\r
-               <td>(v2.0) 新しい禁止IPが追加された直後</td>\r
-               <td><dl>\r
-                       <dt class="ro">blogid</dt>\r
-                       <dd>blogID</dd>\r
-                       <dt class="ro">iprange</dt>\r
-                       <dd>禁止されたIPレンジ</dd>\r
-                       <dt class="ro">reason</dt>\r
-                       <dd>禁止された理由を記述したテキストメッセージ</dd>\r
-               </dl></td>              \r
-       </tr>           \r
-\r
-       <tr>\r
-               <td>PreMoveItem</td>\r
-               <td>(v2.0) アイテムが他のblog/カテゴリーに移される直前</td>\r
-               <td><dl>\r
-                       <dt class="ref">itemid</dt>\r
-                       <dd>アイテムID</dd>\r
-                       <dt class="ref">destblogid</dt>\r
-                       <dd>移動先のblogID</dd>\r
-                       <dt class="ref">destcatid</dt>\r
-                       <dd>移動先のカテゴリーID</dd>                  \r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PostMoveItem</td>\r
-               <td>(v2.0) アイテムが他のblog/カテゴリーに移された直後</td>\r
-               <td><dl>\r
-                       <dt class="ro">itemid</dt>\r
-                       <dd>アイテムID</dd>\r
-                       <dt class="ro">destblogid</dt>\r
-                       <dd>新しいblogID</dd>\r
-                       <dt class="ro">destcatid</dt>\r
-                       <dd>新しいカテゴリーID</dd>     \r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PreMoveCategory</td>\r
-               <td>(v2.0) カテゴリーが他のblogに移される直前</td>\r
-               <td><dl>\r
-                       <dt class="ref">catid</dt>\r
-                       <dd>カテゴリーID</dd>\r
-                       <dt class="ref obj">sourceblog</dt>\r
-                       <dd>移動元の<code>BLOG</code> オブジェクト</dd>\r
-                       <dt class="ref obj">destblog</dt>\r
-                       <dd>移動先の<code>BLOG</code> オブジェクト</dd>                       \r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>PostMoveCategory</td>\r
-               <td>(v2.0) カテゴリーが他のblogに移された直後</td>\r
-               <td><dl>\r
-                       <dt class="ro">catid</dt>\r
-                       <dd>カテゴリーID</dd>\r
-                       <dt class="ref obj">sourceblog</dt>\r
-                       <dd>移動元の<code>BLOG</code> オブジェクト</dd>\r
-                       <dt class="ref obj">destblog</dt>\r
-                       <dd>移動先の<code>BLOG</code> オブジェクト</dd>                       \r
-               </dl></td>              \r
-       </tr>   \r
-       <tr>\r
-               <td>MemberSettingsFormExtras</td>\r
-               <td>(v2.0) メンバー設定ページにフォームを追加可能<br /><br />                        \r
-                       あまり多くのデータを追加しないこと。また以下のように<strong>正しいXHTML</strong>を生成してください。\r
-            <pre class="example"><code>&lt;h4&gt;プラグイン名&lt;/h4&gt;\r
-&lt;form method="post" action="..."&gt;&lt;p&gt;\r
-追加フォームの内容&lt;/p&gt;&lt;/form&gt;</code></pre>\r
-このようにして、正しい構造を保ちつつ複数のプラグインがオプションを保持できます。またフィールド名の重複を避けるためにプレフィックスを用いてください(例 <code>plug_tb_url</code>)。</td>\r
-               <td><dl>\r
-                       <dt class="ref obj">member</dt>\r
-                       <dd><code>MEMBER</code> オブジェクトへの参照</dd>\r
-               </dl></td>              \r
-       </tr>\r
-       <tr>\r
-               <td>GeneralSettingsFormExtras</td>\r
-               <td>(v2.0) 一般設定ページにフォームを追加可能<br />\r
-                 <br />\r
-あまり多くのデータを追加しないこと。また以下のように<strong>正しいXHTML</strong>を生成してください。\r
-<pre class="example"><code>&lt;h4&gt;プラグイン名&lt;/h4&gt;\r
-&lt;form method="post" action="..."&gt;&lt;p&gt;\r
-追加フォームの内容&lt;/p&gt;&lt;/form&gt;</code></pre>\r
-このようにして、正しい構造を保ちつつ複数のプラグインがオプションを保持できます。またフィールド名の重複を避けるためにプレフィックスを用いてください(例 <code>plug_tb_url</code>)。</td>\r
-               <td>なし</td>         \r
-       </tr>\r
-       <tr>\r
-               <td>AdminPrePageHead</td>\r
-               <td>(v2.5) 管理画面で、ページヘッドを出力する直前。このイベントはヘッド領域にスクリプトやCSSを追加するのに用いられます。</td>\r
-               <td><dl>\r
-                       <dt class="ref">extrahead</dt>\r
-                       <dd>HTMLページのヘッド領域に埋め込まれる追加情報。ここに追加したいものを入れてください。</dd>\r
-                       <dt class="ro">action</dt>\r
-                       <dd>現在実行されているアクション、またはページタイプ</dd>\r
-               </dl></td>\r
-       </tr>\r
-       <tr>\r
-               <td>AdminPrePageFoot</td>\r
-               <td>(v2.5) 管理画面で、ページフッターを出力する直前。</td>\r
-         <td><dl>\r
-                       <dt class="ro">action</dt>\r
-                       <dd></dd>\r
-               </dl>\r
-           現在実行されているアクション、またはページタイプ</td>\r
-       </tr>\r
-       <tr>\r
-               <td>PreSendContentType</td>\r
-               <td>(v2.5) HTTPヘッダーにコンテントタイプがセットされる直前</td>\r
-               <td><dl>\r
-                       <dt class="ref">contentType</dt>\r
-                       <dd>コンテントタイプ(<code>application/xhtml+xml</code>など)</dd>\r
-                       <dt class="ref">charset</dt>\r
-                       <dd>キャラクターセット</dd>\r
-                       <dt class="ro">pageType</dt>\r
-                       <dd>表示するページの種類を示す文字列:<code>skin</code> (スキンタイプ), <code>media</code> (メディアライブラリ), <code>admin-<em>action</em></code> (管理エリア), <code>bookmarklet-<em>action</em></code> (ブックマークレット)</dd>\r
-               </dl></td>\r
-       </tr>\r
-       <tr>\r
-               <td>QuickMenu</td>\r
-               <td>(v2.5) 管理エリアのクイックメニューの一番下。そこへのプラグイン登録に利用されます。登録するにはoptionsに連想配列を入れます。実装例が<a href="#admin">プラグイン管理エリアを作る</a>のセクションにあります。</td>\r
-               <td><dl>\r
-                       <dt class="ref">options</dt>\r
-                       <dd>配列</dd>\r
-               </dl></td>\r
-       </tr>\r
-       <tr>\r
-               <td>BookmarkletExtraHead</td>\r
-               <td>(v2.5) ブックマークレット\r
-         XHTMLコードのヘッド領域内。</td>\r
-               <td><dl>\r
-                       <dt class="ref">extrahead</dt>\r
-                       <dd>XHTMLコードのヘッド領域に埋め込まれる追加情報。ここに追加したいものを入れてください。</dd>\r
-               </dl></td>\r
-       </tr>\r
-       <tr>\r
-               <td>FormExtra</td>\r
-               <td>(v3.2) このイベントは、プラグインがコメント、メンバー間メール、認証フォームのいずれかのフォーム内に追加フィールドを挿入するときに使います。フォーム処理の際に発生する <code>ValidateForm</code> イベントに対応します。</td>\r
-               <td><dl>\r
-                       <dt class="ro">type</dt>\r
-                       <dd>イベントを発生させるフォームタイプ\r
-                               <ul>\r
-                                       <li><code>activation</code></li>\r
-                                       <li><code>additemform</code> (注:これは管理画面のアイテム追加フォームではない)</li>\r
-                                       <li><code>commentform-loggedin</code></li>\r
-                                       <li><code>commentform-notloggedin</code></li>\r
-                                       <li><code>membermailform-loggedin</code></li>\r
-                                       <li><code>membermailform-notloggedin</code></li>\r
-                               </ul>\r
-                       </dd>\r
-                       <dt class="ro obj">member</dt>\r
-                       <dd><code>type</code> が <code>activation</code>のとき、このフィールドは認証メンバーの詳細情報を含みます</dd>\r
-               </dl></td>\r
-       </tr>\r
-       <tr>\r
-               <td>ValidateForm</td>\r
-               <td>(v3.2) コメント、メンバー間メール、アカウント認証のいずれかが処理されるときに呼ばれます。プラグインはこれで各データの評価を実行でき、もし不具合があれば処理を中断できます。<code>FormExtra</code> と共に使うとフォームにフィールドを追加できます。</td>\r
-               <td><dl>\r
-                       <dt class="ro">type</dt>\r
-                       <dd>処理されるフォームタイプ\r
-                               <ul>\r
-                                       <li><code>membermail</code></li>\r
-                                       <li><code>comment</code></li>\r
-                                       <li><code>activation</code></li>\r
-                               </ul>\r
-                       </dd>\r
-                       <dt class="ref">error</dt>\r
-                       <dd>フォーム処理をストップするときに、<code>error</code> フィールドに空でないエラーメッセージを記入します。このエラーメッセージはユーザー側に表示されます。</dd>\r
-                       <dt class="ref">comment</dt>\r
-                       <dd>コメントフォームのとき、コメントデータに関する連想配列を含みます。</dd>\r
-                       <dt class="ro obj">member</dt>\r
-                       <dd>認証フォームのとき、認証中のメンバー情報を含みます。</dd>\r
-               </dl></td>\r
-       </tr>\r
-<!--\r
-       <tr>\r
-               <td></td>\r
-               <td></td>\r
-               <td><dl>\r
-                       <dt></dt>\r
-                       <dd></dd>\r
-               </dl></td>\r
-       </tr>\r
-       <tr>\r
-               <td></td>\r
-               <td></td>\r
-               <td><dl>\r
-                       <dt></dt>\r
-                       <dd></dd>\r
-               </dl></td>\r
-       </tr>\r
-       <tr>\r
-               <td></td>\r
-               <td></td>\r
-               <td><dl>\r
-                       <dt></dt>\r
-                       <dd></dd>\r
-               </dl></td>\r
-       </tr>\r
-       <tr>\r
-               <td></td>\r
-               <td></td>\r
-               <td><dl>\r
-                       <dt></dt>\r
-                       <dd></dd>\r
-               </dl></td>\r
-       </tr>\r
-       <tr>\r
-               <td></td>\r
-               <td></td>\r
-               <td><dl>\r
-                       <dt></dt>\r
-                       <dd></dd>\r
-               </dl></td>\r
-       </tr>\r
-       <tr>\r
-               <td></td>\r
-               <td></td>\r
-               <td><dl>\r
-                       <dt></dt>\r
-                       <dd></dd>\r
-               </dl></td>\r
-       </tr>\r
-       <tr>\r
-               <td></td>\r
-               <td></td>\r
-               <td><dl>\r
-                       <dt></dt>\r
-                       <dd></dd>\r
-               </dl></td>\r
-       </tr>\r
-       <tr>\r
-               <td></td>\r
-               <td></td>\r
-               <td><dl>\r
-                       <dt></dt>\r
-                       <dd></dd>\r
-               </dl></td>\r
-       </tr> -->\r
-</table>\r
-\r
-\r
-\r
-<h1>オプションを保存する<a name="options" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
-\r
-<p>プラグインに簡単にオプションを登録・取得できるように一連のメソッドが用意されています。これらのオプションは直接Nucleusの管理エリアで編集でき、プラグイン自身の管理エリアを用意する必要もなく、PHPファイルそのものの中にオプションの値を書き込まずにすみます。</p>\r
-\r
-<p>オプションは異なったコンテクストで利用可能です。</p>\r
-\r
-<ol>\r
-       <li><strong>グローバルオプション</strong>:管理エリアのプラグインセクションで編集可能</li>\r
-       <li><strong>blogオプション</strong>:blog設定ページで編集可能</li>\r
-       <li><strong>カテゴリーオプション</strong>:blog設定ページ(のカテゴリー編集ページ)で編集可能</li>    \r
-       <li><strong>メンバーオプション</strong>:メンバー編集ページで編集可能</li>\r
-       <li><strong>アイテムオプション</strong>:アイテムの追加、およびアイテムの編集ページで編集可能</li>\r
-</ol>\r
-\r
-<h2>オプションの種類</h2>\r
-\r
-<p>オプションにはいくつかのタイプが提供されています。</p>\r
-\r
-<dl>\r
-       <dt>text</dt>\r
-       <dd>シンプルなテキスト</dd>\r
-       <dt>yesno</dt>\r
-       <dd>'yes'か'no'どちらか(編集画面ではラジオボタンとして表示されます)</dd>\r
-       <dt>password</dt>\r
-       <dd>テキストフィールド (編集画面では伏字で表示されます)</dd>\r
-       <dt>textarea (v2.2)</dt>\r
-       <dd>複数行のテキストフィールド</dd>\r
-       <dt>select (v2.2)</dt>\r
-       <dd>ドロップダウンメニュー。次のような形式の追加情報が必要です: Option 1|value1|Option 2|value2|Option 3|value3 </dd>\r
-</dl>\r
-\r
-<h2>オプション・メタ</h2>\r
-\r
-<p>Nucleus v3.2よりオプション・メタデータを用いて、オプションタイプを正しい値を受け取れるように制限できるようになりました。このメタデータは <code>$typeExtras</code>フィールドにセミコロン区切りのリストで保存されます。注:selectオプションでは、selectリストは<code>$typeExtras</code>のなかで一番最初でなければいけません。</p>\r
-\r
-<table><tr>\r
-       <th>キー</th>\r
-       <th>説明</th>\r
-</tr><tr>\r
-       <td><code>datatype</code></td>\r
-       <td>Nucleus本体に、どのデータ型を使いたいかという追加情報を与えます。現在は '<code>numerical</code>' のみ利用できます。 '<code>numerical</code>' を指定することでNucleusは数値情報のみを受け付けます(クライアントサイド・サーバサイド両方でチェック) ('<code>select</code>' と '<code>text</code>'のオプションタイプで利用できます)</td>\r
-</tr><tr>\r
-       <td><code>access</code></td>\r
-       <td>'<code>readonly</code>'にセットすることで、オプションを編集不可能にします('<code>text</code>' と '<code>textarea</code>'のオプションタイプで利用できます)<br />\r
-       '<code>hidden</code>'を使うと、利用者側にそのオプションの存在を完全に隠蔽します('<code>text</code>'のオプションタイプで利用できます)</td>\r
-</tr></table>\r
-\r
-<p>設定例</p>\r
-<pre class="example"><code>// 数値のみを受け付けるテキストオプションを作成\r
-$this->createBlogOption('FooBar', 'foobar', 'text', '0', 'datatype=numerical');\r
-// 数値のみを受け付けるセレクトオプションを作成\r
-$this->createItemOption('FooBar', 'foobar', 'select', '0', '0|0|1|1|2|2;datatype=numerical');\r
-// 編集不可能なテキストエリアオプションを作成\r
-$this->createOption('FooBar', 'foobar', 'textarea', 'This textarea is readonly', 'access=readonly');\r
-</code></pre>\r
-\r
-<h2>制限</h2>\r
-\r
-<ol>\r
-       <li>オプション名は最大20文字です。</li>\r
-       <li>オプションの説明文は最大255文字です。</li>\r
-       <li>オプションの値は制限ありません(v2.2より前のバージョンでは128文字の制限がありました)</li>\r
-       <li>'=', '|', ';' のキャラクターはセレクトオプション用のセレクトリストやオプション・メタデータ中で使用することはできません。</li>\r
-</ol>\r
-\r
-<h2>メソッド</h2>\r
-\r
-<h3>createOption($name, $desc, $type, $defValue = '', $typeExtras = '')</h3>\r
-\r
-<p><strong>グローバル</strong>なコンテクストで新しいオプションを生成します。</p>\r
-\r
-<table><tr>\r
-       <th>パラメータ</th>\r
-       <th>値</th>\r
-</tr><tr>\r
-       <td>$name</td>\r
-       <td>オプション名</td>\r
-</tr><tr>\r
-       <td>$desc</td>\r
-       <td>オプション編集画面で表示される説明文</td>\r
-</tr><tr>\r
-       <td>$type</td>\r
-       <td>オプションタイプ(前出)</td>\r
-</tr><tr>\r
-       <td>$defValue</td>\r
-       <td>初期値</td>\r
-</tr><tr>\r
-       <td>$typeExtras</td>\r
-       <td>オプションタイプの追加情報(前出)</td>\r
-</tr></table>\r
-\r
-<h3>[v2.2] createBlogOption($name, $desc, $type, $defValue = '', $typeExtras = '')</h3>\r
-\r
-<p><strong>blog</strong>のコンテクストで新しいオプションを生成します(<code>createOption</code>を参照)。</p>\r
-\r
-<h3>[v2.2] createCategoryOption($name, $desc, $type, $defValue = '', $typeExtras = '')</h3>\r
-\r
-<p><strong>カテゴリー</strong>のコンテクストで新しいオプションを生成します(<code>createOption</code>を参照)。</p>\r
-\r
-<h3>[v2.2] createMemberOption($name, $desc, $type, $defValue = '', $typeExtras = '')</h3>\r
-\r
-<p><strong>メンバー</strong>のコンテクストで新しいオプションを生成します(<code>createOption</code>を参照)。</p>\r
-\r
-<h3>[v3.2] createItemOption($name, $desc, $type, $defValue = '', $typeExtras = '')</h3>\r
-\r
-<p><strong>アイテム</strong>のコンテクストで新しいオプションを生成します(<code>createOption</code>を参照)。</p>\r
-\r
-<h3>setOption($name, $value)</h3>\r
-\r
-<p>すでにデータベースに存在するオプションの値を変更します。</p>\r
-\r
-<table><tr>\r
-       <th>パラメータ</th>\r
-       <th>値</th>\r
-</tr><tr>              \r
-       <td>$name</td>\r
-       <td>オプション名</td>\r
-</tr><tr>\r
-       <td>$value</td>\r
-       <td>新しい値</td>\r
-</tr></table>\r
-\r
-<h3>[v2.2] setBlogOption($blogid, $name, $value)</h3>\r
-\r
-<p>blogオプションの値を変更します。<code>blogid</code>属性はどのblogでそのオプションが有効かを示します(その他のオプション:<code>setOption</code>を参照)。</p>\r
-\r
-<h3>[v2.2] setCategoryOption($catid, $name, $value)</h3>\r
-\r
-<p>カテゴリーオプションの値を変更します。<code>catid</code>属性はどのカテゴリーでそのオプションが有効かを示します(その他のオプション:<code>setOption</code>を参照)。</p>\r
-\r
-<h3>[v2.2] setMemberOption($memberid, $name, $value)</h3>\r
-\r
-<p>メンバーオプションの値を変更します。<code>memberid</code>属性はどのメンバーでそのオプションが有効かを示します(その他のオプション:<code>setOption</code>を参照)。</p>\r
-\r
-<h3>[v3.2] setItemOption($itemid, $name, $value)</h3>\r
-\r
-<p>アイテムオプションの値を変更します。<code>itemid</code>属性はどのアイテムでそのオプションが有効かを示します(その他のオプション:<code>setOption</code>を参照)。</p>\r
-\r
-<h3>getOption($name)</h3>\r
-\r
-<p>データベース内のオプションの値を返します。</p>\r
-\r
-<table><tr>\r
-       <th>パラメータ</th>\r
-       <th>値</th>\r
-</tr><tr>              \r
-       <td>$name</td>\r
-       <td>オプション名</td>\r
-</tr></table>\r
-\r
-<h3>[v2.2] getBlogOption($blogid, $name)</h3>\r
-\r
-<p>blogオプションの値を返します。<code>blogid</code>属性は値がリスエストされたblogを示します(その他のオプション:<code>getOption</code>を参照)。</p>\r
-\r
-<h3>[v2.2] getCategoryOption($catid, $name)</h3>\r
-\r
-<p>カテゴリーオプションの値を返します。<code>catid</code>属性は値がリスエストされたカテゴリーを示します(その他のオプション:<code>getOption</code>を参照)。<br />\r
-</p>\r
-\r
-<h3>[v2.2] getMemberOption($memberid, $name)</h3>\r
-\r
-<p>メンバーオプションの値を返します。<code>memberid</code>属性は値がリスエストされたメンバーを示します(その他のオプション:<code>getOption</code>を参照)。</p>\r
-\r
-<h3>[v3.2] getItemOption($itemid, $name)</h3>\r
-\r
-<p>アイテムオプションの値を返します。<code>itemid</code>属性は値がリスエストされたアイテムを示します(その他のオプション:<code>getOption</code>を参照)。</p>\r
-\r
-<h3>deleteOption($name)</h3>\r
-\r
-<p>データベースからオプションを削除します。</p>\r
-\r
-<table><tr>\r
-       <th>パラメータ</th>\r
-       <th>値</th>\r
-</tr><tr>              \r
-       <td>$name</td>\r
-       <td>オプション名</td>\r
-</tr></table>\r
-\r
-<h3>[v2.2] deleteBlogOption($name)</h3>\r
-\r
-<p>blogオプションを削除します(<code>deleteOption</code>を参照)。</p>\r
-\r
-<h3>[v2.2] deleteCategoryOption($name)</h3>\r
-\r
-<p>カテゴリーオプションを削除します(<code>deleteOption</code>を参照)。</p>\r
-\r
-<h3>[v2.2] deleteMemberOption($name)</h3>\r
-\r
-<p>メンバーオプションを削除します(<code>deleteOption</code>を参照)。</p>\r
-\r
-<h3>[v3.2] deleteItemOption($name)</h3>\r
-\r
-<p>アイテムオプションを削除します(<code>deleteOption</code>を参照)。</p>\r
-\r
-<h3>[v2.2] getAllBlogOptions($name)</h3>\r
-\r
-<p>与えられたblogオプションの全ての値を返します。結果は存在するblogidごとの連想配列です。</p>\r
-\r
-<h3>[v2.2] getAllCategoryOptions($name)</h3>\r
-\r
-<p>与えられたカテゴリーオプションの全ての値を返します。結果は存在するcatidごとの連想配列です。</p>\r
-\r
-<h3>[v2.2] getAllMemberOptions($name)</h3>\r
-\r
-<p>与えられたメンバーオプションの全ての値を返します。結果は存在するmemberidごとの連想配列です。</p>\r
-\r
-<h3>[v3.2] getAllItemOptions($name)</h3>\r
-\r
-<p>与えられたアイテムオプションの全ての値を返します。結果は存在するitemidごとの連想配列です。</p>\r
-\r
-<h3>[v3.2] getBlogOptionTop($name, $amount = 10, $sort = 'desc')</h3>\r
-\r
-<p>与えられたオプションの最初の値を返します。結果は配列で、各要素がそれぞれのblogid ('id') の値 ('value') を持つ配列になっています。</p>\r
-\r
-<table><tr>\r
-       <th>パラメータ</th>\r
-       <th>値</th>\r
-</tr><tr>\r
-       <td>$name</td>\r
-       <td>オプション名</td>\r
-</tr><tr>\r
-       <td>$amount</td>\r
-       <td>必要なオプション数</td>\r
-</tr><tr>\r
-       <td>$sort</td>\r
-       <td>昇順 ('asc') か降順 ('desc') で並べ替え</td>\r
-</tr></table>\r
-\r
-<h3>[v3.2] getMemberOptionTop($name, $amount = 10, $sort = 'desc')</h3>\r
-\r
-<p>与えられたオプションの最初の値を返します。結果は配列で、各要素がそれぞれのメンバーID ('id') の値 ('value') を持つ配列になっています(パラメータは<code>getBlogOptionTop</code>を参照)。</p>\r
-\r
-<h3>[v3.2] getCategoryOptionTop($name, $amount = 10, $sort = 'desc')</h3>\r
-\r
-<p>与えられたオプションの最初の値を返します。結果は配列で、各要素がそれぞれのカテゴリーID ('id') の値 ('value') を持つ配列になっています(パラメータは<code>getBlogOptionTop</code>を参照)。</p>\r
-\r
-\r
-<h3>[v3.2] getItemOptionTop($name, $amount = 10, $sort = 'desc')</h3>\r
-\r
-<p>与えられたオプションの最初の値を返します。結果は配列で、各要素がそれぞれのアイテムID ('id') の値 ('value') を持つ配列になっています(パラメータは<code>getBlogOptionTop</code>を参照)。</p>\r
-\r
-\r
-<div class="note">\r
-<b>注:</b> プラグインクラス内のコンストラクタから、これらのファンクションを呼ぶことはできません。プラグインがロードされた後にこれらを実行したいときは、かわりに<code>init()</code>メソッド内に置きます。</div>\r
-\r
-<h1>データベース・テーブル<a name="tables" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
-\r
-<h2>Nucleusテーブルへのアクセス</h2>\r
-\r
-<p>v2.0まで、Nucleusテーブルへのアクセスは単に<code>nucleus_</code>と名づけられたテーブルに対してSQL命令を実行するだけのものでした。Nucleusのバージョン2.2以降はカスタム・テーブル名を利用できるようになったため、プラグイン開発に若干注意する必要があります。</p>\r
-\r
-<ol>\r
-       <li><code>nucleus_item</code> などの固定されたテーブル名の代わりに、テーブル名のプレフィックスを生成するために <code>sql_table('item') </code>というグローバルファンクションを利用します。</li>\r
-       <li><code>supportsFeature('SqlTablePrefix')</code> が呼ばれたときにプラグインが1(真)を返すようにします。これがないと、カスタムプレフィックスがセットされている場合でバージョンが2.0より大きいNucleusではプラグインをロードできません(用心のため)。</li>\r
-</ol>\r
-\r
-<p class="note">v2.0までのNucleusではグローバルファンクション <code>sql_table</code> は利用できないことに注意してください。もしこのメソッドを用いつつ、プラグインをv2.0以下のNucleusで動作させたい場合は、以下のコードをプラグインクラスの前に追加してください。</p>\r
-\r
-<pre class="example"><code>&lt;?\r
-\r
-// プラグインがNucleusバージョン2.0以下と互換性を持つために必要\r
-if (!function_exists('sql_table'))\r
-{\r
-       function sql_table($name) {\r
-               return 'nucleus_' . $name;\r
-       }\r
-}\r
-\r
-class NP_HelloWorld extends NucleusPlugin {\r
-...\r
-}\r
-\r
-?&gt;</code></pre>\r
-\r
-<h2>独自テーブル</h2>\r
-\r
-<p>もしプラグイン独自のテーブルが必要なら、<code>install</code>メソッドの中で独自テーブルを生成し、<code>unInstall</code>メソッドの中でそれを削除するようにします。</p>\r
-\r
-<p>いくつかの注意点</p>\r
-<ul>\r
-       <li><code>nucleus_plug_<em>plugname</em></code> のように、他のプラグインと競合しないテーブル名を考えてください。カスタムプレフィックスに対応するため、テーブル名を\r
-       <code>sql_table('plug_plugname')</code> で生成してください。\r
-       </li>\r
-       <li>自分自身でデータベース接続をする必要はありません。PHPコマンド <code>mysql_query()</code> を使ってSQL命令を実行できます。</li>\r
-       <li>自分でデータベース接続をする場合、後でNucleusデータベースへの接続を復元するようにしてください。自前処理の後で <code>sql_connect()</code>  を呼ぶことで可能です。頻繁な再接続を避けるために、コンストラクタでそれを行うのも良いです。<code>$this- &gt;db</code>のリンクIDを保持でき、各クエリにそれを渡すことができます。</li>\r
-       <li>バックアップ機能を使う時は、独自テーブルもバックアップに含めるよう、<code>getTableList()</code> を再定義してください。</li>\r
-</ul>\r
-\r
-<h1>プラグイン管理エリア<a name="admin" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
-\r
-<p>Ver2.5から、Nucleusの管理エリアに統合されたプラグイン管理エリアを作成できます。これらのページは従来のプラグイン管理ページや左側のクイックメニューからアクセスできます。</p>\r
-\r
-<h2>基本</h2>\r
-\r
-<p>管理エリアを提供するには、次のステップが必要です。</p>\r
-\r
-<ol>\r
-  <li>プラグインディレクトリに<strong>プラグイン名</strong>のサブディレクトリを作ります。たとえばプラグイン名が<code>NP_PluginName</code>なら、'pluginname'です。ディレクトリ名はすべて小文字で!</li>\r
-  <li>\r
-       そのディレクトリで、次のような<strong>index.php</strong>を用意します。\r
-       <pre><code>&lt;?php\r
-\r
-       // if your 'plugin' directory is not in the default location,\r
-       // edit this variable to point to your site directory\r
-       // (where config.php is)\r
-       $strRel = '../../../';\r
-\r
-       include($strRel . 'config.php');\r
-       if (!$member->isLoggedIn())\r
-               doError('You¥'re not logged in.');\r
-\r
-       include($DIR_LIBS . 'PLUGINADMIN.php');\r
-\r
-       // create the admin area page\r
-       $oPluginAdmin = new PluginAdmin('<strong>PluginName</strong>');\r
-       $oPluginAdmin->start();\r
-\r
-       echo '&lt;h2&gt;プラグイン名&lt;/h2&gt;';\r
-\r
-       echo '&lt;p&gt;<strong>ページ内容</strong>&lt;p&gt;';\r
-\r
-       $oPluginAdmin->end();\r
-\r
-?&gt;</code></pre>\r
-  </li>\r
-  <li>\r
-       プラグイン側に次のコードを挿入し、クイックメニューイベントに登録します。\r
-    <pre><code>function event_QuickMenu(&amp;$data) {\r
-               array_push(\r
-                       $data['options'],\r
-                       array(\r
-                               'title' => '<strong>プラグイン名</strong>',\r
-                               'url' => $this->getAdminURL(),\r
-                               'tooltip' => '<strong>ツールチップテキスト</strong>'\r
-                       )\r
-               );\r
-       }</code></pre>\r
-  </li>\r
-  <li>\r
-       プラグイン側に次の関数を記述します。\r
-    <pre><code>function hasAdminArea()\r
-{\r
-       return 1;\r
-}</code></pre>\r
-  </li>\r
-</ol>\r
-\r
-<h2>考慮すること</h2>\r
-\r
-<ul>\r
- <li>登録できるからといって安易にクイックメニューへ登録しないこと。クイックメニューにプラグインが100個並んだりしたらかなりウンザリするでしょう。ですので、クイックメニューに登録する場合でも、クイックメニュー登録を有効・無効化するプラグインオプションを(グローバルまたはメンバーオプションで)用意することを考えてください。</li>\r
- <li><code>プラグインディレクトリが nucleus/plugins/ ではない場合は、index.php内の $strRel</code> 変数は手動で書き換える必要があります。</li>\r
- <li>管理エリアのアウトプットが<strong>正しいXHTML</strong>になっているか確認してください。正しくないと、MozillaなどのGeckoベースのブラウザでページ表示が崩れます。</li>\r
-</ul>\r
-\r
-<h2>PluginAdmin クラス</h2>\r
-\r
-<p><code>PluginAdmin</code> クラスは助けになります。これを一度生成すれば、<code>$oPluginAdmin->plugin</code> でプラグインのインスタンスにアクセスできます。</p>\r
-\r
-<h1>プラグイン用ヘルプページ <a name="help" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
-\r
-<p>Nucleus v3.2から、プラグインの機能の概要、利用できるスキン・テンプレート変数、さらに詳細な情報のありかなどを示すヘルプページを提供可能になりました。</p>\r
-\r
-<p>ヘルプページは管理画面のプラグイン一覧からアクセス可能になります。</p>\r
-\r
-<h2>基本</h2>\r
-<p>ヘルプページを提供するために、次のステップが必要です。</p>\r
-<ol>\r
-<li>プラグインディレクトリに、プラグイン名をつけたサブディレクトリを作成します。ディレクトリ名は小文字であることに注意します。<a href="#admin">管理エリア</a>を作るときと同様です。</li>\r
-<li>そのディレクトリの中に help.html を作り、プラグインについての文章を記述します。次の雛型からはじめると良いでしょう。\r
-<pre><code>&lt;h3&gt;プラグインの概要&lt;/h3&gt;\r
-\r
-&lt;p&gt;このプラグインはヘルプページがいかに機能するかを示すためだけのものです&lt;/p&gt;\r
-\r
-&lt;h3&gt;インストール&lt;/h3&gt;\r
-\r
-&lt;p&gt;これを読めてるならインストールは正しく出来てます :-)&lt;/p&gt;\r
-\r
-&lt;h3&gt;スキン変数&lt;/h3&gt;\r
-\r
-&lt;p&gt;このプラグインはただのテストケースなのでスキン・テンプレート変数はありませんが、書くとすれば。\r
-\r
-&lt;ul&gt;&lt;li&gt;&lt;b&gt;&lt;%HelpPageTestCase1%&gt;&lt;/b&gt;: なにかをする&lt;/li&gt;\r
-&lt;li&gt;&lt;b&gt;&lt;%HelpPageTestCase1(foobar)%&gt;&lt;/b&gt;: 別のなにかをする&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;\r
-\r
-&lt;h3&gt;サポートとバグ報告&lt;/h3&gt;\r
-\r
-&lt;p&gt;さらなるサポートやバグ報告のために、次のフォーラムのスレッドを利用してください。\r
-&lt;a href="http://forum.nucleuscms.org/viewtopic.php?t=&lt;トピックID&gt;"&gt;\r
-http://forum.nucleuscms.org/viewtopic.php?t=&lt;トピックID&gt;&lt;/a&gt;&lt;/p&gt;\r
-\r
-&lt;h3&gt;バージョン履歴&lt;/h3&gt;\r
-\r
-&lt;ul&gt;&lt;li&gt;Version 0.1: 最初のテストケースバージョン&lt;/li&gt;\r
-&lt;li&gt;Version 0.0: その前のバージョン ;-)&lt;/li&gt;&lt;/ul&gt;</code></pre>\r
-</li>\r
-<li>supportsFeature('HelpPage') で0より大きい数字を返すように設定します。\r
-<pre><code>function supportsFeature($what) {\r
-       switch($what) {\r
-       case 'HelpPage':\r
-               return 1;\r
-         default:\r
-               return 0;\r
-       }\r
-  }</code></pre>\r
-</li>\r
-</ol>\r
-\r
-<h1>プラグイン依存チェック <a name="dependency" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>\r
-\r
-<p>v3.2から、他のプラグインとの依存関係を宣言する新しいプラグインインターフェイスが追加されました。他のプラグインの機能を必要とするプラグインに利用できます。特に依存関係が成立しなくて正しく機能しない状態を検知するときに便利です。</p>\r
-\r
-<h2>この機能を利用するプラグインの書き方</h2>\r
-\r
-<p>現実世界での例からはじめましょう。</p>\r
-\r
-<p>NP_PageLinkList は NP_BlogWithOffset の機能を利用するため、利用者には NP_BlogWithOffset のインストール後に NP_PageLinkList をインストールさせたいとします。NucleusはこのAPIによって、インストール前に依存関係を検知させる方法をプラグインに提供します。</p>\r
-\r
-<p>このケースでは、NP_PageLinkList 側に NP_BlogWithOffset が必要だということを認識させるコードを埋め込みます。プラグインがインストールされる際に、Nucleusコアは <code>getPluginDep()</code> というファンクションを呼び出します。このファンクションは必要なプラグインのリストを返し、コアはインストール済みのプラグインをチェックして、もし依存関係に欠如があればインストールを拒否します。</p>\r
-\r
-<p>必要なことは NP_PageLinkList にこのファンクションを追加する、ただそれだけです。</p>\r
-\r
-<pre><code>function getPluginDep() {\r
-        return array('NP_BlogWithOffset');\r
-}</code></pre>\r
-\r
-<p>このプラグイン依存チェックは、他のプラグインが依存しているプラグインがアンインストールされることも防ぎます。</p>\r
-\r
-</body>\r
-</html>\r
-\r
-\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="ja-JP" xml:lang="ja-JP">
+<head>
+       <!-- $Id: plugins.html,v 1.7 2006-07-12 07:11:46 kimitake Exp $ -->
+       <!-- $NucleusJP: plugins.html,v 1.6.2.1 2005/09/09 07:34:26 kimitake Exp $ -->
+       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+       <title>Nucleus - プラグイン API</title>
+       <link rel="stylesheet" type="text/css" href="styles/manual.css" />
+       <style type="text/css">
+               /* refence parameters (greenish) */
+               .ref {
+                       background-color: #afa; 
+                       color: #000;
+               }
+               
+               /* object parameters */
+               .obj {
+                       color: #00f;
+               }
+               .obj:after {
+                       content: " (object)";
+               }
+               
+               /* read-only parameters (non-ref; reddish) */
+               .ro {
+                       background-color: #faa;
+                       color: #000;
+               }
+       </style>
+</head>
+<body>
+
+<p class="heading">&nbsp;</p>
+<div class="heading">
+プラグイン API
+<i>2005年7月27日</i>
+</div>
+
+<div class="note-trans"><strong>訳者注:</strong> 
+       <ul>
+               <li>このドキュメントの原文は以下のURLにあります。<br />
+                <a href="http://nucleuscms.org/documentation/devdocs/plugins.html">http://nucleuscms.org/documentation/devdocs/plugins.html</a></li>
+           <li>誤訳にお気づきの方は<a href="http://japan.nucleuscms.org/bb/viewforum.php?f=7">こちら</a>へご連絡いただけると助かります。</li>
+       </ul>
+</div>
+
+<div class="note"><strong>注:</strong> 
+       <ul>
+               <li>このドキュメントは基本的なプラグインの書き方についての情報を提供しています。さらに質問がある方は <a href="http://forum.nucleuscms.org/viewforum.php?f=10">Plugin
+         Development Forum</a> (<a href="http://japan.nucleuscms.org/bb/viewforum.php?f=5">日本語フォーラム</a>)をご覧ください。</li>
+               <li>Nucleusバージョン1.5以降に導入されたメソッドとイベントには、導入時のバージョン情報を付記しています。それらの機能を利用するときは、<code>getMinNucleusVersion</code> を適切に設定するのを忘れないでください。</li>
+       </ul>
+</div>
+
+<h1>はじめに</h1>
+
+<p>
+<a href="./index.html">開発者向けドキュメントの目次へ戻る</a>
+</p>
+
+<p>
+このドキュメントはNucleusプラグインの作り方についての解説です。 
+</p>
+
+<h1><a name="toc"></a><a name="top"></a>目次</h1>
+
+<ul>
+       <li><a href="#introduction">イントロダクション</a></li>
+       <li><a href="#firstplug">はじめてプラグインを書いてみる</a></li>
+       <li><a href="#nucleusplugin"><code>NucleusPlugin</code> クラスの概要</a></li>
+       <li><a href="#skinvars"><code>&lt;%plugin(...)%&gt;</code> スキン変数</a></li>
+       <li><a href="#templatevars"><code>&lt;%plugin(...)%&gt;</code> テンプレート変数</a></li>        
+       <li><a href="#actions"><code>action.php</code> を使ったアクション</a></li>
+       <li><a href="#events">イベントとイベント登録の仕方</a></li>
+       <li><a href="#options">オプションを保存する</a></li>
+       <li><a href="#tables">データベース・テーブル</a></li>
+       <li><a href="#admin">プラグイン管理エリアの提供</a></li>
+       <li><a href="#help">ヘルプページの提供</a></li>
+       <li><a href="#dependency">プラグイン依存チェック</a></li>
+<!--   <li><a href="#parser">Using the <code>PARSER</code> class</a></li>
+       <li><a href="#"></a></li>
+       <li><a href="#"></a></li>
+       <li><a href="#"></a></li>
+       <li><a href="#"></a></li>-->
+</ul>
+
+<h1>イントロダクション <a name="introduction" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
+
+<p>
+Nucleusプラグインによって、誰もがNucleusの提供する機能を、Nucleus内部のPHPコードを変更することなく拡張することができます。プラグインはあるメソッドを実装したシンプルなPHPスクリプトで、Nucleusユーザー同士で簡単に交換することができます。インストールは簡単で、プラグインディレクトリにファイルをアップし、Nucleusにそれを認識させるだけです。
+</p>
+
+<p>
+プラグインの利点は以下のとおりです。</p>
+
+<ul>
+       <li>実装について詳しくしらなくてもNucleusフレームワークに簡単に機能を追加できる</li>
+       <li>必要なプラグインだけをインストールでき、ページ生成にかかる時間を節約できる</li>
+</ul>
+
+<p>
+すべてのプラグインファイルは <code>config.php</code> に記述されたディレクトリに置く必要があります。一般的に、それは <code>/your/path/nucleus/plugins/</code>  になるでしょう。プラグインファイル名は <code>NP<i>_name</i>.php</code> という形式を用いることにより認識されます。プラグインによっては、追加ファイルを格納する同名のサブディレクトリや、管理エリアを必要とします。</p>
+
+<div class="note">
+<b>注:</b> プラグイン名は大文字・小文字を識別しますので、<code>Np_</code> や <code>np_</code> ではなく、<code>NP_</code> で始まることに気をつけてください。またプラグインがサブディレクトリを使用する場合は、サブディレクトリの名称は<em>すべて小文字にします</em>。</div>
+
+
+
+
+<h1>はじめてプラグインを書いてみる<a name="firstplug" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
+
+<p>
+では、シンプルなプラグインを書いてみましょう。基本的にプラグインは、あらかじめ定義された <code>NucleusPlugin</code> クラスを継承したPHPクラスです。以下は<code>HelloWorld</code>プラグインの例です。</p>
+
+<pre class="example"><code>&lt;?
+
+class NP_HelloWorld extends NucleusPlugin
+{
+
+       // プラグインの名前
+       function getName()
+       {
+               return 'Hello World'; 
+       }
+       
+       // プラグインの作者
+       function getAuthor()
+       { 
+               return 'Wouter Demuynck'; 
+       }
+       
+       // プラグインのサイトURL
+       // mailto:foo@bar.com の形式も可
+       function getURL() 
+       {
+               return '../../index.html'; 
+       }
+       
+       // プラグインのバージョン
+       function getVersion()
+       {
+               return '1.0'; 
+       }
+       
+       // インストール済みのプラグインリストに表示される説明文
+       function getDescription()
+       { 
+               return 'Just a sample plugin.';
+       }
+
+       function doSkinVar($skinType)
+       {
+               echo 'Hello World!';
+       }
+
+       function supportsFeature ($what)
+       {
+               switch ($what)
+               {
+                       case 'SqlTablePrefix':
+                               return 1;
+                       default:
+                               return 0;
+               }
+       }
+         
+}
+?&gt;</pre>
+
+<ol>
+       <li>
+               このコードをコピーし、 <code>NP_HelloWorld.php</code> と名づけて保存し、プラグインディレクトリに置きます。<em>最後の <code>?&gt;</code> の後や、最初の <code>&lt;?</code> の前にスペースがないことを確認しましょう</em>。ところでNP は &quot;Nucleus Plugin&quot; って意味ですよ :-) 念のため。
+       </li>
+       <li>Nucleusの管理画面を開き、<em>Nucleusの管理>プラグインの管理</em>にいきます。</li>
+       <li><em>HelloWorld</em> プラグインがインストール可能な状態になっているはずですので、インストールします。すべてがうまくいけば、インストール済みプラグインリストに追加されます。</li>
+       <li>あなたのスキンの1つを編集し、実際のページに表示する箇所に次の文を挿入します。
+         <pre class="example"><code>&lt;%HelloWorld%&gt;</code></pre>
+       注意:カッコ内の名称 (<code>HelloWorld</code>) は大文字小文字を識別します!</li>
+       <li>さて、編集したスキンから生成されるページを見てみましょう。プラグイン変数を追加した場所に &quot;Hello
+  World&quot; と見えますね?</li>
+</ol>
+
+<p>ここまではそれほど難しくなかったと思います。さらに読み進めて理解してください。</p>
+
+
+<h1>NucleusPlugin クラスの概要 <a name="nucleusplugin" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
+
+<p>すべてのプラグインは、<code>NucleusPlugin</code> というPHPクラスを継承しなければなりません。難しそうに聞こえても心配ご無用、大丈夫です。このPHPクラスの継承によって、プラグインに必要なメソッドだけを実装でき、いくつかの補助ファンクションにアクセスでき、つまりはあなたの人生はよりラクになります。</p>
+
+<p>下記は <code>NucleusPlugin</code> が提供する、再実装可能なメソッドの概要です。このクラス自身のソースコードを見たければ、<code>nucleus/libs/PLUGIN.php</code>にあります。</p>
+
+<table summary="An overview of the redefinable methods in the class NucleusPlugin">
+       <caption>
+       <code>NucleusPlugin</code> クラスの概要(再定義可能なメソッド)
+       </caption>
+       <tr>
+               <th>メソッド名</th><th>説明</th>
+       </tr>
+       <tr>
+               <td><code>getName()</code></td>
+               <td>プラグイン名を返します。インストール済みプラグインリストに表示されます。デフォルトの実装では <code>Undefined</code> を返すため、必ず再定義されないといけません。</td>           
+       </tr>
+       <tr>
+               <td><code>getAuthor()</code></td>
+               <td>プラグインの作者名を返します。インストール済みプラグインリストに表示されます。デフォルトの実装では <code>Undefined</code> を返すため、必ず再定義されないといけません。</td>          
+       </tr>
+       <tr>
+               <td><code>getURL()</code></td>
+               <td>プラグインをダウンロード可能な、またはプラグインの追加情報のあるサイトのURLを返します。そのようなサイトがない場合は作者のメールアドレスへの mailto:リンクが適切です。デフォルトの実装では <code>Undefined</code> を返すため、必ず再定義されないといけません。</td>             
+       </tr>
+       <tr>
+               <td><code>getDescription()</code></td>
+               <td>プラグインに関する説明文(長文)を返します。インストール済みプラグインリストに表示されます。デフォルトの実装では <code>Undefined</code> を返します。</td>             
+       </tr>
+       <tr>
+               <td><code>getVersion()</code></td>
+               <td>プラグインの現在のバージョンを返します。デフォルトは <code>0.0</code> を返します。</td>             
+       </tr>
+       <tr>
+               <td><code>getMinNucleusVersion()</code></td>
+               <td>(v2.0b) 最低限必要なNucleusのバージョンを返します。デフォルトは <code>155</code> (v1.55)を返します。後に導入されたプラグイン関連機能を利用している場合は、このファンクションを実装するようお願いします(例: v2.0 => 200)。ただし、Nucleus v1.55 はこのファンクションを使用しないため、新機能を利用したプラグインが(対応する前のシステムに)インストールされる可能性が残っています。</td>
+       </tr>
+       <tr>
+               <td><code>getMinNucleusPatchLevel()</code></td>
+               <td>(v3.1) 最低限必要なNucleusのバージョン(<code>getMinNucleusVersion</code>)での、最低限必要なパッチレベルを返します。デフォルトは <code>0</code> を返します。このファンクションは主に新しいプラグインの機能がNucleusの最新版のパッチによって可能になる場合に用いられます。</td>
+       </tr>
+       <tr>
+               <td><code>init()</code></td>
+               <td>プラグインを初期化します。このメソッドはプラグインオブジェクトが生成された直後に呼び出され、<code>plugid</code>属性がセットされます。デフォルトではこのメソッドは何もしません。</td>
+       </tr>
+       <tr>
+               <td><code>doSkinVar($skinType)</code></td>
+               <td><code>&lt;%plugin(...)%&gt;</code> スキン変数によってプラグインが呼び出されたときにこのメソッドが呼ばれます。<code>$skinType</code> パラメータはプラグインが呼ばれた場所のスキンタイプに該当します(<code>item</code>,
+      <code>archive</code>, ...)。パラメータが一つしかないことに混乱しないでください。複数パラメータを渡すことも<strong>可能</strong>です。<a href="#skinvars"><code>doSkinVar</code> メソッドの実装に関する詳細情報はこちら</a>。デフォルトではこのメソッドはなにも出力しません。</td>             
+       </tr>
+       <tr>
+               <td><code>doTemplateVar(&amp;$item)</code></td>
+               <td>基本的に <code>doSkinVar</code> と同じですが、今度は<em>テンプレート</em>内(<code>item
+                   header/body/footer</code> と <code>dateheader/footer</code>)での<code>&lt;%plugin(...)%&gt;</code> 変数からの呼び出しになります。デフォルトではこのメソッドはテンプレートをスキンタイプとみなして
+      <code>doSkinVar</code> メソッドに処理を渡します。<a href="#templatevars"><code>doTemplateVar</code> メソッドの実装に関する詳細情報はこちら</a></td>              
+       </tr>
+       <tr>
+               <td><code>doTemplateCommentsVar(&amp;$item, &amp;$comment)</code></td>
+               <td>(v2.0b) 基本的に <code>doSkinVar</code> と同じですが、今度は<em>テンプレート</em>内(コメント部分)での<code>&lt;%plugin(...)%&gt;</code> 変数からの呼び出しになります。デフォルトではこのメソッドはテンプレートをスキンタイプとみなして
+      <code>doSkinVar</code> メソッドに処理を渡します。<a href="#templatevars"><code>doTemplateCommentsVar</code> 
+      メソッドの実装に関する詳細情報はこちら</a></td>               
+       </tr>   
+       <tr>
+               <td><code>doAction($type)</code></td>
+               <td>プラグインがユーザーインタラクションを求めたとき、 <code>action.php</code>を介してこのメソッドがそれを与えます。.
+                 これはNucleus自身が新しいコメントや投票を処理するのに使用するスクリプトです。正しいパラメータを用いることで、プラグインからの
+                 <code>doAction</code> メソッドを呼び出せます。<code>$type</code> はオプションのメッセージタイプに該当します。<code>doAction</code> メソッド内で、リクエストからの追加の変数にアクセスできます。デフォルトではこのメソッドがエラーメッセージをトリガーすると<code>'No
+         Such Action'</code>という文字列を返します。<a href="#actions"><code>doAction</code> に関する詳細情報はこちら</a></td>         
+       </tr>
+       <tr>
+               <td><code>install()</code></td>
+               <td>このメソッドはプラグインがインストールされた際に呼ばれます。データベース・テーブルの生成やプラグインオプションの生成などの初期化作業を行うことができます。デフォルトではこのメソッドは何もしません。</td>
+       </tr>
+       <tr>
+               <td><code>unInstall()</code></td>
+               <td>プラグインがアンインストールされた際に呼ばれます。この時点でデータベースに作られたプラグイン情報を消去すると良いです。デフォルトではこのメソッドは何もしません。</td>
+       </tr>
+       <tr>
+               <td><code>getEventList()</code></td>
+               <td>プラグインはイベント登録が可能です。イベントはNucleusが何かアクションを起こすたびに生成されます。たとえば、<code>AddItem</code> イベントは、このイベントを登録しているすべてのプラグインを呼び出します。呼び出されるメソッドは <code>event_AddItem($params)</code>になります。 <code>$params</code> パラメータは、例えば <code>AddItem</code>        の <code>itemid</code> のような、情報フィールドを複数持つ連想配列です。デフォルトではどのイベントにも登録されていないことを示す空の配列を返します。<a href="#events">イベントに関する詳細情報
+         はこちら</a></td>         
+       </tr>
+       <tr>
+               <td><code>getTableList()</code></td>
+               <td>このメソッドはプラグインが生成したデータベース・テーブルの配列を返します。これはNucleusが提供するバックアップ機能で利用されるので、プラグインテーブルをバックアップに含めることができます。デフォルトでは空の配列を返します。</td>
+       </tr>
+       <tr>
+               <td><code>hasAdminArea()</code></td>
+               <td>プラグインが独自の管理エリアをもつ場合 1 を、そうでない場合 0 を返します。デフォルトでは <code>0</code> を返します。</td>
+       </tr>
+       <tr>
+               <td><code>getPluginDep()</code></td>
+               <td>(v3.2) プラグイン名の配列を返します。Nucleusはこれらのプラグインが前もってインストールされてない場合、プラグインのインストールを拒否します。デフォルトでは空の配列が返されます。<a href="#dependency">プラグイン依存に関する詳細情報はこちら</a></td>
+       </tr>
+</table>
+
+<p>実装可能なメソッドの次は、<code>NucleusPlugin</code> クラスが提供する、再実装<strong>すべきでない</strong>幾つかの特殊メソッドです。これらはプラグイン内で、<code>$this-&gt;functionName()</code>シンタックスを利用して呼び出します。</p>
+
+<table summary="An overview of the auxiliary methods in the class NucleusPlugin. You should NOT redefine these">
+       <caption>
+       <code>NucleusPlugin</code> クラスの概要(再定義不可能なメソッド)
+       </caption>
+       <tr>
+               <th>メソッド名</th>
+               <th>説明</th>
+       </tr>
+       <tr>
+               <td>
+                       <code>createOption(...)</code>
+                       <br /><code>createBlogOption(...)</code>(v2.2)
+                       <br /><code>createCategoryOption(...)</code>(v2.2)
+                       <br /><code>createMemberOption(...)</code>(v2.2)
+                       <br /><code>createItemOption(...)</code>(v3.2)
+               </td>
+               <td><a href="#options" title="More info on options">新しいオプションを生成します。</a></td>              
+       </tr>
+       <tr>
+               <td>
+                       <code>deleteOption(...)</code>
+                       <br /><code>deleteBlogOption(...)</code>(v2.2)
+                       <br /><code>deleteCategoryOption(...)</code>(v2.2)
+                       <br /><code>deleteMemberOption(...)</code>(v2.2)
+                       <br /><code>deleteItemOption(...)</code>(v3.2)
+               </td>
+               <td><a href="#options" title="More info on options">オプションを削除します。</a></td>               
+       </tr>
+       <tr>
+               <td>
+                       <code>setOption(...)</code>
+                       <br /><code>setBlogOption(...)</code>(v2.2)
+                       <br /><code>setCategoryOption(...)</code>(v2.2)
+                       <br /><code>setMemberOption(...)</code>(v2.2)                         
+                       <br /><code>setItemOption(...)</code>(v3.2)
+               </td>
+               <td><a href="#options" title="More info on options">オプションに値をセットします。</a></td>              
+       </tr>
+       <tr>
+               <td>
+                       <code>getOption(...)</code>
+                       <br /><code>getBlogOption(...)</code>(v2.2)
+                       <br /><code>getCategoryOption(...)</code>(v2.2)
+                       <br /><code>getMemberOption(...)</code>(v2.2)                          
+                       <br /><code>getItemOption(...)</code>(v3.2)
+               </td>
+               <td><a href="#options" title="More info on options">オプションの値を取得します。</a></td>         
+       </tr>
+       <tr>
+               <td>
+                       <code>getAllBlogOptions(...)</code>(v2.2)
+                       <br /><code>getAllCategoryOptions(...)</code>(v2.2)
+                       <br /><code>getAllMemberOptions(...)</code>(v2.2)                              
+                       <br /><code>getAllItemOptions(...)</code>(v3.2)
+               </td>
+               <td><a href="#options" title="More info on options">与えられたオプションにより、すべての値(コンテクストごとの一つの値)の連想配列を返します。</a></td>            
+       </tr>   
+       <tr>
+               <td>
+                       <code>getBlogOptionTop(...)</code>(v3.2)
+                       <br /><code>getMemberOptionTop(...)</code>(v3.2)
+                       <br /><code>getCategoryOptionTop(...)</code>(v3.2)
+         <br /><code>getItemOptionTop(...)</code>(v3.2)
+               </td>
+               <td><a href="#options" title="More info on options">与えられたオプションにより、すべての値のうちの最初の値を返します。</a></td>
+       </tr>
+       <tr>
+               <td><code>getID()</code></td>
+               <td>このプラグインのIDを返します(このIDはNucleus内部で利用されるものです)。</td>               
+       </tr>
+       <tr>
+               <td><code>getAdminURL()</code></td>
+               <td>プラグインの管理エリアが置かれたURLを返します(そのような管理エリアがない場合は、この情報は無効です)。</td>              
+       </tr>
+       <tr>
+               <td><code>getDirectory()</code></td>
+               <td>プラグインの追加ファイルが格納されたサーバーのファイルシステムのパスを返します(そのようなファイルがない場合は、この情報は無効です)。結果は&quot;<code>.../nucleus/plugins/<em>plugname</em>/</code>&quot;のようになります。</td>           
+       </tr>
+       <tr>
+               <td><code>getShortName()</code></td>
+               <td>"NP_"部分を省き、全てを小文字にしたプラグインのクラス名を返します。この情報は <code>getAdminURL</code> と <code>getDirectory</code> で使用されます。</td>              
+       </tr>
+
+</table>
+
+<h1>スキン変数<a name="skinvars" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
+
+<h2>解説</h2>
+
+<p>
+独自のスキン変数を生成し、<code>&lt;%plugin(<em>PlugName,parameters</em>)%&gt;</code> または <code>&lt;%PlugName(parameters)%&gt;</code>で呼び出すことが出来ます(すでに存在するスキン変数とかぶらない場合)。パラメータはカンマ区切りです。</p>
+
+<p>
+スキン変数を扱うには、<code>doSkinVar</code> メソッドを実装する必要があります。いくつかの例を以下に示します。</p>
+
+<pre class="example"><code>function doSkinVar($skinType)
+function doSkinVar($skinType, $param1, $param2)
+function doSkinVar($skinType, $skinVar, $param1, $param2)
+function doSkinVar($skinType, $skinVar, $param1 = 'default value')</code></pre>
+
+<ul>
+       <li><code>$skinType</code> パラメータは、'index', 'item', 'archive', 'archivelist', 'member', 'error',
+  'search', 'imagepopup',  <a href="#templatevars" title="Information on templatevars">'template'</a>のうちの一つを取ります</li>
+       <li><code>$skinVar</code> は、スキン変数のタイプとして解釈される実質的に最初のパラメータになります(例:<code>&lt;%plugin(PlugName,VarType)%&gt;</code>)。</li>
+       <li><code>doSkinVar()</code>(パラメータ無し)を使い、PHPファンクションの<code>func_get_args()</code>を用いてパラメータを取得することができます。引数の数の異なる、タイプの違うスキン変数を扱うときに便利です。</li>
+</ul>
+
+<h2>ノート</h2>
+
+<ul>
+       <li>(v2.0b) グローバル変数としてパースされている <code>$currentSkinName</code> を使ってスキンの名前を取得できます。</li>
+</ul>
+
+
+
+
+<h1>テンプレート変数<a name="templatevars" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
+
+<h2>解説</h2>
+
+<p>
+テンプレートプラグイン変数はスキンプラグイン変数と同様に働きますが以下の2点が異なります。</p>
+
+<ol>
+       <li>スキン内ではなくテンプレート内から呼ばれます。</li>
+       <li>$skinTypeパラメータを取りません。代わりに現在パースされているアイテムやコメントの情報付きの追加パラメータを取ります。
+    <ul>
+                       <li><code>doTemplateVar</code> メソッドは <code>&amp;$item</code> パラメータを取ります。</li>
+                       <li><code>doTemplateCommentsVar</code> メソッドは <code>&amp;$item</code> と <code>&amp;$comment</code> パラメータを取ります。</li>
+         </ul>
+               <strong>&amp;マークに注意!</strong>
+       </li>
+</ol>
+       
+<p>テンプレート変数はスキン変数と同じ要領で呼ばれます(<code>&lt;%plugin(PlugName,parameters)%&gt;</code> または <code>&lt;%PlugName(parameters)%&gt;</code>)。</p>
+
+<p>
+デフォルトでは、全てのテンプレート変数は'<code>template</code>'を<code>skintype</code>パラメータとして、<code>doSkinVar</code> メソッドに渡ります。</p>
+
+<p>
+独自の実装を提供したい場合は、<code>doTemplateVar</code> メソッドや <code>doTemplateCommentsVar</code> メソッドを再定義する必要があります。<code>skintype</code>パラメータが無くなる以外はdoSkinVarと同様に働きます。</p>
+
+<pre class="example"><code>function doTemplateVar(&amp;$item)
+function doTemplateVar(&amp;$item, $param1, $param2)
+function doTemplateVar(&amp;$item, $type, $param1, $param2)
+function doTemplateVar(&amp;$item, $type, $param1 = 'default value')
+function doTemplateCommentsVar(&amp;$item, &amp;$comment)
+function doTemplateCommentsVar(&amp;$item, &amp;$comment, $param1, $param2)
+function doTemplateCommentsVar(&amp;$item, &amp;$comment, $type, $param1, $param2)
+function doTemplateCommentsVar(&amp;$item, &amp;$comment, $type, $param1 = 'default value')</code></pre>
+
+<h2>ノート</h2>
+
+<ul>
+       <li>(v2.0b) グローバル変数として内部で利用される <code>$currentSkinName</code> を使ってテンプレートの名前を取得できます。</li>
+</ul>
+
+
+
+
+<h1>アクション<a name="actions" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
+
+<p>プラグインは <code>action.php</code> を通してアクションを行うことができ、同様のスクリプトがコメントや投票の受け取りにも使用されてます。GETまたはPOSTのどちらかを通して呼び出せます。必要なパラメータは
+<code>action</code>('plugin'と指定)、<code>name</code>(プラグイン名)、<code>type</code>(リクエストされたアクションの種類)です。</p>
+
+<p>これらのアクションを有効にするために、<code>doAction($actionType)</code> メソッドをプラグイン内で実装する必要があります。リクエストからの追加パラメータは
+<code>requestVar('<em>name</em>')</code> で取得できます(<code>requestVar</code> はPHPが付加する magic_quotes_gpc に配慮しています)。</p>
+
+<p>
+<code>doAction</code> メソッドが文字列を返すとき、エラーとして解釈され、エラーメッセージが表示されます。</p>
+
+
+
+
+
+
+<h1>イベント<a name="events" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
+
+<p>
+Nucleusプラグインはなにか重要なことが起きたときに発生するイベントに登録可能です。プラグインはイベント発生の際にアクションを実行したり、テキストを出力したりできます。</p>
+
+<h2>例</h2>
+
+<p>
+下記は <code>PreAddComment</code> イベント(blogにコメントが追加される直前に生成されるイベント)にプラグインが登録する例です。</p>
+
+<pre class="example"><code>class NP_Acronyms extends NucleusPlugin {
+  ...
+  function getEventList() { return array('PreAddComment'); }
+  ...
+  function event_PreAddComment(&amp;$data) {
+    // 頭字語 HTML を置き換え
+    $data['comment']['body'] = 
+        strreplace('HTML',
+                   '&lt;acronym title="HyperText Markup Language"&gt;HTML&lt;/acronym&gt;',
+                   $data['comment']['body']);
+  }
+}
+</code></pre>
+
+<p>このプラグインはコメント中の'HTML'というテキストを'<code>&lt;acronym title=&quot;HyperText
+Markup Language&quot;&gt;HTML&lt;/acronym&gt;</code>'に置き換えます。acronymタグはHTMLタグで、頭字語についての追加情報を提供します。</p>
+
+<h2>イベント登録の仕方</h2>
+
+<p>イベント登録に必要なステップは以下になります。</p>
+
+<ol>
+       <li><code>getEventList</code> メソッドから返る配列にイベント名を追加します。</li>
+       <li><code>event_EventName($data)</code> という形でメソッドを生成し、この中でイベントを処理します。</li>
+</ol>
+
+<p>複数のプラグインが同じイベントに登録できます。管理エリアのプラグインリストの順序に従ってプラグインに通知が行きます。リストの上にあるプラグインほど早く通知されます。</p>
+
+<h2>パラメータ</h2>
+
+<p><code>event_EventName</code> メソッドはひとつだけ <code>$data</code> パラメータを持ち、それはイベントごとに内容が異なります。これは連想配列です。この連想配列に渡されたオブジェクトや配列は<strong>参照形式</strong>で渡されるため、これらに加えた変更は記憶されます。</p>
+
+<p>以下のイベントリストは、パラメータ変更がNucleusに知られるかどうかを示すために色を使い分けています。</p>
+
+<ul>
+       <li><var class="ref">参照渡し(緑)</var>: この種のパラメータに変更を加えるとNucleusに知られます。</li>
+       <li><var class="ro">値渡し(赤)</var>: プラグインイベントハンドラに渡される前に値がコピーされます。これらの変数への変更は自動的に破棄されます。.</li>
+</ul>
+
+<p>パラメータとして渡されるオブジェクトは<var class="obj">object</var>.として示されます。ほとんどのオブジェクトは参照渡しで、<var class="obj ref">object
+by ref</var>のように示されます。</p>
+
+<h2>イベントリスト</h2>
+
+<table summary="An overview of events to which a Nucleus Plugin can subscribe, and what parameters are passed along to the method that handles the event">
+       <caption>
+       プラグインが登録できるイベント</caption>
+       <tr>
+               <th>名前</th>
+               <th>いつ</th>
+               <th>パラメータ</th>
+       </tr>
+       <tr>
+               <td>InitSkinParse</td>
+               <td>スキンの初期化の直前</td>
+               <td><dl>
+                       <dt class="obj ref">skin</dt>
+                       <dd>パースする<code>SKIN</code>オブジェクト</dd>
+                       <dt class="ro">type</dt>
+                       <dd>スキンタイプ('index', 'item', 'archive', 'archivelist',
+                       'member', 'error', 'search', 'imagepopup', 'fileparser'のいずれか)</dd>
+               </dl></td>
+       </tr>
+       <tr>
+               <td>PreSkinParse</td>
+               <td>スキンのパースの直前</td>
+               <td><dl>
+                       <dt class="obj ref">skin</dt>
+                       <dd>パースする<code>SKIN</code>オブジェクト</dd>
+                       <dt class="ro">type</dt>
+                       <dd>スキンタイプ('index', 'item', 'archive', 'archivelist',
+                 'member', 'error', 'search', 'imagepopup', 'fileparser'のいずれか)</dd>
+                       <dt class="ref">contents</dt>
+                       <dd>スキンの内容</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostSkinParse</td>
+               <td>スキンのパースの直後</td>
+               <td><dl>
+                       <dt class="obj ref">skin</dt>
+                       <dd>パースする<code>SKIN</code>オブジェクト</dd>
+                       <dt class="ro">type</dt>
+                       <dd>スキンタイプ('index', 'item', 'archive', 'archivelist', 'member', 'error', 'search',
+                 'imagepopup', 'fileparser'のいずれか)</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PreItem</td>
+               <td>アイテムのパース前、ただしアイテムヘッダーのパース後</td>
+               <td><dl>
+                       <dt class="ref obj">blog</dt>
+                       <dd><code>BLOG</code> オブジェクト</dd>
+                       <dt class="ref obj">item</dt>
+                       <dd>アイテムデータを持つオブジェクト</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostItem</td>
+               <td>アイテムのパース後、ただしアイテムフッターのパース前</td>
+               <td><dl>
+                       <dt class="ref obj">blog</dt>
+                       <dd><code>BLOG</code> オブジェクト</dd>
+                       <dt class="ref obj">item</dt>
+                       <dd>アイテムデータを持つオブジェクト</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PreComment</td>
+               <td>コメントの表示前</td>
+               <td><dl>
+                       <dt class="ref">comment</dt>
+                       <dd>コメントデータを持つ連想配列</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostComment</td>
+               <td>コメントの表示後</td>
+               <td><dl>
+                       <dt class="ref">comment</dt>
+                       <dd>コメントデータを持つ連想配列</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PreDateHead</td>
+               <td>日付ヘッダーのパース前</td>
+               <td><dl>
+                       <dt class="obj ref">blog</dt>
+                       <dd><code>BLOG</code> オブジェクト</dd>
+                       <dt class="ro">timestamp</dt>
+                       <dd>日付ヘッダーのタイムスタンプ</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostDateHead</td>
+               <td>日付ヘッダーのパース後</td>
+               <td><dl>
+                       <dt class="obj ref">blog</dt>
+                       <dd><code>BLOG</code> オブジェクト</dd>
+                       <dt class="ro">timestamp</dt>
+                       <dd>日付ヘッダーのタイムスタンプ</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PreDateFoot</td>
+               <td>日付フッターのパース前</td>
+               <td><dl>
+                       <dt class="ref obj">blog</dt>
+                       <dd><code>BLOG</code> オブジェクト</dd>
+                       <dt class="ro">timestamp</dt>
+                       <dd>日付フッターのタイムスタンプ</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostDateFoot</td>
+               <td>日付フッターのパース後</td>
+               <td><dl>
+                       <dt class="ref obj">blog</dt>
+                       <dd><code>BLOG</code> オブジェクト</dd>
+                       <dt class="ro">timestamp</dt>
+                       <dd>日付フッターのタイムスタンプ</dd>
+               </dl></td>              
+       </tr>   
+       <tr>
+               <td>LoginSuccess</td>
+               <td>ログイン成功後</td>
+               <td><dl>
+                       <dt class="obj ref">member</dt>
+                       <dd><code>MEMBER</code> オブジェクト</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>LoginFailed</td>
+               <td>ログイン失敗後</td>
+               <td><dl>
+                       <dt class="ro">username</dt>
+                       <dd>ログイン時に使われたユーザー名</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>Logout</td>
+               <td>ログアウト後</td>
+               <td><dl>
+                       <dt class="ro">username</dt>
+                       <dd>ログアウト時のユーザー名</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PreBlogContent</td>
+               <td>blogの内容がスキン変数を通して挿入される前</td>
+               <td><dl>
+                       <dt class="obj ref">blog</dt>
+                       <dd><code>BLOG</code> オブジェクト</dd>
+                       <dt class="ro">type</dt>
+                       <dd>呼び出されたスキン変数 ('blog', 'otherblog', 'archive', 'archivelist', 'item', 'searchresults',
+                         'othersearchresults', 'categorylist', 'otherarchive', 'otherarchivelist')</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostBlogContent</td>
+               <td>blogの内容がスキン変数を通して挿入された後</td>
+               <td><dl>
+                       <dt class="obj ref">blog</dt>
+                       <dd><code>BLOG</code> オブジェクト</dd>
+                       <dt class="ro">type</dt>
+                       <dd>呼び出されたスキン変数 ('blog', 'otherblog', 'archive', 'archivelist', 'item', 'searchresults',
+                 'othersearchresults', 'categorylist', 'otherarchive', 'otherarchivelist')</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PreAddComment</td>
+               <td>コメントがデータベースに追加される前</td>
+               <td><dl>
+                       <dt class="ref">comment</dt>
+                       <dd>コメントデータ(連想配列)</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostAddComment</td>
+               <td>コメントがデータベースに追加された後</td>
+               <td><dl>
+                       <dt class="ref">comment</dt>
+                       <dd>コメントデータ(連想配列)</dd>
+                       <dt class="ref">commentid</dt>
+                       <dd>コメントのID</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostRegister</td>
+               <td>新規ユーザーの登録後</td>
+               <td><dl>
+                       <dt class="obj ref">member</dt>
+                       <dd>新しい<code>MEMBER</code> オブジェクト</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostAddItem</td>
+               <td>アイテムがデータベースに追加された後</td>
+               <td><dl>
+                       <dt class="ro">itemid</dt>
+                       <dd>データベースに出来た新しい itemid</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostUpdateItem</td>
+               <td>アイテムがデータベースにアップデートされた直後</td>
+               <td><dl>
+                       <dt class="ro">itemid</dt>
+                       <dd>アイテムのID</dd>
+               </dl></td>
+       </tr>
+       <tr>
+               <td>PreAddItem</td>
+               <td>アイテムがデータベースに追加される直前</td>
+               <td><dl>
+                       <dt class="ref">title</dt>
+                       <dd>タイトル</dd>
+                       <dt class="ref">body</dt>
+                       <dd>本文</dd>
+                       <dt class="ref">more</dt>
+                       <dd>拡張テキスト</dd>
+                       <dt class="ref obj">blog</dt>
+                       <dd><code>BLOG</code> オブジェクト</dd>
+                       <dt class="ref">authorid</dt>
+                       <dd>執筆者ID</dd>
+                       <dt class="ref">timestamp</dt>
+                       <dd>UNIX タイムスタンプ</dd>
+                       <dt class="ref">closed</dt>
+                       <dd>1 (コメント不可) or 0 (コメント可)</dd>
+                       <dt class="ref">draft</dt>
+                       <dd>1 (ドラフト) or 0 (非ドラフト)</dd>
+                       <dt class="ref">catid</dt>
+                       <dd>カテゴリーID</dd>
+               </dl></td>              
+       </tr>   
+       <tr>
+               <td>PreUpdateItem</td>
+               <td>データベースにあるアイテムが更新される直前</td>
+               <td><dl>
+                       <dt class="ro">itemid</dt>
+                       <dd>アイテム ID</dd>
+                       <dt class="ref">title</dt>
+                       <dd>タイトル</dd>
+                       <dt class="ref">body</dt>
+                       <dd>本文</dd>
+                       <dt class="ref">more</dt>
+                       <dd>拡張テキスト</dd>
+                       <dt class="ref obj">blog</dt>
+                       <dd><code>BLOG オブジェクト</code> object</dd>
+                       <dt class="ref">closed</dt>
+                       <dd>1 (コメント不可) or 0 (コメント可)</dd>
+                       <dt class="ref">catid</dt>
+                       <dd>カテゴリーID</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PrepareItemForEdit</td>
+               <td>アイテムをデータベースから取得した直後で、編集のためにユーザーに表示される前</td>
+               <td><dl>
+                       <dt class="ref">item</dt>
+                       <dd>アイテムデータを持つ連想配列</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PreUpdateComment</td>
+               <td>コメントが更新され、データベースに保存される直前</td>
+               <td><dl>
+                       <dt class="ref">body</dt>
+                       <dd>コメント本文</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PrepareCommentForEdit</td>
+               <td>コメントをデータベースから取得した直後で、編集のためにユーザーに表示される前</td>
+               <td><dl>
+                       <dt class="ref">comment</dt>
+                       <dd>コメントデータ(連想配列)</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PrePluginOptionsEdit</td>
+               <td>
+                       (v2.0b) 'プラグインオプションの編集'フォームが生成される前
+                       <br />(v2.2) パラメータ追加
+                       <br />(v3.2) 各オプションにパラメータ追加
+               </td>
+               <td><dl>
+                       <dt class="ro">context</dt>
+                       <dd>(v2.2) <code>global</code>, <code>blog</code>, <code>member</code>, <code>item</code>, <code>category</code>のいずれか</dd>
+                       <dt class="ref">options</dt>
+                       <dd>次のインデックスをもつ連想配列: <code>name</code>, <code>value</code>, <code>oid</code>, <code>description</code>, <code>type</code>, <code>typeinfo</code>, <code>contextid</code>, <code>extra</code> 。追加オプションをここに加えることも可能(それらで何かの処理をするときはPostPluginOptionsUpdateの記述も必要)<br />
+                       <code>extra</code>フィールドを用いて、オプションに追加HTML(たとえばフォームのコントロール)を追加できます。もしそうする場合、 <code>extra</code> に追加する前に <code>pid</code> と <code>getID()</code> を比較し、さらに <code>name</code> をチェックすべきです。</dd>
+                       <dt class="ro">plugid</dt>
+                       <dd>プラグイン ID (これが気になるなら、<code>GetID()</code>を見ると理解できる)(コンテクストがglobalのときのみ存在)</dd>
+                       <dt class="ro">contextid</dt>
+                       <dd>コンテクスト ID (blogid, memberid, catid, itemid コンテクストによる)</dd>
+               </dl></td>              
+       </tr>   
+       <tr>
+               <td>PrePluginOptionsUpdate</td>
+               <td>
+                       (v3.2) プラグインオプションが更新される前。(このイベントを使ってオプションの新しい値を評価したり変更したりできます)
+               </td>
+               <td><dl>
+                       <dt class="ro">context</dt>
+                       <dd>(v2.2) <code>global</code>, <code>member</code>, <code>blog</code>, <code>item</code>, <code>category</code>のいずれか</dd>
+                       <dt class="ro">plugid</dt>
+                       <dd>プラグイン ID (これが気になるなら、<code>GetID()</code>を見ると理解できる)</dd>
+                       <dt class="ro">optionname</dt>
+                       <dd>オプション名</dd>
+                       <dt class="ro">contextid</dt>
+                       <dd>コンテクスト ID (blogid, memberid, catid, itemid コンテクストによる)</dd>
+                       <dt class="ref">value</dt>
+                       <dd>そのオプションの新しい値</dd>
+               </dl></td>
+       </tr>
+       <tr>
+               <td>PostPluginOptionsUpdate</td>
+               <td>
+                       (v2.0b) プラグインオプションの更新後<br />
+               (v2.2) コンテクストによって異なるパラメータ</td>
+               <td><dl>
+                       <dt class="ro">context</dt>
+                       <dd>(v2.2) <code>global</code>, <code>member</code>, <code>blog</code>, <code>item</code>, <code>category</code>のいずれか</dd>
+                       <dt class="ro">plugid</dt>
+                       <dd>プラグイン ID (これが気になるなら、<code>GetID()</code>を見ると理解できる)(globalコンテクスト)</dd>
+                       <dt class="ro">blogid</dt>
+                       <dd>(v2.2) blog ID (blog コンテクスト)</dd>                       
+                       <dt class="ref obj">blog</dt>
+                       <dd>(v2.2) BLOG オブジェクト (blog コンテクスト)</dd>                       
+                       <dt class="ro">memberid</dt>
+                       <dd>(v2.2) member ID (member コンテクスト)</dd>                   
+                       <dt class="ref obj">member</dt>
+                       <dd>(v2.2) MEMBER オブジェクト (member コンテクスト)</dd>                   
+                       <dt class="ro">catid</dt>
+                       <dd>(v2.2) category ID (category コンテクスト)</dd>                       
+                       <dt class="ro">itemid</dt>
+                       <dd>(v2.2) item ID (item コンテクスト)</dd>
+                       <dt class="ref obj">member</dt>
+                       <dd>(v2.2) ITEM オブジェクト (item コンテクスト)</dd>
+               </dl></td>              
+               
+       </tr>   
+       <tr>
+               <td>PostAuthentication</td>
+               <td>(v2.0b) ログイン処理の完了後。ページリクエストごとに発生</td>
+               <td><dl>
+                       <dt class="ro">loggedIn</dt>
+                       <dd><code>$member->isLoggedIn()</code>の戻り値</dd>
+               </dl></td>              
+       </tr>           
+       <tr>
+               <td>PreAddItemForm</td>
+               <td>(v2.0b) アイテム追加フォーム(ブックマークレットまたは管理エリア)が生成される直前</td>
+               <td><dl>
+                       <dt class="ref">contents</dt>
+                       <dd>連想配列への参照。そのうちの'title',
+                         'body', 'more'にはフォームフィールドへの初期値を与えることができます。複数のプラグイン間でこれらの値の変更を避けるには、処理後に'hasBeenSet'の値を1にセットします(かつ処理前にこの値をチェックするようにします)</dd>
+                       <dt class="ref obj">blog</dt>
+                       <dd><code>BLOG</code> オブジェクトへの参照</dd>
+               </dl></td>              
+       </tr>           
+       <tr>
+               <td>AddItemFormExtras</td>
+               <td>(v2.0b) アイテム追加ページまたはブックマークレット内部のどこか。<code>template</code> ファイルの類を別に用意しなくても、ここでプラグインがカスタムフィールドを追加できる。</td>
+               <td><dl>
+                       <dt class="ref obj">blog</dt>
+                       <dd><code>BLOG</code> オブジェクトへの参照</dd>
+               </dl></td>              
+       </tr>                   
+       <tr>
+               <td>EditItemFormExtras</td>
+               <td>
+                       (v2.0b) アイテム編集ページまたはブックマークレット内部のどこか。<code>template</code> ファイルの類を別に用意しなくても、ここでプラグインがカスタムフィールドを追加できる。<br />
+                       <br />                  
+                       あまり多くのデータを追加しないこと。また以下のように<strong>正しいXHTML</strong>を生成してください。               <pre class="example"><code>&lt;h3&gt;プラグイン名&lt;/h3&gt;
+&lt;p&gt;追加フォームの内容&lt;/p&gt;</code></pre>
+               このようにして、正しい構造を保ちつつ複数のプラグインがオプションを保持できます。またフィールド名の重複を避けるためにプレフィックスを用いてください(例 <code>plug_tb_url</code>)。</td>
+               <td><dl>
+                       <dt class="ref obj">blog</dt>
+                       <dd><code>BLOG</code> オブジェクトへの参照</dd>
+                       <dt class="ro">variables</dt>
+                       <dd>
+                               (read-only) 編集されるアイテムに関する全ての情報を持つ連想配列: 'itemid',
+                                 'draft', 'closed', 'title', 'body', 'more', 'author', 'authorid',
+                                 'timestamp', 'karmapos', 'karmaneg', 'catid'
+                       </dd>                   
+                       <dt class="ro">itemid</dt>
+                       <dd>アイテム IDへのショートカット</dd>
+               </dl></td>              
+       </tr>                           
+       <tr>
+               <td>BlogSettingsFormExtras</td>
+               <td>(v2.0) blog設定ページにフォームを追加可能<br /><br />                        
+                       あまり多くのデータを追加しないこと。また以下のように<strong>正しいXHTML</strong>を生成してください。               <pre class="example"><code>&lt;h4&gt;プラグイン名&lt;/h4&gt;
+&lt;form method="post" action="..."&gt;&lt;p&gt;
+追加フォームの内容&lt;/p&gt;&lt;/form&gt;</code></pre>
+                       このようにして、正しい構造を保ちつつ複数のプラグインがオプションを保持できます。またフィールド名の重複を避けるためにプレフィックスを用いてください(例 <code>plug_tb_url</code>)。</td>
+               <td><dl>
+                       <dt class="obj ref">blog</dt>
+                       <dd><code>BLOG</code> オブジェクトへの参照</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PreDeleteItem</td>
+               <td>(v2.0) アイテムがデータベースから削除される直前</td>
+               <td><dl>
+                       <dt class="ro">itemid</dt>
+                       <dd>削除されるアイテムID</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostDeleteItem</td>
+               <td>(v2.0) アイテムがデータベースから削除された直後</td>
+               <td><dl>
+                       <dt class="ro">itemid</dt>
+                       <dd>削除されたアイテムID</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PreDeleteCategory</td>
+               <td>(v2.0) カテゴリーがデータベースから削除される直前</td>
+               <td><dl>
+                       <dt class="ro">catid</dt>
+                       <dd>削除されるカテゴリー ID</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostDeleteCategory</td>
+               <td>(v2.0) カテゴリーがデータベースから削除された直後</td>
+               <td><dl>
+                       <dt class="ro">catid</dt>
+                       <dd>削除されたカテゴリー ID</dd>
+               </dl></td>              
+       </tr>   
+       <tr>
+               <td>PreDeleteBlog</td>
+               <td>(v2.0) blogがデータベースから削除される直前</td>
+               <td><dl>
+                       <dt class="ro">blogid</dt>
+                       <dd>削除されるblogID</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostDeleteBlog</td>
+               <td>(v2.0) blogがデータベースから削除された直後</td>
+               <td><dl>
+                       <dt class="ro">blogid</dt>
+                       <dd>削除されたblogID</dd>
+               </dl></td>              
+       </tr>   
+       <tr>
+               <td>PreDeleteMember</td>
+               <td>(v2.0) メンバーがデータベースから削除される直前</td>
+               <td><dl>
+                       <dt class="ref obj">member</dt>
+                       <dd><code>削除されるメンバーに関するMEMBER</code> オブジェクトへの参照</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostDeleteMember</td>
+               <td>(v2.0) メンバーがデータベースから削除された直後</td>
+               <td><dl>
+                       <dt class="ref obj">member</dt>
+                       <dd><code>削除されるメンバーに関するMEMBER</code> オブジェクトへの参照</dd>
+               </dl></td>              
+       </tr>   
+       <tr>
+               <td>PreDeleteTeamMember</td>
+               <td>(v2.0) メンバーがweblogチームから削除される直前</td>
+               <td><dl>
+                       <dt class="ref obj">member</dt>
+                       <dd><code>MEMBER</code> オブジェクトへの参照</dd>
+                       <dt class="ro">blogid</dt>
+                       <dd>blogID</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostDeleteTeamMember</td>
+               <td>(v2.0) メンバーがweblogチームから削除された直後</td>
+               <td><dl>
+                       <dt class="ref obj">member</dt>
+                       <dd><code>MEMBER</code> オブジェクトへの参照</dd>
+                       <dt class="ro">blogid</dt>
+                       <dd>blogID</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PreDeleteComment</td>
+               <td>(v2.0) コメントがデータベースから削除される直前</td>
+               <td><dl>
+                       <dt class="ro">commentid</dt>
+                       <dd>削除されるコメントID</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostDeleteComment</td>
+               <td>(v2.0) コメントがデータベースから削除された直後</td>
+               <td><dl>
+                       <dt class="ro">commentid</dt>
+                       <dd>削除されたコメントID</dd>
+               </dl></td>              
+       </tr>           
+       <tr>
+               <td>ActionLogCleared</td>
+               <td>(v2.0) アクションログが消去された後</td>
+               <td>なし</td>         
+       </tr>
+       <tr>
+               <td>PreDeleteTemplate</td>
+               <td>(v2.0) テンプレートがデータベースから削除される直前</td>
+               <td><dl>
+                       <dt class="ro">templateid</dt>
+                       <dd>削除されるテンプレートID</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostDeleteTemplate</td>
+               <td>(v2.0) テンプレートがデータベースから削除された直後</td>
+               <td><dl>
+                       <dt class="ro">templateid</dt>
+                       <dd>削除されたテンプレートID</dd>
+               </dl></td>              
+       </tr>           
+       <tr>
+               <td>PreDeleteSkin</td>
+               <td>(v2.0) スキンがデータベースから削除される直前</td>
+               <td><dl>
+                       <dt class="ro">skinid</dt>
+                       <dd>削除されるスキンID</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostDeleteSkin</td>
+               <td>(v2.0) スキンがデータベースから削除された直後</td>
+               <td><dl>
+                       <dt class="ro">skinid</dt>
+                       <dd>削除されたスキンID</dd>
+               </dl></td>              
+       </tr>   
+       <tr>
+               <td>PreDeletePlugin</td>
+               <td>(v2.0) プラグインがデータベースから削除される直前</td>
+               <td><dl>
+                       <dt class="ro">plugid</dt>
+                       <dd>削除されるプラグインID</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostDeletePlugin</td>
+               <td>(v2.0) プラグインがデータベースから削除された直後</td>
+               <td><dl>
+                       <dt class="ro">plugid</dt>
+                       <dd>削除されたプラグインID</dd>
+               </dl></td>              
+       </tr>           
+       <tr>
+               <td>PreDeleteBan</td>
+               <td>(v2.0) 禁止IPがデータベースから削除される直前</td>
+               <td><dl>
+                       <dt class="ro">blogid</dt>
+                       <dd>禁止IPが削除されるblogのID</dd>
+                       <dt class="ro">iprange</dt>
+                       <dd>禁止されたIPレンジ</dd>                     
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostDeleteBan</td>
+               <td>(v2.0) 禁止IPがデータベースから削除された直後</td>
+               <td><dl>
+                       <dt class="ro">blogid</dt>
+                       <dd>禁止IPが削除されたblogのID</dd>
+                       <dt class="ro">iprange</dt>
+                       <dd>禁止されたIPレンジ</dd>                     
+               </dl></td>              
+       </tr>                   
+       <tr>
+               <td>PreAddCategory</td>
+               <td>(v2.0) 新しいカテゴリーがデータベースに生成される直前</td>
+               <td><dl>
+                       <dt class="ref obj">blog</dt>
+                       <dd><code>BLOG</code> オブジェクトの参照</dd>
+                       <dt class="ref">name</dt>
+                       <dd>新しいカテゴリー名</dd>                    
+                       <dt class="ref">description</dt>
+                       <dd>新しいカテゴリーの説明</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostAddCategory</td>
+               <td>(v2.0) 新しいカテゴリーがデータベースに生成された直後</td>
+               <td><dl>
+                       <dt class="ref obj">blog</dt>
+                       <dd><code>BLOG</code> オブジェクトへの参照</dd>
+                       <dt class="ro">name</dt>
+                       <dd>新しいカテゴリー名</dd>                    
+                       <dt class="ro">description</dt>
+                       <dd>新しいカテゴリーの説明</dd>
+                       <dt class="ro">catid</dt>
+                       <dd>新しいカテゴリー ID</dd>                    
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PreAddBlog</td>
+               <td>(v2.0) 新しいblogが生成される直前</td>
+               <td><dl>
+                       <dt class="ref">name</dt>
+                       <dd>新しい blog名</dd>
+                       <dt class="ref">shortname</dt>
+                       <dd>新しい blogの短縮名</dd>
+                       <dt class="ref">timeoffset</dt>
+                       <dd>新しい blogのタイムオフセット</dd>
+                       <dt class="ref">description</dt>
+                       <dd>新しい blogの説明</dd>
+                       <dt class="ref">defaultskin</dt>
+                       <dd>新しいblogのデフォルトスキンのID</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostAddBlog</td>
+               <td>(v2.0) 新しいblogが生成された直後</td>
+               <td><dl>
+                       <dt class="ref obj">blog</dt>
+                       <dd>新しい<code>BLOG</code> オブジェクト</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PreAddPlugin</td>
+               <td>(v2.0) プラグインが追加される直前</td>
+               <td><dl>
+                       <dt class="ref">file</dt>
+                       <dd>新しいプラグインのファイル名</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostAddPlugin</td>
+               <td>(v2.0) プラグインが追加された直後</td>
+               <td><dl>
+                       <dt class="ref obj">plugin</dt>
+                       <dd>新しく追加されたプラグインのオブジェクト</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PreAddTeamMember</td>
+               <td>(v2.0) メンバーがblogチームに追加される直前</td>
+               <td><dl>
+                       <dt class="ref obj">blog</dt>
+                       <dd><code>BLOG</code> オブジェクト</dd>
+                       <dt class="ref obj">member</dt>
+                       <dd><code>MEMBER</code> オブジェクト</dd>
+                       <dt class="ref">admin</dt>
+                       <dd>新しく追加されたメンバーが管理権限を持っているかどうかを示すブール値</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostAddTeamMember</td>
+               <td>(v2.0) メンバーがblogチームに追加された直後</td>
+               <td><dl>
+                       <dt class="ref obj">blog</dt>
+                       <dd><code>BLOG</code> オブジェクト</dd>
+                       <dt class="ref obj">member</dt>
+                       <dd><code>MEMBER</code> オブジェクト</dd>
+                       <dt class="ro">admin</dt>
+                       <dd>新しく追加されたメンバーが管理権限を持っているかどうかを示すブール値</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PreAddTemplate</td>
+               <td>(v2.0) 新しいテンプレートが生成される直前(注:テンプレートが複製されたときも呼ばれる)</td>
+               <td><dl>
+                       <dt class="ref">name</dt>
+                       <dd>新しいテンプレート名</dd>
+                       <dt class="ref">description</dt>
+                       <dd>新しいテンプレートの説明</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostAddTemplate</td>
+               <td>(v2.0) 新しいテンプレートが生成された直後</td>
+               <td><dl>
+                       <dt class="ro">name</dt>
+                       <dd>新しいテンプレート名</dd>
+                       <dt class="ro">description</dt>
+                       <dd>新しいテンプレートの説明</dd>
+                       <dt class="ro">templateid</dt>
+                       <dd>新しいテンプレートID</dd>
+               </dl></td>              
+       </tr>   
+       <tr>
+               <td>PreAddSkin</td>
+               <td>(v2.0) 新しいスキンが生成される直前(注:スキンが複製されたときも呼ばれる)</td>
+               <td><dl>
+                       <dt class="ref">name</dt>
+                       <dd>新しいスキン名</dd>
+                       <dt class="ref">description</dt>
+                       <dd>新しいスキン名の説明</dd>
+                       <dt class="ref">type</dt>
+                       <dd>スキンのコンテントタイプ</dd>
+                       <dt class="ref">includeMode</dt>
+                       <dd>新しいスキンのインクルードモード</dd>
+                       <dt class="ref">includePrefix</dt>
+                       <dd>新しいスキンのインクルードプレフィックス</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostAddSkin</td>
+               <td>(v2.0) 新しいスキンが生成された直後</td>
+               <td><dl>
+                       <dt class="ro">name</dt>
+                       <dd>新しいスキン名</dd>
+                       <dt class="ro">description</dt>
+                       <dd>新しいスキンの説明</dd>
+                       <dt class="ro">type</dt>
+                       <dd>スキンのコンテントタイプ</dd>
+                       <dt class="ro">includeMode</dt>
+                       <dd>新しいスキンのインクルードモード</dd>
+                       <dt class="ro">includePrefix</dt>
+                       <dd>新しいスキンのインクルードプレフィックス</dd>
+                       <dt class="ro">skinid</dt>
+                       <dd>新しいスキンID</dd>
+               </dl></td>              
+       </tr>           
+       <tr>
+               <td>PreAddBan</td>
+               <td>(v2.0) 新しい禁止IPが追加される直前</td>
+               <td><dl>
+                       <dt class="ref">blogid</dt>
+                       <dd>blogID</dd>
+                       <dt class="ref">iprange</dt>
+                       <dd>禁止されたIPレンジ</dd>
+                       <dt class="ref">reason</dt>
+                       <dd>禁止された理由を記述したテキストメッセージ</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostAddBan</td>
+               <td>(v2.0) 新しい禁止IPが追加された直後</td>
+               <td><dl>
+                       <dt class="ro">blogid</dt>
+                       <dd>blogID</dd>
+                       <dt class="ro">iprange</dt>
+                       <dd>禁止されたIPレンジ</dd>
+                       <dt class="ro">reason</dt>
+                       <dd>禁止された理由を記述したテキストメッセージ</dd>
+               </dl></td>              
+       </tr>           
+
+       <tr>
+               <td>PreMoveItem</td>
+               <td>(v2.0) アイテムが他のblog/カテゴリーに移される直前</td>
+               <td><dl>
+                       <dt class="ref">itemid</dt>
+                       <dd>アイテムID</dd>
+                       <dt class="ref">destblogid</dt>
+                       <dd>移動先のblogID</dd>
+                       <dt class="ref">destcatid</dt>
+                       <dd>移動先のカテゴリーID</dd>                  
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostMoveItem</td>
+               <td>(v2.0) アイテムが他のblog/カテゴリーに移された直後</td>
+               <td><dl>
+                       <dt class="ro">itemid</dt>
+                       <dd>アイテムID</dd>
+                       <dt class="ro">destblogid</dt>
+                       <dd>新しいblogID</dd>
+                       <dt class="ro">destcatid</dt>
+                       <dd>新しいカテゴリーID</dd>     
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PreMoveCategory</td>
+               <td>(v2.0) カテゴリーが他のblogに移される直前</td>
+               <td><dl>
+                       <dt class="ref">catid</dt>
+                       <dd>カテゴリーID</dd>
+                       <dt class="ref obj">sourceblog</dt>
+                       <dd>移動元の<code>BLOG</code> オブジェクト</dd>
+                       <dt class="ref obj">destblog</dt>
+                       <dd>移動先の<code>BLOG</code> オブジェクト</dd>                       
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>PostMoveCategory</td>
+               <td>(v2.0) カテゴリーが他のblogに移された直後</td>
+               <td><dl>
+                       <dt class="ro">catid</dt>
+                       <dd>カテゴリーID</dd>
+                       <dt class="ref obj">sourceblog</dt>
+                       <dd>移動元の<code>BLOG</code> オブジェクト</dd>
+                       <dt class="ref obj">destblog</dt>
+                       <dd>移動先の<code>BLOG</code> オブジェクト</dd>                       
+               </dl></td>              
+       </tr>   
+       <tr>
+               <td>MemberSettingsFormExtras</td>
+               <td>(v2.0) メンバー設定ページにフォームを追加可能<br /><br />                        
+                       あまり多くのデータを追加しないこと。また以下のように<strong>正しいXHTML</strong>を生成してください。
+            <pre class="example"><code>&lt;h4&gt;プラグイン名&lt;/h4&gt;
+&lt;form method="post" action="..."&gt;&lt;p&gt;
+追加フォームの内容&lt;/p&gt;&lt;/form&gt;</code></pre>
+このようにして、正しい構造を保ちつつ複数のプラグインがオプションを保持できます。またフィールド名の重複を避けるためにプレフィックスを用いてください(例 <code>plug_tb_url</code>)。</td>
+               <td><dl>
+                       <dt class="ref obj">member</dt>
+                       <dd><code>MEMBER</code> オブジェクトへの参照</dd>
+               </dl></td>              
+       </tr>
+       <tr>
+               <td>GeneralSettingsFormExtras</td>
+               <td>(v2.0) 一般設定ページにフォームを追加可能<br />
+                 <br />
+あまり多くのデータを追加しないこと。また以下のように<strong>正しいXHTML</strong>を生成してください。
+<pre class="example"><code>&lt;h4&gt;プラグイン名&lt;/h4&gt;
+&lt;form method="post" action="..."&gt;&lt;p&gt;
+追加フォームの内容&lt;/p&gt;&lt;/form&gt;</code></pre>
+このようにして、正しい構造を保ちつつ複数のプラグインがオプションを保持できます。またフィールド名の重複を避けるためにプレフィックスを用いてください(例 <code>plug_tb_url</code>)。</td>
+               <td>なし</td>         
+       </tr>
+       <tr>
+               <td>AdminPrePageHead</td>
+               <td>(v2.5) 管理画面で、ページヘッドを出力する直前。このイベントはヘッド領域にスクリプトやCSSを追加するのに用いられます。</td>
+               <td><dl>
+                       <dt class="ref">extrahead</dt>
+                       <dd>HTMLページのヘッド領域に埋め込まれる追加情報。ここに追加したいものを入れてください。</dd>
+                       <dt class="ro">action</dt>
+                       <dd>現在実行されているアクション、またはページタイプ</dd>
+               </dl></td>
+       </tr>
+       <tr>
+               <td>AdminPrePageFoot</td>
+               <td>(v2.5) 管理画面で、ページフッターを出力する直前。</td>
+         <td><dl>
+                       <dt class="ro">action</dt>
+                       <dd></dd>
+               </dl>
+           現在実行されているアクション、またはページタイプ</td>
+       </tr>
+       <tr>
+               <td>PreSendContentType</td>
+               <td>(v2.5) HTTPヘッダーにコンテントタイプがセットされる直前</td>
+               <td><dl>
+                       <dt class="ref">contentType</dt>
+                       <dd>コンテントタイプ(<code>application/xhtml+xml</code>など)</dd>
+                       <dt class="ref">charset</dt>
+                       <dd>キャラクターセット</dd>
+                       <dt class="ro">pageType</dt>
+                       <dd>表示するページの種類を示す文字列:<code>skin</code> (スキンタイプ), <code>media</code> (メディアライブラリ), <code>admin-<em>action</em></code> (管理エリア), <code>bookmarklet-<em>action</em></code> (ブックマークレット)</dd>
+               </dl></td>
+       </tr>
+       <tr>
+               <td>QuickMenu</td>
+               <td>(v2.5) 管理エリアのクイックメニューの一番下。そこへのプラグイン登録に利用されます。登録するにはoptionsに連想配列を入れます。実装例が<a href="#admin">プラグイン管理エリアを作る</a>のセクションにあります。</td>
+               <td><dl>
+                       <dt class="ref">options</dt>
+                       <dd>配列</dd>
+               </dl></td>
+       </tr>
+       <tr>
+               <td>BookmarkletExtraHead</td>
+               <td>(v2.5) ブックマークレット
+         XHTMLコードのヘッド領域内。</td>
+               <td><dl>
+                       <dt class="ref">extrahead</dt>
+                       <dd>XHTMLコードのヘッド領域に埋め込まれる追加情報。ここに追加したいものを入れてください。</dd>
+               </dl></td>
+       </tr>
+       <tr>
+               <td>FormExtra</td>
+               <td>(v3.2) このイベントは、プラグインがコメント、メンバー間メール、認証フォームのいずれかのフォーム内に追加フィールドを挿入するときに使います。フォーム処理の際に発生する <code>ValidateForm</code> イベントに対応します。</td>
+               <td><dl>
+                       <dt class="ro">type</dt>
+                       <dd>イベントを発生させるフォームタイプ
+                               <ul>
+                                       <li><code>activation</code></li>
+                                       <li><code>additemform</code> (注:これは管理画面のアイテム追加フォームではない)</li>
+                                       <li><code>commentform-loggedin</code></li>
+                                       <li><code>commentform-notloggedin</code></li>
+                                       <li><code>membermailform-loggedin</code></li>
+                                       <li><code>membermailform-notloggedin</code></li>
+                               </ul>
+                       </dd>
+                       <dt class="ro obj">member</dt>
+                       <dd><code>type</code> が <code>activation</code>のとき、このフィールドは認証メンバーの詳細情報を含みます</dd>
+               </dl></td>
+       </tr>
+       <tr>
+               <td>ValidateForm</td>
+               <td>(v3.2) コメント、メンバー間メール、アカウント認証のいずれかが処理されるときに呼ばれます。プラグインはこれで各データの評価を実行でき、もし不具合があれば処理を中断できます。<code>FormExtra</code> と共に使うとフォームにフィールドを追加できます。</td>
+               <td><dl>
+                       <dt class="ro">type</dt>
+                       <dd>処理されるフォームタイプ
+                               <ul>
+                                       <li><code>membermail</code></li>
+                                       <li><code>comment</code></li>
+                                       <li><code>activation</code></li>
+                               </ul>
+                       </dd>
+                       <dt class="ref">error</dt>
+                       <dd>フォーム処理をストップするときに、<code>error</code> フィールドに空でないエラーメッセージを記入します。このエラーメッセージはユーザー側に表示されます。</dd>
+                       <dt class="ref">comment</dt>
+                       <dd>コメントフォームのとき、コメントデータに関する連想配列を含みます。</dd>
+                       <dt class="ro obj">member</dt>
+                       <dd>認証フォームのとき、認証中のメンバー情報を含みます。</dd>
+               </dl></td>
+       </tr>
+<!--
+       <tr>
+               <td></td>
+               <td></td>
+               <td><dl>
+                       <dt></dt>
+                       <dd></dd>
+               </dl></td>
+       </tr>
+       <tr>
+               <td></td>
+               <td></td>
+               <td><dl>
+                       <dt></dt>
+                       <dd></dd>
+               </dl></td>
+       </tr>
+       <tr>
+               <td></td>
+               <td></td>
+               <td><dl>
+                       <dt></dt>
+                       <dd></dd>
+               </dl></td>
+       </tr>
+       <tr>
+               <td></td>
+               <td></td>
+               <td><dl>
+                       <dt></dt>
+                       <dd></dd>
+               </dl></td>
+       </tr>
+       <tr>
+               <td></td>
+               <td></td>
+               <td><dl>
+                       <dt></dt>
+                       <dd></dd>
+               </dl></td>
+       </tr>
+       <tr>
+               <td></td>
+               <td></td>
+               <td><dl>
+                       <dt></dt>
+                       <dd></dd>
+               </dl></td>
+       </tr>
+       <tr>
+               <td></td>
+               <td></td>
+               <td><dl>
+                       <dt></dt>
+                       <dd></dd>
+               </dl></td>
+       </tr>
+       <tr>
+               <td></td>
+               <td></td>
+               <td><dl>
+                       <dt></dt>
+                       <dd></dd>
+               </dl></td>
+       </tr> -->
+</table>
+
+
+
+<h1>オプションを保存する<a name="options" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
+
+<p>プラグインに簡単にオプションを登録・取得できるように一連のメソッドが用意されています。これらのオプションは直接Nucleusの管理エリアで編集でき、プラグイン自身の管理エリアを用意する必要もなく、PHPファイルそのものの中にオプションの値を書き込まずにすみます。</p>
+
+<p>オプションは異なったコンテクストで利用可能です。</p>
+
+<ol>
+       <li><strong>グローバルオプション</strong>:管理エリアのプラグインセクションで編集可能</li>
+       <li><strong>blogオプション</strong>:blog設定ページで編集可能</li>
+       <li><strong>カテゴリーオプション</strong>:blog設定ページ(のカテゴリー編集ページ)で編集可能</li>    
+       <li><strong>メンバーオプション</strong>:メンバー編集ページで編集可能</li>
+       <li><strong>アイテムオプション</strong>:アイテムの追加、およびアイテムの編集ページで編集可能</li>
+</ol>
+
+<h2>オプションの種類</h2>
+
+<p>オプションにはいくつかのタイプが提供されています。</p>
+
+<dl>
+       <dt>text</dt>
+       <dd>シンプルなテキスト</dd>
+       <dt>yesno</dt>
+       <dd>'yes'か'no'どちらか(編集画面ではラジオボタンとして表示されます)</dd>
+       <dt>password</dt>
+       <dd>テキストフィールド (編集画面では伏字で表示されます)</dd>
+       <dt>textarea (v2.2)</dt>
+       <dd>複数行のテキストフィールド</dd>
+       <dt>select (v2.2)</dt>
+       <dd>ドロップダウンメニュー。次のような形式の追加情報が必要です: Option 1|value1|Option 2|value2|Option 3|value3 </dd>
+</dl>
+
+<h2>オプション・メタ</h2>
+
+<p>Nucleus v3.2よりオプション・メタデータを用いて、オプションタイプを正しい値を受け取れるように制限できるようになりました。このメタデータは <code>$typeExtras</code>フィールドにセミコロン区切りのリストで保存されます。注:selectオプションでは、selectリストは<code>$typeExtras</code>のなかで一番最初でなければいけません。</p>
+
+<table><tr>
+       <th>キー</th>
+       <th>説明</th>
+</tr><tr>
+       <td><code>datatype</code></td>
+       <td>Nucleus本体に、どのデータ型を使いたいかという追加情報を与えます。現在は '<code>numerical</code>' のみ利用できます。 '<code>numerical</code>' を指定することでNucleusは数値情報のみを受け付けます(クライアントサイド・サーバサイド両方でチェック) ('<code>select</code>' と '<code>text</code>'のオプションタイプで利用できます)</td>
+</tr><tr>
+       <td><code>access</code></td>
+       <td>'<code>readonly</code>'にセットすることで、オプションを編集不可能にします('<code>text</code>' と '<code>textarea</code>'のオプションタイプで利用できます)<br />
+       '<code>hidden</code>'を使うと、利用者側にそのオプションの存在を完全に隠蔽します('<code>text</code>'のオプションタイプで利用できます)</td>
+</tr></table>
+
+<p>設定例</p>
+<pre class="example"><code>// 数値のみを受け付けるテキストオプションを作成
+$this->createBlogOption('FooBar', 'foobar', 'text', '0', 'datatype=numerical');
+// 数値のみを受け付けるセレクトオプションを作成
+$this->createItemOption('FooBar', 'foobar', 'select', '0', '0|0|1|1|2|2;datatype=numerical');
+// 編集不可能なテキストエリアオプションを作成
+$this->createOption('FooBar', 'foobar', 'textarea', 'This textarea is readonly', 'access=readonly');
+</code></pre>
+
+<h2>制限</h2>
+
+<ol>
+       <li>オプション名は最大20文字です。</li>
+       <li>オプションの説明文は最大255文字です。</li>
+       <li>オプションの値は制限ありません(v2.2より前のバージョンでは128文字の制限がありました)</li>
+       <li>'=', '|', ';' のキャラクターはセレクトオプション用のセレクトリストやオプション・メタデータ中で使用することはできません。</li>
+</ol>
+
+<h2>メソッド</h2>
+
+<h3>createOption($name, $desc, $type, $defValue = '', $typeExtras = '')</h3>
+
+<p><strong>グローバル</strong>なコンテクストで新しいオプションを生成します。</p>
+
+<table><tr>
+       <th>パラメータ</th>
+       <th>値</th>
+</tr><tr>
+       <td>$name</td>
+       <td>オプション名</td>
+</tr><tr>
+       <td>$desc</td>
+       <td>オプション編集画面で表示される説明文</td>
+</tr><tr>
+       <td>$type</td>
+       <td>オプションタイプ(前出)</td>
+</tr><tr>
+       <td>$defValue</td>
+       <td>初期値</td>
+</tr><tr>
+       <td>$typeExtras</td>
+       <td>オプションタイプの追加情報(前出)</td>
+</tr></table>
+
+<h3>[v2.2] createBlogOption($name, $desc, $type, $defValue = '', $typeExtras = '')</h3>
+
+<p><strong>blog</strong>のコンテクストで新しいオプションを生成します(<code>createOption</code>を参照)。</p>
+
+<h3>[v2.2] createCategoryOption($name, $desc, $type, $defValue = '', $typeExtras = '')</h3>
+
+<p><strong>カテゴリー</strong>のコンテクストで新しいオプションを生成します(<code>createOption</code>を参照)。</p>
+
+<h3>[v2.2] createMemberOption($name, $desc, $type, $defValue = '', $typeExtras = '')</h3>
+
+<p><strong>メンバー</strong>のコンテクストで新しいオプションを生成します(<code>createOption</code>を参照)。</p>
+
+<h3>[v3.2] createItemOption($name, $desc, $type, $defValue = '', $typeExtras = '')</h3>
+
+<p><strong>アイテム</strong>のコンテクストで新しいオプションを生成します(<code>createOption</code>を参照)。</p>
+
+<h3>setOption($name, $value)</h3>
+
+<p>すでにデータベースに存在するオプションの値を変更します。</p>
+
+<table><tr>
+       <th>パラメータ</th>
+       <th>値</th>
+</tr><tr>              
+       <td>$name</td>
+       <td>オプション名</td>
+</tr><tr>
+       <td>$value</td>
+       <td>新しい値</td>
+</tr></table>
+
+<h3>[v2.2] setBlogOption($blogid, $name, $value)</h3>
+
+<p>blogオプションの値を変更します。<code>blogid</code>属性はどのblogでそのオプションが有効かを示します(その他のオプション:<code>setOption</code>を参照)。</p>
+
+<h3>[v2.2] setCategoryOption($catid, $name, $value)</h3>
+
+<p>カテゴリーオプションの値を変更します。<code>catid</code>属性はどのカテゴリーでそのオプションが有効かを示します(その他のオプション:<code>setOption</code>を参照)。</p>
+
+<h3>[v2.2] setMemberOption($memberid, $name, $value)</h3>
+
+<p>メンバーオプションの値を変更します。<code>memberid</code>属性はどのメンバーでそのオプションが有効かを示します(その他のオプション:<code>setOption</code>を参照)。</p>
+
+<h3>[v3.2] setItemOption($itemid, $name, $value)</h3>
+
+<p>アイテムオプションの値を変更します。<code>itemid</code>属性はどのアイテムでそのオプションが有効かを示します(その他のオプション:<code>setOption</code>を参照)。</p>
+
+<h3>getOption($name)</h3>
+
+<p>データベース内のオプションの値を返します。</p>
+
+<table><tr>
+       <th>パラメータ</th>
+       <th>値</th>
+</tr><tr>              
+       <td>$name</td>
+       <td>オプション名</td>
+</tr></table>
+
+<h3>[v2.2] getBlogOption($blogid, $name)</h3>
+
+<p>blogオプションの値を返します。<code>blogid</code>属性は値がリスエストされたblogを示します(その他のオプション:<code>getOption</code>を参照)。</p>
+
+<h3>[v2.2] getCategoryOption($catid, $name)</h3>
+
+<p>カテゴリーオプションの値を返します。<code>catid</code>属性は値がリスエストされたカテゴリーを示します(その他のオプション:<code>getOption</code>を参照)。<br />
+</p>
+
+<h3>[v2.2] getMemberOption($memberid, $name)</h3>
+
+<p>メンバーオプションの値を返します。<code>memberid</code>属性は値がリスエストされたメンバーを示します(その他のオプション:<code>getOption</code>を参照)。</p>
+
+<h3>[v3.2] getItemOption($itemid, $name)</h3>
+
+<p>アイテムオプションの値を返します。<code>itemid</code>属性は値がリスエストされたアイテムを示します(その他のオプション:<code>getOption</code>を参照)。</p>
+
+<h3>deleteOption($name)</h3>
+
+<p>データベースからオプションを削除します。</p>
+
+<table><tr>
+       <th>パラメータ</th>
+       <th>値</th>
+</tr><tr>              
+       <td>$name</td>
+       <td>オプション名</td>
+</tr></table>
+
+<h3>[v2.2] deleteBlogOption($name)</h3>
+
+<p>blogオプションを削除します(<code>deleteOption</code>を参照)。</p>
+
+<h3>[v2.2] deleteCategoryOption($name)</h3>
+
+<p>カテゴリーオプションを削除します(<code>deleteOption</code>を参照)。</p>
+
+<h3>[v2.2] deleteMemberOption($name)</h3>
+
+<p>メンバーオプションを削除します(<code>deleteOption</code>を参照)。</p>
+
+<h3>[v3.2] deleteItemOption($name)</h3>
+
+<p>アイテムオプションを削除します(<code>deleteOption</code>を参照)。</p>
+
+<h3>[v2.2] getAllBlogOptions($name)</h3>
+
+<p>与えられたblogオプションの全ての値を返します。結果は存在するblogidごとの連想配列です。</p>
+
+<h3>[v2.2] getAllCategoryOptions($name)</h3>
+
+<p>与えられたカテゴリーオプションの全ての値を返します。結果は存在するcatidごとの連想配列です。</p>
+
+<h3>[v2.2] getAllMemberOptions($name)</h3>
+
+<p>与えられたメンバーオプションの全ての値を返します。結果は存在するmemberidごとの連想配列です。</p>
+
+<h3>[v3.2] getAllItemOptions($name)</h3>
+
+<p>与えられたアイテムオプションの全ての値を返します。結果は存在するitemidごとの連想配列です。</p>
+
+<h3>[v3.2] getBlogOptionTop($name, $amount = 10, $sort = 'desc')</h3>
+
+<p>与えられたオプションの最初の値を返します。結果は配列で、各要素がそれぞれのblogid ('id') の値 ('value') を持つ配列になっています。</p>
+
+<table><tr>
+       <th>パラメータ</th>
+       <th>値</th>
+</tr><tr>
+       <td>$name</td>
+       <td>オプション名</td>
+</tr><tr>
+       <td>$amount</td>
+       <td>必要なオプション数</td>
+</tr><tr>
+       <td>$sort</td>
+       <td>昇順 ('asc') か降順 ('desc') で並べ替え</td>
+</tr></table>
+
+<h3>[v3.2] getMemberOptionTop($name, $amount = 10, $sort = 'desc')</h3>
+
+<p>与えられたオプションの最初の値を返します。結果は配列で、各要素がそれぞれのメンバーID ('id') の値 ('value') を持つ配列になっています(パラメータは<code>getBlogOptionTop</code>を参照)。</p>
+
+<h3>[v3.2] getCategoryOptionTop($name, $amount = 10, $sort = 'desc')</h3>
+
+<p>与えられたオプションの最初の値を返します。結果は配列で、各要素がそれぞれのカテゴリーID ('id') の値 ('value') を持つ配列になっています(パラメータは<code>getBlogOptionTop</code>を参照)。</p>
+
+
+<h3>[v3.2] getItemOptionTop($name, $amount = 10, $sort = 'desc')</h3>
+
+<p>与えられたオプションの最初の値を返します。結果は配列で、各要素がそれぞれのアイテムID ('id') の値 ('value') を持つ配列になっています(パラメータは<code>getBlogOptionTop</code>を参照)。</p>
+
+
+<div class="note">
+<b>注:</b> プラグインクラス内のコンストラクタから、これらのファンクションを呼ぶことはできません。プラグインがロードされた後にこれらを実行したいときは、かわりに<code>init()</code>メソッド内に置きます。</div>
+
+<h1>データベース・テーブル<a name="tables" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
+
+<h2>Nucleusテーブルへのアクセス</h2>
+
+<p>v2.0まで、Nucleusテーブルへのアクセスは単に<code>nucleus_</code>と名づけられたテーブルに対してSQL命令を実行するだけのものでした。Nucleusのバージョン2.2以降はカスタム・テーブル名を利用できるようになったため、プラグイン開発に若干注意する必要があります。</p>
+
+<ol>
+       <li><code>nucleus_item</code> などの固定されたテーブル名の代わりに、テーブル名のプレフィックスを生成するために <code>sql_table('item') </code>というグローバルファンクションを利用します。</li>
+       <li><code>supportsFeature('SqlTablePrefix')</code> が呼ばれたときにプラグインが1(真)を返すようにします。これがないと、カスタムプレフィックスがセットされている場合でバージョンが2.0より大きいNucleusではプラグインをロードできません(用心のため)。</li>
+</ol>
+
+<p class="note">v2.0までのNucleusではグローバルファンクション <code>sql_table</code> は利用できないことに注意してください。もしこのメソッドを用いつつ、プラグインをv2.0以下のNucleusで動作させたい場合は、以下のコードをプラグインクラスの前に追加してください。</p>
+
+<pre class="example"><code>&lt;?
+
+// プラグインがNucleusバージョン2.0以下と互換性を持つために必要
+if (!function_exists('sql_table'))
+{
+       function sql_table($name) {
+               return 'nucleus_' . $name;
+       }
+}
+
+class NP_HelloWorld extends NucleusPlugin {
+...
+}
+
+?&gt;</code></pre>
+
+<h2>独自テーブル</h2>
+
+<p>もしプラグイン独自のテーブルが必要なら、<code>install</code>メソッドの中で独自テーブルを生成し、<code>unInstall</code>メソッドの中でそれを削除するようにします。</p>
+
+<p>いくつかの注意点</p>
+<ul>
+       <li><code>nucleus_plug_<em>plugname</em></code> のように、他のプラグインと競合しないテーブル名を考えてください。カスタムプレフィックスに対応するため、テーブル名を
+       <code>sql_table('plug_plugname')</code> で生成してください。
+       </li>
+       <li>自分自身でデータベース接続をする必要はありません。PHPコマンド <code>mysql_query()</code> を使ってSQL命令を実行できます。</li>
+       <li>自分でデータベース接続をする場合、後でNucleusデータベースへの接続を復元するようにしてください。自前処理の後で <code>sql_connect()</code>  を呼ぶことで可能です。頻繁な再接続を避けるために、コンストラクタでそれを行うのも良いです。<code>$this- &gt;db</code>のリンクIDを保持でき、各クエリにそれを渡すことができます。</li>
+       <li>バックアップ機能を使う時は、独自テーブルもバックアップに含めるよう、<code>getTableList()</code> を再定義してください。</li>
+</ul>
+
+<h1>プラグイン管理エリア<a name="admin" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
+
+<p>Ver2.5から、Nucleusの管理エリアに統合されたプラグイン管理エリアを作成できます。これらのページは従来のプラグイン管理ページや左側のクイックメニューからアクセスできます。</p>
+
+<h2>基本</h2>
+
+<p>管理エリアを提供するには、次のステップが必要です。</p>
+
+<ol>
+  <li>プラグインディレクトリに<strong>プラグイン名</strong>のサブディレクトリを作ります。たとえばプラグイン名が<code>NP_PluginName</code>なら、'pluginname'です。ディレクトリ名はすべて小文字で!</li>
+  <li>
+       そのディレクトリで、次のような<strong>index.php</strong>を用意します。
+       <pre><code>&lt;?php
+
+       // if your 'plugin' directory is not in the default location,
+       // edit this variable to point to your site directory
+       // (where config.php is)
+       $strRel = '../../../';
+
+       include($strRel . 'config.php');
+       if (!$member->isLoggedIn())
+               doError('You\'re not logged in.');
+
+       include($DIR_LIBS . 'PLUGINADMIN.php');
+
+       // create the admin area page
+       $oPluginAdmin = new PluginAdmin('<strong>PluginName</strong>');
+       $oPluginAdmin->start();
+
+       echo '&lt;h2&gt;プラグイン名&lt;/h2&gt;';
+
+       echo '&lt;p&gt;<strong>ページ内容</strong>&lt;p&gt;';
+
+       $oPluginAdmin->end();
+
+?&gt;</code></pre>
+  </li>
+  <li>
+       プラグイン側に次のコードを挿入し、クイックメニューイベントに登録します。
+    <pre><code>function event_QuickMenu(&amp;$data) {
+               array_push(
+                       $data['options'],
+                       array(
+                               'title' => '<strong>プラグイン名</strong>',
+                               'url' => $this->getAdminURL(),
+                               'tooltip' => '<strong>ツールチップテキスト</strong>'
+                       )
+               );
+       }</code></pre>
+  </li>
+  <li>
+       プラグイン側に次の関数を記述します。
+    <pre><code>function hasAdminArea()
+{
+       return 1;
+}</code></pre>
+  </li>
+</ol>
+
+<h2>考慮すること</h2>
+
+<ul>
+ <li>登録できるからといって安易にクイックメニューへ登録しないこと。クイックメニューにプラグインが100個並んだりしたらかなりウンザリするでしょう。ですので、クイックメニューに登録する場合でも、クイックメニュー登録を有効・無効化するプラグインオプションを(グローバルまたはメンバーオプションで)用意することを考えてください。</li>
+ <li><code>プラグインディレクトリが nucleus/plugins/ ではない場合は、index.php内の $strRel</code> 変数は手動で書き換える必要があります。</li>
+ <li>管理エリアのアウトプットが<strong>正しいXHTML</strong>になっているか確認してください。正しくないと、MozillaなどのGeckoベースのブラウザでページ表示が崩れます。</li>
+</ul>
+
+<h2>PluginAdmin クラス</h2>
+
+<p><code>PluginAdmin</code> クラスは助けになります。これを一度生成すれば、<code>$oPluginAdmin->plugin</code> でプラグインのインスタンスにアクセスできます。</p>
+
+<h1>プラグイン用ヘルプページ <a name="help" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
+
+<p>Nucleus v3.2から、プラグインの機能の概要、利用できるスキン・テンプレート変数、さらに詳細な情報のありかなどを示すヘルプページを提供可能になりました。</p>
+
+<p>ヘルプページは管理画面のプラグイン一覧からアクセス可能になります。</p>
+
+<h2>基本</h2>
+<p>ヘルプページを提供するために、次のステップが必要です。</p>
+<ol>
+<li>プラグインディレクトリに、プラグイン名をつけたサブディレクトリを作成します。ディレクトリ名は小文字であることに注意します。<a href="#admin">管理エリア</a>を作るときと同様です。</li>
+<li>そのディレクトリの中に help.html を作り、プラグインについての文章を記述します。次の雛型からはじめると良いでしょう。
+<pre><code>&lt;h3&gt;プラグインの概要&lt;/h3&gt;
+
+&lt;p&gt;このプラグインはヘルプページがいかに機能するかを示すためだけのものです&lt;/p&gt;
+
+&lt;h3&gt;インストール&lt;/h3&gt;
+
+&lt;p&gt;これを読めてるならインストールは正しく出来てます :-)&lt;/p&gt;
+
+&lt;h3&gt;スキン変数&lt;/h3&gt;
+
+&lt;p&gt;このプラグインはただのテストケースなのでスキン・テンプレート変数はありませんが、書くとすれば。
+
+&lt;ul&gt;&lt;li&gt;&lt;b&gt;&lt;%HelpPageTestCase1%&gt;&lt;/b&gt;: なにかをする&lt;/li&gt;
+&lt;li&gt;&lt;b&gt;&lt;%HelpPageTestCase1(foobar)%&gt;&lt;/b&gt;: 別のなにかをする&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;
+
+&lt;h3&gt;サポートとバグ報告&lt;/h3&gt;
+
+&lt;p&gt;さらなるサポートやバグ報告のために、次のフォーラムのスレッドを利用してください。
+&lt;a href="http://forum.nucleuscms.org/viewtopic.php?t=&lt;トピックID&gt;"&gt;
+http://forum.nucleuscms.org/viewtopic.php?t=&lt;トピックID&gt;&lt;/a&gt;&lt;/p&gt;
+
+&lt;h3&gt;バージョン履歴&lt;/h3&gt;
+
+&lt;ul&gt;&lt;li&gt;Version 0.1: 最初のテストケースバージョン&lt;/li&gt;
+&lt;li&gt;Version 0.0: その前のバージョン ;-)&lt;/li&gt;&lt;/ul&gt;</code></pre>
+</li>
+<li>supportsFeature('HelpPage') で0より大きい数字を返すように設定します。
+<pre><code>function supportsFeature($what) {
+       switch($what) {
+       case 'HelpPage':
+               return 1;
+         default:
+               return 0;
+       }
+  }</code></pre>
+</li>
+</ol>
+
+<h1>プラグイン依存チェック <a name="dependency" href="#top" class="toplink"><img src="../icon-up.gif" width="15" height="15" alt="back to top" /></a></h1>
+
+<p>v3.2から、他のプラグインとの依存関係を宣言する新しいプラグインインターフェイスが追加されました。他のプラグインの機能を必要とするプラグインに利用できます。特に依存関係が成立しなくて正しく機能しない状態を検知するときに便利です。</p>
+
+<h2>この機能を利用するプラグインの書き方</h2>
+
+<p>現実世界での例からはじめましょう。</p>
+
+<p>NP_PageLinkList は NP_BlogWithOffset の機能を利用するため、利用者には NP_BlogWithOffset のインストール後に NP_PageLinkList をインストールさせたいとします。NucleusはこのAPIによって、インストール前に依存関係を検知させる方法をプラグインに提供します。</p>
+
+<p>このケースでは、NP_PageLinkList 側に NP_BlogWithOffset が必要だということを認識させるコードを埋め込みます。プラグインがインストールされる際に、Nucleusコアは <code>getPluginDep()</code> というファンクションを呼び出します。このファンクションは必要なプラグインのリストを返し、コアはインストール済みのプラグインをチェックして、もし依存関係に欠如があればインストールを拒否します。</p>
+
+<p>必要なことは NP_PageLinkList にこのファンクションを追加する、ただそれだけです。</p>
+
+<pre><code>function getPluginDep() {
+        return array('NP_BlogWithOffset');
+}</code></pre>
+
+<p>このプラグイン依存チェックは、他のプラグインが依存しているプラグインがアンインストールされることも防ぎます。</p>
+
+</body>
+</html>
+
+
index bfcfab0..de22428 100755 (executable)
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
-<html xmlns="http://www.w3.org/1999/xhtml" lang="ja-JP" xml:lang="ja-JP">\r
-<head>\r
-       <!-- $Id: sqltables.html,v 1.4 2005-03-19 08:34:53 kimitake Exp $ -->\r
-       <!-- $NucleusJP$ -->\r
-       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\r
-       <title>Nucleus - SQL テーブル構造</title>\r
-       <link rel="stylesheet" type="text/css" href="styles/manual.css" />\r
-       <style type="text/css">\r
-               /* auto increment table columns*/\r
-               .autoinc {\r
-               }\r
-\r
-               /* primary-keys */\r
-               .primary {\r
-                       text-decoration: underline;\r
-                       font-weight: bold;\r
-               }\r
-\r
-               /* NOT NULL */\r
-               .notnull {\r
-               }\r
-\r
-               /* unique key */\r
-               .unique {\r
-               }\r
-\r
-               /* foreign keys */\r
-               .foreign {\r
-                       font-style: italic;\r
-               }\r
-\r
-               /* auto increment table columns*/\r
-               .autoinc {\r
-               }\r
-\r
-               /* fulltext index */\r
-               .fulltext {\r
-               }\r
-\r
-               /* columns/tables to remove in later versions */\r
-               .toremove {\r
-                       color: red;\r
-               }\r
-\r
-\r
-\r
-\r
-       </style>\r
-</head>\r
-<body>\r
-\r
-\r
-<a name="top" id="top"></a>\r
-<div class="heading">\r
-  SQLテーブル・リファレンス <i>2005年3月5日</i>\r
-</div>\r
-<strong>訳者注:</strong>\r
-<ul>\r
-  <li>このドキュメントの原文は以下のURLにあります。<br>\r
-    <a href="http://nucleuscms.org/documentation/devdocs/sqltables.html">http://nucleuscms.org/documentation/devdocs/sqltables.html</a></li>\r
-  <li>誤訳にお気づきの方は<a href="http://japan.nucleuscms.org/bb/viewforum.php?f=7">こちら</a>へご連絡いただけると助かります。</li>\r
-</ul>\r
-<h1>はじめに</h1>\r
-<p><a href="index.html">開発者向けドキュメントの目次へ戻る</a></p>\r
-<p>このドキュメントはNucleusのデータベース・テーブルのフィールドを解説しています。</p>\r
-<p class="note">構造は<strong>Nucleus v3.2</strong>のものに従っています</p>\r
-<h1><a name="toc" id="toc"></a>目次</h1>\r
-<ul>\r
-  <li><a href="#legend">文書中の色使いについて</a></li>\r
-  <li>Blog\r
-    <ul>\r
-      <li><a href="#nucleus_blog">nucleus_blog</a></li>\r
-      <li><a href="#nucleus_category">nucleus_category</a></li>\r
-      <li><a href="#nucleus_item">nucleus_item</a></li>\r
-      <li><a href="#nucleus_comment">nucleus_comment</a></li>\r
-      <li><a href="#nucleus_member">nucleus_member</a></li>\r
-      <li><a href="#nucleus_team">nucleus_team</a></li>\r
-    </ul>\r
-  </li>\r
-  <li>プラグイン\r
-    <ul>\r
-      <li><a href="#nucleus_plugin">nucleus_plugin</a></li>\r
-      <li><a href="#nucleus_plugin_event">nucleus_plugin_event</a></li>\r
-      <li><a href="#nucleus_plugin_option">nucleus_plugin_option</a></li>\r
-      <li><a href="#nucleus_plugin_option_desc">nucleus_plugin_option_desc</a></li>\r
-    </ul>\r
-  </li>\r
-  <li>スキンとテンプレート\r
-    <ul>\r
-      <li><a href="#nucleus_skin">nucleus_skin</a></li>\r
-      <li><a href="#nucleus_skin_desc">nucleus_skin_desc</a></li>\r
-      <li><a href="#nucleus_template">nucleus_template</a></li>\r
-      <li><a href="#nucleus_template_desc">nucleus_template_desc</a></li>\r
-    </ul>\r
-  </li>\r
-  <li>管理\r
-    <ul>\r
-      <li><a href="#nucleus_actionlog">nucleus_actionlog</a></li>\r
-      <li><a href="#nucleus_config">nucleus_config</a>\r
-        <ul>\r
-          <li><a href="#nucleus_config_options">可能なオプション</a></li>\r
-        </ul>\r
-      </li>\r
-      <li><a href="#nucleus_tickets">nucleus_tickets</a></li>\r
-      <li><a href="#nucleus_activation">nucleus_activation</a></li>\r
-    </ul>\r
-  </li>\r
-  <li>その他\r
-