From 9e0a3c7d38c1b452c3e7fa091c395da70d1b4a1c Mon Sep 17 00:00:00 2001 From: sakamocchi Date: Thu, 30 Dec 2010 08:07:24 +0000 Subject: [PATCH 1/1] This is a official release 3.51 by nucleus-jp team. git-svn-id: https://svn.sourceforge.jp/svnroot/nucleus-jp/nucleus-jp/tags/release-3-51@1078 1ca29b6e-896d-4ea0-84a5-967f57386b96 --- utf8/action.php | 35 + utf8/atom.php | 56 + utf8/benchmark.inc | 34 + utf8/config.php | 60 + utf8/createaccount.php | 106 + utf8/extra/fancyurls-2/.htaccess | 6 + utf8/extra/fancyurls/.htaccess | 21 + utf8/extra/fancyurls/archive | 20 + utf8/extra/fancyurls/archives | 19 + utf8/extra/fancyurls/blog | 19 + utf8/extra/fancyurls/category | 19 + utf8/extra/fancyurls/fancyurls.config.ja.php | 60 + utf8/extra/fancyurls/fancyurls.config.php | 60 + utf8/extra/fancyurls/item | 19 + utf8/extra/fancyurls/member | 19 + utf8/extra/fancyurls/special | 17 + utf8/extra/htaccess/media/media.htaccess | 11 + utf8/extra/htaccess/media/readme.ja.txt | 12 + utf8/extra/htaccess/media/readme.txt | 10 + utf8/extra/htaccess/skins/readme.ja.txt | 13 + utf8/extra/htaccess/skins/readme.txt | 10 + utf8/extra/htaccess/skins/skins.htaccess | 4 + utf8/index.php | 32 + utf8/install/index.php | 1240 +++ utf8/install/install.sql | 273 + utf8/install/install_lang_japanese.php | 518 ++ utf8/license.txt | 340 + utf8/media/.htaccess | 11 + utf8/media/readme.txt | 17 + utf8/nucleus/bookmarklet.php | 372 + .../documentation/devdocs/custominstall.html | 97 + utf8/nucleus/documentation/devdocs/index.html | 73 + .../devdocs/javascript/fontsizeChanger.js | 11 + utf8/nucleus/documentation/devdocs/plugins.html | 2532 ++++++ utf8/nucleus/documentation/devdocs/sqltables.html | 1312 +++ .../documentation/devdocs/styles/background.png | Bin 0 -> 348 bytes .../documentation/devdocs/styles/bullet.gif | Bin 0 -> 50 bytes .../documentation/devdocs/styles/manual.css | 289 + utf8/nucleus/documentation/devdocs/xmlrpc.html | 234 + utf8/nucleus/documentation/help.html | 5433 +++++++++++ utf8/nucleus/documentation/history.html | 1056 +++ utf8/nucleus/documentation/icon-help.gif | Bin 0 -> 157 bytes utf8/nucleus/documentation/icon-up.gif | Bin 0 -> 159 bytes utf8/nucleus/documentation/index.html | 474 + utf8/nucleus/documentation/pics/chmod_menu.png | Bin 0 -> 8134 bytes utf8/nucleus/documentation/pics/chmod_window.png | Bin 0 -> 17795 bytes utf8/nucleus/documentation/pics/screen4.png | Bin 0 -> 33833 bytes utf8/nucleus/documentation/pics/screen5.png | Bin 0 -> 4104 bytes .../documentation/pics/skinsandtemplates.png | Bin 0 -> 15424 bytes utf8/nucleus/documentation/skins.html | 567 ++ utf8/nucleus/documentation/styles/background.png | Bin 0 -> 348 bytes utf8/nucleus/documentation/styles/bullet.gif | Bin 0 -> 50 bytes utf8/nucleus/documentation/styles/manual.css | 217 + utf8/nucleus/documentation/tips.html | 473 + utf8/nucleus/forgotpassword.html | 61 + utf8/nucleus/forms/additemform.template | 30 + utf8/nucleus/forms/commentform-closed.template | 1 + utf8/nucleus/forms/commentform-loggedin.template | 18 + .../nucleus/forms/commentform-notloggedin.template | 28 + utf8/nucleus/forms/loginform-loggedin.template | 4 + utf8/nucleus/forms/loginform-notloggedin.template | 18 + .../forms/membermailform-disallowed.template | 1 + .../nucleus/forms/membermailform-loggedin.template | 15 + .../forms/membermailform-notloggedin.template | 18 + utf8/nucleus/forms/nucleusbutton.template | 3 + utf8/nucleus/forms/searchform.template | 8 + utf8/nucleus/images/button-aligncenter.gif | Bin 0 -> 85 bytes utf8/nucleus/images/button-alignleft.gif | Bin 0 -> 68 bytes utf8/nucleus/images/button-alignright.gif | Bin 0 -> 67 bytes utf8/nucleus/images/button-bold.gif | Bin 0 -> 73 bytes utf8/nucleus/images/button-copy.gif | Bin 0 -> 103 bytes utf8/nucleus/images/button-cut.gif | Bin 0 -> 89 bytes utf8/nucleus/images/button-italic.gif | Bin 0 -> 74 bytes utf8/nucleus/images/button-left.gif | Bin 0 -> 91 bytes utf8/nucleus/images/button-link.gif | Bin 0 -> 141 bytes utf8/nucleus/images/button-media.gif | Bin 0 -> 132 bytes utf8/nucleus/images/button-paste.gif | Bin 0 -> 127 bytes utf8/nucleus/images/button-preview.gif | Bin 0 -> 90 bytes utf8/nucleus/images/button-right.gif | Bin 0 -> 91 bytes utf8/nucleus/images/globe.gif | Bin 0 -> 124 bytes utf8/nucleus/index.php | 74 + utf8/nucleus/javascript/admin.js | 60 + utf8/nucleus/javascript/bookmarklet.js | 71 + utf8/nucleus/javascript/compatibility.js | 34 + utf8/nucleus/javascript/edit.js | 348 + utf8/nucleus/javascript/index.html | 11 + utf8/nucleus/javascript/numbercheck.js | 37 + utf8/nucleus/javascript/opennew.js | 63 + utf8/nucleus/javascript/templateEdit.js | 67 + utf8/nucleus/javascript/xmlhttprequest.js | 184 + utf8/nucleus/language/english-utf8.php | 1314 +++ utf8/nucleus/language/english.php | 1314 +++ utf8/nucleus/language/index.html | 25 + utf8/nucleus/language/japanese-euc.php | 1330 +++ utf8/nucleus/language/japanese-utf8.php | 1330 +++ utf8/nucleus/libs/.htaccess | 2 + utf8/nucleus/libs/ACTION.php | 430 + utf8/nucleus/libs/ACTIONLOG.php | 88 + utf8/nucleus/libs/ACTIONS.php | 1369 +++ utf8/nucleus/libs/ADMIN.php | 6488 +++++++++++++ utf8/nucleus/libs/BAN.php | 107 + utf8/nucleus/libs/BLOG.php | 1298 +++ utf8/nucleus/libs/BODYACTIONS.php | 153 + utf8/nucleus/libs/BaseActions.php | 311 + utf8/nucleus/libs/COMMENT.php | 151 + utf8/nucleus/libs/COMMENTACTIONS.php | 406 + utf8/nucleus/libs/COMMENTS.php | 344 + utf8/nucleus/libs/ENCAPSULATE.php | 259 + utf8/nucleus/libs/ITEM.php | 463 + utf8/nucleus/libs/ITEMACTIONS.php | 546 ++ utf8/nucleus/libs/KARMA.php | 118 + utf8/nucleus/libs/MANAGER.php | 579 ++ utf8/nucleus/libs/MEDIA.php | 290 + utf8/nucleus/libs/MEMBER.php | 810 ++ utf8/nucleus/libs/NOTIFICATION.php | 69 + utf8/nucleus/libs/PAGEFACTORY.php | 437 + utf8/nucleus/libs/PARSER.php | 161 + utf8/nucleus/libs/PLUGIN.php | 682 ++ utf8/nucleus/libs/PLUGINADMIN.php | 170 + utf8/nucleus/libs/SEARCH.php | 296 + utf8/nucleus/libs/SKIN.php | 432 + utf8/nucleus/libs/TEMPLATE.php | 199 + utf8/nucleus/libs/backup.php | 546 ++ utf8/nucleus/libs/entity.php | 186 + utf8/nucleus/libs/globalfunctions.php | 2213 +++++ utf8/nucleus/libs/include/admin-add.template | 143 + utf8/nucleus/libs/include/admin-edit.template | 168 + utf8/nucleus/libs/include/bookmarklet-add.template | 179 + .../nucleus/libs/include/bookmarklet-edit.template | 179 + utf8/nucleus/libs/include/index.html | 13 + utf8/nucleus/libs/include/readme.ja.txt | 7 + utf8/nucleus/libs/include/readme.txt | 7 + utf8/nucleus/libs/index.html | 11 + utf8/nucleus/libs/mb_emulator/convert.table | 208 + utf8/nucleus/libs/mb_emulator/history.html | 1031 +++ utf8/nucleus/libs/mb_emulator/history.txt | 40 + utf8/nucleus/libs/mb_emulator/lower.table | 615 ++ utf8/nucleus/libs/mb_emulator/mb-emulator.ini | 6 + utf8/nucleus/libs/mb_emulator/mb-emulator.php | 1678 ++++ utf8/nucleus/libs/mb_emulator/sjistouni.table | 9608 ++++++++++++++++++++ utf8/nucleus/libs/mb_emulator/unitosjis.table | 9607 +++++++++++++++++++ utf8/nucleus/libs/mb_emulator/upper.table | 651 ++ utf8/nucleus/libs/mysql.php | 122 + utf8/nucleus/libs/showlist.php | 674 ++ utf8/nucleus/libs/skinie.php | 683 ++ utf8/nucleus/libs/sql/mysql.php | 339 + utf8/nucleus/libs/sql/pdo.php | 586 ++ utf8/nucleus/libs/vars4.0.6.php | 154 + utf8/nucleus/libs/vars4.1.0.php | 142 + utf8/nucleus/libs/xmlrpc.inc.php | 3646 ++++++++ utf8/nucleus/libs/xmlrpcs.inc.php | 1174 +++ utf8/nucleus/media.php | 421 + utf8/nucleus/nucleus.gif | Bin 0 -> 1508 bytes utf8/nucleus/nucleus2.gif | Bin 0 -> 666 bytes utf8/nucleus/plugins/NP_Ping.php | 385 + utf8/nucleus/plugins/NP_SkinFiles.php | 162 + utf8/nucleus/plugins/index.html | 11 + utf8/nucleus/plugins/ping/english.php | 19 + utf8/nucleus/plugins/ping/japanese-euc.php | 19 + utf8/nucleus/plugins/ping/japanese-utf8.php | 19 + utf8/nucleus/plugins/ping/ping.php | 16 + utf8/nucleus/plugins/skinfiles/dir.gif | Bin 0 -> 1019 bytes utf8/nucleus/plugins/skinfiles/english.php | 185 + utf8/nucleus/plugins/skinfiles/generic.gif | Bin 0 -> 598 bytes utf8/nucleus/plugins/skinfiles/help.html | 8 + utf8/nucleus/plugins/skinfiles/home.gif | Bin 0 -> 1017 bytes utf8/nucleus/plugins/skinfiles/html.gif | Bin 0 -> 626 bytes utf8/nucleus/plugins/skinfiles/image.gif | Bin 0 -> 596 bytes utf8/nucleus/plugins/skinfiles/index.php | 1514 +++ utf8/nucleus/plugins/skinfiles/japanese-euc.php | 185 + utf8/nucleus/plugins/skinfiles/japanese-utf8.php | 184 + utf8/nucleus/plugins/skinfiles/php.gif | Bin 0 -> 612 bytes utf8/nucleus/plugins/skinfiles/style.css | 59 + utf8/nucleus/plugins/skinfiles/text.gif | Bin 0 -> 605 bytes utf8/nucleus/styles/addedit.css | 42 + utf8/nucleus/styles/admin.css | 458 + utf8/nucleus/styles/background.png | Bin 0 -> 310 bytes utf8/nucleus/styles/bookmarklet.css | 233 + utf8/nucleus/styles/bullet.gif | Bin 0 -> 50 bytes .../ui-bg_diagonals-thick_18_b81900_40x40.png | Bin 0 -> 260 bytes .../ui-bg_diagonals-thick_20_666666_40x40.png | Bin 0 -> 371 bytes .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 180 bytes .../images/ui-bg_flat_100_ffffff_40x100.png | Bin 0 -> 178 bytes .../images/ui-bg_flat_10_000000_40x100.png | Bin 0 -> 178 bytes .../images/ui-bg_glass_100_eaeaea_1x400.png | Bin 0 -> 105 bytes .../images/ui-bg_glass_100_fdf5ce_1x400.png | Bin 0 -> 125 bytes .../images/ui-bg_glass_55_fbf9ee_1x400.png | Bin 0 -> 120 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 105 bytes .../images/ui-bg_glass_75_dadada_1x400.png | Bin 0 -> 111 bytes .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 0 -> 110 bytes .../images/ui-bg_glass_75_ffffff_1x400.png | Bin 0 -> 107 bytes .../ui-bg_highlight-hard_72_fecf03_1x100.png | Bin 0 -> 120 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 0 -> 101 bytes .../ui-bg_highlight-soft_75_ffe45c_1x100.png | Bin 0 -> 129 bytes .../images/ui-bg_inset-soft_95_fef1ec_1x100.png | Bin 0 -> 123 bytes .../jquery-ui/images/ui-icons_222222_256x240.png | Bin 0 -> 4379 bytes .../jquery-ui/images/ui-icons_228ef1_256x240.png | Bin 0 -> 4379 bytes .../jquery-ui/images/ui-icons_2e83ff_256x240.png | Bin 0 -> 4379 bytes .../jquery-ui/images/ui-icons_454545_256x240.png | Bin 0 -> 4379 bytes .../jquery-ui/images/ui-icons_888888_256x240.png | Bin 0 -> 4379 bytes .../jquery-ui/images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 4379 bytes .../jquery-ui/images/ui-icons_ef8c08_256x240.png | Bin 0 -> 4379 bytes .../jquery-ui/images/ui-icons_fbcb09_256x240.png | Bin 0 -> 4379 bytes .../jquery-ui/images/ui-icons_fecf03_256x240.png | Bin 0 -> 4379 bytes .../jquery-ui/images/ui-icons_ffffff_256x240.png | Bin 0 -> 4379 bytes utf8/nucleus/styles/jquery-ui/ui.accordion.css | 9 + utf8/nucleus/styles/jquery-ui/ui.all.css | 6 + utf8/nucleus/styles/jquery-ui/ui.base.css | 9 + utf8/nucleus/styles/jquery-ui/ui.core.css | 37 + utf8/nucleus/styles/jquery-ui/ui.datepicker.css | 62 + utf8/nucleus/styles/jquery-ui/ui.dialog.css | 13 + utf8/nucleus/styles/jquery-ui/ui.progressbar.css | 4 + utf8/nucleus/styles/jquery-ui/ui.resizable.css | 13 + utf8/nucleus/styles/jquery-ui/ui.slider.css | 17 + utf8/nucleus/styles/jquery-ui/ui.tabs.css | 9 + utf8/nucleus/styles/jquery-ui/ui.theme.css | 223 + utf8/nucleus/styles/logo.gif | Bin 0 -> 4535 bytes utf8/nucleus/styles/manual.css | 179 + utf8/nucleus/styles/popups.css | 105 + utf8/nucleus/styles/quickb-hover.jpg | Bin 0 -> 493 bytes utf8/nucleus/styles/quickb-hover_org.jpg | Bin 0 -> 493 bytes utf8/nucleus/styles/quickb.jpg | Bin 0 -> 325 bytes utf8/nucleus/styles/quickb_org.jpg | Bin 0 -> 325 bytes utf8/nucleus/upgrades/index.html | 27 + utf8/nucleus/upgrades/index.php | 295 + utf8/nucleus/upgrades/upgrade.functions.php | 346 + utf8/nucleus/upgrades/upgrade.php | 91 + utf8/nucleus/upgrades/upgrade0.95.php | 34 + utf8/nucleus/upgrades/upgrade0.96.php | 110 + utf8/nucleus/upgrades/upgrade1.0.php | 69 + utf8/nucleus/upgrades/upgrade1.1.php | 129 + utf8/nucleus/upgrades/upgrade1.5.php | 126 + utf8/nucleus/upgrades/upgrade2.0.php | 104 + utf8/nucleus/upgrades/upgrade2.5.php | 143 + utf8/nucleus/upgrades/upgrade3.0.php | 31 + utf8/nucleus/upgrades/upgrade3.1.php | 31 + utf8/nucleus/upgrades/upgrade3.2.php | 62 + utf8/nucleus/upgrades/upgrade3.3.php | 72 + utf8/nucleus/upgrades/upgrade3.31.php | 51 + utf8/nucleus/upgrades/upgrade3.4.php | 64 + utf8/nucleus/upgrades/upgrade3.5.php | 49 + utf8/nucleus/xmlrpc/api_blogger.inc.php | 453 + utf8/nucleus/xmlrpc/api_metaweblog.inc.php | 529 ++ utf8/nucleus/xmlrpc/api_mt.inc.php | 424 + utf8/nucleus/xmlrpc/api_nucleus.inc.php | 341 + utf8/nucleus/xmlrpc/index.html | 25 + utf8/nucleus/xmlrpc/server.php | 320 + utf8/readme.html | 34 + utf8/robots.txt | 2 + utf8/rsd.php | 28 + utf8/skins/.htaccess | 4 + utf8/skins/atom/skinbackup.xml | 53 + utf8/skins/default/default_left.css | 499 + utf8/skins/default/default_right.css | 499 + utf8/skins/default/favicon.ico | Bin 0 -> 1127 bytes utf8/skins/default/images/arrow.gif | Bin 0 -> 55 bytes utf8/skins/default/images/bg.gif | Bin 0 -> 50 bytes utf8/skins/default/images/bgcategory.gif | Bin 0 -> 178 bytes utf8/skins/default/images/bgcomment.gif | Bin 0 -> 69 bytes utf8/skins/default/images/bgcontainer01.gif | Bin 0 -> 91 bytes utf8/skins/default/images/bgcontainer02.gif | Bin 0 -> 91 bytes utf8/skins/default/images/bgedit.gif | Bin 0 -> 67 bytes utf8/skins/default/images/bgpostedby.gif | Bin 0 -> 122 bytes utf8/skins/default/images/commentquote01.gif | Bin 0 -> 317 bytes utf8/skins/default/images/commentquote02.gif | Bin 0 -> 317 bytes utf8/skins/default/images/corner_br.gif | Bin 0 -> 100 bytes utf8/skins/default/images/corner_tr.gif | Bin 0 -> 99 bytes utf8/skins/default/images/dot.gif | Bin 0 -> 49 bytes utf8/skins/default/images/dotv.gif | Bin 0 -> 49 bytes utf8/skins/default/images/header.jpg | Bin 0 -> 8500 bytes utf8/skins/default/images/header_sm.jpg | Bin 0 -> 470 bytes utf8/skins/default/images/nucleus.gif | Bin 0 -> 1508 bytes utf8/skins/default/images/shadow.gif | Bin 0 -> 1651 bytes utf8/skins/default/images/sidetitlebg.gif | Bin 0 -> 51 bytes utf8/skins/default/inc/additemform.inc | 9 + utf8/skins/default/inc/benchmark.inc | 34 + utf8/skins/default/inc/footer.inc | 6 + utf8/skins/default/inc/head.inc | 26 + utf8/skins/default/inc/header.inc | 12 + utf8/skins/default/inc/linklist.inc | 10 + utf8/skins/default/inc/navigation.inc | 59 + utf8/skins/default/inc/show_benchmark.inc | 15 + utf8/skins/default/inc/sidebar.inc | 111 + utf8/skins/default/jlocal.css | 17 + utf8/skins/default/nicetitle.css | 32 + utf8/skins/default/nicetitle.js | 217 + utf8/skins/default/preview-large.png | Bin 0 -> 60532 bytes utf8/skins/default/preview.png | Bin 0 -> 11022 bytes utf8/skins/default/readme.html | 52 + utf8/skins/default/skinbackup.xml | 817 ++ utf8/skins/default/skinbackup.xml.org | 568 ++ utf8/skins/readme.txt | 12 + utf8/skins/rsd/skinbackup.xml | 27 + utf8/skins/rss2.0/skinbackup.xml | 50 + utf8/xml-rss2.php | 74 + 295 files changed, 85741 insertions(+) create mode 100755 utf8/action.php create mode 100755 utf8/atom.php create mode 100644 utf8/benchmark.inc create mode 100755 utf8/config.php create mode 100644 utf8/createaccount.php create mode 100644 utf8/extra/fancyurls-2/.htaccess create mode 100755 utf8/extra/fancyurls/.htaccess create mode 100755 utf8/extra/fancyurls/archive create mode 100755 utf8/extra/fancyurls/archives create mode 100755 utf8/extra/fancyurls/blog create mode 100755 utf8/extra/fancyurls/category create mode 100644 utf8/extra/fancyurls/fancyurls.config.ja.php create mode 100755 utf8/extra/fancyurls/fancyurls.config.php create mode 100755 utf8/extra/fancyurls/item create mode 100755 utf8/extra/fancyurls/member create mode 100644 utf8/extra/fancyurls/special create mode 100644 utf8/extra/htaccess/media/media.htaccess create mode 100644 utf8/extra/htaccess/media/readme.ja.txt create mode 100644 utf8/extra/htaccess/media/readme.txt create mode 100644 utf8/extra/htaccess/skins/readme.ja.txt create mode 100644 utf8/extra/htaccess/skins/readme.txt create mode 100644 utf8/extra/htaccess/skins/skins.htaccess create mode 100755 utf8/index.php create mode 100755 utf8/install/index.php create mode 100755 utf8/install/install.sql create mode 100644 utf8/install/install_lang_japanese.php create mode 100755 utf8/license.txt create mode 100644 utf8/media/.htaccess create mode 100755 utf8/media/readme.txt create mode 100755 utf8/nucleus/bookmarklet.php create mode 100755 utf8/nucleus/documentation/devdocs/custominstall.html create mode 100755 utf8/nucleus/documentation/devdocs/index.html create mode 100644 utf8/nucleus/documentation/devdocs/javascript/fontsizeChanger.js create mode 100755 utf8/nucleus/documentation/devdocs/plugins.html create mode 100755 utf8/nucleus/documentation/devdocs/sqltables.html create mode 100644 utf8/nucleus/documentation/devdocs/styles/background.png create mode 100644 utf8/nucleus/documentation/devdocs/styles/bullet.gif create mode 100755 utf8/nucleus/documentation/devdocs/styles/manual.css create mode 100755 utf8/nucleus/documentation/devdocs/xmlrpc.html create mode 100644 utf8/nucleus/documentation/help.html create mode 100755 utf8/nucleus/documentation/history.html create mode 100755 utf8/nucleus/documentation/icon-help.gif create mode 100755 utf8/nucleus/documentation/icon-up.gif create mode 100755 utf8/nucleus/documentation/index.html create mode 100755 utf8/nucleus/documentation/pics/chmod_menu.png create mode 100755 utf8/nucleus/documentation/pics/chmod_window.png create mode 100755 utf8/nucleus/documentation/pics/screen4.png create mode 100755 utf8/nucleus/documentation/pics/screen5.png create mode 100755 utf8/nucleus/documentation/pics/skinsandtemplates.png create mode 100755 utf8/nucleus/documentation/skins.html create mode 100644 utf8/nucleus/documentation/styles/background.png create mode 100644 utf8/nucleus/documentation/styles/bullet.gif create mode 100755 utf8/nucleus/documentation/styles/manual.css create mode 100755 utf8/nucleus/documentation/tips.html create mode 100755 utf8/nucleus/forgotpassword.html create mode 100755 utf8/nucleus/forms/additemform.template create mode 100755 utf8/nucleus/forms/commentform-closed.template create mode 100755 utf8/nucleus/forms/commentform-loggedin.template create mode 100755 utf8/nucleus/forms/commentform-notloggedin.template create mode 100755 utf8/nucleus/forms/loginform-loggedin.template create mode 100755 utf8/nucleus/forms/loginform-notloggedin.template create mode 100755 utf8/nucleus/forms/membermailform-disallowed.template create mode 100755 utf8/nucleus/forms/membermailform-loggedin.template create mode 100755 utf8/nucleus/forms/membermailform-notloggedin.template create mode 100755 utf8/nucleus/forms/nucleusbutton.template create mode 100755 utf8/nucleus/forms/searchform.template create mode 100755 utf8/nucleus/images/button-aligncenter.gif create mode 100755 utf8/nucleus/images/button-alignleft.gif create mode 100755 utf8/nucleus/images/button-alignright.gif create mode 100755 utf8/nucleus/images/button-bold.gif create mode 100755 utf8/nucleus/images/button-copy.gif create mode 100755 utf8/nucleus/images/button-cut.gif create mode 100755 utf8/nucleus/images/button-italic.gif create mode 100755 utf8/nucleus/images/button-left.gif create mode 100755 utf8/nucleus/images/button-link.gif create mode 100755 utf8/nucleus/images/button-media.gif create mode 100755 utf8/nucleus/images/button-paste.gif create mode 100755 utf8/nucleus/images/button-preview.gif create mode 100755 utf8/nucleus/images/button-right.gif create mode 100755 utf8/nucleus/images/globe.gif create mode 100755 utf8/nucleus/index.php create mode 100755 utf8/nucleus/javascript/admin.js create mode 100755 utf8/nucleus/javascript/bookmarklet.js create mode 100755 utf8/nucleus/javascript/compatibility.js create mode 100755 utf8/nucleus/javascript/edit.js create mode 100755 utf8/nucleus/javascript/index.html create mode 100755 utf8/nucleus/javascript/numbercheck.js create mode 100755 utf8/nucleus/javascript/opennew.js create mode 100755 utf8/nucleus/javascript/templateEdit.js create mode 100644 utf8/nucleus/javascript/xmlhttprequest.js create mode 100644 utf8/nucleus/language/english-utf8.php create mode 100755 utf8/nucleus/language/english.php create mode 100755 utf8/nucleus/language/index.html create mode 100644 utf8/nucleus/language/japanese-euc.php create mode 100755 utf8/nucleus/language/japanese-utf8.php create mode 100644 utf8/nucleus/libs/.htaccess create mode 100755 utf8/nucleus/libs/ACTION.php create mode 100755 utf8/nucleus/libs/ACTIONLOG.php create mode 100644 utf8/nucleus/libs/ACTIONS.php create mode 100755 utf8/nucleus/libs/ADMIN.php create mode 100755 utf8/nucleus/libs/BAN.php create mode 100755 utf8/nucleus/libs/BLOG.php create mode 100644 utf8/nucleus/libs/BODYACTIONS.php create mode 100644 utf8/nucleus/libs/BaseActions.php create mode 100755 utf8/nucleus/libs/COMMENT.php create mode 100644 utf8/nucleus/libs/COMMENTACTIONS.php create mode 100755 utf8/nucleus/libs/COMMENTS.php create mode 100644 utf8/nucleus/libs/ENCAPSULATE.php create mode 100755 utf8/nucleus/libs/ITEM.php create mode 100644 utf8/nucleus/libs/ITEMACTIONS.php create mode 100755 utf8/nucleus/libs/KARMA.php create mode 100755 utf8/nucleus/libs/MANAGER.php create mode 100755 utf8/nucleus/libs/MEDIA.php create mode 100755 utf8/nucleus/libs/MEMBER.php create mode 100755 utf8/nucleus/libs/NOTIFICATION.php create mode 100755 utf8/nucleus/libs/PAGEFACTORY.php create mode 100755 utf8/nucleus/libs/PARSER.php create mode 100755 utf8/nucleus/libs/PLUGIN.php create mode 100755 utf8/nucleus/libs/PLUGINADMIN.php create mode 100755 utf8/nucleus/libs/SEARCH.php create mode 100755 utf8/nucleus/libs/SKIN.php create mode 100755 utf8/nucleus/libs/TEMPLATE.php create mode 100755 utf8/nucleus/libs/backup.php create mode 100644 utf8/nucleus/libs/entity.php create mode 100755 utf8/nucleus/libs/globalfunctions.php create mode 100755 utf8/nucleus/libs/include/admin-add.template create mode 100755 utf8/nucleus/libs/include/admin-edit.template create mode 100755 utf8/nucleus/libs/include/bookmarklet-add.template create mode 100755 utf8/nucleus/libs/include/bookmarklet-edit.template create mode 100755 utf8/nucleus/libs/include/index.html create mode 100644 utf8/nucleus/libs/include/readme.ja.txt create mode 100755 utf8/nucleus/libs/include/readme.txt create mode 100755 utf8/nucleus/libs/index.html create mode 100755 utf8/nucleus/libs/mb_emulator/convert.table create mode 100755 utf8/nucleus/libs/mb_emulator/history.html create mode 100755 utf8/nucleus/libs/mb_emulator/history.txt create mode 100644 utf8/nucleus/libs/mb_emulator/lower.table create mode 100755 utf8/nucleus/libs/mb_emulator/mb-emulator.ini create mode 100755 utf8/nucleus/libs/mb_emulator/mb-emulator.php create mode 100755 utf8/nucleus/libs/mb_emulator/sjistouni.table create mode 100755 utf8/nucleus/libs/mb_emulator/unitosjis.table create mode 100644 utf8/nucleus/libs/mb_emulator/upper.table create mode 100644 utf8/nucleus/libs/mysql.php create mode 100644 utf8/nucleus/libs/showlist.php create mode 100755 utf8/nucleus/libs/skinie.php create mode 100755 utf8/nucleus/libs/sql/mysql.php create mode 100755 utf8/nucleus/libs/sql/pdo.php create mode 100755 utf8/nucleus/libs/vars4.0.6.php create mode 100755 utf8/nucleus/libs/vars4.1.0.php create mode 100755 utf8/nucleus/libs/xmlrpc.inc.php create mode 100755 utf8/nucleus/libs/xmlrpcs.inc.php create mode 100755 utf8/nucleus/media.php create mode 100755 utf8/nucleus/nucleus.gif create mode 100755 utf8/nucleus/nucleus2.gif create mode 100644 utf8/nucleus/plugins/NP_Ping.php create mode 100644 utf8/nucleus/plugins/NP_SkinFiles.php create mode 100755 utf8/nucleus/plugins/index.html create mode 100644 utf8/nucleus/plugins/ping/english.php create mode 100644 utf8/nucleus/plugins/ping/japanese-euc.php create mode 100644 utf8/nucleus/plugins/ping/japanese-utf8.php create mode 100644 utf8/nucleus/plugins/ping/ping.php create mode 100644 utf8/nucleus/plugins/skinfiles/dir.gif create mode 100644 utf8/nucleus/plugins/skinfiles/english.php create mode 100644 utf8/nucleus/plugins/skinfiles/generic.gif create mode 100644 utf8/nucleus/plugins/skinfiles/help.html create mode 100644 utf8/nucleus/plugins/skinfiles/home.gif create mode 100644 utf8/nucleus/plugins/skinfiles/html.gif create mode 100644 utf8/nucleus/plugins/skinfiles/image.gif create mode 100644 utf8/nucleus/plugins/skinfiles/index.php create mode 100644 utf8/nucleus/plugins/skinfiles/japanese-euc.php create mode 100644 utf8/nucleus/plugins/skinfiles/japanese-utf8.php create mode 100644 utf8/nucleus/plugins/skinfiles/php.gif create mode 100644 utf8/nucleus/plugins/skinfiles/style.css create mode 100644 utf8/nucleus/plugins/skinfiles/text.gif create mode 100755 utf8/nucleus/styles/addedit.css create mode 100755 utf8/nucleus/styles/admin.css create mode 100644 utf8/nucleus/styles/background.png create mode 100755 utf8/nucleus/styles/bookmarklet.css create mode 100644 utf8/nucleus/styles/bullet.gif create mode 100644 utf8/nucleus/styles/jquery-ui/images/ui-bg_diagonals-thick_18_b81900_40x40.png create mode 100644 utf8/nucleus/styles/jquery-ui/images/ui-bg_diagonals-thick_20_666666_40x40.png create mode 100644 utf8/nucleus/styles/jquery-ui/images/ui-bg_flat_0_aaaaaa_40x100.png create mode 100644 utf8/nucleus/styles/jquery-ui/images/ui-bg_flat_100_ffffff_40x100.png create mode 100644 utf8/nucleus/styles/jquery-ui/images/ui-bg_flat_10_000000_40x100.png create mode 100644 utf8/nucleus/styles/jquery-ui/images/ui-bg_glass_100_eaeaea_1x400.png create mode 100644 utf8/nucleus/styles/jquery-ui/images/ui-bg_glass_100_fdf5ce_1x400.png create mode 100644 utf8/nucleus/styles/jquery-ui/images/ui-bg_glass_55_fbf9ee_1x400.png create mode 100644 utf8/nucleus/styles/jquery-ui/images/ui-bg_glass_65_ffffff_1x400.png create mode 100644 utf8/nucleus/styles/jquery-ui/images/ui-bg_glass_75_dadada_1x400.png create mode 100644 utf8/nucleus/styles/jquery-ui/images/ui-bg_glass_75_e6e6e6_1x400.png create mode 100644 utf8/nucleus/styles/jquery-ui/images/ui-bg_glass_75_ffffff_1x400.png create mode 100644 utf8/nucleus/styles/jquery-ui/images/ui-bg_highlight-hard_72_fecf03_1x100.png create mode 100644 utf8/nucleus/styles/jquery-ui/images/ui-bg_highlight-soft_75_cccccc_1x100.png create mode 100644 utf8/nucleus/styles/jquery-ui/images/ui-bg_highlight-soft_75_ffe45c_1x100.png create mode 100644 utf8/nucleus/styles/jquery-ui/images/ui-bg_inset-soft_95_fef1ec_1x100.png create mode 100644 utf8/nucleus/styles/jquery-ui/images/ui-icons_222222_256x240.png create mode 100644 utf8/nucleus/styles/jquery-ui/images/ui-icons_228ef1_256x240.png create mode 100644 utf8/nucleus/styles/jquery-ui/images/ui-icons_2e83ff_256x240.png create mode 100644 utf8/nucleus/styles/jquery-ui/images/ui-icons_454545_256x240.png create mode 100644 utf8/nucleus/styles/jquery-ui/images/ui-icons_888888_256x240.png create mode 100644 utf8/nucleus/styles/jquery-ui/images/ui-icons_cd0a0a_256x240.png create mode 100644 utf8/nucleus/styles/jquery-ui/images/ui-icons_ef8c08_256x240.png create mode 100644 utf8/nucleus/styles/jquery-ui/images/ui-icons_fbcb09_256x240.png create mode 100644 utf8/nucleus/styles/jquery-ui/images/ui-icons_fecf03_256x240.png create mode 100644 utf8/nucleus/styles/jquery-ui/images/ui-icons_ffffff_256x240.png create mode 100644 utf8/nucleus/styles/jquery-ui/ui.accordion.css create mode 100644 utf8/nucleus/styles/jquery-ui/ui.all.css create mode 100644 utf8/nucleus/styles/jquery-ui/ui.base.css create mode 100644 utf8/nucleus/styles/jquery-ui/ui.core.css create mode 100644 utf8/nucleus/styles/jquery-ui/ui.datepicker.css create mode 100644 utf8/nucleus/styles/jquery-ui/ui.dialog.css create mode 100644 utf8/nucleus/styles/jquery-ui/ui.progressbar.css create mode 100644 utf8/nucleus/styles/jquery-ui/ui.resizable.css create mode 100644 utf8/nucleus/styles/jquery-ui/ui.slider.css create mode 100644 utf8/nucleus/styles/jquery-ui/ui.tabs.css create mode 100644 utf8/nucleus/styles/jquery-ui/ui.theme.css create mode 100755 utf8/nucleus/styles/logo.gif create mode 100755 utf8/nucleus/styles/manual.css create mode 100755 utf8/nucleus/styles/popups.css create mode 100644 utf8/nucleus/styles/quickb-hover.jpg create mode 100755 utf8/nucleus/styles/quickb-hover_org.jpg create mode 100644 utf8/nucleus/styles/quickb.jpg create mode 100755 utf8/nucleus/styles/quickb_org.jpg create mode 100644 utf8/nucleus/upgrades/index.html create mode 100755 utf8/nucleus/upgrades/index.php create mode 100755 utf8/nucleus/upgrades/upgrade.functions.php create mode 100755 utf8/nucleus/upgrades/upgrade.php create mode 100755 utf8/nucleus/upgrades/upgrade0.95.php create mode 100755 utf8/nucleus/upgrades/upgrade0.96.php create mode 100755 utf8/nucleus/upgrades/upgrade1.0.php create mode 100755 utf8/nucleus/upgrades/upgrade1.1.php create mode 100755 utf8/nucleus/upgrades/upgrade1.5.php create mode 100755 utf8/nucleus/upgrades/upgrade2.0.php create mode 100755 utf8/nucleus/upgrades/upgrade2.5.php create mode 100755 utf8/nucleus/upgrades/upgrade3.0.php create mode 100755 utf8/nucleus/upgrades/upgrade3.1.php create mode 100755 utf8/nucleus/upgrades/upgrade3.2.php create mode 100644 utf8/nucleus/upgrades/upgrade3.3.php create mode 100644 utf8/nucleus/upgrades/upgrade3.31.php create mode 100644 utf8/nucleus/upgrades/upgrade3.4.php create mode 100755 utf8/nucleus/upgrades/upgrade3.5.php create mode 100755 utf8/nucleus/xmlrpc/api_blogger.inc.php create mode 100755 utf8/nucleus/xmlrpc/api_metaweblog.inc.php create mode 100755 utf8/nucleus/xmlrpc/api_mt.inc.php create mode 100755 utf8/nucleus/xmlrpc/api_nucleus.inc.php create mode 100755 utf8/nucleus/xmlrpc/index.html create mode 100755 utf8/nucleus/xmlrpc/server.php create mode 100644 utf8/readme.html create mode 100755 utf8/robots.txt create mode 100755 utf8/rsd.php create mode 100644 utf8/skins/.htaccess create mode 100755 utf8/skins/atom/skinbackup.xml create mode 100644 utf8/skins/default/default_left.css create mode 100644 utf8/skins/default/default_right.css create mode 100644 utf8/skins/default/favicon.ico create mode 100644 utf8/skins/default/images/arrow.gif create mode 100644 utf8/skins/default/images/bg.gif create mode 100644 utf8/skins/default/images/bgcategory.gif create mode 100644 utf8/skins/default/images/bgcomment.gif create mode 100644 utf8/skins/default/images/bgcontainer01.gif create mode 100644 utf8/skins/default/images/bgcontainer02.gif create mode 100644 utf8/skins/default/images/bgedit.gif create mode 100644 utf8/skins/default/images/bgpostedby.gif create mode 100644 utf8/skins/default/images/commentquote01.gif create mode 100644 utf8/skins/default/images/commentquote02.gif create mode 100644 utf8/skins/default/images/corner_br.gif create mode 100644 utf8/skins/default/images/corner_tr.gif create mode 100644 utf8/skins/default/images/dot.gif create mode 100644 utf8/skins/default/images/dotv.gif create mode 100644 utf8/skins/default/images/header.jpg create mode 100644 utf8/skins/default/images/header_sm.jpg create mode 100644 utf8/skins/default/images/nucleus.gif create mode 100644 utf8/skins/default/images/shadow.gif create mode 100644 utf8/skins/default/images/sidetitlebg.gif create mode 100644 utf8/skins/default/inc/additemform.inc create mode 100644 utf8/skins/default/inc/benchmark.inc create mode 100644 utf8/skins/default/inc/footer.inc create mode 100644 utf8/skins/default/inc/head.inc create mode 100644 utf8/skins/default/inc/header.inc create mode 100644 utf8/skins/default/inc/linklist.inc create mode 100644 utf8/skins/default/inc/navigation.inc create mode 100644 utf8/skins/default/inc/show_benchmark.inc create mode 100644 utf8/skins/default/inc/sidebar.inc create mode 100644 utf8/skins/default/jlocal.css create mode 100644 utf8/skins/default/nicetitle.css create mode 100644 utf8/skins/default/nicetitle.js create mode 100644 utf8/skins/default/preview-large.png create mode 100644 utf8/skins/default/preview.png create mode 100644 utf8/skins/default/readme.html create mode 100644 utf8/skins/default/skinbackup.xml create mode 100644 utf8/skins/default/skinbackup.xml.org create mode 100755 utf8/skins/readme.txt create mode 100755 utf8/skins/rsd/skinbackup.xml create mode 100755 utf8/skins/rss2.0/skinbackup.xml create mode 100755 utf8/xml-rss2.php diff --git a/utf8/action.php b/utf8/action.php new file mode 100755 index 0000000..b8399df --- /dev/null +++ b/utf8/action.php @@ -0,0 +1,35 @@ +doAction($action); + +if ($errorInfo) { + doError($errorInfo['message'], new SKIN($errorInfo['skinid']) ); +} + diff --git a/utf8/atom.php b/utf8/atom.php new file mode 100755 index 0000000..af5170c --- /dev/null +++ b/utf8/atom.php @@ -0,0 +1,56 @@ + \ No newline at end of file diff --git a/utf8/benchmark.inc b/utf8/benchmark.inc new file mode 100644 index 0000000..f021be2 --- /dev/null +++ b/utf8/benchmark.inc @@ -0,0 +1,34 @@ + diff --git a/utf8/config.php b/utf8/config.php new file mode 100755 index 0000000..fa8729f --- /dev/null +++ b/utf8/config.php @@ -0,0 +1,60 @@ +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 diff --git a/utf8/createaccount.php b/utf8/createaccount.php new file mode 100644 index 0000000..af40182 --- /dev/null +++ b/utf8/createaccount.php @@ -0,0 +1,106 @@ + + +> + + + <?php echo _CREATE_ACCOUNT_TITLE ?> + + + + +

+' . htmlspecialchars($a->createAccount()) . '

'; + if (isset($_POST['name'])) + $name = 'value="' . htmlspecialchars($_POST['name']) . '" '; + if (isset($_POST['realname'])) + $realname = 'value="' . htmlspecialchars($_POST['realname']) . '" '; + if (isset($_POST['email'])) + $email = 'value="' . htmlspecialchars($_POST['email']) . '" '; + if (isset($_POST['url'])) + $url = 'value="' . htmlspecialchars($_POST['url']) . '" '; +// $showform = 1; +// } else { +// $showform = 0; + echo $message; + } +?> +
+
+ + + +
+ /> +
+
+ +
+ /> +
+
+ +
+ /> +
+
+ +
+ /> +
+ 'createaccount.php', + 'prelabel' => '', + 'postlabel' => '
', + 'prefield' => '', + 'postfield' => '

' + ); + $manager->notify('RegistrationFormExtraFields', $data); + // add a Captcha challenge or something else + $manager->notify('FormExtra', array('type' => 'membermailform-notloggedin')); +?> +
+
+ +
+
+ + + diff --git a/utf8/extra/fancyurls-2/.htaccess b/utf8/extra/fancyurls-2/.htaccess new file mode 100644 index 0000000..e0e6a9d --- /dev/null +++ b/utf8/extra/fancyurls-2/.htaccess @@ -0,0 +1,6 @@ + + RewriteEngine on + RewriteCond %{REQUEST_FILENAME} !-f + RewriteCond %{REQUEST_FILENAME} !-d + RewriteRule ^(.*)$ index.php?virtualpath=$1 [L,QSA] + diff --git a/utf8/extra/fancyurls/.htaccess b/utf8/extra/fancyurls/.htaccess new file mode 100755 index 0000000..69f7bf0 --- /dev/null +++ b/utf8/extra/fancyurls/.htaccess @@ -0,0 +1,21 @@ + + ForceType application/x-httpd-php + + + ForceType application/x-httpd-php + + + ForceType application/x-httpd-php + + + ForceType application/x-httpd-php + + + ForceType application/x-httpd-php + + + ForceType application/x-httpd-php + + + ForceType application/x-httpd-php + diff --git a/utf8/extra/fancyurls/archive b/utf8/extra/fancyurls/archive new file mode 100755 index 0000000..dd348b7 --- /dev/null +++ b/utf8/extra/fancyurls/archive @@ -0,0 +1,20 @@ + 2) + { + $blogid = intval($data[1]); + $archive = $data[2]; + } +} + +selector(); + +?> \ No newline at end of file diff --git a/utf8/extra/fancyurls/archives b/utf8/extra/fancyurls/archives new file mode 100755 index 0000000..b1031e3 --- /dev/null +++ b/utf8/extra/fancyurls/archives @@ -0,0 +1,19 @@ + 1) + { + $archivelist = intval($data[1]); + } +} + +selector(); + +?> \ No newline at end of file diff --git a/utf8/extra/fancyurls/blog b/utf8/extra/fancyurls/blog new file mode 100755 index 0000000..0b4cf08 --- /dev/null +++ b/utf8/extra/fancyurls/blog @@ -0,0 +1,19 @@ + 1) + { + $blogid = intval($data[1]); + } +} + +selector(); + +?> \ No newline at end of file diff --git a/utf8/extra/fancyurls/category b/utf8/extra/fancyurls/category new file mode 100755 index 0000000..bdd8e31 --- /dev/null +++ b/utf8/extra/fancyurls/category @@ -0,0 +1,19 @@ + 1) + { + $catid = intval($data[1]); + } +} + +selector(); + +?> \ No newline at end of file diff --git a/utf8/extra/fancyurls/fancyurls.config.ja.php b/utf8/extra/fancyurls/fancyurls.config.ja.php new file mode 100644 index 0000000..b472df7 --- /dev/null +++ b/utf8/extra/fancyurls/fancyurls.config.ja.php @@ -0,0 +1,60 @@ + \ No newline at end of file diff --git a/utf8/extra/fancyurls/fancyurls.config.php b/utf8/extra/fancyurls/fancyurls.config.php new file mode 100755 index 0000000..dc80c27 --- /dev/null +++ b/utf8/extra/fancyurls/fancyurls.config.php @@ -0,0 +1,60 @@ + \ No newline at end of file diff --git a/utf8/extra/fancyurls/item b/utf8/extra/fancyurls/item new file mode 100755 index 0000000..23eb1bd --- /dev/null +++ b/utf8/extra/fancyurls/item @@ -0,0 +1,19 @@ + 1) + { + $itemid = intval($data[1]); + } +} + +selector(); + +?> \ No newline at end of file diff --git a/utf8/extra/fancyurls/member b/utf8/extra/fancyurls/member new file mode 100755 index 0000000..d2e14c2 --- /dev/null +++ b/utf8/extra/fancyurls/member @@ -0,0 +1,19 @@ + 1) + { + $memberid = intval($data[1]); + } +} + +selector(); + +?> \ No newline at end of file diff --git a/utf8/extra/fancyurls/special b/utf8/extra/fancyurls/special new file mode 100644 index 0000000..60171c4 --- /dev/null +++ b/utf8/extra/fancyurls/special @@ -0,0 +1,17 @@ + 1) + { + $_REQUEST['special'] = $data[1]; + } +} + +selector(); + +?> \ No newline at end of file diff --git a/utf8/extra/htaccess/media/media.htaccess b/utf8/extra/htaccess/media/media.htaccess new file mode 100644 index 0000000..da274e3 --- /dev/null +++ b/utf8/extra/htaccess/media/media.htaccess @@ -0,0 +1,11 @@ +# You may modify following line to avoid script execution completely. +# In environment where multiple users are using Nucleus, +# be sure that any script cannot be executed due to your server setting. +# Note that this isn't needed when all members are super-admin. +# スクリプトの実行を避ける為に、適宜追加してください。 +# サーバの設定によっては、アップロードされたファイルをスクリプトとして +# 実行される恐れがありますので、複数人でNucleusを運用している場合は特に +# 注意が必要です。 +# + +RemoveHandler php cgi pl py rb shtml \ No newline at end of file diff --git a/utf8/extra/htaccess/media/readme.ja.txt b/utf8/extra/htaccess/media/readme.ja.txt new file mode 100644 index 0000000..37ab19f --- /dev/null +++ b/utf8/extra/htaccess/media/readme.ja.txt @@ -0,0 +1,12 @@ +このディレクトリのmedia.htaccessファイルは、mediaディレクトリでのスクリプトの実行を阻止し、サーバのセキュリティを強化することを意図しています。 +これは悪意を持ったものが、mediaディレクトリにアップロードしたファイルを実行させることを防ぎます。 +ただし、.htaccessでの制限の許可・不許可はサーバの設定に依存しているので、コードが意図されたとおりに動くとは限りません。 + +下記の手順に従って、.htaccessを適用してください + +1. mediaディレクトリに他の.htaccessファイルがないことを確認します。 +2. 「media.htaccess」ファイルを、Nucleusのmediaディレクトリにコピーします。 +3. ファイルを「media.htaccess」から「.htaccess」にリネームします。 +4. もし、すでに.htaccessファイルがmediaディレクトリに存在した場合は、すでにある.htaccessファイルに「media.htaccess」の内容を追記します。 + +これでmediaディレクトリを、意図しないスクリプトの実行から保護することが出来ます。 diff --git a/utf8/extra/htaccess/media/readme.txt b/utf8/extra/htaccess/media/readme.txt new file mode 100644 index 0000000..b302899 --- /dev/null +++ b/utf8/extra/htaccess/media/readme.txt @@ -0,0 +1,10 @@ +PLEASE NOTE: The media.htaccess file in this directory is intended to enhance security of your server by disallowing the running of scripts from the media folder. This will protect against rogue members, or external exploits, that rely on uploading script files to this folder for execution at a later time. Depending on the configuration of your web server, this code may not run as intended. + +To apply it, follow these instructions: + +1. Be sure that another .htaccess file does not exist in the /media folder +2. Copy the media.htaccess file into the media folder of your Nucleus CMS installation +3. Rename the file to .htaccess +4. If you have an existing .htaccess file in your media folder, copy the contents from the media.htaccess file into the existing .htacces file. + +You can disable after installing it by renaming the file to something else, or by removing the file from that folder. \ No newline at end of file diff --git a/utf8/extra/htaccess/skins/readme.ja.txt b/utf8/extra/htaccess/skins/readme.ja.txt new file mode 100644 index 0000000..9081a60 --- /dev/null +++ b/utf8/extra/htaccess/skins/readme.ja.txt @@ -0,0 +1,13 @@ +このディレクトリのskins.htaccessファイルは、各スキンで使用する「.inc」ファイルや「.php」ファイルに対する外部からの直接アクセスを禁止し、サーバのセキュリティを強化することを意図しています。 +ただし.htaccessでの制限の許可・不許可はサーバの設定に依存しているので、コードが意図されたとおりに動くとは限りません。 +例えば、意図せずに一部のファイルへのサーバ内でのアクセスまで禁止されてしまって、あなたのサイトにCSSが適用されずに表示されるようなことがあるかもしれません。 +その時は.htaccessファイルをリネームして問題を解決してください。 + +下記の手順に従って、.htaccessを適用してください + +1. skinsディレクトリに他の.htaccessファイルがないことを確認します。 +2. 「skins.htaccess」ファイルを、Nucleusのskinsディレクトリにコピーします。 +3. ファイルを「skins.htaccess」から「.htaccess」にリネームします。 +4. もし、すでに.htaccessファイルがskinsディレクトリに存在した場合は、すでにある.htaccessファイルに「skins.htaccess」の内容を追記します。 + +これでskinsディレクトリを、不要なアクセスから保護することが出来ます。 diff --git a/utf8/extra/htaccess/skins/readme.txt b/utf8/extra/htaccess/skins/readme.txt new file mode 100644 index 0000000..6d61376 --- /dev/null +++ b/utf8/extra/htaccess/skins/readme.txt @@ -0,0 +1,10 @@ +PLEASE NOTE: the skins.htaccess file in this directory is intended to prohibit, for enhanced security, direct access .inc and .php files in the skin folders. Depending on the web server configuration, the code in this .htaccess file may not work as intended. In this case, your site will be displayed incorrectly, with missing content or style. Renaming the .htaccess file should fix the problem. + +To apply it, follow these instructions: + +1. Be sure that another .htaccess file does not exist in the /skins folder +2. Copy the skins.htaccess file into the skins folder of your Nucleus CMS installation +3. Rename the file to .htaccess +4. If you have an existing .htaccess file in your skins folder, copy the contents from the skins.htaccess file into the existing .htacces file. + +You can disable after installing it by renaming the file to something else, or by removing the file from that folder. \ No newline at end of file diff --git a/utf8/extra/htaccess/skins/skins.htaccess b/utf8/extra/htaccess/skins/skins.htaccess new file mode 100644 index 0000000..f7027bd --- /dev/null +++ b/utf8/extra/htaccess/skins/skins.htaccess @@ -0,0 +1,4 @@ + +Order allow,deny +Deny from all + \ No newline at end of file diff --git a/utf8/index.php b/utf8/index.php new file mode 100755 index 0000000..69183c3 --- /dev/null +++ b/utf8/index.php @@ -0,0 +1,32 @@ + \ No newline at end of file diff --git a/utf8/install/index.php b/utf8/install/index.php new file mode 100755 index 0000000..57fc872 --- /dev/null +++ b/utf8/install/index.php @@ -0,0 +1,1240 @@ +
If you see this text in your browser when you open install.php, your web server is not able to run PHP-scripts, and therefor Nucleus will not be able to run there.
0) || (count($aConfSkinsToImport) > 0) ) { + global $CONF; + $CONF['installscript'] = 1; +} + +if (phpversion() >= '4.1.0') { + include_once('../nucleus/libs/vars4.1.0.php'); +} else { + include_once('../nucleus/libs/vars4.0.6.php'); +} + +// include core classes that are needed for login & plugin handling +// added for 3.5 sql_* wrapper +global $MYSQL_HANDLER; +//set the handler if different from mysql (or mysqli) +//$MYSQL_HANDLER = array('pdo','mysql'); +if (!isset($MYSQL_HANDLER)) { + $MYSQL_HANDLER = array('mysql',''); +} + +include_once('../nucleus/libs/sql/'.$MYSQL_HANDLER[0].'.php'); +// end new for 3.5 sql_* wrapper +include_once('../nucleus/libs/mysql.php'); + +// check if mysql support is installed +// this check may not make sense, as is, in a version past 3.5x +if (!function_exists('mysql_query') ) { + _doError(_ERROR1); +} + +if (postVar('action') == 'go') { + doInstall(); +} else { + showInstallForm(); +} + +exit; + +function showInstallForm() { + // 0. pre check if all necessary files exist + doCheckFiles(); + + ?> + + + + + <?php echo _TITLE; ?> + + + + +
+
+ +

+ + + +

+ + + +
+ + + + + + +
+ +
+
+ +

+ + + +
    +
  • PHP: + +' . sprintf(_TEXT2_WARN, $minVersion) . ''; + } elseif (phpversion() < '5') { + echo ' ' . _TEXT2_WARN3 . ''; + } +?> + +
  • +
  • MySQL: + + 0) { + $row = sql_fetch_array($result); + $match = explode('.', $row['version']); + } else { + $result = @sql_query('SHOW VARIABLES LIKE \'version\'', $conn); + + if ($result != FALSE && @sql_num_rows($result) > 0) { + $row = sql_fetch_row($result); + $match = explode('.', $row[1]); + } else { + $output = (function_exists('shell_exec')) ? @shell_exec('mysql -V') : '0.0.0'; + preg_match('@[0-9]+\.[0-9]+\.[0-9]+@', $output, $version); + $match = explode('.', $version[0]); + + if ($match[0] == '') { + $match[0] = '0'; + $match[1] = '0'; + $match[2] = '0'; + } + } + } + + sql_disconnect($conn); + $mysqlVersion = implode($match, '.'); + $minVersion = '3.23'; + + if ($mysqlVersion == '0.0.0') { + echo _NOTIFICATION1; + } + else { + echo $mysqlVersion; + } + + if ($mysqlVersion < $minVersion) { + echo ' ' . sprintf(_TEXT2_WARN2, $minVersion) . ''; + } +?> + +
  • +
+ + + +

+ + + +

+ + + +
+ + + + + + + + + + + + + + + + + + +
()
+
+ +
+ + + + + + +
+ + + +
+ +

+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
() +
+
() +
+
() +
+
+ + + +

+ + + +
+ + + + + + + + + + + + + + + + + + + + + + +
()
()
+
+ +

+ + + +
+ + + + + + + + + + +
()
+
+ +

+ +
+ + + + + +
+
+ +

+ + + +

+ + +

+ +
+ + + + 0) { + showErrorMessages($errors); + } + + // 2-1. try to log in to mySQL + + global $MYSQL_CONN; + // this will need to be changed if we ever allow + $MYSQL_CONN = @sql_connect_args($mysql_host, $mysql_user, $mysql_password); + + if ($MYSQL_CONN == false) { + _doError(_ERROR15 . ': ' . sql_error() ); + } + +// + // 2-2. set DEFAULT CHARSET and COLLATE + $mySqlVer = implode('.', array_map('intval', explode('.', sql_get_server_info($MYSQL_CONN)))); + if ($mySqlVer >= '5.0.7' && phpversion() >= '5.2.3') { + mysql_set_charset($charset); + } elseif ($mySqlVer >= '4.1.0') { + sql_query("SET NAMES " . $charset); + } + $collation = ($charset == 'utf8') ? 'utf8_unicode_ci' : 'ujis_japanese_ci'; +// */ + + // 3. try to create database (if needed) + if ($mysql_create == 1) { + $sql = 'CREATE DATABASE ' + . $mysql_database; +// + if ($mySqlVer >= '4.1.0') { + $sql .= ' DEFAULT CHARACTER SET ' + . $charset + . ' COLLATE ' + . $collation; + } +// */ + sql_query($sql,$MYSQL_CONN) or _doError(_ERROR16 . ': ' . sql_error($MYSQL_CONN)); + } + + // 4. try to select database + sql_select_db($mysql_database,$MYSQL_CONN) or _doError(_ERROR17); + + // 5. execute queries + $filename = 'install.sql'; + $fd = fopen($filename, 'r'); + $queries = fread($fd, filesize($filename) ); + fclose($fd); + + $queries = split("(;\n|;\r)", $queries); + + $aTableNames = array( + 'nucleus_actionlog', + 'nucleus_ban', + 'nucleus_blog', + 'nucleus_category', + 'nucleus_comment', + 'nucleus_config', + 'nucleus_item', + 'nucleus_karma', + 'nucleus_member', + 'nucleus_plugin', + 'nucleus_skin', + 'nucleus_template', + 'nucleus_team', + 'nucleus_activation', + 'nucleus_tickets' + ); +// these are unneeded (one of the replacements above takes care of them) +// 'nucleus_plugin_event', +// 'nucleus_plugin_option', +// 'nucleus_plugin_option_desc', +// 'nucleus_skin_desc', +// 'nucleus_template_desc', + + $aTableNamesPrefixed = array( + $mysql_prefix . 'nucleus_actionlog', + $mysql_prefix . 'nucleus_ban', + $mysql_prefix . 'nucleus_blog', + $mysql_prefix . 'nucleus_category', + $mysql_prefix . 'nucleus_comment', + $mysql_prefix . 'nucleus_config', + $mysql_prefix . 'nucleus_item', + $mysql_prefix . 'nucleus_karma', + $mysql_prefix . 'nucleus_member', + $mysql_prefix . 'nucleus_plugin', + $mysql_prefix . 'nucleus_skin', + $mysql_prefix . 'nucleus_template', + $mysql_prefix . 'nucleus_team', + $mysql_prefix . 'nucleus_activation', + $mysql_prefix . 'nucleus_tickets' + ); +// these are unneeded (one of the replacements above takes care of them) +// $mysql_prefix . 'nucleus_plugin_event', +// $mysql_prefix . 'nucleus_plugin_option', +// $mysql_prefix . 'nucleus_plugin_option_desc', +// $mysql_prefix . 'nucleus_skin_desc', +// $mysql_prefix . 'nucleus_template_desc', + + $count = count($queries); + + for ($idx = 0; $idx < $count; $idx++) { + $query = trim($queries[$idx]); + // echo "QUERY = " . htmlspecialchars($query) . "

"; + + if ($query) { + + if ($mysql_usePrefix == 1) { + $query = str_replace($aTableNames, $aTableNamesPrefixed, $query); + } +// + if ($mysql_create != 1 && strpos($query, 'CREATE TABLE') === 0 && $mySqlVer >= '4.1.0') { + $query .= ' DEFAULT CHARACTER SET ' . $charset . ' COLLATE ' . $collation; + } +// */ + + sql_query($query,$MYSQL_CONN) or _doError(_ERROR30 . ' (' . htmlspecialchars($query) . '): ' . sql_error($MYSQL_CONN) ); + } + } + + // 5a make first post + if ($charset == 'ujis') { + $itm_title = mb_convert_encoding(_1ST_POST_TITLE, _CHARSET, 'UTF-8'); + $itm_body = mb_convert_encoding(_1ST_POST, _CHARSET, 'UTF-8'); + $itm_more = mb_convert_encoding(_1ST_POST2, _CHARSET, 'UTF-8'); + } else { + $itm_title = _1ST_POST_TITLE; + $itm_body = _1ST_POST; + $itm_more = _1ST_POST2; + } + $newpost = "INSERT INTO " + . tableName('nucleus_item') + . " VALUES (" + . "1, " + . "'" . $itm_title . "'," + . " '" . $itm_body . "'," + . " '" . $itm_more . "'," + . " 1, 1, '2005-08-15 11:04:26', 0, 0, 0, 1, 0, 1);"; + sql_query($newpost,$MYSQL_CONN) or _doError(_ERROR18 . ' (' . htmlspecialchars($newpost) . '): ' . sql_error($MYSQL_CONN) ); + + // 6. update global settings + updateConfig('IndexURL', $config_indexurl); + updateConfig('AdminURL', $config_adminurl); + updateConfig('MediaURL', $config_mediaurl); + updateConfig('SkinsURL', $config_skinsurl); + updateConfig('PluginURL', $config_pluginurl); + updateConfig('ActionURL', $config_actionurl); + updateConfig('AdminEmail', $config_adminemail); + updateConfig('SiteName', $config_sitename); + if ($charset == 'ujis') { + updateConfig('Language', 'japanese-euc'); + } + + // 7. update GOD member + $query = 'UPDATE ' . tableName('nucleus_member') + . " SET mname = '" . addslashes($user_name) . "'," + . " mrealname = '" . addslashes($user_realname) . "'," + . " mpassword = '" . md5(addslashes($user_password) ) . "'," + . " murl = '" . addslashes($config_indexurl) . "'," + . " memail = '" . addslashes($user_email) . "'," + . " madmin = 1," + . " mcanlogin = 1" + . " WHERE" + . " mnumber = 1"; + + sql_query($query,$MYSQL_CONN) or _doError(_ERROR19 . ': ' . sql_error($MYSQL_CONN) ); + + // 8. update weblog settings + $query = 'UPDATE ' . tableName('nucleus_blog') + . " SET bname = '" . addslashes($blog_name) . "'," + . " bshortname = '" . addslashes($blog_shortname) . "'," + . " burl = '" . addslashes($config_indexurl) . "'" + . " WHERE" + . " bnumber = 1"; + + sql_query($query,$MYSQL_CONN) or _doError(_ERROR20 . ': ' . sql_error($MYSQL_CONN) ); + + // 8-2. update category settings + if ($charset == 'ujis') { + $cat_name = mb_convert_encoding(_GENERALCAT_NAME, _CHARSET, 'UTF-8'); + $cat_desc = mb_convert_encoding(_GENERALCAT_DESC, _CHARSET, 'UTF-8'); + } else { + $cat_name = _GENERALCAT_NAME; + $cat_desc = _GENERALCAT_DESC; + } + $query = 'UPDATE ' . tableName('nucleus_category') + . " SET cname = '" . $cat_name . "'," + . " cdesc = '" . $cat_desc . "'" + . " WHERE" + . " catid = 1"; + + sql_query($query,$MYSQL_CONN) or _doError(_ERROR20 . ': ' . sql_error($MYSQL_CONN) ); + + // 9. update item date + $query = 'UPDATE ' . tableName('nucleus_item') + . " SET itime = '" . date('Y-m-d H:i:s', time() ) ."'" + . " WHERE inumber = 1"; + + sql_query($query,$MYSQL_CONN) or _doError(_ERROR21 . ': ' . sql_error($MYSQL_CONN) ); + + global $aConfPlugsToInstall, $aConfSkinsToImport; + $aSkinErrors = array(); + $aPlugErrors = array(); + + if ((count($aConfPlugsToInstall) > 0) || (count($aConfSkinsToImport) > 0) ) { + // 10. set global variables + global $MYSQL_HOST, $MYSQL_USER, $MYSQL_PASSWORD, $MYSQL_DATABASE, $MYSQL_PREFIX; + + $MYSQL_HOST = $mysql_host; + $MYSQL_USER = $mysql_user; + $MYSQL_PASSWORD = $mysql_password; + $MYSQL_DATABASE = $mysql_database; + $MYSQL_PREFIX = ($mysql_usePrefix == 1) ? $mysql_prefix : ''; + + global $DIR_NUCLEUS, $DIR_MEDIA, $DIR_SKINS, $DIR_PLUGINS, $DIR_LANG, $DIR_LIBS; + + $DIR_NUCLEUS = $config_adminpath; + $DIR_MEDIA = $config_mediapath; + $DIR_SKINS = $config_skinspath; + $DIR_PLUGINS = $DIR_NUCLEUS . 'plugins/'; + $DIR_LANG = $DIR_NUCLEUS . 'language/'; + $DIR_LIBS = $DIR_NUCLEUS . 'libs/'; + + // close database connection (needs to be closed if we want to include globalfunctions.php) + sql_close($MYSQL_CONN); + + $manager = ''; + include_once($DIR_LIBS . 'globalfunctions.php'); + + // 11. install custom skins + $aSkinErrors = installCustomSkins($manager); + $defskinQue = 'SELECT `sdnumber` as result FROM ' . sql_table('skin_desc') . ' WHERE `sdname` = "default"'; + $defSkinID = quickQuery($defskinQue); + $updateQuery = 'UPDATE ' . sql_table('blog') . ' SET `bdefskin` = ' . intval($defSkinID) . ' WHERE `bnumber` = 1'; + sql_query($updateQuery); + $updateQuery = 'UPDATE ' . sql_table('config') . ' SET `value` = ' . intval($defSkinID). ' WHERE `name` = "BaseSkin"'; + sql_query($updateQuery); + + // 12. install NP_Ping, if decided + if ($weblog_ping == 1) { + global $aConfPlugsToInstall; + array_push($aConfPlugsToInstall, "NP_Ping"); + } + + // 13. install custom plugins + $aPlugErrors = installCustomPlugs($manager); + } + + // 14. Write config file ourselves (if possible) + $bConfigWritten = 0; + + if (@file_exists('../config.php') && is_writable('../config.php') && $fp = @fopen('../config.php', 'w') ) { + $config_data = '<' . '?php' . "\n\n"; + //$config_data .= "\n"; (extraneous, just added extra \n to previous line + $config_data .= " // mySQL connection information\n"; + $config_data .= " \$MYSQL_HOST = '" . $mysql_host . "';\n"; + $config_data .= " \$MYSQL_USER = '" . $mysql_user . "';\n"; + $config_data .= " \$MYSQL_PASSWORD = '" . $mysql_password . "';\n"; + $config_data .= " \$MYSQL_DATABASE = '" . $mysql_database . "';\n"; + $config_data .= " \$MYSQL_PREFIX = '" . (($mysql_usePrefix == 1) ? $mysql_prefix : '') . "';\n"; + $config_data .= " // new in 3.50. first element is db handler, the second is the db driver used by the handler\n"; + $config_data .= " // default is \$MYSQL_HANDLER = array('mysql','mysql');\n"; + $config_data .= " //\$MYSQL_HANDLER = array('mysql','mysql');\n"; + $config_data .= " //\$MYSQL_HANDLER = array('pdo','mysql');\n"; + $config_data .= " \$MYSQL_HANDLER = array('".$MYSQL_HANDLER[0]."','".$MYSQL_HANDLER[1]."');\n"; + $config_data .= "\n"; + $config_data .= " // main nucleus directory\n"; + $config_data .= " \$DIR_NUCLEUS = '" . $config_adminpath . "';\n"; + $config_data .= "\n"; + $config_data .= " // path to media dir\n"; + $config_data .= " \$DIR_MEDIA = '" . $config_mediapath . "';\n"; + $config_data .= "\n"; + $config_data .= " // extra skin files for imported skins\n"; + $config_data .= " \$DIR_SKINS = '" . $config_skinspath . "';\n"; + $config_data .= "\n"; + $config_data .= " // these dirs are normally sub dirs of the nucleus dir, but \n"; + $config_data .= " // you can redefine them if you wish\n"; + $config_data .= " \$DIR_PLUGINS = \$DIR_NUCLEUS . 'plugins/';\n"; + $config_data .= " \$DIR_LANG = \$DIR_NUCLEUS . 'language/';\n"; + $config_data .= " \$DIR_LIBS = \$DIR_NUCLEUS . 'libs/';\n"; + $config_data .= "\n"; + $config_data .= " // include libs\n"; + $config_data .= " include(\$DIR_LIBS . 'globalfunctions.php');\n"; + $config_data .= " if (!extension_loaded('mbstring')) {\n"; + $config_data .= " include(\$DIR_LIBS . 'mb_emulator/mb-emulator.php');\n"; + $config_data .= " }\n"; + $config_data .= "?" . ">"; + + $result = @fputs($fp, $config_data, strlen($config_data) ); + fclose($fp); + + if ($result) { + $bConfigWritten = 1; + } + } + +?> + + + + + <?php echo _TITLE; ?> + + + +

+ + 0) { + echo '

' . _TITLE2 . '

'; + echo ''; + } + + if (!$bConfigWritten) { ?> +

+ + + +
<?php
+	// mySQL connection information
+	$MYSQL_HOST	 = '';
+	$MYSQL_USER	 = '';
+	$MYSQL_PASSWORD = 'xxxxxxxxxxx';
+	$MYSQL_DATABASE = '';
+	$MYSQL_PREFIX   = '';
+
+	// main nucleus directory
+	$DIR_NUCLEUS = '';
+
+	// path to media dir
+	$DIR_MEDIA   = '';
+
+	// extra skin files for imported skins
+	$DIR_SKINS   = '';
+
+	// these dirs are normally sub dirs 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/';
+
+	// include libs
+	include($DIR_LIBS . 'globalfunctions.php');
+	if (!extension_loaded('mbstring')) {
+		include($DIR_LIBS . 'mb_emulator/mb-emulator.php');
+	}
+?>
+ + + +
+ +
+ + + +

+ + + + + +

+ + + + + +

+ + + + + + + +

+ +

+

+

+ + + + +clearCachedInfo('installedPlugins'); + $plugin =& $manager->getPlugin($plugName); + $plugin->plugid = $numCurrent; + + if (!$plugin) { + sql_query('DELETE FROM ' . sql_table('plugin') . ' WHERE pfile=\'' . addslashes($plugName) . '\''); + $numCurrent--; + array_push($aErrors, _ERROR22 . $plugName); + continue; + } + + $plugin->install(); + } + + // SYNC PLUGIN EVENT LIST + sql_query('DELETE FROM ' . sql_table('plugin_event') ); + + // loop over all installed plugins + $res = sql_query('SELECT pid, pfile FROM ' . sql_table('plugin') ); + + while($o = sql_fetch_object($res) ) { + $pid = $o->pid; + $plug =& $manager->getPlugin($o->pfile); + + if ($plug) { + $eventList = $plug->getEventList(); + + foreach ($eventList as $eventName) { + sql_query('INSERT INTO ' . sql_table('plugin_event') . ' (pid, event) VALUES (' . $pid . ', \'' . $eventName . '\')'); + } + } + } + + return $aErrors; +} + +function installCustomSkins(&$manager) { + global $aConfSkinsToImport, $DIR_LIBS, $DIR_SKINS; + + $aErrors = array(); + global $manager; + if (empty($manager)) { + $manager = new MANAGER; + } + + if (count($aConfSkinsToImport) == 0) { + return $aErrors; + } + + // load skinie class + include_once($DIR_LIBS . 'skinie.php'); + + $importer = new SKINIMPORT(); + + foreach ($aConfSkinsToImport as $skinName) { + $importer->reset(); + $skinFile = $DIR_SKINS . $skinName . '/skinbackup.xml'; + + if (!@file_exists($skinFile) ) { + array_push($aErrors, _ERROR23_1 . $skinFile . ' : ' . _ERROR23_2); + continue; + } + + $error = $importer->readFile($skinFile); + + if ($error) { + array_push($aErrors, _ERROR24 . $skinName . ' : ' . $error); + continue; + } + + $error = $importer->writeToDatabase(1); + + if ($error) { + array_push($aErrors, _ERROR24 . $skinName . ' : ' . $error); + continue; + } + } + + return $aErrors; +} + +// give an error if one or more nucleus are not accessible +function doCheckFiles() { + $missingfiles = array(); + $files = array( + 'install.sql', + '../index.php', + '../action.php', + '../nucleus/index.php', + '../nucleus/libs/globalfunctions.php', + '../nucleus/libs/ADMIN.php', + '../nucleus/libs/BLOG.php', + '../nucleus/libs/COMMENT.php', + '../nucleus/libs/COMMENTS.php', + '../nucleus/libs/ITEM.php', + '../nucleus/libs/MEMBER.php', + '../nucleus/libs/SKIN.php', + '../nucleus/libs/TEMPLATE.php', + '../nucleus/libs/MEDIA.php', + '../nucleus/libs/ACTIONLOG.php', + '../nucleus/media.php' + ); + + $count = count($files); + + for ($i = 0; $i < $count; $i++) { + if (!is_readable($files[$i]) ) { + array_push($missingfiles, _ERROR25_1 . $files[$i] . _ERROR25_2); + } + } + +// The above code replaces several if statements of the form: + +// if (!is_readable('install.sql') ) { +// array_push($missingfiles, 'File install.sql is missing or not readable'); +// } + + if (count($missingfiles) > 0) { + showErrorMessages($missingfiles); + } +} + +function updateConfig($name, $val) { + global $MYSQL_CONN; + $name = addslashes($name); + $val = trim(addslashes($val) ); + + $query = 'UPDATE ' . tableName('nucleus_config') + . " SET value = '$val'" + . " WHERE name = '$name'"; + + sql_query($query,$MYSQL_CONN) or _doError(_ERROR26 . ': ' . sql_error($MYSQL_CONN) ); + return sql_insert_id($MYSQL_CONN); +} + +function replaceDoubleBackslash($input) { + return str_replace('\\', '/', $input); +} + +function endsWithSlash($s) { + return (strrpos($s, '/') == strlen($s) - 1); +} + +/** + * Checks if email address is valid + */ +function _isValidMailAddress($address) { + if (preg_match("/^[a-zA-Z0-9\._-]+@+[A-Za-z0-9\._-]+\.+[A-Za-z]{2,4}$/", $address) ) { + return 1; + } else { + return 0; + } +} + +// returns true if the given string is a valid shortname +// (to check short blog names and nicknames) +// logic: starts and ends with a non space, can contain spaces in between +// min 2 chars +function _isValidShortName($name) { + if (eregi("^[a-z0-9]+$", $name) ) { + return 1; + } else { + return 0; + } +} + + + +// returns true if the given string is a valid display name +// (to check nicknames) +function _isValidDisplayName($name) { + if (eregi("^[a-z0-9]+[a-z0-9 ]*[a-z0-9]+$", $name) ) { + return 1; + } else { + return 0; + } +} + +function _doError($msg) { + ?> + + + + + <?php echo _TITLE; ?> + + + +
+

+ +

"";

+ +

+ + + + + + + + + <?php echo _TITLE; ?> + + + +
+

+ +

:

+ + + +

+ + + +
\ No newline at end of file diff --git a/utf8/install/install.sql b/utf8/install/install.sql new file mode 100755 index 0000000..e8373ae --- /dev/null +++ b/utf8/install/install.sql @@ -0,0 +1,273 @@ +CREATE TABLE `nucleus_actionlog` ( + `timestamp` datetime NOT NULL default '0000-00-00 00:00:00', + `message` varchar(255) NOT NULL default '' +) TYPE=MyISAM; + +CREATE TABLE `nucleus_activation` ( + `vkey` varchar(40) NOT NULL default '', + `vtime` datetime NOT NULL default '0000-00-00 00:00:00', + `vmember` int(11) NOT NULL default '0', + `vtype` varchar(15) NOT NULL default '', + `vextra` varchar(128) NOT NULL default '', + PRIMARY KEY (`vkey`) +) TYPE=MyISAM; + +CREATE TABLE `nucleus_ban` ( + `iprange` varchar(15) NOT NULL default '', + `reason` varchar(255) NOT NULL default '', + `blogid` int(11) NOT NULL default '0' +) TYPE=MyISAM; + +CREATE TABLE `nucleus_blog` ( + `bnumber` int(11) NOT NULL auto_increment, + `bname` varchar(60) NOT NULL default '', + `bshortname` varchar(15) NOT NULL default '', + `bdesc` varchar(200) default NULL, + `bcomments` tinyint(2) NOT NULL default '1', + `bmaxcomments` int(11) NOT NULL default '0', + `btimeoffset` decimal(3,1) NOT NULL default '0.0', + `bnotify` varchar(60) default NULL, + `burl` varchar(100) default NULL, + `bupdate` varchar(60) default NULL, + `bdefskin` int(11) NOT NULL default '1', + `bpublic` tinyint(2) NOT NULL default '1', + `bconvertbreaks` tinyint(2) NOT NULL default '1', + `bdefcat` int(11) default NULL, + `bnotifytype` int(11) NOT NULL default '15', + `ballowpast` tinyint(2) NOT NULL default '0', + `bincludesearch` tinyint(2) NOT NULL default '0', + `breqemail` tinyint(2) NOT NULL default '0', + `bfuturepost` tinyint(2) NOT NULL default '0', + PRIMARY KEY (`bnumber`), + UNIQUE KEY `bshortname` (`bshortname`) +) TYPE=MyISAM; + +INSERT INTO `nucleus_blog` VALUES ( + 1, /* bnumber */ + 'My Nucleus CMS', /* bname */ + 'mynucleuscms', /* bshortname */ + '', /* bdesc */ + 1, /* bcomments */ + 0, /* bmaxcomments */ + 0.0, /* btimeoffset */ + '', /* bnotify */ + 'http://localhost:8080/nucleus/', /* burl */ + '', /* bupdate */ + 5, /* bdefskin */ + 1, /* bpublic */ + 1, /* bconvertbreaks */ + 1, /* bdefcat */ + 1, /* bnotifytype */ + 1, /* ballowpast */ + 0, /* bincludesearch */ + 0, /* breqemail */ + 0 /* bfuturepost */ +); + +CREATE TABLE `nucleus_category` ( + `catid` int(11) NOT NULL auto_increment, + `cblog` int(11) NOT NULL default '0', + `cname` varchar(200) default NULL, + `cdesc` varchar(200) default NULL, + PRIMARY KEY (`catid`) +) TYPE=MyISAM; + +INSERT INTO `nucleus_category` VALUES (1, 1, 'General', 'Items that do not fit in other categories'); + +CREATE TABLE `nucleus_comment` ( + `cnumber` int(11) NOT NULL auto_increment, + `cbody` text NOT NULL, + `cuser` varchar(40) default NULL, + `cmail` varchar(100) default NULL, + `cemail` varchar(100), + `cmember` int(11) default NULL, + `citem` int(11) NOT NULL default '0', + `ctime` datetime NOT NULL default '0000-00-00 00:00:00', + `chost` varchar(60) default NULL, + `cip` varchar(15) NOT NULL default '', + `cblog` int(11) NOT NULL default '0', + PRIMARY KEY (`cnumber`), + KEY `citem` (`citem`), + FULLTEXT KEY `cbody` (`cbody`) +) TYPE=MyISAM; + +CREATE TABLE `nucleus_config` ( + `name` varchar(20) NOT NULL default '', + `value` varchar(128) default NULL, + PRIMARY KEY (`name`) +) TYPE=MyISAM; + +INSERT INTO `nucleus_config` (`name`, `value`) VALUES + ('DefaultBlog', '1'), + ('AdminEmail', 'example@example.org'), + ('IndexURL', 'http://localhost:8080/nucleus/'), + ('Language', 'japanese-utf8'), + ('SessionCookie', ''), + ('AllowMemberCreate', ''), + ('AllowMemberMail', '1'), + ('SiteName', 'My Nucleus CMS'), + ('AdminURL', 'http://localhost:8080/nucleus/nucleus/'), + ('NewMemberCanLogon', '1'), + ('DisableSite', ''), + ('DisableSiteURL', 'http://www.this-page-intentionally-left-blank.org/'), + ('LastVisit', ''), + ('MediaURL', 'http://localhost:8080/nucleus/media/'), + ('AllowedTypes', 'jpg,jpeg,gif,mpg,mpeg,avi,mov,mp3,swf,png'), + ('AllowLoginEdit', ''), + ('AllowUpload', '1'), + ('DisableJsTools', '2'), + ('CookiePath', '/'), + ('CookieDomain', ''), + ('CookieSecure', ''), + ('CookiePrefix', ''), + ('MediaPrefix', '1'), + ('MaxUploadSize', '1048576'), + ('NonmemberMail', ''), + ('PluginURL', 'http://localhost:8080/nucleus/nucleus/plugins/'), + ('ProtectMemNames', '1'), + ('BaseSkin', '5'), + ('SkinsURL', 'http://localhost:8080/nucleus/skins/'), + ('ActionURL', 'http://localhost:8080/nucleus/action.php'), + ('URLMode', 'normal'), + ('DatabaseVersion', '350'), + ('DebugVars', '0'), + ('DefaultListSize', '10'); + +CREATE TABLE `nucleus_item` ( + `inumber` int(11) NOT NULL auto_increment, + `ititle` varchar(160) default NULL, + `ibody` text NOT NULL, + `imore` text, + `iblog` int(11) NOT NULL default '0', + `iauthor` int(11) NOT NULL default '0', + `itime` datetime NOT NULL default '0000-00-00 00:00:00', + `iclosed` tinyint(2) NOT NULL default '0', + `idraft` tinyint(2) NOT NULL default '0', + `ikarmapos` int(11) NOT NULL default '0', + `icat` int(11) default NULL, + `ikarmaneg` int(11) NOT NULL default '0', + `iposted` tinyint(2) NOT NULL default '1', + PRIMARY KEY (`inumber`), + KEY `itime` (`itime`), + FULLTEXT KEY `ibody` (`ibody`, `ititle`, `imore`) +) TYPE=MyISAM PACK_KEYS=0; + +CREATE TABLE `nucleus_karma` ( + `itemid` int(11) NOT NULL default '0', + `ip` char(15) NOT NULL default '' +) TYPE=MyISAM; + +CREATE TABLE `nucleus_member` ( + `mnumber` int(11) NOT NULL auto_increment, + `mname` varchar(32) NOT NULL default '', + `mrealname` varchar(60) default NULL, + `mpassword` varchar(40) NOT NULL default '', + `memail` varchar(60) default NULL, + `murl` varchar(100) default NULL, + `mnotes` varchar(100) default NULL, + `madmin` tinyint(2) NOT NULL default '0', + `mcanlogin` tinyint(2) NOT NULL default '1', + `mcookiekey` varchar(40) default NULL, + `deflang` varchar(20) NOT NULL default '', + `mautosave` tinyint(2) NOT NULL default '1', + PRIMARY KEY (`mnumber`), + UNIQUE KEY `mname` (`mname`) +) TYPE=MyISAM; + +INSERT INTO `nucleus_member` VALUES ( + 1, /* mnumber */ + 'example', /* mname */ + 'example', /* mrealname */ + '1a79a4d60de6718e8e5b326e338ae533', /* mpassword */ + 'example@example.org', /* memail */ + 'http://localhost:8080/nucleus/', /* murl */ + '', /* mnotes */ + 1, /* madmin */ + 1, /* mcanlogin */ + 'd767aefc60415859570d64c649257f19', /* mcookiekey */ + '', /* deflang */ + 1 /* mautosave */ +); + +CREATE TABLE `nucleus_plugin` ( + `pid` int(11) NOT NULL auto_increment, + `pfile` varchar(40) NOT NULL default '', + `porder` int(11) NOT NULL default '0', + PRIMARY KEY (`pid`), + KEY `porder` (`porder`) +) TYPE=MyISAM; + +CREATE TABLE `nucleus_plugin_event` ( + `pid` int(11) NOT NULL default '0', + `event` varchar(40) default NULL, + KEY `pid` (`pid`) +) TYPE=MyISAM; + +CREATE TABLE `nucleus_plugin_option` ( + `ovalue` text NOT NULL, + `oid` int(11) NOT NULL auto_increment, + `ocontextid` int(11) NOT NULL default '0', + PRIMARY KEY (`oid`, `ocontextid`) +) TYPE=MyISAM; + +CREATE TABLE `nucleus_plugin_option_desc` ( + `oid` int(11) NOT NULL auto_increment, + `opid` int(11) NOT NULL default '0', + `oname` varchar(20) NOT NULL default '', + `ocontext` varchar(20) NOT NULL default '', + `odesc` varchar(255) default NULL, + `otype` varchar(20) default NULL, + `odef` text, + `oextra` text, + PRIMARY KEY (`opid`, `oname`, `ocontext`), + UNIQUE KEY `oid` (`oid`) +) TYPE=MyISAM; + +CREATE TABLE `nucleus_skin` ( + `sdesc` int(11) NOT NULL default '0', + `stype` varchar(20) NOT NULL default '', + `scontent` text NOT NULL, + PRIMARY KEY (`sdesc`,`stype`) +) TYPE=MyISAM; + +CREATE TABLE `nucleus_skin_desc` ( + `sdnumber` int(11) NOT NULL auto_increment, + `sdname` varchar(20) NOT NULL default '', + `sddesc` varchar(200) default NULL, + `sdtype` varchar(40) NOT NULL default 'text/html', + `sdincmode` varchar(10) NOT NULL default 'normal', + `sdincpref` varchar(50) NOT NULL default '', + PRIMARY KEY (`sdnumber`), + UNIQUE KEY `sdname` (`sdname`) +) TYPE=MyISAM; + +CREATE TABLE `nucleus_team` ( + `tmember` int(11) NOT NULL default '0', + `tblog` int(11) NOT NULL default '0', + `tadmin` tinyint(2) NOT NULL default '0', + PRIMARY KEY (`tmember`, `tblog`) +) TYPE=MyISAM; + +INSERT INTO `nucleus_team` VALUES (1, 1, 1); + +CREATE TABLE `nucleus_template` ( + `tdesc` int(11) NOT NULL default '0', + `tpartname` varchar(64) NOT NULL default '', + `tcontent` text NOT NULL, + PRIMARY KEY (`tdesc`, `tpartname`) +) TYPE=MyISAM; + +CREATE TABLE `nucleus_template_desc` ( + `tdnumber` int(11) NOT NULL auto_increment, + `tdname` varchar(64) NOT NULL default '', + `tddesc` varchar(200) default NULL, + PRIMARY KEY (`tdnumber`), + UNIQUE KEY `tdname` (`tdname`) +) TYPE=MyISAM; + +CREATE TABLE `nucleus_tickets` ( + `ticket` varchar(40) NOT NULL default '', + `ctime` datetime NOT NULL default '0000-00-00 00:00:00', + `member` int(11) NOT NULL default '0', + PRIMARY KEY (`ticket`,`member`) +) TYPE=MyISAM; diff --git a/utf8/install/install_lang_japanese.php b/utf8/install/install_lang_japanese.php new file mode 100644 index 0000000..8cd5646 --- /dev/null +++ b/utf8/install/install_lang_japanese.php @@ -0,0 +1,518 @@ +action.phpファイルへのURLが別のサーバを指しています。'); +define('_ERROR9_3', 'action.phpファイルへのURLにファイルが存在しません。'); +define('_ERROR10', 'メールアドレスが不正です。'); +define('_ERROR11', '「表示される名前」に使用できない文字が含まれています。(使用できる文字:a-z と 0-9、最初と最後以外の空白)'); +define('_ERROR12', 'パスワードが入力されていません。'); +define('_ERROR13', '入力された二つのパスワードが一致しません。'); +define('_ERROR14', '「ブログの短縮名(略称)」に使用できない文字が含まれています。(使用できる文字:a-z と 0-9。空白は使用できません)'); +define('_ERROR15', 'mySQL serverに接続できませんでした。'); +define('_ERROR16', 'データベースを作成できませんでした。作成の権限があるかどうか確認してください。SQL エラーの内容:'); +define('_ERROR17', 'データベースを見つけられませんでした。データベースが存在するか確認してください。'); +define('_ERROR18', '次のクエリの実行中にエラーが発生しました:'); +define('_ERROR19', '「メンバー設定」の実行中にエラーが発生しました:'); +define('_ERROR20', '「blog設定」の実行中にエラーが発生しました:'); +define('_ERROR21', '次のクエリの実行中にエラーが発生しました:'); +define('_ERROR22', 'プラグイン「%s」をインストールできませんでした。'); +define('_ERROR23_1', 'テーマファイル「%s」が読み込めませんでした。'); +define('_ERROR23_2', 'ファイルが見つかりません。'); +define('_ERROR24', 'テーマ「%s」をインポートできませんでした。'); +define('_ERROR25_1', 'プログラムのコアファイル '); +define('_ERROR25_2', ' が見つからない、もしくは読み出し禁止になっています。'); +define('_ERROR26', '設定の更新中にエラーが発生しました。実行したクエリは次の通りです:'); +define('_ERROR27', 'エラー!'); +define('_ERROR28', 'エラーメッセージは次の通りです:'); +define('_ERROR29', '複数のエラーを発見しました'); +define('_ERROR30', 'クエリの実行中にエラーが発生しました:'); + +define('_NOTIFICATION1', '判別不能'); + +define('_TITLE', 'Nucleusのインストール'); +define('_TITLE2', 'テーマ・プラグインのインストールエラー'); +define('_TITLE3', 'インストールはほぼ完了しました!'); +define('_TITLE4', 'インストールは完了しました!'); +define('_TITLE5', 'スパムとの戦い'); + +define('_HEADER1', 'Nucleusのインストール'); +define('_TEXT1', '

MySQLテーブルのセットアップと、config.php に入力するための情報を表示します(config.phpのパーミッションを0666にしておけば、後者の作業は自動的に行われます)。これをなす為に、いくつかの情報を入力する必要があります。

すべての欄の入力が必要です。オプション情報は、インストールが完了後Nucleusの管理領域から設定可能です。

'); + +define('_HEADER2', 'PHP と MySQL のバージョン'); +define('_TEXT2', '

以下はあなたのウェブホストにおけるPHPとMySQLサーバーのバージョンです。Nucleusのサポートフォーラムに問題を報告する時は、この情報を書き添えてください。

'); +define('_TEXT2_WARN', ' 注意: Nucleusの動作には少なくともバージョン %s が必要です'); +define('_TEXT2_WARN2', ' 注意: Nucleusの動作には少なくともバージョン %s が必要です'); +define('_TEXT2_WARN3', '警告! 動作しているPHPのバージョンが古いようです!次にリリースされるNucleusCMSではPHP4はサポートされません!早急にPHP5にアップグレードしてください!'); + +define('_HEADER3', 'config.phpの自動設定'); +define('_TEXT3', 'config.phpへの書き込みができません。config.phpのパーミッションを666にしておけば、スクリプトが自動で設定情報を書き込みます。ただし、Nucleusのインストール完了後、必ずパーミッションを444に変更してください(パーミッション変更の簡易ガイド)。

'); + +define('_HEADER4', 'MySQLのログイン情報'); +define('_TEXT4', '

データベースのログイン情報を入力してください。この情報が分からない場合は、システム管理者かホスティング元に確認をとってください。ほとんどの場合、ホスト名は「localhost」です。もしNucleusがあなたのサーバのPHP設定から「default MySQL host」を検出していれば「ホスト名」に既に記入されているはずですが、この情報が正確であるという保証はありません。

'); +define('_TEXT4_TAB_HEAD', '基本のデータベース設定'); +define('_TEXT4_TAB_FIELD1', 'ホスト名:'); +define('_TEXT4_TAB_FIELD2', 'ユーザー名:'); +define('_TEXT4_TAB_FIELD3', 'パスワード:'); +define('_TEXT4_TAB_FIELD4', 'データベース名:'); +define('_TEXT4_TAB_FIELD4_ADD', 'データベースを作成する必要がある'); + +define('_TEXT4_TAB2_HEAD', '高度なデータベース設定'); +define('_TEXT4_TAB2_FIELD', '異なるテーブル・プリフィックスを使用する:'); +define('_TEXT4_TAB2_ADD', '

通常はここを変更する必要はありません。ひとつのデータベースに複数のNucleusをインストールしたい場合にこの設定を用います。

'); + +define('_HEADER5', 'ディレクトリとURL'); +define('_TEXT5', '

ディレクトリとURLを下記の設定でインストールします。特殊なディレクトリ構成で運用したい場合は、ここで変更できます。ディレクトリのパス及びURLはスラッシュ「/」で閉じてください。

'); + +define('_TEXT5_TAB_HEAD', 'ディレクトリとURL'); +define('_TEXT5_TAB_FIELD1', 'サイトのURL:'); +define('_TEXT5_TAB_FIELD2', '管理エリアのURL:'); +define('_TEXT5_TAB_FIELD3', '管理エリアのディレクトリ:'); +define('_TEXT5_TAB_FIELD4', 'アップロードしたファイルが格納されるURL:'); +define('_TEXT5_TAB_FIELD5', 'アップロードしたファイルが格納されるディレクトリ:'); +define('_TEXT5_TAB_FIELD6', 'スキンファイルのURL:'); +define('_TEXT5_TAB_FIELD7', 'スキンファイルのディレクトリ:'); +define('_TEXT5_TAB_FIELD7_2', 'インポートしたスキンで使用するファイル'); +define('_TEXT5_TAB_FIELD8', 'プラグインが格納されているURL:'); +define('_TEXT5_TAB_FIELD9', '機能決定ファイルのURL:'); +define('_TEXT5_TAB_FIELD9_2', 'action.phpファイルへのhttp://から始まるURL:'); +define('_TEXT5_2', '

付記: 相対パスではなく絶対パスを使用してください。絶対パスはほとんどの場合、/home/username/public_html/のようにスラッシュから始まります。よく解らない場合はサーバ管理者に質問してください。

'); + +define('_HEADER6', '管理権限をもつユーザー'); +define('_TEXT6', '

以下に、サイトの最初のユーザーを作成するための情報を入力してください。

'); +define('_TEXT6_TAB_HEAD', 'サイトの管理者:'); +define('_TEXT6_TAB_FIELD1', '表示される名前(ログインID):'); +define('_TEXT6_TAB_FIELD1_2', '使用できる文字:a-z と 0-9、最初と最後以外の空白'); +define('_TEXT6_TAB_FIELD2', '本名(ハンドル名):'); +define('_TEXT6_TAB_FIELD3', 'パスワード:'); +define('_TEXT6_TAB_FIELD4', 'パスワード(確認入力):'); +define('_TEXT6_TAB_FIELD5', 'メールアドレス:'); +define('_TEXT6_TAB_FIELD5_2', '利用可能なメールアドレスを入れてください'); + +define('_HEADER7', 'ブログのデータ'); +define('_TEXT7', '

デフォルトのブログを作成するための情報を入力してください。このブログの名前は、サイト名としても利用されます。

'); +define('_TEXT7_TAB_HEAD', 'ブログのデータ'); +define('_TEXT7_TAB_FIELD1', 'ブログの名前:'); +define('_TEXT7_TAB_FIELD2', 'ブログの短縮名(略称):'); +define('_TEXT7_TAB_FIELD2_2', '使用できる文字:a-z と 0-9、空白は不可'); + +define('_HEADER8', '更新Ping'); +//define('_HEADER8', 'インストールするプラグインとテーマの選択'); +define('_TEXT8_TAB_HEADER', '更新Ping'); +define('_TEXT8_TAB_PLUGINDEP', '以下のプラグインに依存します。%s'); // +//define('_TEXT8_TAB_HEADER', 'プラグインの選択'); +define('_TEXT8_TAB_HEADER2', 'テーマの選択'); +define('_TEXT8_TAB_FIELD1', '更新Ping送信プラグイン NP_Ping をインストールする (更新Pingを送信するプラグインは他にもあります。)'); + +define('_HEADER9', 'データの送信'); +define('_TEXT9', '

上に書いてきたデータが正しいか確かめてください。よければデータベース・テーブルと最初のデータを設定するために下のボタンを押してください。少し時間がかかるかもしれませんがご辛抱を。ボタンをクリックするのは一回だけにしてください。

'); + +define('_TEXT10', '

データベーステーブルの初期値入力が成功しました。後はconfig.phpを書き換えるだけです。以下に書き換えるべき内容を表示します(mysqlのパスワードはマスクされています。ここは実際のものに書き換えてください)

'); +define('_TEXT11', '

あなたのコンピュータ上のファイルを書き換えたら、FTPを使ってウェブサーバにアップロードしてください。ASCIIモードで送信してファイルを上書きします。

'); +define('_TEXT12', '付記: config.phpの最初や終わりにスペースを空けないようにしましょう。実行時にエラーを引き起こす原因となります。
したがって、config.phpの最初の文字は "<"で最後の文字は">"としなければなりません。'); +define('_TEXT13', '

Nucleusはインストールされ、config.phpはアップデートされました。

セキュリティのためconfig.phpのパーミッションを444に戻すことを忘れないでください(パーミッション変更の簡易ガイド)。

'); +define('_TEXT14', '

Nucleusは誰でもブログにコメントを残すことができる様になっているので、このままではスパムの温床になる危険があります。以下の方法によってブログを保護することをお勧めします:

'); +define('_TEXT14_L1', 'あなたがコメントを必要としないのであれば、管理エリアから「あなたのブログ」 > 「ブログ設定」 とたどり、 「コメントを許可しますか?」 の設定を「いいえ」にすることで、コメント投稿フォームを非表示にすることができます。'); +define('_TEXT14_L2', 'スパムを撃退・管理する為のプラグインをインストールすることも可能です:Nucleus Japan wiki (ブックマークをお勧めします)'); +define('_HEADER10', 'インストールファイルの削除'); +define('_TEXT15', '

ウェブサーバから /install/ ディレクトリを削除してください:

'); +define('_TEXT15_L1', 'install/install.sql:テーブルの構造を内包するファイル'); +define('_TEXT15_L2', 'install/index.php:このファイル'); + +define('_TEXT15_L3', 'install_lang_japanese.php:インストーラの言語ファイル'); +define('_TEXT16', '

もしこのディレクトリを削除していなければ、管理領域を開くことができません。

'); + +define('_HEADER11', 'ウェブサイトの確認'); +define('_TEXT16_H', 'ウェブサイトを使う準備が整いました。'); +define('_TEXT16_L1', '管理領域にログインしてサイトの設定を行う'); +define('_TEXT16_L2', 'すぐにサイトへ行ってみる'); + +define('_TEXT17', '戻る'); + +define('_BUTTON1', 'インストールを実行する'); + +// General category +define('_GENERALCAT_NAME', '総合'); +define('_GENERALCAT_DESC', '投稿した記事に合うカテゴリが無い時にこのカテゴリを使用すると良いでしょう'); + +define('_1ST_POST_TITLE', 'Nucleus CMS バージョン3.51へようこそ'); +define('_1ST_POST', 'ウェブサイトの作成を補助する積み木がここにあります。それは心躍るブログになるかもしれませんし、見る人を和ませる家族のサイトになるかもしれませんし、実り多い趣味のサイトになるかもしれません。あるいは現在のあなたには想像がつかないものになることだってあるでしょう。
+
用途が思いつきませんでしたか? それならここへ来て正解です。なぜならあなた同様私たちにもわからないのですから。'); +define('_1ST_POST2', 'これはサイトにおける最初のエントリーです。スタートを切りやすいように、リンクと情報を入れておきました。
+
+この記事を削除することもできますが、どちらにせよ記事を追加していくことによってやがてメインページからは見えなくなります。Nucleusを扱ううちに生じたメモをコメントとして追加し、将来アクセスできるようにこのページをブックマークしておくのも手です。
+
+リンク
+
+Nucleus CMSの本家と日本語公式ページ。
+
+Nucleus CMSのSourceForgeプロジェクト(日本版)ページ。
+
+Nucleus CMSのプラグイン倉庫と日本語のリストページ。
+
+ドキュメント - docs.nucleuscms.org
+
+NucleusのFAQ(よくある質問集)(原文)ページ。
+
+インストール方法等はユーザー向けと開発者向け文書がファイルに含まれています。
+
+ポップアップヘルプが管理エリアのいたるところにあり、サイトのカスタマイズやデザインを手助けしてくれることでしょう。
+
+一度用意されているドキュメントに目を通したら、Wiki(日本版)を訪れてください。ユーザーの書いたハウツーや小技が掲載されています。
+
+サポート
+
+forum.nucleuscms.org(本家)
+japan.nucleuscms.org/bb/(日本版)
+
+moderatorsとサポートフォーラムで活動する全てのボランティアに感謝します。
+
+- admun - Ottawa, ON, Canada
+- anand - Bangalore, India
+- hcgtv - Miami, Florida, USA
+- ikeizer - Maastricht
+- moraes - Brazil
+- roel - The Netherlands
+- TeRanEX - Ekeren, Antwerp, Belgium
+- Trent - Alberta, Canada
+- xiffy - Deventer
+
+もし手助けが必要なら、1400を超える登録ユーザーのいる私たちのフォーラムに参加してください。23,000を超える投稿された記事を検索できるようになっておりますので、求める答えに数回のクリックでたどり着けるかもしれません。
+
+Personalization - skins.nucleuscms.org
+
+マルチウェブログとスキン/テンプレートの組み合わせは強力な相乗効果を生み出します。個人的なサイト作成、友人や親戚あるいはクライアントに対するサイトデザインいずれに対してもです。
+
+636の登録されたNucleusで運用されているサイト(日本版)の中から特色あるサイトをサンプルとしてご紹介します。
+
+Personal blogs
+- bloggard.com - The Adventures of Bloggard
+- yetanotherblog.de - Yet Another Blog
+
+Hobby, Travel and News sites
+- adrenalinsports.nl - Extreme sports
+- groningen-info.de - Neues aus Groningen. Fr Leute aus Duitsland.
+
+Nucleus Developer Network - dev.nucleuscms.org
+
+The NUDN is a hub for developer sites and programming resources.
+
+NUDN satellite sites, handles, location and UTC offset:
+- karma - Izegem +02
+- admun - Ottawa -04
+- TeRanEX - Ekeren +02
+
+Sourceforge.net graciously hosts our SVN repository.
+
+Want to play around or test changes, visit our demo site at demo.nucleuscms.org.
+
+Not sure what plugins to use, visit the showcase site where you can see plugins at play in their native habitat.
+
+Then visit the plugin repository at plugins.nucleuscms.org for download and installation instructions.
+
+寄付者一覧
+
+以下の素晴らしい人々による援助感謝を捧げます。ありがとう!
+ + +Nucleusが気に入りましたか? HotScriptsやopensourceCMSでの投票をお願いします。
+
+ライセンス
+
+私たちがフリー・ソフトウェアについて口にする場合は自由のことに言及しているのであって、価格のことではありません。私たちのGNU General Public Licenses(一般公有使用許諾書)(日本語訳(参考)と概要)は、フリー・ソフトウェアの複製物を自由に頒布できること(そして、望むならこのサービスに対して対価を請求できること)、ソース・コードを実際に受け取るか希望しさえすれば入手することが可能であること、入手したソフトウェアを変更したり新しいフリー・プログラムの一部として使用できること、以上の各内容を行なうことができるということをユーザ自身が知っていることを実現できるようにデザインされています。'); + +?> \ No newline at end of file diff --git a/utf8/license.txt b/utf8/license.txt new file mode 100755 index 0000000..dcfa4c2 --- /dev/null +++ b/utf8/license.txt @@ -0,0 +1,340 @@ + 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. + + + Copyright (C) + + 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. + + , 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. diff --git a/utf8/media/.htaccess b/utf8/media/.htaccess new file mode 100644 index 0000000..da274e3 --- /dev/null +++ b/utf8/media/.htaccess @@ -0,0 +1,11 @@ +# You may modify following line to avoid script execution completely. +# In environment where multiple users are using Nucleus, +# be sure that any script cannot be executed due to your server setting. +# Note that this isn't needed when all members are super-admin. +# スクリプトの実行を避ける為に、適宜追加してください。 +# サーバの設定によっては、アップロードされたファイルをスクリプトとして +# 実行される恐れがありますので、複数人でNucleusを運用している場合は特に +# 注意が必要です。 +# + +RemoveHandler php cgi pl py rb shtml \ No newline at end of file diff --git a/utf8/media/readme.txt b/utf8/media/readme.txt new file mode 100755 index 0000000..73b4d8a --- /dev/null +++ b/utf8/media/readme.txt @@ -0,0 +1,17 @@ +Nucleus Media ディレクトリ +----------------------- + +アップロードされた画像等のファイルは、最終的にこのディレクトリに移動されます。 + + +サブディレクトリについて: + +* 数字 (例 /media/1/) + +アップロードしたメンバーだけがファイルを使用できます。(ディレクトリ名はメンバーIDになります) + +* 数字以外 (例 /media/common/) + +誰が使ってもいいファイルを保存しておく為のディレクトリ。 +ディレクトリを作ってパーミッションを777等にしておくだけで、新しいコレクションとして追加されます。 + diff --git a/utf8/nucleus/bookmarklet.php b/utf8/nucleus/bookmarklet.php new file mode 100755 index 0000000..ad38d2f --- /dev/null +++ b/utf8/nucleus/bookmarklet.php @@ -0,0 +1,372 @@ +isLoggedIn() ) { + bm_loginAndPassThrough(); + exit; +} + +// on successfull login +if ( ($action == 'login') && ($member->isLoggedIn() ) ) { + $action = requestVar('nextaction'); +} + +if ($action == '') { + $action = 'add'; +} + +sendContentType('text/html', 'bookmarklet-' . $action); + +// check ticket +$action = strtolower($action); +$aActionsNotToCheck = array('login', 'add', 'edit'); + +if (!in_array($action, $aActionsNotToCheck) ) { + + if (!$manager->checkTicket() ) { + bm_doError(_ERROR_BADTICKET); + } + +} + +// find out what to do +switch ($action) { + // adds the item for real + case 'additem': + bm_doAddItem(); + break; + + // shows the edit item form + case 'edit': + bm_doEditForm(); + break; + + // edits the item for real + case 'edititem': + bm_doEditItem(); + break; + + // on login, 'action' gets changed to 'nextaction' + case 'login': + bm_doError(_BOOKMARKLET_ERROR_SOMETHINGWRONG); + break; + + // shows the fill in form + case 'add': + default: + bm_doShowForm(); + break; +} + +function bm_doAddItem() { + global $member, $manager, $CONF; + + $manager->loadClass('ITEM'); + $result = ITEM::createFromRequest(); + + if ($result['status'] == 'error') { + bm_doError($result['message']); + } + + $blogid = getBlogIDFromItemID($result['itemid']); + $blog =& $manager->getBlog($blogid); + + if ($result['status'] == 'newcategory') { + $href = 'index.php?action=categoryedit&blogid=' . $blogid . '&catid=' . $result['catid']; + $onclick = 'if (event && event.preventDefault) event.preventDefault(); window.open(this.href); return false;'; + $title = _BOOKMARKLET_NEW_WINDOW; + $aTag = ' '; + $message = _BOOKMARKLET_NEW_CATEGORY . $aTag . _BOOKMARKLET_NEW_CATEGORY_EDIT . ''; + $extrahead = ''; + } else { + $message = _ITEM_ADDED; + $extrahead = ''; + } + + bm_message(_ITEM_ADDED, _ITEM_ADDED, $message,$extrahead); +} + +function bm_doEditItem() { + global $member, $manager, $CONF; + + $itemid = intRequestVar('itemid'); + $catid = postVar('catid'); + + // only allow if user is allowed to alter item + if (!$member->canUpdateItem($itemid, $catid) ) { + bm_doError(_ERROR_DISALLOWED); + } + + $body = postVar('body'); + $title = postVar('title'); + $more = postVar('more'); + $closed = intPostVar('closed'); + $actiontype = postVar('actiontype'); + $draftid = intPostVar('draftid'); + + // redirect to admin area on delete (has delete confirmation) + if ($actiontype == 'delete') { + redirect('index.php?action=itemdelete&itemid=' . $itemid); + exit; + } + + // create new category if needed (only on edit/changedate) + if (strstr($catid,'newcat') ) { + // get blogid + list($blogid) = sscanf($catid, "newcat-%d"); + + // create + $blog =& $manager->getBlog($blogid); + $catid = $blog->createNewCategory(); + + // show error when sth goes wrong + if (!$catid) { + bm_doError(_BOOKMARKLET_ERROR_COULDNTNEWCAT); + } + } + + // only edit action is allowed for bookmarklet edit + switch ($actiontype) { + case 'changedate': + $publish = 1; + $wasdraft = 0; + $timestamp = mktime(intPostVar('hour'), intPostVar('minutes'), 0, intPostVar('month'), intPostVar('day'), intPostVar('year') ); + break; + case 'edit': + $publish = 1; + $wasdraft = 0; + $timestamp = 0; + break; + case 'backtodrafts': + $publish = 0; + $wasdraft = 0; + $timestamp = 0; + break; + default: + bm_doError(_BOOKMARKLET_ERROR_SOMETHINGWRONG); + } + + // update item for real + ITEM::update($itemid, $catid, $title, $body, $more, $closed, $wasdraft, $publish, $timestamp); + + if ($draftid > 0) { + ITEM::delete($draftid); + } + + // show success message + if ($catid != intPostVar('catid') ) { + $href = 'index.php?action=categoryedit&blogid=' . $blog->getID() . '&catid=' . $catid; + $onclick = 'if (event && event.preventDefault) event.preventDefault(); window.open(this.href); return false;'; + $title = _BOOKMARKLET_NEW_WINDOW; + $aTag = ' '; + $message = _BOOKMARKLET_NEW_CATEGORY . $aTag . _BOOKMARKLET_NEW_CATEGORY_EDIT . ''; + bm_message(_ITEM_UPDATED, _ITEM_UPDATED, _BOOKMARKLET_NEW_CATEGORY . $aTag . _BOOKMARKLET_NEW_CATEGORY_EDIT . '', ''); + } else { + bm_message(_ITEM_UPDATED, _ITEM_UPDATED, _ITEM_UPDATED, ''); + } +} + +function bm_loginAndPassThrough() { + + $blogid = intRequestVar('blogid'); + $log_text = requestVar('logtext'); + $log_link = requestVar('loglink'); + $log_linktitle = requestVar('loglinktitle'); + + ?> + +> + + +Nucleus + + + +

+ +
+

+ + + + + + +
+
+
+

+
+

+
+

+ + + isTeamMember($blogid) ) { + bm_doError(_ERROR_NOTONTEAM); + } + + $logje = ''; + + if ($log_text) { + $logje .= '
"' . htmlspecialchars($log_text) . '"
' . "\n"; + } + + if (!$log_linktitle) { + $log_linktitle = $log_link; + } + + if ($log_link) { + $logje .= '' . htmlspecialchars($log_linktitle) . ''; + } + + $item['body'] = $logje; + $item['title'] = htmlspecialchars($log_linktitle); + + $factory = new PAGEFACTORY($blogid); + $factory->createAddForm('bookmarklet', $item); +} + +function bm_doEditForm() { + global $member, $manager; + + $itemid = intRequestVar('itemid'); + + if (!$manager->existsItem($itemid, 0, 0) ) { + bm_doError(_ERROR_NOSUCHITEM); + } + + if (!$member->canAlterItem($itemid) ) { + bm_doError(_ERROR_DISALLOWED); + } + + $item =& $manager->getItem($itemid, 1, 1); + $blog =& $manager->getBlog(getBlogIDFromItemID($itemid) ); + + $manager->notify('PrepareItemForEdit', array('item' => &$item) ); + + if ($blog->convertBreaks() ) { + $item['body'] = removeBreaks($item['body']); + $item['more'] = removeBreaks($item['more']); + } + + $formfactory = new PAGEFACTORY($blog->getID() ); + $formfactory->createEditForm('bookmarklet', $item); +} + +function bm_doError($msg) { + bm_message(_ERROR, _ERRORMSG, $msg); + die; +} + +function bm_message($title, $head, $msg, $extrahead = '') { + ?> + +> + + +<?php echo $title ?> + + + + +

+

+

+ + + + '; + echo ''; +} + +function bm_doContextMenuCode() { + global $CONF; + ?> + + \ No newline at end of file diff --git a/utf8/nucleus/documentation/devdocs/custominstall.html b/utf8/nucleus/documentation/devdocs/custominstall.html new file mode 100755 index 0000000..15e5322 --- /dev/null +++ b/utf8/nucleus/documentation/devdocs/custominstall.html @@ -0,0 +1,97 @@ + + + + + + + + + + Nucleus - インストールスクリプトのカスタマイズ + + + + + + +
+ +
+インストールスクリプトのカスタマイズ +
+ +

注:この機能はバージョン2.2以降のものです。

+ +

イントロダクション

+ +

+開発者向けドキュメントの目次へ戻る +

+ +

このドキュメントにはNucleusのインストール・スクリプトをどのようにカスタムするかという情報が書かれています。二つの方法でカスタマイズが可能です:

+ +
    +
  1. スキンの自動インストール
  2. +
  3. プラグインの自動インストール
  4. +
+ +

設定

+ +

install.phpをエディタで開き、次のコードを探してください:

+ +
    // 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();
+ +

やるべき事はこのコードを変更するだけです:自動インストールしたいプラグインとスキンの名前を、例のような配列リストにしてください。

+ +

ファイルの取り込み

+ +

設定を変更した次は、ディストリビューションにファイルを追加する必要があります。

+ +

プラグインとスキン

+ +

プラグインは、nucleus/plugins/ディレクトリにファイルをおいてください。プラグインを手動でインストールする場合にするのと全く同じです。

+ +

スキンは、手動でインポートする時と同様に、skins/直下にディレクトリをおいてください。skinbackup.xmlをそこに入れておくことをお忘れ無く。

+ +

忘れてはいけないこと

+ +

再配布する前に、カスタマイズされたインストールスクリプトをテストすることを忘れないでください。

+ +
+ + + \ No newline at end of file diff --git a/utf8/nucleus/documentation/devdocs/index.html b/utf8/nucleus/documentation/devdocs/index.html new file mode 100755 index 0000000..3fe8fb9 --- /dev/null +++ b/utf8/nucleus/documentation/devdocs/index.html @@ -0,0 +1,73 @@ + + + + + + + + + + + + Nucleus - 開発者用ドキュメント + + + + + + +
+ 小 + 中 + 大 +
+
+ +
+開発者マニュアル +2009年2月7日 +
+ +

はじめに

+ +

+このマニュアルにはNucleusの開発者に向けた情報が記載されています。 +

+ +

目次

+ + + +
+ + + \ No newline at end of file diff --git a/utf8/nucleus/documentation/devdocs/javascript/fontsizeChanger.js b/utf8/nucleus/documentation/devdocs/javascript/fontsizeChanger.js new file mode 100644 index 0000000..50659f0 --- /dev/null +++ b/utf8/nucleus/documentation/devdocs/javascript/fontsizeChanger.js @@ -0,0 +1,11 @@ +$(function(){ + $("#fontSizeChanger > a").click(function() { + fontSizeChange($(this).attr('id'), this); + }); +}); + +function fontSizeChange(size, elem) { + $("#body").css("font-size", size.substr(2)); + $("#fontSizeChanger > a").css("font-weight", "normal"); + $(elem).css("font-weight", "bold"); +} diff --git a/utf8/nucleus/documentation/devdocs/plugins.html b/utf8/nucleus/documentation/devdocs/plugins.html new file mode 100755 index 0000000..4350f52 --- /dev/null +++ b/utf8/nucleus/documentation/devdocs/plugins.html @@ -0,0 +1,2532 @@ + + + + + + + + + + + + Nucleus - プラグイン API + + + + + + +
+ 小 + 中 + 大 +
+
+ +
+プラグイン API +2009年2月6日 +
+ +
訳者注: + +
+ +
注: +
    +
  • このドキュメントは基本的なプラグインの書き方についての情報を提供しています。さらに質問がある方は Plugin + Development Forum (日本語フォーラム)をご覧ください。
  • +
  • Nucleusバージョン1.5以降に導入されたメソッドとイベントには、導入時のバージョン情報を付記しています。それらの機能を利用するときは、getMinNucleusVersion を適切に設定するのを忘れないでください。
  • +
+
+ +

はじめに

+ +

+開発者向けドキュメントの目次へ戻る +

+ +

+このドキュメントはNucleusプラグインの作り方についての解説です。 +

+ +

目次

+ + + +

イントロダクション back to top

+ +

+Nucleusプラグインによって、誰もがNucleusの提供する機能を、Nucleus内部のPHPコードを変更することなく拡張することができます。プラグインはあるメソッドを実装したシンプルなPHPスクリプトで、Nucleusユーザー同士で簡単に交換することができます。インストールは簡単で、プラグインディレクトリにファイルをアップし、Nucleusにそれを認識させるだけです。 +

+ +

+プラグインの利点は以下のとおりです。 +

+ +
    +
  • 実装について詳しくしらなくてもNucleusフレームワークに簡単に機能を追加できる
  • +
  • 必要なプラグインだけをインストールでき、ページ生成にかかる時間を節約できる
  • +
+ +

+すべてのプラグインファイルは config.php に記述されたディレクトリに置く必要があります。一般的に、それは /your/path/nucleus/plugins/ になるでしょう。プラグインファイル名は NP_name.php という形式を用いることにより認識されます。プラグインによっては、追加ファイルを格納する同名のサブディレクトリや、管理エリアを必要とします。 +

+ +
+注: プラグイン名は大文字・小文字を識別しますので、Np_ や np_ ではなく、NP_ で始まることに気をつけてください。またプラグインがサブディレクトリを使用する場合は、サブディレクトリの名称はすべて小文字にします。 +
+ + + + +

はじめてプラグインを書いてみるback to top

+ +

+では、シンプルなプラグインを書いてみましょう。基本的にプラグインは、あらかじめ定義された NucleusPlugin クラスを継承したPHPクラスです。以下はHelloWorldプラグインの例です。 +

+ +
<?php
+
+class NP_HelloWorld extends NucleusPlugin
+{
+    // プラグインの名前
+    function getName()
+    {
+        return 'Hello World';
+    }
+
+    // プラグインの作者
+    function getAuthor()
+    {
+        return 'Wouter Demuynck';
+    }
+
+    // プラグインのサイトURL
+    // mailto:foo@bar.com の形式も可
+    function getURL()
+    {
+        return 'http://nucleuscms.org/';
+    }
+
+    // プラグインのバージョン
+    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;
+			case 'SqlApi':
+				return 1;
+            default:
+                return 0;
+        }
+    }
+
+}
+?>
+ +
    +
  1. + このコードをコピーし、 NP_HelloWorld.php と名づけて保存し、プラグインディレクトリに置きます。最後の ?> の後や、最初の <?php の前にスペースがないことを確認しましょう。ところでNP は "Nucleus Plugin" って意味ですよ :-) 念のため。 +
  2. +
  3. Nucleusの管理画面を開き、Nucleusの管理>プラグインの管理にいきます。
  4. +
  5. HelloWorld プラグインがインストール可能な状態になっているはずですので、インストールします。すべてがうまくいけば、インストール済みプラグインリストに追加されます。
  6. +
  7. + あなたのスキンの1つを編集し、実際のページに表示する箇所に次の文を挿入します。 +
    <%HelloWorld%>
    + 注意:カッコ内の名称 (HelloWorld) は大文字小文字を識別します! +
  8. +
  9. さて、編集したスキンから生成されるページを見てみましょう。プラグイン変数を追加した場所に "Hello World" と見えますね?
  10. +
+ +

+ここまではそれほど難しくなかったと思います。さらに読み進めて理解してください。 +

+ + + + + + + +

NucleusPlugin クラスの概要 back to top

+ +

すべてのプラグインは、NucleusPlugin というPHPクラスを継承しなければなりません。難しそうに聞こえても心配ご無用、大丈夫です。このPHPクラスの継承によって、プラグインに必要なメソッドだけを実装でき、いくつかの補助ファンクションにアクセスでき、つまりはあなたの人生はよりラクになります。

+ +

下記は NucleusPlugin が提供する、再実装可能なメソッドの概要です。このクラス自身のソースコードを見たければ、nucleus/libs/PLUGIN.phpにあります。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NucleusPlugin クラスの概要(再定義可能なメソッド)
メソッド名説明
getName()プラグイン名を返します。インストール済みプラグインリストに表示されます。デフォルトの実装では Undefined を返すため、必ず再定義されないといけません。
getAuthor()プラグインの作者名を返します。インストール済みプラグインリストに表示されます。デフォルトの実装では Undefined を返すため、必ず再定義されないといけません。
getURL()プラグインをダウンロード可能な、またはプラグインの追加情報のあるサイトのURLを返します。そのようなサイトがない場合は作者のメールアドレスへの mailto:リンクが適切です。デフォルトの実装では Undefined を返すため、必ず再定義されないといけません。
getDescription()プラグインに関する説明文(長文)を返します。インストール済みプラグインリストに表示されます。デフォルトの実装では Undefined を返します。
getVersion()プラグインの現在のバージョンを返します。デフォルトは 0.0 を返します。
getMinNucleusVersion()(v2.0b) 最低限必要なNucleusのバージョンを返します。デフォルトは 155 (v1.55)を返します。後に導入されたプラグイン関連機能を利用している場合は、このファンクションを実装するようお願いします(例: v2.0 => 200)。ただし、Nucleus v1.55 はこのファンクションを使用しないため、新機能を利用したプラグインが(対応する前のシステムに)インストールされる可能性が残っています。
getMinNucleusPatchLevel()(v3.1) 最低限必要なNucleusのバージョン(getMinNucleusVersion)での、最低限必要なパッチレベルを返します。デフォルトは 0 を返します。このファンクションは主に新しいプラグインの機能がNucleusの最新版のパッチによって可能になる場合に用いられます。
init()プラグインを初期化します。このメソッドはプラグインオブジェクトが生成された直後に呼び出され、plugid属性がセットされます。デフォルトではこのメソッドは何もしません。
doSkinVar($skinType)<%plugin(...)%> スキン変数によってプラグインが呼び出されたときにこのメソッドが呼ばれます。$skinType パラメータはプラグインが呼ばれた場所のスキンタイプに該当します(item, archive, ...)。パラメータが一つしかないことに混乱しないでください。複数パラメータを渡すことも可能です。doSkinVar メソッドの実装に関する詳細情報はこちら。デフォルトではこのメソッドはなにも出力しません。
doTemplateVar(&$item)基本的に doSkinVar と同じですが、今度はテンプレート内(item header/body/footer と dateheader/footer)での<%plugin(...)%> 変数からの呼び出しになります。デフォルトではこのメソッドはテンプレートをスキンタイプとみなしてdoSkinVar メソッドに処理を渡します。doTemplateVar メソッドの実装に関する詳細情報はこちら
doTemplateCommentsVar(&$item, &$comment)(v2.0b) 基本的に doSkinVar と同じですが、今度はテンプレート内(コメント部分)での<%plugin(...)%> 変数からの呼び出しになります。デフォルトではこのメソッドはテンプレートをスキンタイプとみなしてdoSkinVar メソッドに処理を渡します。doTemplateCommentsVarメソッドの実装に関する詳細情報はこちら
doItemVar(&$item, &$param)(v3.30) 基本的に doSkinVar と同じですが、今度は投稿した記事内での<%plugin(...)%> 変数からの呼び出しになります。渡される引数のうち&$itemは変数が記述されているアイテムのフルオブジェクトを、&$paramはプラグインごとの関数のパラメータになります。
doIf($key, $value)(v3.30) スキン変数 if/ifnot/elseif/elseifnot に対して、プラグイン独自の判断をする事が出来るメソッドです。通常は、$key 変数が $value の値を持っているかを調べて、 true か false を返すことになります。このメソッドをプラグインに実装する場合は、作者は使用方法のドキュメントを書くようにしてください。
doAction($type)プラグインがユーザーインタラクションを求めたとき、 action.phpを介してこのメソッドがそれを与えます。これはNucleus自身が新しいコメントや投票を処理するのに使用するスクリプトです。正しいパラメータを用いることで、プラグインからの doAction メソッドを呼び出せます。$type はオプションのメッセージタイプに該当します。doAction メソッド内で、リクエストからの追加の変数にアクセスできます。デフォルトではこのメソッドがエラーメッセージをトリガーすると'No Such Action'という文字列を返します。doAction に関する詳細情報はこちら
install()このメソッドはプラグインがインストールされた際に呼ばれます。データベース・テーブルの生成やプラグインオプションの生成などの初期化作業を行うことができます。デフォルトではこのメソッドは何もしません。
unInstall()プラグインがアンインストールされた際に呼ばれます。この時点でデータベースに作られたプラグイン情報を消去すると良いです。デフォルトではこのメソッドは何もしません。
getEventList()プラグインはイベント登録が可能です。イベントはNucleusが何かアクションを起こすたびに生成されます。たとえば、AddItem イベントは、このイベントを登録しているすべてのプラグインを呼び出します。呼び出されるメソッドは event_AddItem($params)になります。 $params パラメータは、例えば AddItem の itemid のような、情報フィールドを複数持つ連想配列です。デフォルトではどのイベントにも登録されていないことを示す空の配列を返します。イベントに関する詳細情報はこちら
getTableList()このメソッドはプラグインが生成したデータベース・テーブルの配列を返します。これはNucleusが提供するバックアップ機能で利用されるので、プラグインテーブルをバックアップに含めることができます。デフォルトでは空の配列を返します。
hasAdminArea()プラグインが独自の管理エリアをもつ場合 1 を、そうでない場合 0 を返します。デフォルトでは 0 を返します。
getPluginDep()(v3.2) プラグイン名の配列を返します。Nucleusはこれらのプラグインが前もってインストールされてない場合、プラグインのインストールを拒否します。デフォルトでは空の配列が返されます。プラグイン依存に関する詳細情報はこちら
+ +

実装可能なメソッドの次は、NucleusPlugin クラスが提供する、再実装すべきでない幾つかの特殊メソッドです。これらはプラグイン内で、$this->functionName()シンタックスを利用して呼び出します。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NucleusPlugin クラスの概要(再定義不可能なメソッド)
メソッド名説明
+
    +
  • createOption(...)
  • +
  • createBlogOption(...)(v2.2)
  • +
  • createCategoryOption(...)(v2.2)
  • +
  • createMemberOption(...)(v2.2)
  • +
  • createItemOption(...)(v3.2)
  • +
+
新しいオプションを生成します。
+
    +
  • deleteOption(...)
  • +
  • deleteBlogOption(...)(v2.2)
  • +
  • deleteCategoryOption(...)(v2.2)
  • +
  • deleteMemberOption(...)(v2.2)
  • +
  • deleteItemOption(...)(v3.2)
  • +
+
オプションを削除します。
+
    +
  • setOption(...)
  • +
  • setBlogOption(...)(v2.2)
  • +
  • setCategoryOption(...)(v2.2)
  • +
  • setMemberOption(...)(v2.2)
  • +
  • setItemOption(...)(v3.2)
  • +
+
オプションに値をセットします。
+
    +
  • getOption(...)
  • +
  • getBlogOption(...)(v2.2)
  • +
  • getCategoryOption(...)(v2.2)
  • +
  • getMemberOption(...)(v2.2)
  • +
  • getItemOption(...)(v3.2)
  • +
+
オプションの値を取得します。
+
    +
  • getAllBlogOptions(...)(v2.2)
  • +
  • getAllCategoryOptions(...)(v2.2)
  • +
  • getAllMemberOptions(...)(v2.2)
  • +
  • getAllItemOptions(...)(v3.2)
  • +
+
与えられたオプションにより、すべての値(コンテクストごとの一つの値)の連想配列を返します。
+
    +
  • getBlogOptionTop(...)(v3.2)
  • +
  • getMemberOptionTop(...)(v3.2)
  • +
  • getCategoryOptionTop(...)(v3.2)
  • +
  • getItemOptionTop(...)(v3.2)
  • +
+
与えられたオプションにより、すべての値のうちの最初の値を返します。
getID()このプラグインのIDを返します(このIDはNucleus内部で利用されるものです)。
getAdminURL()プラグインの管理エリアが置かれたURLを返します(そのような管理エリアがない場合は、この情報は無効です)。
getDirectory()プラグインの追加ファイルが格納されたサーバーのファイルシステムのパスを返します(そのようなファイルがない場合は、この情報は無効です)。結果は".../nucleus/plugins/plugname/"のようになります。
getShortName()"NP_"部分を省き、全てを小文字にしたプラグインのクラス名を返します。この情報は getAdminURL と getDirectory で使用されます。
+ +

スキン変数back to top

+ +

解説

+ +

+独自のスキン変数を生成し、<%plugin(PlugName,parameters)%> または <%PlugName(parameters)%>で呼び出すことが出来ます(すでに存在するスキン変数とかぶらない場合)。パラメータはカンマ区切りです。 +

+ +

+スキン変数を扱うには、doSkinVar メソッドを実装する必要があります。いくつかの例を以下に示します。 +

+ +
function doSkinVar($skinType)
+function doSkinVar($skinType, $param1, $param2)
+function doSkinVar($skinType, $skinVar, $param1, $param2)
+function doSkinVar($skinType, $skinVar, $param1 = 'default value')
+ +
    +
  • $skinType パラメータは、'index', 'item', 'archive', 'archivelist', 'member', 'error', 'search', 'imagepopup', 'template'のうちの一つを取ります
  • +
  • $skinVar は、スキン変数のタイプとして解釈される実質的に最初のパラメータになります(例:<%plugin(PlugName,VarType)%>)。
  • +
  • doSkinVar()(パラメータ無し)を使い、PHPファンクションのfunc_get_args()を用いてパラメータを取得することができます。引数の数の異なる、タイプの違うスキン変数を扱うときに便利です。
  • +
+ +

ノート

+ +
    +
  • (v2.0b) グローバル変数としてパースされている $currentSkinName を使ってスキンの名前を取得できます。
  • +
+ + + + +

テンプレート変数back to top

+ +

解説

+ +

+テンプレートプラグイン変数はスキンプラグイン変数と同様に働きますが以下の2点が異なります。

+ +
    +
  1. スキン内ではなくテンプレート内から呼ばれます。
  2. +
  3. $skinTypeパラメータを取りません。代わりに現在パースされているアイテムやコメントの情報付きの追加パラメータを取ります。 +
      +
    • doTemplateVar メソッドは &$item パラメータを取ります。
    • +
    • doTemplateCommentsVar メソッドは &$item と &$comment パラメータを取ります。
    • +
    + &マークに注意! +
  4. +
+ +

テンプレート変数はスキン変数と同じ要領で呼ばれます(<%plugin(PlugName,parameters)%> または <%PlugName(parameters)%>)。 +

+ +

+デフォルトでは、全てのテンプレート変数は'template'をskintypeパラメータとして、doSkinVar メソッドに渡ります。 +

+ +

+独自の実装を提供したい場合は、doTemplateVar メソッドや doTemplateCommentsVar メソッドを再定義する必要があります。skintypeパラメータが無くなる以外はdoSkinVarと同様に働きます。 +

+ +
function doTemplateVar(&$item)
+function doTemplateVar(&$item, $param1, $param2)
+function doTemplateVar(&$item, $type, $param1, $param2)
+function doTemplateVar(&$item, $type, $param1 = 'default value')
+function doTemplateCommentsVar(&$item, &$comment)
+function doTemplateCommentsVar(&$item, &$comment, $param1, $param2)
+function doTemplateCommentsVar(&$item, &$comment, $type, $param1, $param2)
+function doTemplateCommentsVar(&$item, &$comment, $type, $param1 = 'default value')
+ +

ノート

+ +
    +
  • (v2.0b) グローバル変数として内部で利用される $currentSkinName を使ってテンプレートの名前を取得できます。
  • +
+ + + + +

アクションback to top

+ +

プラグインは action.php を通してアクションを行うことができ、同様のスクリプトがコメントや投票の受け取りにも使用されてます。GETまたはPOSTのどちらかを通して呼び出せます。必要なパラメータはaction('plugin'と指定)、name(プラグイン名)、type(リクエストされたアクションの種類)です。

+ +

これらのアクションを有効にするために、doAction($actionType) メソッドをプラグイン内で実装する必要があります。リクエストからの追加パラメータはrequestVar('name') で取得できます(requestVar はPHPが付加する magic_quotes_gpc に配慮しています)。

+ +

+doAction メソッドが文字列を返すとき、エラーとして解釈され、エラーメッセージが表示されます。 +

+ + + + + + +

イベントback to top

+ +

+Nucleusプラグインはなにか重要なことが起きたときに発生するイベントに登録可能です。プラグインはイベント発生の際にアクションを実行したり、テキストを出力したりできます。 +

+ +

例

+ +

+下記は PreAddComment イベント(blogにコメントが追加される直前に生成されるイベント)にプラグインが登録する例です。 +

+ +
class NP_Acronyms extends NucleusPlugin {
+  ...
+  function getEventList() { return array('PreAddComment'); }
+  ...
+  function event_PreAddComment(&$data) {
+    // 頭字語 HTML を置き換え
+    $data['comment']['body'] = 
+        strreplace('HTML',
+                   '<acronym title="HyperText Markup Language">HTML</acronym>',
+                   $data['comment']['body']);
+  }
+}
+
+ +

このプラグインはコメント中の'HTML'というテキストを'<acronym title="HyperText Markup Language">HTML</acronym>'に置き換えます。acronymタグはHTMLタグで、頭字語についての追加情報を提供します。

+ +

イベント登録の仕方

+ +

イベント登録に必要なステップは以下になります。

+ +
    +
  1. getEventList メソッドから返る配列にイベント名を追加します。
  2. +
  3. event_EventName($data) という形でメソッドを生成し、この中でイベントを処理します。
  4. +
+ +

複数のプラグインが同じイベントに登録できます。管理エリアのプラグインリストの順序に従ってプラグインに通知が行きます。リストの上にあるプラグインほど早く通知されます。

+ +

パラメータ

+ +

event_EventName メソッドはひとつだけ $data パラメータを持ち、それはイベントごとに内容が異なります。これは連想配列です。この連想配列に渡されたオブジェクトや配列は参照形式で渡されるため、これらに加えた変更は記憶されます。

+ +

以下のイベントリストは、パラメータ変更がNucleusに知られるかどうかを示すために色を使い分けています。

+ +
    +
  • 参照渡し(緑): この種のパラメータに変更を加えるとNucleusに知られます。
  • +
  • 値渡し(赤): プラグインイベントハンドラに渡される前に値がコピーされます。これらの変数への変更は自動的に破棄されます。.
  • +
+ +

パラメータとして渡されるオブジェクトはobject.として示されます。ほとんどのオブジェクトは参照渡しで、object by refのように示されます。

+ +

イベントリスト

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
プラグインが登録できるイベント
イベントの名前イベントが発生するタイミングプラグインに渡されるパラメータ
InitSkinParseスキンの初期化の直前
+
skin
+
パースするSKINオブジェクト
+
type
+
スキンタイプ('index', 'item', 'archive', 'archivelist', 'member', 'error', 'search', 'imagepopup', 'fileparser'のいずれか)
+
PreSkinParseスキンのパースの直前
+
skin
+
パースするSKINオブジェクト
+
type
+
スキンタイプ('index', 'item', 'archive', 'archivelist', 'member', 'error', 'search', 'imagepopup', 'fileparser'のいずれか)
+
contents
+
スキンの内容
+
PostSkinParseスキンのパースの直後
+
skin
+
パースするSKINオブジェクト
+
type
+
スキンタイプ('index', 'item', 'archive', 'archivelist', 'member', 'error', 'search', 'imagepopup', 'fileparser'のいずれか)
+
PreItemアイテムのパース前、ただしアイテムヘッダーのパース後
+
blog
+
BLOG オブジェクト
+
item
+
アイテムデータを持つオブジェクト
+
PostItemアイテムのパース後、ただしアイテムフッターのパース前
+
blog
+
BLOG オブジェクト
+
item
+
アイテムデータを持つオブジェクト
+
PreCommentコメントの表示前
+
comment
+
コメントデータを持つ連想配列
+
PostCommentコメントの表示後
+
comment
+
コメントデータを持つ連想配列
+
PreDateHead日付ヘッダーのパース前
+
blog
+
BLOG オブジェクト
+
timestamp
+
日付ヘッダーのタイムスタンプ
+
PostDateHead日付ヘッダーのパース後
+
blog
+
BLOG オブジェクト
+
timestamp
+
日付ヘッダーのタイムスタンプ
+
PreDateFoot日付フッターのパース前
+
blog
+
BLOG オブジェクト
+
timestamp
+
日付フッターのタイムスタンプ
+
PostDateFoot日付フッターのパース後
+
blog
+
BLOG オブジェクト
+
timestamp
+
日付フッターのタイムスタンプ
+
LoginSuccessログイン成功後
+
member
+
MEMBER オブジェクト
+
username
+
ログ印字に使用されたログイン名
+
LoginFailedログイン失敗後
+
username
+
ログイン時に使われたユーザー名
+
Logoutログアウト後
+
username
+
ログアウト時のユーザー名
+
PreBlogContentblogの内容がスキン変数を通して挿入される前
+
blog
+
BLOG オブジェクト
+
type
+
呼び出されたスキン変数 ('blog', 'otherblog', 'archive', 'archivelist', 'item', 'searchresults', 'othersearchresults', 'categorylist', 'otherarchive', 'otherarchivelist')
+
PostBlogContentblogの内容がスキン変数を通して挿入された後
+
blog
+
BLOG オブジェクト
+
type
+
呼び出されたスキン変数 ('blog', 'otherblog', 'archive', 'archivelist', 'item', 'searchresults', 'othersearchresults', 'categorylist', 'otherarchive', 'otherarchivelist')
+
PreAddCommentコメントがデータベースに追加される前
+
comment
+
コメントデータ(連想配列)
+
spamcheck
+
(v3.3) SpamCheckイベントの結果として返されるデータ構造(連想配列)
+
PostAddCommentコメントがデータベースに追加された後
+
comment
+
コメントデータ(連想配列)
+
commentid
+
コメントのID
+
spamcheck
+
(v3.3) SpamCheckイベントの結果として返されるデータ構造(連想配列)
+
PostRegister新規ユーザーの登録後
+
member
+
新しいMEMBER オブジェクト
+
PostAddItemアイテムがデータベースに追加された後
+
itemid
+
データベースに出来た新しい itemid
+
PostUpdateItemアイテムがデータベースにアップデートされた直後
+
itemid
+
アイテムのID
+
PreAddItemアイテムがデータベースに追加される直前
+
title
+
タイトル
+
body
+
本文
+
more
+
拡張テキスト
+
blog
+
BLOG オブジェクト
+
authorid
+
執筆者ID
+
timestamp
+
UNIX タイムスタンプ
+
closed
+
1 (コメント不可) or 0 (コメント可)
+
draft
+
1 (ドラフト) or 0 (非ドラフト)
+
catid
+
カテゴリーID
+
PreUpdateItemデータベースにあるアイテムが更新される直前
+
itemid
+
アイテム ID
+
title
+
タイトル
+
body
+
本文
+
more
+
拡張テキスト
+
blog
+
BLOG オブジェクト object
+
closed
+
1 (コメント不可) or 0 (コメント可)
+
catid
+
カテゴリーID
+
PrepareItemForEditアイテムをデータベースから取得した直後で、編集のためにユーザーに表示される前
+
item
+
アイテムデータを持つ連想配列
+
PreUpdateCommentコメントが更新され、データベースに保存される直前
+
body
+
コメント本文
+
PrepareCommentForEditコメントをデータベースから取得した直後で、編集のためにユーザーに表示される前
+
comment
+
コメントデータ(連想配列)
+
PrePluginOptionsEdit +
    +
  • (v2.0b) 'プラグインオプションの編集'フォームが生成される前
  • +
  • (v2.2) パラメータ追加
  • +
  • (v3.2) 各オプションにパラメータ追加
  • +
+
+
context
+
(v2.2) global, blog, member, item, categoryのいずれか
+
options
+
次のインデックスをもつ連想配列: name, value, oid, description, type, typeinfo, contextid, extra 。追加オプションをここに加えることも可能(それらで何かの処理をするときはPostPluginOptionsUpdateの記述も必要)
+ extraフィールドを用いて、オプションに追加HTML(たとえばフォームのコントロール)を追加できます。もしそうする場合、 extra に追加する前に pid と getID() を比較し、さらに name をチェックすべきです。
+
plugid
+
プラグイン ID (これが気になるなら、GetID()を見ると理解できる)(コンテクストがglobalのときのみ存在)
+
contextid
+
コンテクスト ID (blogid, memberid, catid, itemid コンテクストによる)
+ +
PrePluginOptionsUpdate + (v3.2) プラグインオプションが更新される前。(このイベントを使ってオプションの新しい値を評価したり変更したりできます) +
+
context
+
(v2.2) global, member, blog, item, categoryのいずれか
+
plugid
+
プラグイン ID (これが気になるなら、GetID()を見ると理解できる)
+
optionname
+
オプション名
+
contextid
+
コンテクスト ID (blogid, memberid, catid, itemid コンテクストによる)
+
value
+
そのオプションの新しい値
+
PostPluginOptionsUpdate +
    +
  • (v2.0b) プラグインオプションの更新後
  • +
  • (v2.2) コンテクストによって異なるパラメータ
  • +
+
+
context
+
(v2.2) global, member, blog, item, categoryのいずれか
+
plugid
+
プラグイン ID (これが気になるなら、GetID()を見ると理解できる)(globalコンテクスト)
+
blogid
+
(v2.2) blog ID (blog コンテクスト)
+
blog
+
(v2.2) BLOG オブジェクト (blog コンテクスト)
+
memberid
+
(v2.2) member ID (member コンテクスト)
+
member
+
(v2.2) MEMBER オブジェクト (member コンテクスト)
+
catid
+
(v2.2) category ID (category コンテクスト)
+
itemid
+
(v2.2) item ID (item コンテクスト)
+
member
+
(v2.2) ITEM オブジェクト (item コンテクスト)
+
PostAuthentication(v2.0b) ログイン処理の完了後。ページリクエストごとに発生
+
loggedIn
+
$member->isLoggedIn()の戻り値
+
PreAddItemForm(v2.0b) アイテム追加フォーム(ブックマークレットまたは管理エリア)が生成される直前
+
contents
+
連想配列への参照。そのうちの'title', 'body', 'more'にはフォームフィールドへの初期値を与えることができます。複数のプラグイン間でこれらの値の変更を避けるには、処理後に'hasBeenSet'の値を1にセットします(かつ処理前にこの値をチェックするようにします)
+
blog
+
BLOG オブジェクトへの参照
+
AddItemFormExtras(v2.0b) アイテム追加ページまたはブックマークレット内部のどこか。template ファイルの類を別に用意しなくても、ここでプラグインがカスタムフィールドを追加できる。
+
blog
+
BLOG オブジェクトへの参照
+
EditItemFormExtras + (v2.0b) アイテム編集ページまたはブックマークレット内部のどこか。template ファイルの類を別に用意しなくても、ここでプラグインがカスタムフィールドを追加できる。
+ + あまり多くのデータを追加しないこと。また以下のように正しいXHTMLを生成してください。 +
<h3>プラグイン名</h3>
+<p>追加フォームの内容</p>
+ このようにして、正しい構造を保ちつつ複数のプラグインがオプションを保持できます。またフィールド名の重複を避けるためにプレフィックスを用いてください(例 plug_tb_url)。 +
+
blog
+
BLOG オブジェクトへの参照
+
variables
+
+ (read-only) 編集されるアイテムに関する全ての情報を持つ連想配列: 'itemid', 'draft', 'closed', 'title', 'body', 'more', 'author', 'authorid', 'timestamp', 'karmapos', 'karmaneg', 'catid' +
+
itemid
+
アイテム IDへのショートカット
+
BlogSettingsFormExtras(v2.0) blog設定ページにフォームを追加可能 +
+ あまり多くのデータを追加しないこと。また以下のように正しいXHTMLを生成してください。 +
<h4>プラグイン名</h4>
+<form method="post" action="..."><p>
+追加フォームの内容
+</p></form>
+ このようにして、正しい構造を保ちつつ複数のプラグインがオプションを保持できます。またフィールド名の重複を避けるためにプレフィックスを用いてください(例 plug_tb_url)。 + +
+
blog
+
BLOG オブジェクトへの参照
+
PreDeleteItem(v2.0) アイテムがデータベースから削除される直前
+
itemid
+
削除されるアイテムID
+
PostDeleteItem(v2.0) アイテムがデータベースから削除された直後
+
itemid
+
削除されたアイテムID
+
PreDeleteCategory(v2.0) カテゴリーがデータベースから削除される直前
+
catid
+
削除されるカテゴリー ID
+
PostDeleteCategory(v2.0) カテゴリーがデータベースから削除された直後
+
catid
+
削除されたカテゴリー ID
+
PreDeleteBlog(v2.0) blogがデータベースから削除される直前
+
blogid
+
削除されるblogID
+
PostDeleteBlog(v2.0) blogがデータベースから削除された直後
+
blogid
+
削除されたblogID
+
PreDeleteMember(v2.0) メンバーがデータベースから削除される直前
+
member
+
削除されるメンバーに関するMEMBER オブジェクトへの参照
+
PostDeleteMember(v2.0) メンバーがデータベースから削除された直後
+
member
+
削除されるメンバーに関するMEMBER オブジェクトへの参照
+
PreDeleteTeamMember(v2.0) メンバーがweblogチームから削除される直前
+
member
+
MEMBER オブジェクトへの参照
+
blogid
+
blogID
+
PostDeleteTeamMember(v2.0) メンバーがweblogチームから削除された直後
+
member
+
MEMBER オブジェクトへの参照
+
blogid
+
blogID
+
PreDeleteComment(v2.0) コメントがデータベースから削除される直前
+
commentid
+
削除されるコメントID
+
PostDeleteComment(v2.0) コメントがデータベースから削除された直後
+
commentid
+
削除されたコメントID
+
ActionLogCleared(v2.0) アクションログが消去された後なし
PreDeleteTemplate(v2.0) テンプレートがデータベースから削除される直前
+
templateid
+
削除されるテンプレートID
+
PostDeleteTemplate(v2.0) テンプレートがデータベースから削除された直後
+
templateid
+
削除されたテンプレートID
+
PreDeleteSkin(v2.0) スキンがデータベースから削除される直前
+
skinid
+
削除されるスキンID
+
PostDeleteSkin(v2.0) スキンがデータベースから削除された直後
+
skinid
+
削除されたスキンID
+
PreDeleteSkinPartスペシャルスキンパーツがデータベースから削除される直前
+
skinid
+
削除されるスペシャルスキンパーツが含まれるスキンのID
+
skintype
+
削除されるスペシャルスキンパーツの名前
+
PostDeleteSkinスペシャルスキンパーツがデータベースから削除された直後
+
skinid
+
削除されたスペシャルスキンパーツが含まれるスキンのID
+
skintype
+
削除されたスペシャルスキンパーツの名前
+
PreDeletePlugin(v2.0) プラグインがデータベースから削除される直前
+
plugid
+
削除されるプラグインID
+
PostDeletePlugin(v2.0) プラグインがデータベースから削除された直後
+
plugid
+
削除されたプラグインID
+
PreDeleteBan(v2.0) 禁止IPがデータベースから削除される直前
+
blogid
+
禁止IPが削除されるblogのID
+
iprange
+
禁止されたIPレンジ
+
PostDeleteBan(v2.0) 禁止IPがデータベースから削除された直後
+
blogid
+
禁止IPが削除されたblogのID
+
iprange
+
禁止されたIPレンジ
+
PreAddCategory(v2.0) 新しいカテゴリーがデータベースに生成される直前
+
blog
+
BLOG オブジェクトの参照
+
name
+
新しいカテゴリー名
+
description
+
新しいカテゴリーの説明
+
PostAddCategory(v2.0) 新しいカテゴリーがデータベースに生成された直後
+
blog
+
BLOG オブジェクトへの参照
+
name
+
新しいカテゴリー名
+
description
+
新しいカテゴリーの説明
+
catid
+
新しいカテゴリー ID
+
PreAddBlog(v2.0) 新しいblogが生成される直前
+
name
+
新しい blog名
+
shortname
+
新しい blogの短縮名
+
timeoffset
+
新しい blogのタイムオフセット
+
description
+
新しい blogの説明
+
defaultskin
+
新しいblogのデフォルトスキンのID
+
PostAddBlog(v2.0) 新しいblogが生成された直後
+
blog
+
新しいBLOG オブジェクト
+
PreAddPlugin(v2.0) プラグインが追加される直前
+
file
+
新しいプラグインのファイル名
+
PostAddPlugin(v2.0) プラグインが追加された直後
+
plugin
+
新しく追加されたプラグインのオブジェクト
+
PreAddTeamMember(v2.0) メンバーがblogチームに追加される直前
+
blog
+
BLOG オブジェクト
+
member
+
MEMBER オブジェクト
+
admin
+
新しく追加されたメンバーが管理権限を持っているかどうかを示すブール値
+
PostAddTeamMember(v2.0) メンバーがblogチームに追加された直後
+
blog
+
BLOG オブジェクト
+
member
+
MEMBER オブジェクト
+
admin
+
新しく追加されたメンバーが管理権限を持っているかどうかを示すブール値
+
PreAddTemplate(v2.0) 新しいテンプレートが生成される直前(注:テンプレートが複製されたときも呼ばれる)
+
name
+
新しいテンプレート名
+
description
+
新しいテンプレートの説明
+
PostAddTemplate(v2.0) 新しいテンプレートが生成された直後
+
name
+
新しいテンプレート名
+
description
+
新しいテンプレートの説明
+
templateid
+
新しいテンプレートID
+
PreAddSkin(v2.0) 新しいスキンが生成される直前(注:スキンが複製されたときも呼ばれる)
+
name
+
新しいスキン名
+
description
+
新しいスキン名の説明
+
type
+
スキンのコンテントタイプ
+
includeMode
+
新しいスキンのインクルードモード
+
includePrefix
+
新しいスキンのインクルードプレフィックス
+
PostAddSkin(v2.0) 新しいスキンが生成された直後
+
name
+
新しいスキン名
+
description
+
新しいスキンの説明
+
type
+
スキンのコンテントタイプ
+
includeMode
+
新しいスキンのインクルードモード
+
includePrefix
+
新しいスキンのインクルードプレフィックス
+
skinid
+
新しいスキンID
+
PreAddBan(v2.0) 新しい禁止IPが追加される直前
+
blogid
+
blogID
+
iprange
+
禁止されたIPレンジ
+
reason
+
禁止された理由を記述したテキストメッセージ
+
PostAddBan(v2.0) 新しい禁止IPが追加された直後
+
blogid
+
blogID
+
iprange
+
禁止されたIPレンジ
+
reason
+
禁止された理由を記述したテキストメッセージ
+
PreMoveItem(v2.0) アイテムが他のblog/カテゴリーに移される直前
+
itemid
+
アイテムID
+
destblogid
+
移動先のblogID
+
destcatid
+
移動先のカテゴリーID
+
PostMoveItem(v2.0) アイテムが他のblog/カテゴリーに移された直後
+
itemid
+
アイテムID
+
destblogid
+
新しいblogID
+
destcatid
+
新しいカテゴリーID
+
PreMoveCategory(v2.0) カテゴリーが他のblogに移される直前
+
catid
+
カテゴリーID
+
sourceblog
+
移動元のBLOG オブジェクト
+
destblog
+
移動先のBLOG オブジェクト
+
PostMoveCategory(v2.0) カテゴリーが他のblogに移された直後
+
catid
+
カテゴリーID
+
sourceblog
+
移動元のBLOG オブジェクト
+
destblog
+
移動先のBLOG オブジェクト
+
MemberSettingsFormExtras(v2.0) メンバー設定ページにフォームを追加可能 + あまり多くのデータを追加しないこと。また以下のように正しいXHTMLを生成してください。 +
<h4>プラグイン名</h4>
+<form method="post" action="..."><p>
+追加フォームの内容
+</p></form>
+ このようにして、正しい構造を保ちつつ複数のプラグインがオプションを保持できます。またフィールド名の重複を避けるためにプレフィックスを用いてください(例 plug_tb_url)。 + +
+
member
+
MEMBER オブジェクトへの参照
+
GeneralSettingsFormExtras(v2.0) 一般設定ページにフォームを追加可能 + あまり多くのデータを追加しないこと。また以下のように正しいXHTMLを生成してください。 +
<h4>プラグイン名</h4>
+<form method="post" action="..."><p>
+追加フォームの内容
+</p></form>
+ このようにして、正しい構造を保ちつつ複数のプラグインがオプションを保持できます。またフィールド名の重複を避けるためにプレフィックスを用いてください(例 plug_tb_url)。 + +
なし
AdminPrePageHead(v2.5) 管理画面で、ページヘッドを出力する直前。このイベントはヘッド領域にスクリプトやCSSを追加するのに用いられます。
+
extrahead
+
HTMLページのヘッド領域に埋め込まれる追加情報。ここに追加したいものを入れてください。
+
action
+
現在実行されているアクション、またはページタイプ
+
AdminPrePageFoot(v2.5) 管理画面で、ページフッターを出力する直前。
+
action
+
現在実行されているアクション、またはページタイプ
+
PreSendContentType(v2.5) HTTPヘッダーにコンテントタイプがセットされる直前
+
contentType
+
コンテントタイプ(application/xhtml+xmlなど)
+
charset
+
キャラクターセット
+
pageType
+
表示するページの種類を示す文字列:skin (スキンタイプ), media (メディアライブラリ), admin-action (管理エリア), bookmarklet-action (ブックマークレット)
+
QuickMenu(v2.5) 管理エリアのクイックメニューの一番下。そこへのプラグイン登録に利用されます。登録するにはoptionsに連想配列を入れます。実装例がプラグイン管理エリアを作るのセクションにあります。
+
options
+
配列
+
BookmarkletExtraHead(v2.5) ブックマークレット XHTMLコードのヘッド領域内。
+
extrahead
+
XHTMLコードのヘッド領域に埋め込まれる追加情報。ここに追加したいものを入れてください。
+
FormExtra(v3.2) このイベントは、プラグインがコメント、メンバー間メール、認証フォームのいずれかのフォーム内に追加フィールドを挿入するときに使います。フォーム処理の際に発生する ValidateForm イベントに対応します。
+
type
+
イベントを発生させるフォームタイプ +
    +
  • activation
  • +
  • additemform (注:これは管理画面のアイテム追加フォームではない)
  • +
  • commentform-loggedin
  • +
  • commentform-notloggedin
  • +
  • membermailform-loggedin
  • +
  • membermailform-notloggedin
  • +
+
+
member
+
type が activationのとき、このフィールドは認証メンバーの詳細情報を含みます
+
ValidateForm(v3.2) コメント、メンバー間メール、アカウント認証のいずれかが処理されるときに呼ばれます。プラグインはこれで各データの評価を実行でき、もし不具合があれば処理を中断できます。FormExtra と共に使うとフォームにフィールドを追加できます。
+
type
+
処理されるフォームタイプ +
    +
  • membermail
  • +
  • comment
  • +
  • activation
  • +
+
+
error
+
フォーム処理をストップするときに、error フィールドに空でないエラーメッセージを記入します。このエラーメッセージはユーザー側に表示されます。
+
comment
+
コメントデータの連想配列(コメントフォームのときのみ)
+
spamcheck
+
(v3.3) SpamCheckイベントの結果として返される連想配列(コメントフォームのときのみ)
+
member
+
認証フォームのとき、認証中のメンバー情報を含みます。
+
ParseURL(v3.22)NucleusのコアでURLからアイテムやカテゴリのIDを読み取る前。プラグインはこのイベントを使ってURLを解釈します
+
type
+
FancyURLの仮想ディレクトリ(拡張子無しファイル)のファイル名(item, blog, ...)
+
info
+
解決される前のURL(この名前は以前の変数名であるpathinfoから来ています).
+
complete
+
プラグインがURLを解釈し終わるとこれがtrueにセットされます。falseの場合はプラグインはURLを解釈していません。
+
GenerateURL(v3.22)URLが自動生成される前。このイベントを使って独自のURLを生成する事が出来ます。
+
type
+
生成するURLのタイプ(item, blog, ...)
+
params
+
生成するURLに付加するパラメータ
+
completed
+
プラグインはURLを生成し終わるとこれをtrueにセットしてURLを返します。falseの場合はプラグインはURLを生成していません。
+
url
+
プラグインが生成したURLを格納する為の空の変数
+
SpamCheck(v3.3) 新しいコメントが追加されるときに呼ばれます。アンチスパムのプラグインはこのイベントを使ってコメントがスパムかどうかマークを付けられます。SpamCheckイベントの詳しい説明は別の文書を参照のこと(SpamCheck API 2.0)
+
spamcheck
+
spamcheckのデータ構造(連想配列)
+
PreMediaUpload(v3.3)アップロードされたファイルが「media」ディレクトリに書き込まれる前。
+
collection
+
アップロードされたファイルが格納されるべき「コレクション」
+
uploadfile
+
テンポラリディレクトリに狩り沖されているアップロードされたファイルのファイル名
+
filename
+
最終的に保存されるファイル名
+
PostMediaUpload(v3.3)アップロードされたファイルが「media」ディレクトリに書き込まれた後。
+
collection
+
アップロードされたファイルが格納された「コレクション」
+
mediadir
+
アップロードされたファイルが保存されたメディアディレクトリ
+
filename
+
保存されたファイル名
+
SendPing(v3.3)「ブログの設定」で「更新時にweblogsアップデート通知サービスへPingを送りますか?」が「はい」に設定されている時に限り、新しいアイテムを追加した時に呼び出されます(このイベントに対応しているプラグインがインストールされている時に限る)。このイベントはPing送信プラグインで各種「ブログ検索サービス」へ更新pingを送信します(例えばGoogleブログ検索など)
+
blogid
+
アイテムが追加されたブログのID
+
JustPosted(v3.3)投稿された未来の日付のアイテムの設定時刻が来た時。このイベントはページの表示が完了した後に発生条件をチェックします。
+
blogid
+
未来の日付のアイテムの設定時刻が来たブログのID
+
RegistrationFormExtraFields(v3.33) createaccount.php からビジターに表示されるアカウント作成フォームが表示され、FormExtra イベントが起きる前。プラグインはこのイベントによって、アカウント作成フォームに独自のフィールドを付け加える事が出来ます。PostRegister イベントに同時に登録すると、付け加えたフィールドの値を評価する事が出来る様になります。渡されるパラメータは、付け加えられたフィールドを、元々のフィールドと違和感無く表示させる為に使用されます。
+
type
+
アカウント作成フォームのタイプ。通常は createaccount.php。
+
prelabel
+
追加フィールドの「ラベル」の前に挿入される HTML コード
+
postlabel
+
追加フィールドの「ラベル」の後に挿入される HTML コード
+
prefield
+
追加フィールドの「入力フィールド」の前に挿入される HTML コード
+
postfield
+
追加フィールドの「入力フィールド」の後に挿入される HTML コード
+
TemplateExtraFields(v3.40) テンプレートが編集・更新される時。プラグイン製作者がコアのテンプレートシステムをより使いやすくするために、テンプレートにフィールドを追加する事が出来ます。プラグイン作者は追加するテンプレートフィールドの初期状態をプラグインオプションに保存し、そこで使用するテンプレート変数についてのドキュメントを書くことが要求されます。また、このイベントに関するサンプルプラグインが、フォーラムの新API「TemplateExtraFields」を使ったプラグインの見本(本家フォーラムのスレッドは Skin specific values for Plugins)にあります。
+
fields
+
プラグイン名をキーにした連想配列。配列の内容は、テンプレートのフィールド名をキーにした連想配列で、その値はフォームのフィールドに表示されるラベル。フィールド名は全て英数小文字で、フィールド名の重複を避けるためにプラグイン名を含んでいる事が好ましい。
+
PreArchiveListItem(v3.40) アーカイブリストが表示される前。アーカイブリストを表示するために使われたテンプレートのアーカイブリスト本体フィールドのテンプレート変数を追加/修正することを可能にします。追加のテンプレート変数についてのドキュメントも整備すべきです。
+
listitem
+
テンプレート変数をキーにした連想配列。値はテンプレート変数に置き換えられる内容。この配列にキーと値のペアを追加する事で、新しい変数が追加できます。
+
PreCategoryListItem(v3.40) カテゴリーリストが表示される前。カテゴリーリストを表示するために使われたテンプレートのカテゴリーリスト本体フィールドのテンプレート変数を追加/修正することを可能にします。追加のテンプレート変数についてのドキュメントも整備すべきです。
+
listitem
+
テンプレート変数をキーにした連想配列。値はテンプレート変数に置き換えられる内容。この配列にキーと値のペアを追加する事で、新しい変数が追加できます。
+
PreBlogListItem(v3.40) ブログリストが表示される前。ブログリストを表示するために使われたテンプレートのブログリスト本体フィールドのテンプレート変数を追加/修正することを可能にします。追加のテンプレート変数についてのドキュメントも整備すべきです。
+
listitem
+
テンプレート変数をキーにした連想配列。値はテンプレート変数に置き換えられる内容。この配列にキーと値のペアを追加する事で、新しい変数が追加できます。
+
PreTemplateRead(v3.40) テンプレートが読み込まれる直前。読み込むテンプレートを変更する事が出来ます。NP_MultiLanguage はこのイベントを使用しています。
+
name
+
呼び出されるテンプレートの名前
+
CustomLogin(v3.40) Nucleus にログインする直前。ログインの手順をカスタマイズできます。外部認証を簡素化し、ログイン ID にメールアドレス等を使用出来る様になります。
+
login
+
ユーザーが「ログインID」フィールドに入力した文字列。Nucleus のメンバーとして登録されているなら、プラグイン側で外部認証された「ログインID」と Nucleus のそれを紐つけるべきです。そうでないとクッキーがセットされず、ページを移動するごとにログアウトしてしまいます。
+
password
+
ユーザーが「パスワード」フィールドに入力した文字列。
+
success
+
認証が成功したかどうかのフラグ。「1」が成功。失敗だと「0」。初期値は「0」。プラグイン側でセットします。
+
allowlocal
+
整数値。プラグイン側で外部認証に失敗した後に、Nucleus のログインを試すかどうかのフラグ。「1」が試す「0」が試さない。初期値は「1」プラグイン側でセットします。
+
PrePasswordSet(v3.50)パスワードを設定する時に呼び出されます。パスワードの強度をプラグインで設定することが出来ます。
+
password
+
ユーザーが入力したパスワード文字列
+
errormessage
+
エラーメッセージ。エラーが起きない場合は空白に設定します。
+
valid
+
設定しようとしているパスワードが妥当かどうかのフラグ。デフォルトは「真」。プラグインはこの値の妥当性を審査するべきです。
+
+ + + +

オプションを保存するback to top

+ +

プラグインに簡単にオプションを登録・取得できるように一連のメソッドが用意されています。これらのオプションは直接Nucleusの管理エリアで編集でき、プラグイン自身の管理エリアを用意する必要もなく、PHPファイルそのものの中にオプションの値を書き込まずにすみます。

+ +

オプションは異なったコンテクストで利用可能です。

+ +
    +
  1. グローバルオプション:管理エリアのプラグインセクションで編集可能
  2. +
  3. blogオプション:blog設定ページで編集可能
  4. +
  5. カテゴリーオプション:blog設定ページ(のカテゴリー編集ページ)で編集可能
  6. +
  7. メンバーオプション:メンバー編集ページで編集可能
  8. +
  9. アイテムオプション:アイテムの追加、およびアイテムの編集ページで編集可能
  10. +
+ +

オプションの種類

+ +

オプションにはいくつかのタイプが提供されています。

+ +
+
text
+
シンプルなテキスト
+
yesno
+
'yes'か'no'どちらか(編集画面ではラジオボタンとして表示されます)
+
password
+
テキストフィールド (編集画面では伏字で表示されます)
+
textarea (v2.2)
+
複数行のテキストフィールド
+
select (v2.2)
+
ドロップダウンメニュー。次のような形式の追加情報が必要です: Option 1|value1|Option 2|value2|Option 3|value3 +
+
+ +

オプション・メタ

+ +

Nucleus v3.2よりオプション・メタデータを用いて、オプションタイプを正しい値を受け取れるように制限できるようになりました。このメタデータは $typeExtrasフィールドにセミコロン区切りのリストで保存されます。注:selectオプションでは、selectリストは$typeExtrasのなかで一番最初でなければいけません。

+ + + + + + + + + + +
キー説明
datatypeNucleus本体に、どのデータ型を使いたいかという追加情報を与えます。現在は 'numerical' のみ利用できます。 'numerical' を指定することでNucleusは数値情報のみを受け付けます(クライアントサイド・サーバサイド両方でチェック) ('select' と 'text'のオプションタイプで利用できます)
access'readonly'にセットすることで、オプションを編集不可能にします('text' と 'textarea'のオプションタイプで利用できます)
+ 'hidden'を使うと、利用者側にそのオプションの存在を完全に隠蔽します('text'のオプションタイプで利用できます)
+ +

設定例

+
// 数値のみを受け付けるテキストオプションを作成
+$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');
+
+ +

制限

+ +
    +
  1. オプション名は最大20文字です。
  2. +
  3. オプションの説明文は最大255文字です。
  4. +
  5. オプションの値は制限ありません(v2.2より前のバージョンでは128文字の制限がありました)
  6. +
  7. '=', '|', ';' のキャラクターはセレクトオプション用のセレクトリストやオプション・メタデータ中で使用することはできません。
  8. +
+ +

メソッド

+ +

createOption($name, $desc, $type, $defValue = '', $typeExtras = '')

+ +

グローバルなコンテクストで新しいオプションを生成します。

+ + + + + + + + + + + + + + + + + + + +
パラメータ値
$nameオプション名
$descオプション編集画面で表示される説明文
$typeオプションタイプ(前出)
$defValue初期値
$typeExtrasオプションタイプの追加情報(前出)
+ +

[v2.2] createBlogOption($name, $desc, $type, $defValue = '', $typeExtras = '')

+ +

blogのコンテクストで新しいオプションを生成します(createOptionを参照)。

+ +

[v2.2] createCategoryOption($name, $desc, $type, $defValue = '', $typeExtras = '')

+ +

カテゴリーのコンテクストで新しいオプションを生成します(createOptionを参照)。

+ +

[v2.2] createMemberOption($name, $desc, $type, $defValue = '', $typeExtras = '')

+ +

メンバーのコンテクストで新しいオプションを生成します(createOptionを参照)。

+ +

[v3.2] createItemOption($name, $desc, $type, $defValue = '', $typeExtras = '')

+ +

アイテムのコンテクストで新しいオプションを生成します(createOptionを参照)。

+ +

setOption($name, $value)

+ +

すでにデータベースに存在するオプションの値を変更します。

+ + + + + + + + + + +
パラメータ値
$nameオプション名
$value新しい値
+ +

[v2.2] setBlogOption($blogid, $name, $value)

+ +

blogオプションの値を変更します。blogid属性はどのblogでそのオプションが有効かを示します(その他のオプション:setOptionを参照)。

+ +

[v2.2] setCategoryOption($catid, $name, $value)

+ +

カテゴリーオプションの値を変更します。catid属性はどのカテゴリーでそのオプションが有効かを示します(その他のオプション:setOptionを参照)。

+ +

[v2.2] setMemberOption($memberid, $name, $value)

+ +

メンバーオプションの値を変更します。memberid属性はどのメンバーでそのオプションが有効かを示します(その他のオプション:setOptionを参照)。

+ +

[v3.2] setItemOption($itemid, $name, $value)

+ +

アイテムオプションの値を変更します。itemid属性はどのアイテムでそのオプションが有効かを示します(その他のオプション:setOptionを参照)。

+ +

getOption($name)

+ +

データベース内のオプションの値を返します。

+ + + + + + + +
パラメータ値
$nameオプション名
+ +

[v2.2] getBlogOption($blogid, $name)

+ +

blogオプションの値を返します。blogid属性は値がリスエストされたblogを示します(その他のオプション:getOptionを参照)。

+ +

[v2.2] getCategoryOption($catid, $name)

+ +

カテゴリーオプションの値を返します。catid属性は値がリスエストされたカテゴリーを示します(その他のオプション:getOptionを参照)。

+ +

[v2.2] getMemberOption($memberid, $name)

+ +

メンバーオプションの値を返します。memberid属性は値がリスエストされたメンバーを示します(その他のオプション:getOptionを参照)。

+ +

[v3.2] getItemOption($itemid, $name)

+ +

アイテムオプションの値を返します。itemid属性は値がリスエストされたアイテムを示します(その他のオプション:getOptionを参照)。

+ +

deleteOption($name)

+ +

データベースからオプションを削除します。

+ + + + + + + +
パラメータ値
$nameオプション名
+ +

[v2.2] deleteBlogOption($name)

+ +

blogオプションを削除します(deleteOptionを参照)。

+ +

[v2.2] deleteCategoryOption($name)

+ +

カテゴリーオプションを削除します(deleteOptionを参照)。

+ +

[v2.2] deleteMemberOption($name)

+ +

メンバーオプションを削除します(deleteOptionを参照)。

+ +

[v3.2] deleteItemOption($name)

+ +

アイテムオプションを削除します(deleteOptionを参照)。

+ +

[v2.2] getAllBlogOptions($name)

+ +

与えられたblogオプションの全ての値を返します。結果は存在するblogidごとの連想配列です。

+ +

[v2.2] getAllCategoryOptions($name)

+ +

与えられたカテゴリーオプションの全ての値を返します。結果は存在するcatidごとの連想配列です。

+ +

[v2.2] getAllMemberOptions($name)

+ +

与えられたメンバーオプションの全ての値を返します。結果は存在するmemberidごとの連想配列です。

+ +

[v3.2] getAllItemOptions($name)

+ +

与えられたアイテムオプションの全ての値を返します。結果は存在するitemidごとの連想配列です。

+ +

[v3.2] getBlogOptionTop($name, $amount = 10, $sort = 'desc')

+ +

与えられたオプションの最初の値を返します。結果は配列で、各要素がそれぞれのblogid ('id') の値 ('value') を持つ配列になっています。

+ + + + + + + + + + + + + +
パラメータ値
$nameオプション名
$amount必要なオプション数
$sort昇順 ('asc') か降順 ('desc') で並べ替え
+ +

[v3.2] getMemberOptionTop($name, $amount = 10, $sort = 'desc')

+ +

与えられたオプションの最初の値を返します。結果は配列で、各要素がそれぞれのメンバーID ('id') の値 ('value') を持つ配列になっています(パラメータはgetBlogOptionTopを参照)。

+ +

[v3.2] getCategoryOptionTop($name, $amount = 10, $sort = 'desc')

+ +

与えられたオプションの最初の値を返します。結果は配列で、各要素がそれぞれのカテゴリーID ('id') の値 ('value') を持つ配列になっています(パラメータはgetBlogOptionTopを参照)。

+ +

[v3.2] getItemOptionTop($name, $amount = 10, $sort = 'desc')

+ +

与えられたオプションの最初の値を返します。結果は配列で、各要素がそれぞれのアイテムID ('id') の値 ('value') を持つ配列になっています(パラメータはgetBlogOptionTopを参照)。

+ +
+注: プラグインクラス内のコンストラクタから、これらのファンクションを呼ぶことはできません。プラグインがロードされた後にこれらを実行したいときは、かわりにinit()メソッド内に置きます。 +
+ +

データベース・テーブルback to top

+ +

Nucleusテーブルへのアクセス

+ +

v2.0まで、Nucleusテーブルへのアクセスは単にnucleus_と名づけられたテーブルに対してSQL命令を実行するだけのものでした。Nucleusのバージョン2.2以降はカスタム・テーブル名を利用できるようになったため、プラグイン開発に若干注意する必要があります。

+

v3.5でNucleusはPDO等MySQL以外のデータベースハンドラのサポートをするようになりました。この機能はベータ実装ではありますが、プラグイン開発者はデータベースの呼び出しに使用する関数の「sql_*」への書き換えを始めてください。 +基本的に、使用している全ての「mysql_*」関数を「sql_*」に置き換える必要があります。たとえばmysql_fetch_assoc($result)はsql_fetch_assoc($result) に置き換えになります。 +全ての関数を書き換えたら、Sql APIが無い古いバージョンのNucleusインストールできないように、次に示すコードをプラグイン内に記述して、インストールに必要な最低バージョンを350に指定する必要があります。
+function getMinNucleusVersion( return '350';)

+ +
    +
  1. nucleus_item などの固定されたテーブル名の代わりに、テーブル名のプレフィックスを生成するために sql_table('item') というグローバルファンクションを利用します。
  2. +
  3. supportsFeature('SqlTablePrefix') が呼ばれたときにプラグインが1(真)を返すようにします。これがないと、カスタムプレフィックスがセットされている場合でバージョンが2.0より大きいNucleusではプラグインをロードできません(用心のため)。
  4. +
  5. 3.5以降:supportsFeature('SqlApi') が呼ばれたときにプラグインが1(真)を返すようにします。3.5以降のバージョンでは、データベースのバックエンドにmysqlでないものを使用している場合にプラグインをロードできなくなります(用心のため)。
  6. +
+ +

v2.0までのNucleusではグローバルファンクション sql_table は利用できないことに注意してください。もしこのメソッドを用いつつ、プラグインをv2.0以下のNucleusで動作させたい場合は、以下のコードをプラグインクラスの前に追加してください。

+ +
<?
+
+// プラグインがNucleusバージョン2.0以下と互換性を持つために必要
+if (!function_exists('sql_table'))
+{
+    function sql_table($name) {
+        return 'nucleus_' . $name;
+    }
+}
+
+class NP_HelloWorld extends NucleusPlugin {
+...
+}
+
+?>
+ +

独自テーブル

+ +

もしプラグイン独自のテーブルが必要なら、installメソッドの中で独自テーブルを生成し、unInstallメソッドの中でそれを削除するようにします。

+ +

いくつかの注意点

+
    +
  • nucleus_plug_plugname のように、他のプラグインと競合しないテーブル名を考えてください。カスタムプレフィックスに対応するため、テーブル名をsql_table('plug_plugname') で生成してください。
  • +
  • 自分自身でデータベース接続をする必要はありません。PHPコマンド mysql_query() を使ってSQL命令を実行できます。
  • +
  • 自分でデータベース接続をする場合、後でNucleusデータベースへの接続を復元するようにしてください。自前処理の後で sql_connect() を呼ぶことで可能です。頻繁な再接続を避けるために、コンストラクタでそれを行うのも良いです。$this- >dbのリンクIDを保持でき、各クエリにそれを渡すことができます。
  • +
  • バックアップ機能を使う時は、独自テーブルもバックアップに含めるよう、getTableList() を再定義してください。
  • +
  • ユーザーがプラグインをアップデートする時や、何らかの理由で一時的にプラグインをアンインストールしなければならない時、やプラグイン独自のテーブルの内容が失われる事があります。そうならないように、テーブルを削除するか否かをプラグインオプションで設定できるようにしておくといいでしょう。テーブルの削除をオプションでコントロールするには、install()メソッドで次のようなオプションを作成します。 +
    $this->createOption('del_uninstall', 'Delete NP_MyPlugin data tables on uninstall?', 'yesno','no');
    + そしてuninstall()メソッドで、次のようにします。 +
    if ($this->getOption('del_uninstall') == 'yes')	{
    +	foreach ($this->getTableList() as $table) {
    +		sql_query("DROP TABLE $table");
    +	}
    +}
  • +
+ + + +

プラグイン管理エリアback to top

+ +

Ver2.5から、Nucleusの管理エリアに統合されたプラグイン管理エリアを作成できます。これらのページは従来のプラグイン管理ページや左側のクイックメニューからアクセスできます。

+ +

基本

+ +

管理エリアを提供するには、次のステップが必要です。

+ +
    +
  1. プラグインディレクトリにプラグイン名のサブディレクトリを作ります。たとえばプラグイン名がNP_PluginNameなら、'pluginname'です。ディレクトリ名はすべて小文字で!
  2. +
  3. + そのディレクトリで、次のようなindex.phpを用意します。 +
    <?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('PluginName');
    +    $oPluginAdmin->start();
    +
    +    echo '<h2>プラグイン名</h2>';
    +
    +    echo '<p>ページ内容<p>';
    +
    +    $oPluginAdmin->end();
    +
    +?>
    +
  4. +
  5. + プラグイン側に次のコードを挿入し、クイックメニューイベントに登録します。 +
    function event_QuickMenu(&$data) {
    +        array_push(
    +            $data['options'],
    +            array(
    +                'title'   => 'プラグイン名',
    +                'url'     => $this-%gt;getAdminURL(),
    +                'tooltip' => 'ツールチップテキスト'
    +            )
    +        );
    +    }
    +
  6. +
  7. + プラグイン側に次の関数を記述します。 +
    function hasAdminArea()
    +{
    +    return 1;
    +}
    +
  8. +
  9. オプション。クイックメニュー登録のオプションを作成し、誰に表示するか制限します。quickmenuというyesnoタイプのオプションがinstall()にあるとします。次のように、クイックメニュー登録の表示を最高管理者とブログ管理者に制限します。 +
    function event_QuickMenu(&$data) {
    +    // only show when option enabled
    +    if ($this->getOption('quickmenu') != 'yes') return;
    +    global $member;
    +    if (!$member->isAdmin() && !count($member->getAdminBlogs())) return;
    +    array_push($data['options'],
    +      	array('title' => 'PluginName',
    +       	'url' => $this->getAdminURL(),
    +       	'tooltip' => 'Administer NP_PluginName'));
    +}
    +
  10. +
+ +

考慮すること

+ +
    +
  • 登録できるからといって安易にクイックメニューへ登録しないこと。クイックメニューにプラグインが100個並んだりしたらかなりウンザリするでしょう。ですので、クイックメニューに登録する場合でも、クイックメニュー登録を有効・無効化するプラグインオプションを(グローバルまたはメンバーオプションで)用意することを考えてください。
  • +
  • プラグインディレクトリが nucleus/plugins/ ではない場合は、index.php内の $strRel 変数は手動で書き換える必要があります。
  • +
  • 管理エリアのアウトプットが正しいXHTMLになっているか確認してください。正しくないと、MozillaなどのGeckoベースのブラウザでページ表示が崩れます。
  • +
+ +

PluginAdmin クラス

+ +

PluginAdmin クラスは助けになります。これを一度生成すれば、$oPluginAdmin->plugin でプラグインのインスタンスにアクセスできます。

+ +

プラグイン用ヘルプページ back to top

+ +

Nucleus v3.2から、プラグインの機能の概要、利用できるスキン・テンプレート変数、さらに詳細な情報のありかなどを示すヘルプページを提供可能になりました。

+ +

ヘルプページは管理画面のプラグイン一覧からアクセス可能になります。

+ +

基本

+

ヘルプページを提供するために、次のステップが必要です。

+
    +
  1. プラグインディレクトリに、プラグイン名をつけたサブディレクトリを作成します。ディレクトリ名は小文字であることに注意します。管理エリアを作るときと同様です。
  2. +
  3. そのディレクトリの中に help.html を作り、プラグインについての文章を記述します。次の雛型からはじめると良いでしょう。 +
    <h3>プラグインの概要</h3>
    +
    +<p>このプラグインはヘルプページがいかに機能するかを示すためだけのものです</p>
    +
    +<h3>インストール</h3>
    +
    +<p>これを読めてるならインストールは正しく出来てます :-)</p>
    +
    +<h3>スキン変数</h3>
    +
    +<p>このプラグインはただのテストケースなのでスキン・テンプレート変数はありませんが、書くとすれば。
    +
    +<ul><li><b><%HelpPageTestCase1%></b>: なにかをする</li>
    +<li><b><%HelpPageTestCase1(foobar)%></b>: 別のなにかをする</li></ul></p>
    +
    +<h3>サポートとバグ報告</h3>
    +
    +<p>さらなるサポートやバグ報告のために、次のフォーラムのスレッドを利用してください。
    +<a href="http://forum.nucleuscms.org/viewtopic.php?t=<トピックID>">
    +http://forum.nucleuscms.org/viewtopic.php?t=<トピックID></a></p>
    +
    +<h3>バージョン履歴</h3>
    +
    +<ul><li>Version 0.1: 最初のテストケースバージョン</li>
    +<li>Version 0.0: その前のバージョン ;-)</li></ul>
    +
  4. +
  5. supportsFeature('HelpPage') で0より大きい数字を返すように設定します。 +
    function supportsFeature($what) {
    +    switch($what) {
    +    case 'HelpPage':
    +        return 1;
    +      default:
    +        return 0;
    +    }
    +  }
    +
  6. +
+ +

プラグイン依存チェック back to top

+ +

v3.2から、他のプラグインとの依存関係を宣言する新しいプラグインインターフェイスが追加されました。 +他のプラグインの機能を必要とするプラグインに利用できます。特に依存関係が成立しなくて正しく機能しない状態を検知するときに便利です。

+ +

この機能を利用するプラグインの書き方

+ +

現実世界での例からはじめましょう。

+ +

NP_PageLinkList は NP_BlogWithOffset の機能を利用するため、利用者には NP_BlogWithOffset のインストール後に NP_PageLinkList をインストールさせたいとします。 +NucleusはこのAPIによって、インストール前に依存関係を検知させる方法をプラグインに提供します。

+ +

このケースでは、NP_PageLinkList 側に NP_BlogWithOffset が必要だということを認識させるコードを埋め込みます。 +プラグインがインストールされる際に、Nucleusコアは getPluginDep() というファンクションを呼び出します。 +このファンクションは必要なプラグインのリストを返し、コアはインストール済みのプラグインをチェックして、もし依存関係に欠如があればインストールを拒否します。

+ +

必要なことは NP_PageLinkList にこのファンクションを追加する、ただそれだけです。

+ +
function getPluginDep() {
+     return array('NP_BlogWithOffset');
+}
+ +

このプラグイン依存チェックは、他のプラグインが依存しているプラグインがアンインストールされることも防ぎます。

+ +

プラグインの多国語化back to top

+ +

プラグインをより多くの人に使ってもらうために

+ +

あなたと同じ言葉を話さない世界中の人達がプラグインをより使いやすくするために、プラグインを多国語化できます。 +少し手間は増えますが、プラグインが出力する文章を翻訳するだけで可能です。 +以下に Nucleus のコアで用意されている標準的な手順を記載します。 +Andyさん、ありがとう!

+ +
    +
  1. プラグインを作る + +先ずはじめに、あなたが普段使っている言葉でプラグインを作ります。プラグインが安定して動作するようになってから、言語ファイルを作成することが推奨されます。
  2. +
  3. プラグインディレクトリを作る + +作ったプラグインの名前が NP_AbcDef なら、プラグインディレクトリの名前は abcdef になります(必ず小文字を使用すること)。
  4. +
  5. 言語ファイルを作る + +プラグインディレクトリに言語ファイルを作成します。言語ファイルの名前は Nucleus コアが使用しているものと同じにします。例えば、英語なら english.php。日本語の UTF-8 なら japanese-utf8.phpになります(UTF がお勧めです。参考までに日本語の EUC の場合は japanese-euc.php になります)。
  6. +
  7. 文を定義する + +次のように言語ファイル内で分を定義します。 + +
    <?php
    +define('_ABCDEF_MESSAGENAME',                  '実際のメッセージ');
    +  . . .
    +?>
    + +全ての文を定義する必要があります。定数は一回しか定義できないので、既に定義されているものと重複しないようにプラグインの名前をはじめにつけることが推奨されます(この例だと _ABCDEF)。
  8. +
  9. 文の置き換え + +全ての文を、言語ファイルで定義した定数と置き換えます
  10. +
  11. init() メソッドの編集 + +プラグイン内の init() メソッドを、次のように編集します(既に init() メソッドを定義している場合は init() メソッド内にコードを追記します)。 + +
       function init() {
    +      // include language file for this plugin
    +      $language = ereg_replace( '[\\|/]', '', getLanguageName());
    +      if (file_exists($this->getDirectory().$language.'.php'))
    +         include_once($this->getDirectory().$language.'.php');
    +      else
    +         include_once($this->getDirectory().'english.php');
    +   }
    +このコードは Nucleus のコアで使用されているものと同一です。
  12. + +
  13. 言語ファイルの追加 + +「英語」が基本の言語になっていますので、「英語」の言語ファイルも追加することが望まれます。
  14. +
+ + + +

スキン変数の出力の書式 back to top

+ +

偉大なプラグインのいくつかは、様々なスキンや URL の生成において、必ずしもそのまま使用できるとはいえません。なぜなら、doSkinVar() メソッドによって出力されるものが、 +ユーザーのニーズに十二分に合致するものであるとは言いがたいからです。Nucleus では、出力をここのユーザーによっておのおののニーズに沿ったものにする為に、いくつかのツールを用意しています。

+ +

URLの出力

+ +

各ブログ・カテゴリー・アイテム・メンバー、それから action.php や管理エリア、または各プラグインの管理エリアなどの URL を出力する為に、Nucleus はコアの機能として +いくつかのファンクションとグローバル変数を用意しています。:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Nucleus の各ページへのリンクを生成する為に便利な変数とファンクション
名前種類引数説明
$CONF['AdminURL']グローバル変数なしNucleus の管理領域への絶対 URL
$CONF['PluginURL']グローバル変数なしNucleus のプラグインディレクトリへの絶対 URL。$CONF['PluginURL'].'pluginname/' の様にして、プラグインの管理エリアへのリンク生成に使用する。
$CONF['ActionURL']グローバル変数なしNucleus の action.php への絶対 URL。
$CONF['MediaURL']グローバル変数なしNucleus のメディアディレクトリへの絶対 URL。
$CONF['SkinsURL']グローバル変数なしNucleus のスキンディレクトリへの絶対 URL。
$CONF['IndexURL']グローバル変数なしNucleus のメインディレクトリへの絶対 URL。
$DIR_NUCLEUSグローバル変数なしNucleus のメインディレクトリへのシステムルートからのフルパス。
$DIR_SKINSグローバル変数なしNucleus のスキンディレクトリへのシステムルートからのフルパス。
$DIR_MEDIAグローバル変数なしNucleus のメディアディレクトリへのシステムルートからのフルパス。
$DIR_PLUGINSグローバル変数なしNucleus のプラグインディレクトリへのシステムルートからのフルパス。
$DIR_LANGグローバル変数なしNucleus の言語ファイルディレクトリへのシステムルートからのフルパス。
$DIR_LIBSグローバル変数なしNucleus のコアディレクトリへのシステムルートからのフルパス。
getAdminURL()PLUGIN クラス内メソッドなしプラグインの管理エリアディレクトリが存在すればその URL を返す(存在しない場合は無効)。
getDirectory()PLUGIN クラス内メソッドなしプラグインの追加ファイルが格納されたサーバーのファイルシステムのパスを返します(存在しない場合は無効)。結果は".../nucleus/plugins/plugname/"のようになります。
createItemLink($itemid, $extra = '')グローバルファンクション$itemid 整数。リンクしたいアイテムの ID。
+ $extra 連想配列。「キー」と「値」のペアが、URL の「パラメータ」と「値」に反映される。 +
ユーザーによって選択されたスキームにより、 $itemid に対応したアイテムへのリンクが生成されます。
createMemberLink($memberid, $extra = '')グローバルファンクション$memberid 整数。リンクしたい存在するメンバーの ID。
+ $extra 連想配列。「キー」と「値」のペアが、URL の「パラメータ」と「値」に反映される。 +
ユーザーによって選択されたスキームにより、 $memberid に対応したメンバーへのリンクが生成されます。
createCategoryLink($catid, $extra = '')グローバルファンクション$catid 整数。リンクしたいカテゴリーの ID。
+ $extra 連想配列。「キー」と「値」のペアが、URL の「パラメータ」と「値」に反映される。 +
ユーザーによって選択されたスキームにより、 $catid に対応したカテゴリーへのリンクが生成されます。
createArchiveListLink($blogid = '', $extra = '')グローバルファンクション$blogid 整数。リンクしたいアーカイブ一覧が存在ブログの ID。
+ $extra 連想配列。「キー」と「値」のペアが、URL の「パラメータ」と「値」に反映される。 +
ユーザーによって選択されたスキームにより、 $blogid に対応したアーカイブ一覧へのリンクが生成されます。
createArchiveLink($blogid, $archive, $extra = '')グローバルファンクション$blogid 整数。リンクしたい月別アーカイブが存在するブログの ID。
+ $archive 文字列。アーカイブのパラメータとして、渡した「日(または年、月)」のものが存在するもの。
+ $extra 連想配列。「キー」と「値」のペアが、URL の「パラメータ」と「値」に反映される。 +
ユーザーによって選択されたスキームにより、 $blogid に対応した月別アーカイブへのリンクが生成されます。
createBlogidLink($blogid, $extra = '')グローバルファンクション$blogid 整数。リンクしたいブログの ID。
+ $extra 連想配列。「キー」と「値」のペアが、URL の「パラメータ」と「値」に反映される。 +
ユーザーによって選択されたスキームにより、 $blogid に対応したブログへのリンクが生成されます。
+ +

スキンへの出力にテンプレートを使う

+ +

出力する文字列をテンプレートを使って整形出来るようにしましょう。あなたが順不同のリストで出力したいと考えていたとしても、別のユーザーは同じデータを +記号で区切ったり、特別な形で出力したいと考えるかもしれません。Nucleus にはテンプレートデータを作ったり定義したりする2種類の方法があります。 +次に上げるれいの両方において、<%foo%> と <%bar%> のふたつのテンプレート変数を使用します。

+ +
    +
  1. プラグインのオプションを使う方法。この方法は v3.2 以降で使用でき、次のように install() メソッド + に記述する事によって簡単に作成する事が出来ますが、アップグレードのためにプラグインを削除した時に、ユーザーは同時にカスタマイズした + テンプレートを失ってしまうという大きなデメリットがあります。 +
    $this->createOption('my_template', 
    +		'プラグインの出力の為のテンプレート', 
    +		'textarea', 
    +		'<li><%foo%> loves <%bar%></li>');
    + doSkinVar() メソッドで、foo と bar を次のように定義して、テンプレートを埋めます。 +
    $mytemplate = $this->getOption('my_template');
    +$couples = array(
    +			array(
    +				'foo'=>'Ricky',
    +				'bar'=>'Lucy'),
    +			array(
    +				'foo'=>'Sid',
    +				'bar'=>'Nancy'),
    +			array(
    +				'foo'=>'Mickey',
    +				'bar'=>'Minnie')
    +			);
    +foreach ($couples as $values) {
    +	echo TEMPLATE::fill($mytemplate,$values);
    +}
    + これでプラグインのスキン変数 <%TemplateTest%> を書いたところに、次のように出力されます。 +
    <li>Ricky loves Lucy</li>
    +<li>Sid loves Nancy</li>
    +<li>Mickey loves Minnie</li>
    +
  2. + +
  3. Nucleus コアのテンプレートシステムを使う方法。この方法は v3.4以降で使用できます。この方法の利点は、他のテンプレートと + 同じようにデータベースに格納され、配布用にテンプレートをエクスポートできるところにあります。この API を使用したプラグインのサンプルが、 + フォーラムの新API「TemplateExtraFields」を使ったプラグインの見本に + (本家フォーラムのスレッドは Skin specific values for Plugins) + にあります。細かな点は本家フォーラムの Skin specific values for Plugins スレッド + を参照してください。ここでは要約のみ書いてあります。 + まず、install() メソッド中でプラグインオプションを作成し、ここでテンプレートのデフォルトの内容を定義します。 +
    $this->createOption('my_template', 
    +		'Template used to format output of plugin.', 
    +		'textarea', 
    +		'<li><%foo%> loves <%bar%></li>');
    + 次に割り込みをかけるイベントのリストに TemplateExtraFields を登録します。 +
    function getEventList() { return array('TemplateExtraFields'); }
    + そして、event_TemplateExtraFields メソッドを作成します。 +
    function event_TemplateExtraFields(&$data) {
    +    /* Add an element in the $data['fields'] array using your plugin name as the key 
    +	and an associative array containing the field name and field label*/
    +    /* note that your field names should be lowercase and include the name 
    +	of your template as shown below. This will ensure that all template field names are unique. */
    +    $data['fields']['NP_TemplateTest'] = array(
    +        'templatetest_body'=>'TemplateTest Body'
    +    );
    +}
    + 最後に doSkinVar() メソッドで、テンプレートを埋めます。この時、スキン変数の引数に使用するテンプレート名が必要です。 +
    function doSkinVar($skinType,$template = '') {
    +	global $blog, $CONF, $manager,$member;
    +
    +	$template =& $manager->getTemplate($template);
    +	if (trim($template['templatetest_body']) == '')
    +		$template['templatetest_body'] = $this->getOption('my_template');
    +		
    +	$couples = array(
    +			array(
    +				'foo'=>'Ricky',
    +				'bar'=>'Lucy'),
    +			array(
    +				'foo'=>'Sid',
    +				'bar'=>'Nancy'),
    +			array(
    +				'foo'=>'Mickey',
    +				'bar'=>'Minnie')
    +			);
    +	foreach ($couples as $values) {
    +		echo TEMPLATE::fill($template['templatetest_body'],$values);
    +	}	
    +}
    + ユーザーは『テンプレート編集』画面で、「TemplateTest Body」フィールドに出力したい形式でテンプレートを編集します。 + 例えば「default/index」テンプレートを使って、こんな風にテンプレートを編集します。 +
    <li><%foo%> loves <%bar%>!!!</li>
    + そしてスキンに <%TemplateTest(default/index)%> と書くと、そこに +
    <li>Ricky loves Lucy!!!</li>
    +<li>Sid loves Nancy!!!</li>
    +<li>Mickey loves Minnie!!!</li>
    と表示されます。
    +
  4. + +
  5. 通常のテンプレートを使って書式化。この方法は v3.4 以降で、アイテムを出力するプラグインで使用できます。 + この方法にはコアのテンプレートシステムの既存の「アイテム」フィールドを使うというアドバンテージがあり、スキン変数の <%blog%> + の様に使用します。スキン変数の引数として、一つ以上のアイテムの ID と使用するテンプレート名を、また、BLOG クラスの readLogFromList() + メソッドを呼び出せることが条件です。テンプレート変数として使用したい場合は、doTemplateVar() メソッドで使用することも出来ます。 + 例として doSkinVar() メソッドでこのテクニックを使う方法を示しておきます。 + 4つのアイテムの ID を引数として受け取り、「default/index」テンプレートを使って出力します。 +
    function doSkinVar($skinType,$item1 = 0,$item2 = 0,$item3 = 0,$item4 = 0) {
    +	global $blog;
    +	$highlight = '';
    +	$template = 'default/index';
    +	$item_array = array($item1,$item2,$item3,$item4);
    +	$blog->readLogFromList($item_array, $template);
    +}
    + +
  6. +
+ + +

この他にも…… back to top

+ +

役立つドキュメントがたくさん!

+ +

このドキュメント以外にもあなたがプラグインを開発するにあたって、リンク先のページもきっと役立つことと思います。

+ + + +
+ + \ No newline at end of file diff --git a/utf8/nucleus/documentation/devdocs/sqltables.html b/utf8/nucleus/documentation/devdocs/sqltables.html new file mode 100755 index 0000000..4733637 --- /dev/null +++ b/utf8/nucleus/documentation/devdocs/sqltables.html @@ -0,0 +1,1312 @@ + + + + + + + + + + + + Nucleus - SQL テーブル構造 + + + + + + +
+ 小 + 中 + 大 +
+
+ + + + +
+訳者注: + +
+ +

はじめに

+ +

+開発者向けドキュメントの目次へ戻る +

+ +

+このドキュメントはNucleusのデータベース・テーブルのフィールドを解説しています。 +

+ +

構造はNucleus v3.4~のものに従っています

+ +

目次

+ + + + +

色使いback to top

+ +

この文書中では、カラムの型を示すために、文字の修飾を使っています。以下に例を示します:

+ + + + + + + + + + + + + +
プライマリプライマリキー
外部外部キー(クリックすると参照先に飛ぶ)。MySQLは外部キーとの一貫性保持に責任を持たないことに注意
削除予定同じ機能を提供するプラグインを優先するため、テーブルやカラムは将来のバージョンのNucleusで削除させる可能性が高い
フルテキストカラムにフルテキストのインデックスが付く(検索で使用する)
+ + + +

nucleus_blogテーブルback to top

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
カラム名データ型既定値説明
bnumberint(11)(空白)auto_incrementBlogのID
bnamevarchar(60)(空白)Blog名
bshortnamevarchar(15)(空白)Blogの短縮名 (スキン変数 <%blog%>などで使うものと同じ)
bdescvarchar(200)NULLBlogの説明
bcommentstinyint(2)1コメントを許可する(1=許可, 0=不許可)
bmaxcommentsint(11)0メインの目次ページでのコメントの最大表示数。既定値(0)は制限なし。インライン・コメントを使わないのならここはいじらないこと
btimeoffsetdecimal(3,1)0.0サーバー時刻との時差。アイテムはサーバー時刻にこの値を足した時間でデータベースに保存される
bnotifyvarchar(60)NULL通知するメール・アドレス。設定した通知イベント(内容はbnotifytypeを参照)が発生した時にこのアドレス宛てにメールで通知される。
burlvarchar(100)NULLBlogのURL
bupdatevarchar(60)NULLアイテムが投稿されるたびに変更が必要な更新ファイル。サーバー上の絶対パスで指定する。
bdefskinint(11)1このBlogを表示するときに使う標準のスキン
bpublictinyint(2)1メンバーー以外にもコメントを許可するかどうか(1=許可/0=不許可)
bconvertbreakstinyint(2)1投稿されたアイテム中の改行を<br />に変換するかどうか(1=変換する/0=変換しない)
bdefcatint(11)NULLカテゴリー未選択時に自動的に適用されるカテゴリーのカテゴリーID
bnotifytypeint(11)15 + どのイベントが起こったときに通知メールを送るか(通知するメール・アドレスはbnotifyを参照)。三つの値の組み合わせからなり、掛け合わせることでnoifytypeの値が決まる。 +
    +
  • 3: 新しいコメント
  • +
  • 5: 新しいカルマ投票
  • +
  • 7: 新しいアイテム
  • +
+ 既定値 = 新しいコメントと新しいカルマ投票(3×5=15) +
ballowpasttinyint(2)'0'過去の日時での投稿を許可する (1=許可/0=不許可)
bincludesearchtinyint(2)'0'他のblogの検索の場合にも検索対象にする(1=対象にする/0=対象にしない)
breqemailtinyint(2)'0'コメントにメールアドレスを要求する(1=要求する/0=要求しない)
bfutureposttinyint(2)'0' + ブログ内に未来の日付の記事が存在するか?(1=存在する/0=存在しない) + この値は投稿されたアイテムに応じて自動的に設定されます。 +
+ + + +

nucleus_categoryテーブルback to top

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
カラム名データ型既定値説明
catidint(11)(空白)auto_incrementカテゴリーID
cblogint(11)0カテゴリーが所属するBlogのID
cnamevarchar(40)NULLカテゴリーの名前
cdescvarchar(200)NULLカテゴリーの説明
+ + +

nucleus_itemテーブルback to top

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
カラム名データ型既定値説明
inumberint(11)(空白)auto_incrementアイテムのID
ititlevarchar(160)NULLタイトル
ibodytext(空白)本文
imoretextNULL追加部分(「続き」部分)
iblogint(11)0アイテムが所属するBlogのID
iauthorint(11)0アイテムの著者のメンバーID
itimedatetime0000-00-00 00:00:00投稿時間(サーバーとの時差を反映したもの)
iclosedtinyint(2)0アイテムが閉鎖されたかどうか (1=閉鎖/0=閉鎖していない).閉鎖すると、コメントやカルマ投票を受け付けない
idrafttinyint(2)0アイテムはドラフト(下書き状態)かどうか。ドラフトは管理ページでだけ見ることが出来る(1=ドラフト/0=ドラフトでない)
ikarmaposint(11)0+のカルマ投票の総数
ikarmanegint(11)0-のカルマ投票の総数
icatint(11)NULLアイテムが所属するカテゴリーのID
ipostedtinyint(2)1アイテムに設定された投稿時刻を経過しているか?(1=している/0=していない)
+ + + +

nucleus_commentテーブルback to top

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
カラム名データ型既定値説明
cnumberint(11)(空白)auto_incrementコメントのID
cbodytext(空白)コメントの本文
cuservarchar(40)NULL筆者名(メンバーでない場合,メンバーの場合はcmember参照)
cmailvarchar(100)NULLメール・アドレスあるいはURL(メンバーでない場合,メンバーの場合はcmember参照)
cemailvarchar(100)NULLメール・アドレス(メンバーでない場合,メンバーの場合はcmember参照)
cmemberint(11)NULLコメントを書いたメンバーのID(メンバーでない場合は0)
citemint(11)0コメントが書き込まれたアイテムのID
ctimedatetime0000-00-00 00:00:00コメントを書き込んだ時間
chostvarchar(60)NULLコメントを入力したホスト名
cipvarchar(15)(空白)コメントを入力したホストのIPアドレス
cblogint(11)0コメント書き込まれたアイテムが所属するBlogのID
+ + + + +

nucleus_memberテーブルback to top

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
カラム名データ型既定値説明
mnumberint(11)(空白)auto_incrementメンバーのID
mnamevarchar(16)(空白)ログインID(表示される名前)
mrealnamevarchar(60)NULLフルネーム(ハンドルネーム)
mpasswordvarchar(40)(空白)パスワード (md5で暗号化してある)
memailvarchar(60)NULLメールアドレス
murlvarchar(100)NULLURL
mnotesvarchar(100)NULL追加事項(メンバー自身が記述できる)
madmintinyint(2)0Super-admin(最高権限管理者)か (1=super-admin/0=super-adminではない super-adminはすべての権利を持つ。システムに一人はsuper-adminがいる)
mcanlogintinyint(2)1管理エリアへのログインを許可 (1=許可/0=不許可)
mcookiekeyvarchar(40)NULLこのキーのコピーがユーザーのクッキーに保存され、ログオンに使う。メンバーがログオンすると、ランダムなcookiekeyが生成され、一方はデータベースに、他方がユーザーのコンピュータに保存される。
deflangvarchar(20)''このメンバー用の言語ファイルを指定する
+ + + + + +

nucleus_teamテーブルback to top

+ +

Blogのチームメンバーごとに、この表にデータがある

+ + + + + + + + + + + + + + + + + + + + + + + +
カラム名データ型既定値説明
tmemberint(11)0メンバーのID
tblogint(11)0チーム・メンバーになっているBlog
tadmintinyint(2)0Blogの管理者か (0=管理者ではない/1=管理者。各Blogは一人は管理者がいる)
+ + + +

nucleus_pluginテーブルback to top

+ + + + + + + + + + + + + + + + + + + + + + + +
カラム名データ型既定値説明
pidint(11)(空白)auto_incrementプラグインのID
pfilevarchar(40)(空白)拡張子を覗いたプラグインのファイル名(例えばNP_CommentControl)。プラグイン・ディレクトリにファイルがないといけない。
porderint(11)0プラグインが呼び出される順番。プラグイン・ページで表示される順番でもある。数字が小さい方がリストの上の方に来る。
+ + +

nucleus_plugin_eventテーブルback to top

+ +

各プラグインが登録するイベントを記録するキャッシュ。リクエストの度にすべてのプラグインを読み込んで,それらが使うイベントを調べる手間を省くために保存している。プラグインのイベントについてはこちらを参照。

+ + + + + + + + + + + + + + + + + +
カラム名データ型既定値説明
pidint(11)0プラグインのID
eventvarchar(40)NULL呼び出されるイベントの名前
+ + +

nucleus_plugin_optionテーブルback to top

+ +

プラグイン・オプションの値を格納する。オプション自体の定義についてはnucleus_plugin_option_descテーブルを参照。

+ + + + + + + + + + + + + + + + + + + + + + + + +
カラム名データ型既定値説明
oidint(11)(空白)auto_incrementオプションのID (nucleus_plugin_option_descテーブルを参照)
ovalueTEXT(空白)オプションの値
ocontextidint(11)0 + オプションが使われるコンテキストによって意味合いが変わる + +
+ + + +

nucleus_plugin_option_descテーブルback to top

+ +

プラグインがオプションを作るたびにこのテーブル内にデータができる。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
カラム名データ型既定値説明
oidint(11)(空白)auto_incrementオプションのID。nucleus_plugin_optionテーブルで使う
opidint(11)0オプションを作ったプラグインのID
onamevarchar(20)(空白)オプションの名前
ocontextvarchar(20)(空白)オプションのコンテキスト(グローバル, Blog, カテゴリー,メンバー)
odescvarchar(255)NULLオプションの説明
otypevarchar(20)NULLオプションの型.プラグインの文書を参照.
odeftextNULLオプションの既定値
oextratextNULLselect option型などで使う、その他のデータ
+ + +

nucleus_skinテーブルback to top

+ + + + + + + + + + + + + + + + + + + + + + + +
カラム名データ型既定値説明
sdescint(11)0skin_descへの参照
stypevarchar(20)(空白) + スキン・パートの型。以下のいずれかを取る +
    +
  • index(メインの目次ページ)
  • +
  • item(個別アイテムページ)
  • +
  • archive(月別アーカイブページ)
  • +
  • archivelist(月別アーカイブ一覧ページ)
  • +
  • search(検索ページ)
  • +
  • error(エラーページ)
  • +
  • member(メンバー詳細ページ)
  • +
  • imagepopup(画像ポップアップウィンドウ)
  • +
+
scontenttext(空白)スキン・パートの内容
+ + +

nucleus_skin_descテーブルback to top

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
カラム名データ型既定値説明
sdnumberint(11)(空白)auto_incrementスキンのID
sdnamevarchar(20)(空白)スキンの名前
sddescvarchar(200)NULLスキンの説明
sdtypevarchar(40)text/htmlスキンのmimeタイプ
sdincmodevarchar(10)normal + Includeモード。以下のいずれかを取る +
    +
  • normal(スキンディレクトリを使用しない)
  • +
  • skindir(スキンディレクトリを使用する)
  • +
+
sdincprefvarchar(50)(空白)ファイルをIncludeするときのプリフィックス
+ + +

nucleus_templateテーブルback to top

+ + + + + + + + + + + + + + + + + + + + + + + +
カラム名データ型既定値説明
tdescint(11)0template_descへの参照(nucleus_template_descのテンプレートID)
tpartnamevarchar(20)(空白) + テンプレート・パートの名前。以下のいずれかを取る +
    +
  • ARCHIVELIST_FOOTER(アーカイブ一覧のフッター)
  • +
  • ARCHIVELIST_HEADER(アーカイブ一覧のヘッダー)
  • +
  • ARCHIVELIST_LISTITEM(アーカイブ一覧の本体)
  • +
  • BLOGLIST_FOOTER(ブログ一覧のフッター)
  • +
  • BLOGLIST_HEADER(ブログ一覧のヘッダー)
  • +
  • BLOGLIST_LISTITEM(ブログ一覧の本体)
  • +
  • CATLIST_FOOTER(カテゴリー一覧のフッター)
  • +
  • CATLIST_HEADER(カテゴリー一覧のヘッダー)
  • +
  • CATLIST_LISTITEM(カテゴリー一覧の本体)
  • +
  • COMMENTS_AUTH(登録メンバーからのコメントへの追加表示)
  • +
  • COMMENTS_BODY(コメントの本体)
  • +
  • COMMENTS_CONTINUED(コメントの続きへのリンク)
  • +
  • COMMENTS_FOOTER(コメントのフッター)
  • +
  • COMMENTS_HEADER(コメントのヘッダー)
  • +
  • COMMENTS_MANY(コメントが2つ以上の時)
  • +
  • COMMENTS_NONE(コメントが無い時)
  • +
  • COMMENTS_ONE(コメントが1つの時)
  • +
  • COMMENTS_TOOMUCH(コメントが多すぎる時)
  • +
  • DATE_FOOTER(日付のフッター)
  • +
  • DATE_HEADER(日付のヘッダー)
  • +
  • EDITLINK(アイテムを編集するためのリンク)
  • +
  • FORMAT_DATE(日付フォーマット)
  • +
  • FORMAT_TIME(時刻フォーマット)
  • +
  • IMAGE_CODE(インライン画像のコード)
  • +
  • ITEM_FOOTER(アイテムのフッター)
  • +
  • ITEM_HEADER(アイテムのヘッダー)
  • +
  • ITEM(アイテムの本体)
  • +
  • LOCALE(Locale)
  • +
  • MEDIA_CODE(メディアオブジェクトへのリンクコード)
  • +
  • MORELINK(続きへのリンク)
  • +
  • NEW(新しいアイテムに付けるマーク)
  • +
  • POPUP_CODE(ポップアップ画像へのリンクコード)
  • +
  • SEARCH_HIGHLIGHT(ハイライト表示)
  • +
  • SEARCH_NOTHINGFOUND(検索で何も見つからなかった場合)
  • +
  • この他、TemplateExtraFields イベントに対応したプラグインによって追加される事があります。
  • +
+
tcontenttext(空白)テンプレート・パートの内容
+ + + +

nucleus_template_descテーブルback to top

+ + + + + + + + + + + + + + + + + + + + + + + +
カラム名データ型既定値説明
tdnumberint(11)(空白)auto_incrementテンプレートのID
tdnamevarchar(20)(空白)テンプレートの名前
tddescvarchar(200)NULLテンプレートの説明
+ + +

nucleus_actionlogテーブルback to top

+ +

ログインやエラーなどのログを記録する

+ + + + + + + + + + + + + + + + + +
カラム名データ型既定値説明
timestampdatetime0000-00-00 00:00:00アクションの日時
messagevarchar(255)(空白)アクションのメッセージ
+ + + + +

nucleus_configテーブルback to top

+ +

Nucleusは、いくつかのグローバル・オプションをnucleus_configテーブルに記憶する。これは$CONF['OptionName'] でアクセスできる。

+ + + + + + + + + + + + + + + + + +
カラム名データ型既定値説明
namevarchar(20)(空白)オプションの名前
valuevarchar(128)NULLオプションの値
+ + +

使用できるオプション

+ +

使用できるオプションの一覧を以下に示す。

+ +

はい/いいえタイプのオプションは1/0 (1=はい/真, 0=いいえ/偽)で示す。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
設定の名前既定値説明
DefaultBlog1デフォルトのBlogのID。Blogが明示的に記されていないときに使うもの
AdminEmail管理者のメール・アドレス
IndexURLサイトのURL。最後に/が付く必要がある
Languageenglishデフォルトの言語ファイル名。「言語ファイル名.php」ファイルがlanguageディレクトリに必要
SessionCookie0寿命1ヶ月のクッキーの代わりにセッション・クッキーを使うかどうか
AllowMemberCreate0ビジターにアカウント作成を許すかどうか
AllowMemberMail1メンバー間でフォームを使ったメッセージ転送を許すかどうか(メール・アドレスは表示されない)
SiteNameサイトの名前
AdminURL管理エリアのURL。最後に/が付く必要がある
NewMemberCanLogon1登録されたばかりのユーザーがログインできるかどうか。できないばあい,管理者が「can login」オプションを最初に変更する必要がある
DisableSite0サイトが無効状態になっているかどうか。無効状態の場合、管理者だけがアクセスできる。他のすべてのアクセスはDisableSiteURLにリダイレクトされる
DisableSiteURLサイトが無効状態のときにリダイレクトされるURL
LastVisit0「最後の訪問」のクッキーを保存するかどうか
MediaURLメディア・フォルダのURL。最後に/が付く
AllowedTypesjpg, jpeg, gif, mpg, mpeg, avi, mov, mp3, swf, pngメディア・フォルダにアップロードを許すファイル型
AllowLoginEdit0メンバーにログイン名とパスワードの変更を許すかどうか
AllowUpload1ファイルのアップロードを許すかどうか
DisableJsTools2 + JavaScriptツールバーの形式: +
    +
  • 0: 多機能型 (IE)
  • +
  • 1: ツールバーを無効にする
  • +
  • 2: シンプル型(Gecko)
  • +
+
CookiePath/クッキーをセットするパス
CookiePrefixクッキーの名称に追加するプレフィクス文字列。複数の Nucleus を同じドメインにインストールする際に便利で、別の Nucleus で同じセッションが適用されることを予防する。
CookieDomainクッキーをセットするドメイン
CookieSecure0クッキーの通信にHTTPSを使うかどうか
MediaPrefix1アップロードしたファイル名に日付を加えるかどうか
MaxUploadSize1048576アップロードするファイルの最大値(バイト数)
NonmemberMail0メンバー以外の人にメンバーへのメールを許すかどうか
PluginURLプラグイン・フォルダのURL。/で終わる必要がある
ProtectMemNames1このオプションが有効だと、ログインしていない人はメンバーと同じ名前でコメントを残せなくなる。こうすることによって、ゲストがメンバーのふりをすることを避けられる
BaseSkin1Nucleusに、自動的にスキンが決まらないときに、どのスキンを使うかを指定する。スキンのパートが空だったり、ブログやスキンが洗濯されていない場合に起こる
SkinsURLスキン・フォルダのURL。最後に/が付く必要がある
ActionURLaction.phpのURL.
URLModenormalnormal(ノーマル)かpathinfo(FancyURLs)
DatabaseVersion250データベースの構造が更新された最後のNucleusのバージョン番号
DebugVars0デバッグモードを使用するか?(0=使用しない・1=使用する 最高管理者のみ設定可)
DefaultListSize10リスト表示の時のデフォルトの表示数
+ + +

nucleus_ticketsテーブルトップに戻る

+ +

Nucleus は nucleus_tickets を使用することによりセキュリティ上の問題を予防する。特に、管理エリアにおいて諸設定やデータベースの内容に影響する場合、チケットを必須とする。チケットは管理ページがリクエストされた時とフォームから呼び出された時に発行される。チケットは発行から 1時間後に破棄される。

+ + + + + + + + + + + + + + + + + + + + + +
カラム名データ型既定値説明
ticketvarchar(40)(空白)auto_increment特定の単一ユーザに割り当てられるユニークなチケット。一般に、チケットは次のような形になる: 65303a785423b4d53c7b3e6579766f26
memberint(11)0当該チケットが有効適用されるメンバー。
ctimedatetime0000-00-00 00:00:00チケットの発行日時。チケットの有効期限は 1時間
+ + + +

nucleus_activationテーブルトップに戻る

+ +

新しいメンバーが登録された時点では、そのメンバーアカウントがアクティベートされるまで Nucleus はログインを許可しない。アクティベートのためのリンクを含むメールが送信され、これによってアクティベートすることができる。nucleus_activationテーブルはアクティベートの進捗状況を追跡する。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
カラム名データ型既定値説明
vkeyvarchar(40)(空白)アクティベートキー。このキーはメンバーのアクティベートコードに渡される。一般的に、キーは次のような形になる: 41cf637d4fbeeff954b4ca70b8bde9dd
vmemberint(11)0アクティベートの必要があるメンバー。
vtimedatetime0000-00-00 00:00:00アクティベートキーが発行された日時。アクティベートキーの有効期間は 2日間である。
vtypevarchar(15)(空白)アクティベートの種別。 +
    +
  • forgot: パスワードを忘れたメンバー。
  • +
  • register: 新しく登録されたメンバー。
  • +
  • addresschange: メールアドレスを変更したメンバー。
  • +
+
vextravarchar(128)(空白)追加的な情報。アクティベート種別が addresschange の場合、ここには oldemailaddress/x として、x には 0 または 1 の値が入る。x は memberテーブルにある mcanlogin の値を参照する。(アクティベートが完全に終了するまで、このユーザはログインできない)
+ + + +

nucleus_karmaテーブルback to top

+ +

このテーブルは将来はなくなる可能性が高い。同じ機能を提供するプラグインに譲るためだ。

+ +

この表は投票に使われたIPアドレスを記憶しておく。こうすることで一つのIPアドレスからは1票しか入れられなくなる

+ + + + + + + + + + + + + + + + + +
カラム名データ型既定値説明
itemidint(11)0アイテムのID
ipchar(15)(空白)投票者のIPアドレス
+ + +

nucleus_banテーブルback to top

+ +

このテーブルは将来のNucleusではなくなる可能性が高い。同じ機能を提供するプラグインに譲るためだ。

+ +

コメントやカルマ投票を禁止するIPアドレスを記憶

+ + + + + + + + + + + + + + + + + + + + + + +
カラム名データ型既定値説明
iprangevarchar(15)(空白)IPアドレスの範囲。アドレス単独でもいいし,一部(左から)でもいい。一部の場合は範囲を示す
reasonvarchar(255)(空白)禁止の理由を示すメッセージ。コメントやカルマ投票を試みたときに表示される
blogidint(11)0禁止を有効にするBlogのID
+ + +
+ + + diff --git a/utf8/nucleus/documentation/devdocs/styles/background.png b/utf8/nucleus/documentation/devdocs/styles/background.png new file mode 100644 index 0000000000000000000000000000000000000000..12f211b6a8bfa8f08ca338a17910c70b8cb3b0f4 GIT binary patch literal 348 zcmeAS@N?(olHy`uVBq!ia0vp^d<+asf*fo>R#kYF}=rAVtOsopCRSHu7cCF}k zo<-r`Rgo1JrZPJUupCUiaGa}2fdhumD9t5gTe~DWM4ffNf^w literal 0 HcmV?d00001 diff --git a/utf8/nucleus/documentation/devdocs/styles/bullet.gif b/utf8/nucleus/documentation/devdocs/styles/bullet.gif new file mode 100644 index 0000000000000000000000000000000000000000..b43de48a4701e5123846ee5f0357b65065eca04a GIT binary patch literal 50 zcmZ?wbhEHbWM$xGXkcJS?wRxd|9{1wEQ|~cj0`#qKmd|qVB+lQU%C4M|KgUF4AuZl Cg$< .example { + width: 85%; + margin: 0 auto; +} + +@media print { + body div#body > .example { + width: 860px; + } +} + +@media screen { + body div#body > .example { + width: 85%; + } +} + +body div#body { + margin: 0 auto; +} + +@media print { + body div#body { + width: 900px; + } +} + +@media screen { + body div#body { + max-width: 900px; + width: 80%; + } +} + +ul { + line-height:1.5em; + margin:0 0 0.5em 40px; + padding:0; + list-style-image:url(bullet.gif); +} + +dl { + margin:0 10% 0.5em 0; + padding:0; +} + +dt { + font-family: "メイリオ", "Meiryo", "ヒラギノ角ゴ Pro W3", "Hiragino Kaku Gothic Pro", "Osaka", "MS Pゴシック", "MS PGothic", "IPA UIGothic", "IPA mona UIGothic", "VL PGothic", "Sazanami Gothic", "DynaLab-dfghsgothic w5-jisx0208.1990-0", "DynaLab-dfggothic w5-iso8859-1", "Trebuchet MS", "Bitstream Vera Sans", verdana, lucida, arial, helvetica, sans-serif; +/* font-family: "Hiragino Kaku Gothic Pro W3", "Meiryo", "MS PGothic", "Osaka", "IPA UIGothic", "IPA mona UIGothic", "VL PGothic", "Sazanami Gothic", "DynaLab-dfghsgothic w5-jisx0208.1990-0", "DynaLab-dfggothic w5-iso8859-1", "Trebuchet MS", "Bitstream Vera Sans", verdana, lucida, arial, helvetica, sans-serif; */ + font-weight:bold; + margin-top:7px; +} + +#fontSizeChanger { + position: fixed; + top: 20px; + left: 50px; + font-size: medium; +} + +#fontSizeChanger a { + font-weight: normal; + border: 1px dotted gray; + padding: 0 3px; +} + +#fontSizeChanger a#fontSmall { + font-weight: bold; +} + +#fontSizeChanger a:hover { + color: #fff; + background-color: #1D3565; +} diff --git a/utf8/nucleus/documentation/devdocs/xmlrpc.html b/utf8/nucleus/documentation/devdocs/xmlrpc.html new file mode 100755 index 0000000..b96e76e --- /dev/null +++ b/utf8/nucleus/documentation/devdocs/xmlrpc.html @@ -0,0 +1,234 @@ + + + + + + + + + + + + Nucleus - XML-RPC インターフェイス + + + + + + +
+ 小 + 中 + 大 +
+
+ +
+XML-RPC インターフェイス +
+ +

はじめに

+ +

+開発者マニュアルに戻る +

+ +

+このドキュメントはNucleusが提供するXML-RPCインターフェイスと、生成されるエラーメッセージについての解説です。この仕様は将来変更される可能性があることに注意して下さい。 +

+ +
+NucleusにおけるXML-RPCインターフェイスのURLは以下のようになります: +
+http://www.yourserver.com/yourpath/nucleus/xmlrpc/server.php +
+ +

Blogger API (XML-RPC)

+ +

+NucleusはBlogger APIに対応しています。これはBloggerと通信するツールやサービスに対して、Nucleusとも通信できるようにするものです。Nucleusの仕様により、いくつかのパラメータに若干の違いがあります。これについては後述の説明を参照して下さい。呼び出しや応答のメソッドは、もちろん、Bloggerのものと同じ構造になっています。 +

+ +

+ここに挙げたリストは利用できるメソッドの一覧です。クリックするとさらに詳しい情報を得ることができます(それぞれのリンク先はBlogger APIの仕様書やそのメーリングリストです)。 +

+ + + + +

+Nucleusは内部的に異なる実装を用いているため、パラメータの扱いに若干の違いがあります。概説すると: +

+ +
    +
  • Appkeyは無視されます。
  • +
  • Nucleusの場合は本文のあとにタイトルとカテゴリが続きます。Bloggerでは 'コンテンツ' と呼ばれるは本文だけが存在します。これらの追加されたパーツを利用可能にするため、<title>や<category>をNucleusに送るコンテンツに含めることができます。これらのタグは getRecentPosts の呼び出しでのみ追加されます。
  • +
  • Bloggerで 'templates' と呼ばれているものに相当するのが、Nucleusの 'スキン' です。ひとつのシステムに複数のスキンを設定でき、それぞれのスキンをblogごとに使い分けることができます。メソッド blogger.setTemplate と blogger.getTemplate は、Nucleusのblog設定で選択されているblogのデフォルトスキンに影響します。'main' と 'archiveIndex' の二種類のテンプレートは、Nucleusの 'メインの目次ページ' と '月別アーカイブ一覧ページ' に相当します。(訳注: Blogger の仕様がわからないので、この項不確か)
  • +
  • 項目 publish は、追加した項目がデフォルトでドラフトになるか公開になるかを決める箇所です。blogger.editPost を使う場合は、publish がドラフトと公開のどちらになっていても無視されます。
  • +
  • getUserInfo を呼び出した場合、返値のうち 'lastname' は空になり、'firstname' にフルネームが入ります。これはNucleusが姓と名を分けない仕様になっていることに由来します。
  • +
  • メソッド getRecentPostst は authorName と title を追加パラメータとして返します。Bloggerもまたこれらの値を返します(この仕様は文書化されていないようですが)。
  • +
+ +

metaWeblog API

+ +

+Nucleus v1.1以降、metaWeblog APIもサポートされました。これはBlogger APIの拡張版です。 +

+ +

Nucleus v2.5では newMediaObject と getRecentPosts の二つのメソッドにも対応しました(これらは最初のmetaWeblog仕様には存在しませんでした)。

+ +

+利用可能なメソッド一覧は以下の通りです(specificationに詳しい情報があります): +

+ +
    +
  • metaWeblog.newPost
  • +
  • metaWeblog.editPost
  • +
  • metaWeblog.getPost
  • +
  • metaWeblog.getCategories
  • +
  • metaWeblog.newMediaObject (v2.5)
  • +
  • metaWeblog.getRecentPosts (v2.5)
  • +
+ +

Nucleus v3.22以降、mt_text_more と m_tallow_commentもサポートされました。これはmetaWeblog API の拡張版です。つまりこれらの拡張機能をサポートするアプリケーション、例えば Ectoなど、を使用した場合、「続き」を編集することができ、アイテムにコメントを許可するかどうかを決定することができるようになる、ということです。

+ +

Movable Type API

+ +

v2.5から、NucleusはMovable Type APIからのメソッドをサポートするようになりました。

+ +

利用できるメソッドの一覧を以下に示します:

+ +
    +
  • mt.supportedMethods
  • +
  • mt.supportedTextFilters
  • +
  • mt.publishPost
  • +
  • mt.getCategoryList
  • +
  • mt.getPostCategories
  • +
  • mt.setPostCategories
  • +
  • mt.getRecentPostTitles
  • +
  • mt.getTrackbackPings
  • +
+ +

いくつかのノート:

+ +
    +
  • Nucleusはアイテムひとつにつき一つだけカテゴリを設定することができます。これは 'primary' 以外のカテゴリ設定項目はすべて無視されることを意味します。
  • +
  • トラックバックはNucleusのコアではサポート対象外です(プラグインの導入によって利用することができるようになります)。このため、mt.getTrackbackPings のデフォルトの返値は空です。
  • +
  • Nucleusはテキストフィルタを実装していません。このため、mt.getSupportedTextFilters は空の値を返します。
  • +
+ +

エラーコード

+ +

+以下に示すのは、それぞれのメソッドから得られるエラーの種類です: +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
エラーコードエラーメッセージ
801Login Error
+ ログインエラー(ユーザ名とパスワードの組み合わせが正しくないと推測されます)
802No Such Blog
+ 指定されたBlogは存在しません
803Not a Team Member
+ チームに登録されていません
804Cannot add Empty Items
+ 空のアイテムは投稿できません
805Amount parameter must be in range 1..20
+ パラメータの値は 1..20 の範囲でなければなりません(getRecentItems
806No Such Item
+ 指定されたアイテムは存在しません
807Not Allowed to Alter Item
+ アイテム追加の権限がありません
808Invalid media type
+ メディアタイプが不正です
809File is too large
+ ファイルが大きすぎます(最大のアップロードファイルサイズ)
810Other error on newMediaObject
+ newMediaObject で予期せぬエラーが発生しました(何が起きたのかもう少し情報が含まれるでしょう)
その他のコード < 100Errors encountered by the Useful Inc. XML-RPC implementation
+ Usefil Inc. XML-RPC の実行でエラーが発生しました
その他のコード > 100Errors encountered by the XML parser
+ XML パーサでエラーが発生しました
+ +
+ + + \ No newline at end of file diff --git a/utf8/nucleus/documentation/help.html b/utf8/nucleus/documentation/help.html new file mode 100644 index 0000000..2af0dfc --- /dev/null +++ b/utf8/nucleus/documentation/help.html @@ -0,0 +1,5433 @@ + + + + + + + + + + + + + Nucleus管理用ヘルプ + + + + +
+

Nucleusポップアップ・ヘルプ

+

ファイル読み込み中、しばらくお待ちください(ファイルサイズはおよそ170KBです)。

+
+ + +
+ + +

後で追加/過去の日時での投稿

+

後で追加

+

アイテム追加フォームの「後で追加」オプションをチェックすることで、アイテムを指定した時間きっかりに公開することができます。指定された時間が来るまで、アイテムはサイトの公開された部分で見られることはありません。

+

この日時は、アイテムを追加するブログの「過去の日時での投稿を許可する」オプションが有効である場合を除いて、未来のものでなくてはなりません。

+

過去の日時での投稿を許可する

+

この設定を有効にすると、アイテムを追加する時に、アイテムの投稿日時を過去に指定することができるようになります。また、既存のアイテムの投稿日時を編集することもできるようになります。

+
+ +
+

投稿日時の変更

+

+「タイムスタンプを更新」オプションにより、アイテムの投稿された日付や時間を変更することができます。アイテムの内容を変更した時に、「タイムスタンプを更新」することで記事をブログののトップに戻すことができます。

+

しかし、そのアイテム独自のIDは変更されませんので、訪問者はアイテムのIDから、そのアイテムが編集後に投稿時間が変更されたものだと気づくことができます。

+
+ + +
+

自動保存

+

最後に変更を加えてから10分後に、自動的にドラフトとして保存する機能です。投稿、または編集途中に他の用事が出来て、記事を保存するのを忘れてしまった時などに、不用意に編集内容を失わずにすみます。

+

もし、10分待たずに下書きを保存したくなったら、フォームの下の方にある「ドラフト保存」ボタンをクリックします。

+

この機能は、メンバーごとの設定でオン、オフを切り替える事が出来ます。

+
+ + +
+

ドラフト(Drafts/草稿)

+

+ドラフト状態のアイテムはブログの公開されたところでは閲覧することができません。推敲に時間をかけたい時や、、実際に投稿するまでに、少し時間を空けたいときなどに役に立つでしょう。ドラフト状態のアイテムは「管理ホーム」にリストとして表示されるので、時間があるときに、いつでも作業を再開することが可能です。

+

ドラフト状態のアイテムを編集する際に、「今すぐ追加」のラジオボタンを選んで「保存」ボタンを押すと、ドラフト状態が解除されてブログに公開されます。 +

+
+ +
+

「続き」部分

+

+アイテムには、長文記事を分割して表示するために、オプションとして「続き」部分があります。例えば、記事がブログのメインページに置くには長すぎる場合、導入を「本文」部分に、残りを「続き」部分に書くことができます。テンプレートによって、表示の形態は変わってきますが、ブログのメインページを閲覧すると「続きを読む」というリンクが出現します。 +

+

+もしアイテムの単なる概略として導入部分を書きたいのなら、smartbodyというテンプレート変数を用いることで、「本文」と「続き」の表示を分けることも可能です。 +

+
+ +
+

Blogの短縮名

+

+「Blogの短縮名」は主に管理領域で、どのアイテムがどのブログと結びついているのか示すために使われます。 +

+

+また、新規ブログを有効にするための代替indexファイルでも用いられます(以下は「Blogの短縮名」が「myshortblogname」の時の呼び出しファイルの例): +

+
+<?php
+    include('./config.php');
+    selectBlog('myshortblogname');
+    selector();
+?>
+
+
+ +
+

標準のスキン

+

+ブログが表示される時には、ブログごとの「設定」で選択された「標準のスキン」が使用されます。選択できるのは一つだけです。(URLの引数として指定することで、別のスキンで表示させることは可能です) +

+
+ + +
+

通知するメールアドレス

+

+このオプションには、新しくコメントが追加された時などに通知するメールアドレスを、一つあるいは複数設定することができます。もし通知が不要なら空っぽにしておいてください。メールアドレスは、当然ですが、有効なものでなくてはなりません。 +

+

+複数のメールアドレスを設定する場合には、各メールアドレスをセミコロン(;)で区切ってください。 +

+
+注意:設定フィールドの最大長は128文字です。セミコロン(;)を含んだ合計の文字数が128文字を超えない限り、メールアドレスはいくつでも設定することができます。 +
+
+注意:通知先に、メンバー登録に使われているメールアドレスを設定した場合、自分で書いたアイテムやコメントの通知はされません。自分で書いたことは知っているはずですから、問題にはならないでしょう。 +
+
+ +
+

コメントの最大量

+

+メインの目次ページに表示するコメントの最大数です。これはコメント可能な最大数を制限するものではありません。個別アイテムページでは、設定した最大数を超えていても全てのコメントが表示されます。 +

+

注意: +テンプレート内部では、テンプレート変数commentsの引数によってここでの値が上書きされます。 +

+
+ +
+

サーバ時刻との時差

+

+もしサーバの時刻とあなたの住んでいる地域の時刻とが一致していなければ、ここにサーバとの時差を入力することで、Nucleus内部の時刻をあなたの住んでいる地域の時刻に合わせることができます(マイナス時差の地域に住んでいる場合は、マイナス記号付きで入力します)。参考のために現在のサーバの時刻が表示されています。 +

+

実例

+

あなたの住んでいる地域の時刻が20:35で、表示されているサーバの時刻が14:35のとき、ブログの時刻を20:35にするためには「サーバ時刻との時差」を6.0に設定します。 +

+

注意:30分刻みでの時差のある地域のために、0.5刻みで設定することができます。例えば「サーバ時刻との時差」を1.5に設定すると、1時間30分の補正となります。

+
+ +
+

自動更新するファイル

+

+ブログに新しいアイテムが追加された時に、上書きするファイルのパスを入力します。このファイルは、新しいアイテムが追加されるたびに最終変更時のタイムスタンプが上書きされ、外部からはこのファイルを参照することで、ブログに更新があったかどうかをチェックすることができます。このファイルは訪問者によるコメントが追加された時や、スキン/テンプレートに変更を加えた時には更新されません。アイテムが追加されてブログの記事に変更があったときに更新されるので、「Weblogの更新状況」等を作成するサービスに使うことができます。 +

+

+自動更新されるファイルが必要ないときは、フィールドを空っぽにしておいてください。 +

+

+自動更新されるファイルの場所は管理領域からの相対パスでも指定することが可能ですが、 /path/to/your/website/update.txt のようにより確実な絶対パスを使った方が良いでしょう。また自動更新されるファイルを作成し、かつそのファイルに書き込みができるように、自動更新ファイルとそれを作成するディレクトリのパーミッションを0666にしてください。 +

+
+ +
+

Blogの管理者

+

+Blogの管理者は次のような追加権限をもちます: +

+ +
    +
  • チームの操作
  • +
  • Blog設定の変更
  • +
  • 投稿者に関係なく、該当Blogのどのアイテムでも編集や削除が可能
  • +
  • Blogの削除
  • +
+ +

+一つのブログは複数の管理者を持つことができます。各ブログには、最低でも一人の管理者がいなくてはなりません。 +

+
+ + +
+

管理者の特権

+ +

+super-admin(最高管理者)と呼ばれ、ブログのチームへの所属とは無関係に、全ての機能と全てのブログにフルアクセスできます。 +

+ +

+またsuper-adminは、ブログの作成、グローバル設定の変更、テンプレートの書き換え、スキンの書き換え、メンバーの操作(メンバーの作成/編集/削除)を行う権限があります。 +

+ +

+super-adminとなるのは通常サイトの管理者ただ一人でしょう。 +

+ +
+ +
+

管理者領域へのログイン

+

+super-adminはそれぞれのメンバーを、管理領域へのログインを許可しないよう設定できます。 +

+
+ +
+

既定のBlog

+

+サイトへの接続時にブログが指定されていない場合に表示されるブログです。 +

+
+ +
+

基本のスキン

+ +

適用すべきスキンが見つからなかった時に代用するスキンを設定します。これはスキン・パーツが設定されていなかったり、スキンが明確に指定されていなかったりした時に起こります。

+

ほとんどのユーザーは、この設定を気にする必要がありません。

+
+ +
+

Cookie設定

+ +

ログインCookieの有効期間

+

+デフォルトでは、メンバーがログインするとブラウザにcookieが保存され、翌日に戻ってきたときに再びログインする必要がなくなります。クッキーの有効期間によって、いつ無効になるか決定されます。

+
    +
  • セッションごと ブラウザを終了させるとcookieは削除されます。
  • +
  • 一ヶ月 一ヶ月続けてサイトか管理領域を訪れないというようなことが無い限り、cookieはコンピュータに残り続けます。このオプションを使えば、おそらく再ログインする必要はなくなるでしょう。(自分でログアウトしたときや、他のコンピュータからログインするときは別ですが)
  • +
+ +

CookieパスとCookieドメイン

+

+これらは高度な設定です。通常は、cookieパスは単純にスラッシュ('/')、cookieドメインは空っぽの状態から変更する必要はありません。 +

+ +

セキュアCookie

+

+通常は「いいえ」に設定してください。HTTPSのurlを用いており、cookieの送受信をhttps接続を通してのみに限定したい時だけ、この設定を「はい」にします。 +

+ +

最終訪問日時Cookieの保存

+

+訪問者が最後に訪れた時間をcookieに保存させるように設定することができます。これによって、新規アイテムの隣にマークを付けることができます。 +

+ +
+ + +
+

言語

+

+Nucleusが生成する個々のメンバー用のコンテンツを作成するときに用いられる言語を選択することができます。Nucleusによって生成されるコンテンツには、管理領域、エラーメッセージ、スキンにおけるフォームなどが含まれます。 +

+ +

+言語の選択を行う場所は二ヶ所あります。一箇所目は「グローバル設定」で、デフォルトで用いられる「既定の言語」を設定します。もう一箇所は、各「メンバーの編集」ページの設定でメンバー毎ログイン時の使用言語を設定することができます。 + +

+ +

+これら両方の設定が無効の場合、英語がデフォルトの言語として用いられます +

+ +

注意: 追加の言語ファイルはNucleusのウェブサイトからダウンロードできます。(新規ウィンドウが開きます)

+ +
+ +
+

アカウントの作成

+

+訪問者に自身のメンバーアカウント作成を許可することができます。新規メンバーは管理者がチームに加えるまでは、ブログにアイテムを追加することはできませんが、自分のコメントを削除したり変更したりすることが可能です。新規メンバーのログイン許可を許可している場合、管理領域にログインして自分の設定を変更することもできます。 +

+
+ +
+

新規メンバーのログイン許可

+

+この設定は、訪問者によるアカウントの作成を許可している場合に、その方法で作られたアカウントを使用して管理領域にログインできるかどうかを設定します。 +

+
+ + +
+

メッセージサービス

+ +

メンバー間メッセージサービス

+

+メンバーのプライバシーのために、メールアドレスを隠したままで、スクリプトを通してメンバー同士でメールメッセージの送信ができます。送信されたメッセージには両ユーザーのメールアドレスが含まれますので、その後は通常のメールを用いた連絡を続けることができます。このサービスは無効にすることが可能です。 +

+ +

メンバー以外のメッセージサービス

+

+デフォルトでは非メンバーは、入力されたメールアドレスが有効なものかチェックする方法が無いために、メッセージサービスを使用できません。「メンバー以外からのメッセージ送付を許可」することによってこの制限を緩和できます。非メンバーはメッセージの投函時にメールアドレスを尋ねられ、そのアドレスがメールのヘッダーFrom:に表示されることになります。 +

+ +
+ +
+

サイトの閉鎖

+

+Nucleusのサイト全体を閉鎖することが可能です。なんらかの設定調整を行うときに、あるいは何か恐ろしい間違いが起きた時にこれを実行したいと思うかもしれません:-) +

+

+チェックボックスを「はい」に設定した場合に、訪問者はここで設定したURLにリダイレクトされます。 +

+

+例外:管理領域は閉鎖していない時と同様に利用可能であり、最高管理者は通常通りサイト全体を閲覧することができます。(あとでサイトを再開することを忘れないでください;-)) +

+
+ + +
+

URLモード

+

このオプションを用いることにより、URLスタイルを切り替え可能です:

+
    +
  • Normal: URLは次のようになります http://example.jp/index.php?itemid=1234
  • +
  • Fancy: URLは次のようになります http://example.jp/item/1234
  • +
+

注意:「Fancy URL」モードで動作するようにするためには、この設定のほかにもいくつかの作業が必要になります。詳しい解説はTips & Suggestionsに記述されています。(新規ウィンドウが開きます)

+ +
+ + +
+

一覧の既定の表示数

+

一覧表示画面で一度に表示するブログ、アイテム、コメントの数を入力します。初期値は「10」です。

+
+ + +
+

デバッグモード

+

「はい」に設定すると、システム情報を表示したり、対応しているプラグインをデバッグモードにしたりできます。

+
+ + +
+

テンプレート:アイテム

+

+アイテム表示時に、それぞれのアイテムで次のセットが繰り返されます: +

+ +
+アイテムのヘッダー
+アイテムの本体
+アイテムのフッター
+
+ +

「ヘッダー」、「本体」「フッター」の3つのブロックは、それぞれテンプレートの一部として、どのような見た目になるのかを定義します。

+ +

変数

+ +

これらのテンプレート内では、アイテムのデータを挿入するのにテンプレート変数とよばれる系列が利用できます。

+ +

例

+

テンプレート:アイテムの例

+ +
+ +
+

テンプレート:アイテムの例

+

+「アイテムの本体」テンプレートの一例です: +

+ +
<h1><%title%></h1>
+
+<p><%body%></p>
+
+<div class="metadata">
+ <a href="<%itemlink%>">link</a> -
+ <%date%> <%time%> -
+ <a href="<%authorlink%>"><%author%></a> -
+ <%comments%>
+</div>
+ +

結果は次のようになります:

+ +
+ここはアイテムのタイトルです +

ここはアイテムのテキスト部分です

+
+ link - + September 5th 2008 18:51 - + karma - + no comments +
+
+ +
+ + +
+

テンプレート:コメント

+ +

コメントブロックは3つの要素で構成されています。

+ +
    +
  1. + コメントが表示されるとき(ブログの設定、もしくは「コメント本体」のテンプレート内の<%comments%>の引数で許可されているコメントの最大数を下回っているとき) +
    コメントのヘッダー
    +  コメントの本体(コメントの数だけ繰り返し)
    +コメントのフッター
    +
  2. +
  3. + コメントがまったく無いとき +
    +コメントが無い時
    +
    +
  4. +
  5. + コメントがあるが、許可されている最大数を上回っているとき(個別アイテムページでのみ表示されます) +
    +コメントが多すぎる時
    +
    +
  6. +
+ +

コメントのテンプレート内部では、コメント関連テンプレート変数が利用できます。

+ +
+ +
+ + +

テンプレート:コメントのヘッダーとフッター

+ +

特徴

+ +

「コメントの本体」はコメント一つごとに繰り返されますが、ヘッダーとフッターは一度しか表示されません。出力は次のようになります:

+
コメントのヘッダー
+  コメントの本体 1
+  コメントの本体 2
+  コメントの本体 3
+コメントのフッター
+

これらのテンプレート内では、コメント関連テンプレート変数が利用できます。

+ +

例

+ +

コメントのヘッダー:

+
<ul>
+

コメントの本体:

+
<li><%user%>: <%body%></li>
+

コメントのフッター

+
</ul>
+

結果は次のようになります

+ +
    +
  • hsur: そうでしたね。なんでソコ抱き合ってんの・・・っていう感じで
  • +
  • satona: ぼくは、センセーとしましたよ。ハグ。
  • +
  • hsur: ぇ!
  • +
+ +
+ +
+

テンプレート:続きへのリンク

+

+これはアイテムのテンプレート(アイテムのヘッダー、アイテムの本体、アイテムのフッターの3つ)で利用できるテンプレート変数、"morelink"がどのように表示されるかを決めるものです。利用可能な変数はアイテムのテンプレートと同じです。 +

+

+もしアイテムに「続き」の部分が存在しない場合、テンプレート変数<%morelink%>は無視されます。 +

+ +

例

+
<a href="<%itemlink%>">[続きを読む!]</a>
+ +
+ +
+ +

テンプレート:アーカイブリスト

+ +

過去ログのリストは、以下のようなリスト体裁をとります:

+ +
アーカイブリストヘッダー
+  アーカイブリスト本体(アーカイブごとに繰り返し)
+アーカイブリストフッター
+ +

+利用できる変数:(ヘッダーとフッターではblogidのみが使用できます) +

+ + + + + + + + + + + + + + + + + + + +
名前説明
blogidweblogのID
archivelinkアーカイブへのリンク。<a href="<%archivelink%>">のように使用します。
month月の数値(01-12の2文字表記)
year年(西暦の4文字表記)
day月の中での日付(二文字表記。日ごと表示の時のみ)
+ +

strftime変数を使用することで、日付の表記を自由にカスタマイズすることができます。この変数が複雑すぎると感じるなら、次のように記述すると良いでしょう。

+ +
<a href="<%archivelink%>">%B, %Y</a><br />
+ + +

出力される時刻と言語をあなたの住んでいる地域にあわせるために、localeを適切に設定してください。

+ +
+ + + + +
+

テンプレート:カテゴリーリスト

+ +

カテゴリーリストは下の表のようにフォーマットされます:

+ +
カテゴリーリストヘッダー
+  カテゴリーリストアイテム(繰り返し)
+カテゴリーリストフッター
+ +

利用可能な変数:(ヘッダーとフッターではblogid、 blogurl、selfのみが許可されています)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
名前説明
blogidweblogのID
blogurlblogのURL(blogごとの「設定」で定義される)
selfパラメーター無しの現在のページ(例えばindex.php)
catlink該当カテゴリーの新しいアイテムへのリンク。これにより<a href="..">タグを埋め込むことができる。
catidカテゴリーのID
catnameカテゴリー名
catdescカテゴリーの説明
catiscurrentカテゴリが選択中、もしくは表示中のアイテムが所属するカテゴリの場合「yes」が、そうでなければ「no」が出力される
currentcat<%catiscurrent%>のシノニム
+ +

カテゴリーリストの例を見る

+ +
+ +
+

テンプレート:カテゴリーリストの例

+

+「テンプレート:カテゴリーリスト」の解説に戻る +

+ +

カテゴリーリストヘッダー

+
<ul>
+  <li><a href="<blogurl%>">まとめて表示</a>< /li>
+ +

カテゴリーリストアイテム

+
<li><a href="<%catlink%>"><%catname%></a></li>
+ +

カテゴリーリストフッター

+
</ul>
+ +

結果はこうなります:

+ + + +
+ +
+

テンプレート:ブログリスト

+ +

ブログリストは次の様に出力されます:

+ +
ブログリストヘッダー
+  ブログリストアイテム(存在するブログの数だけ繰り返し)
+ブログリストフッター
+ +

ブログリストアイテムで利用可能な変数:

+ + + + + + + + + + + + + + + + +
名前説明
bloglinkブログのURL(Nucleusコアによって与えられた引数から生成されるもの)<a href="<%bloglink%>">のように使用します。
blogurlブログのURL(「Blog設定」の「URL」で設定されているもの)<a href="<%blogurl%>">のように使用します。
blogdescブログの説明
blognameブログ名(第二引数に『shortname』が指定された場合は『ブログの短縮名』)
+ +

ヘッダーとフッターでのみ使用できる変数:

+ + + + + + + + + + +
名前説明
siteurlグローバル設定の「サイトのURL」
sitenameグローバル設定の「サイト名」
+ +

ブログリストの例を見る

+ +
+ +
+

テンプレート:ブログリストの例

+

+「テンプレート:ブログリスト」の解説に戻る +

+ +

ブログリストヘッダー

+
<ul>
+  <li><a href="<%siteurl%>"><%sitename%></a></li>
+ +

ブログリストアイテム

+
<li><a href="<%bloglink%>" title="<%blogdesc%>"><%blogname%></a></li>
+ +

ブログリストフッター

+
</ul>
+ +

表示は次のようになります

+ + + +
+ + + + + + + +
+

テンプレート:Locale

+

+これは実際のところテンプレートの部品というより設定です。設定することによって、日付と時刻のローカライズを選択できます。月や曜日などは要求された言語での表示になるでしょう。 +

+ +

+使える変数は、Nucleusが動作しているコンピュータによります。使える変数をいくつかあげますと・・・: +

+ +
    +
  • en:英語
  • +
  • dutch:オランダ語
  • +
  • ja_JP:日本語
  • +
  • ...
  • +
+ +

+strftimeに関するより詳しい情報は、Open Group Specificationにあります。(新規ウィンドウが開きます) +

+ +

+locale は日付と時刻のフォーマット、日付ヘッダー、アーカイブリストで利用されます。 +

+ +
+ +
+

テンプレート:日付と時刻のフォーマット

+

+これらは<%date%>と <%time%>という変数(詳細はテンプレート変数を参照)の日付と時刻の表示方法を設定します。フォーマットはLocaleにも左右されます。 +

+ +

+利用できる変数の詳細な情報はこちら。もし手っ取り早く始めたいのなら、日付フォーマットに"%x"を、時刻フォーマットに"%X"をお使いください。 +

+ +
+ +
+

テンプレート:日付のヘッダー/フッター

+ +

+日付のヘッダーと日付のフッターは、日付と時刻の変数を入力することができます。利用できる変数の詳細情報はこちらにあります。もし手っ取り早く始めたいのなら、日付フォーマットとして"%x"を使ってください。日付フォーマットで使われる言語は、テンプレートのLocaleで設定できます。

+ +

+日付のヘッダーにテンプレート変数<%%daylink%%>を含めることによって、その日のアーカイブへのリンクを挿入できます。'%'が二つ続けてあることに注意!変数として展開される%dを無効にするために必要な措置です。 同様に、このテンプレート内で'%'という文字を使いたい場合は、二つ重ねて"%%"と記述しないとサイトには表示されません。 +

+ +

+日付のヘッダーのサンプル: +

+ +
+<div class="day">
+<h1>%d %B</h1>
+
+ +

+日付のフッターのサンプル: +

+ +
+</div>
+
+ +

daylinkを用いた日付ヘッダーの例:

+ +
+<div class="day">
+<h1>%d %B</h1>
+<a href="<%%daylink%%>">(アーカイブ)</a>
+
+ +
+ +
+

テンプレート:ハイライト表示

+

+検索結果をハイライト表示するために、検索文字列を挟み込む(X)HTMLタグを入力します。"\0"と記述した場所が、検索文字列に置き換えられます。また、ここで入力された文字列は、プログラム中で正規表現のパターン構文数(新しいウィンドウが開きます)としてそのまま使用されますので、いくつかの記号はバックスラッシュを直前に置くことでエスケープしなければなりません。 +

+ +

例

+ +
<span style='background-color:yellow'>\0</span>
+ +
+ +
+

テンプレート:検索で何も見つからなかった場合

+ +

+検索が実行され結果何も見つからなかった場合に表示されます。 +

+ +

利用可能な変数:

+ + + + + + + + + + +
名前説明
blogidブログのID
query検索に用いられた文字列
+ +

例

+ +
<b><%query%></b>に該当する検索結果はありませんでした
+ +
+ +
+

テンプレート:コメントの本体

+

+このテンプレート・パーツは単独のコメント表示に使われます。このテンプレートでは、コメント関連テンプレート変数が利用できます。

+ +

例

+
<h2><%userlink%>さんによるコメント:</h2>
+
+<p><%body%></p>
+
+<div class="metadata">
+ (接続元:<%host%> 投稿日時:<%date%> <%time%>)
+</div>
+ +

結果は次のようになります:

+ +
+fujisakiさんによるコメント: +

このういろう、味薄い

+
(接続元:host.example.org 投稿日時:2008-08-23 02:30)
+
+ +
+ +
+

テンプレート:メディアとポップアップ

+

+これらのテンプレートは、画像のポップアップウィンドウへのリンクと画像以外のメディア・オブジェクトのフォーマットに用いられます。それぞれのテンプレートで利用可能な変数は以下の通りです。 +

+ +

ポップアップ画像へのリンクコード

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
名前説明
popuplink画像へのポップアップ・リンク
rawpopuplinkpopuplinkのジャンプ先URL
popupcodeポップアップウィンドウを開くjavascriptコード
text代替テキスト(リンクテキスト)
widthイメージの幅
heightイメージの高さ
popuptexttextと同じだが、htmlエンティティ変換される
link画像の直接のURL
media画像への直接リンク
+ + +

インライン画像のコード

+ + + + + + + + + + + + + + + + + + + + + + +
名前説明
image(x)htmlのimgタグ
link画像の直接のURL
text代替テキスト(リンクテキスト。htmlエンティティ変換される)
widthイメージの幅
heightイメージの高さ
media画像への直接リンク
+ +

メディアオブジェクトへのリンクコード

+ + + + + + + + + + + + + +
名前説明
mediaファイルへの直接リンク
linkファイルの直接のURL
text代替テキスト(リンクテキスト。htmlエンティティ変換される)
+ +
+ +
+

テンプレート:登録メンバーからのコメントへの追加表示

+

+これはコメントが登録メンバーからのものであることを示すのに利用できるテンプレートです。最終的にはコメントの本体で使われる<%authtext%>変数の中身として表示されます。 +

+ +

このテンプレート内部では、コメント関連テンプレート変数が利用できます。

+ +
+ +
+

テンプレート:コメントの続きを読む

+

+このテンプレートの内容は、コメントの本体で使われる変数<%short%>に追加されます。 +

+ +

このテンプレート内部では、<%short%>以外のコメント関連テンプレート変数が利用できます。

+ +

例:

+ +
+ <a href="<%itemlink%>">[続き]</a>
+
+ +
+ +
+

テンプレート:コメントの数え方

+

+日本語で使う場合は、単複同型なので両方"件のコメント"にしておいて問題ないでしょう。英語で表記したい時は、次のようなことが気になるかもしれません。

+

コメントの件数の表示の仕方を、"1 comment(s)"とするよりも"1 comment"、"3 comments"と表示したい人が多いのではないでしょうか?「コメントが1つの時」と「コメントが2つ以上の時」のテンプレート部分はその目的のために存在します。これらは他の所で使える<%commentword%>変数の中身として利用されます。 +

+ +

+1つしかコメントが無い時は、<%commentword%>は「コメントが一つの時」で設定した内容になり、2つ以上のコメントがついているなら「コメントが二つ以上の時」で設定した内容になります。 +

+ +

+典型的な値は"comment"と"comments"です。ここでは変数は利用できません。 +

+
+ + + +
+

テンプレート:アイテムを編集するためのリンク

+

+このテンプレートはテンプレート変数"edit"がどのように表示されるかを決めるものです。このテンプレートではすべてのテンプレート変数が使用できます。 +

+ +

例:

+ +
<a href="<%editlink%>"
+   onclick="<%editpopupcode%>">編集</a>
+ +
+ + + + +
+

スキン:メインの目次ページ

+

+このスキンパーツはブログ内の最新のエントリーを表示するのに用いられます。通常はサイト、またはブログのトップページにあたる場所になります。 +

+ +

+「メインの目次ページ」の基本的な形: +

+ +
+<html>
+  <head>
+    <title>私のウェブログ</title>
+  </head>
+  <body>
+
+    <h1>私のウェブログ</h1>
+    <%blog(mytemplate,20)%>
+
+  </body>
+</html>
+
+ +

+ このスキンでは、選択中のブログのアイテムが、タイムスタンプの新しいものから20個、'mytemplate'というテンプレートを使用して表示されます。 +

+
+ + +
+

個別アイテムページ

+

+このスキンパーツは個別のアイテムを表示するために使われます。アイテムに付けられた全てのコメントと、コメント追加フォームを含めたものになります。 +

+ +

+「個別アイテムページ」の基本的な形: +

+ +
+<html>
+  <head>
+    <title>私のウェブログ :: アイテム</title>
+  </head>
+  <body>
+
+    <h1>アイテム</h1>
+    <%item(detailed)%>
+
+    <h1>コメント</h1>
+    <%comments(detailed)%>
+
+    <h1>コメントを追加</h1>
+    <%commentform%>
+
+  </body>
+</html>
+
+ +

+ このスキンでは、'detailed'テンプレートを使用してアイテムとコメント、そして標準のコメントフォームが表示されます。 +

+ + +
+ +
+

スキン:月別アーカイブ一覧ページ

+

+このスキンパーツはアーカイブが存在する全ての月の概略と、それらアーカイブへのリンクを表示します。 +

+ +

+「月別アーカイブ一覧ページ」の基本的な形: +

+ +
+<html>
+  <head>
+    <title>私のウェブログ :: アーカイブ集</title>
+  </head>
+  <body>
+
+    <h1>アーカイブ集</h1>
+    <%archivelist(default)%>
+
+  </body>
+</html>
+
+ +

+ このスキンでは、'default'テンプレートを使用して、選択中のブログのアーカイブが存在する全ての月のリストが表示されます。 +

+ +
+ +
+

スキン:月別アーカイブページ

+

+このスキンパーツは「メインの目次ページ」と似た振る舞いをしますが、該当月の全てのアイテムを表示します。 +

+ +

+「月別アーカイブページ」の基本的な形: +

+ +
+<html>
+  <head>
+    <title>私のウェブログ :: アーカイブ</title>
+  </head>
+  <body>
+
+    <h1>アーカイブ</h1>
+    <%archive(default)%>
+
+  </body>
+</html>
+
+ +

+ このスキンでは、'default'テンプレートを使用して、選択中のブログの要求されたアーカイブが表示されます。 +

+ + +
+ + +
+

スキン:検索ページ

+

+このスキンパーツは検索結果の表示に使われます。 +

+ +

+「検索ページ」の基本的な形: +

+ +
+<html>
+  <head>
+    <title>私のウェブログ :: 検索</title>
+  </head>
+  <body>
+
+    <h1>検索</h1>
+    <%searchform%>
+
+    <h1>検索結果</h1>
+    <%searchresults(default)%>
+
+  </body>
+</html>
+
+ +

+ このスキンでは、'default'テンプレートを使用して検索の結果が表示されます。 +

+ +
+ +
+

スキン:エラーページ

+

+このスキンパーツはエラーが発生したときに用いられます。 +

+

+「エラーページ」の基本的な形: +

+ +
+<html>
+  <head>
+    <title>私のウェブログ :: エラー</title>
+  </head>
+  <body>
+
+    <h1>エラーが発生しました!</h1>
+    <%errormessage%>
+
+    <br /><br />
+
+    <a href="javascript:history.back();">戻る</a>
+
+  </body>
+</html>
+
+ +

+ このスキンでは、エラーメッセージと、元のページへ戻るためのリンクが表示されます。 +

+ +
+ +
+

スキン:メンバー詳細ページ

+

+このスキンパーツはメンバーの詳細を表示するのに使われます。 +

+ +

+「メンバー詳細ページ」の基本的な形: +

+ +
+<html>
+  <head>
+    <title>私のウェブログ :: メンバーの詳細</title>
+  </head>
+  <body>
+
+    <h1><%member(name)%> の情報</h1>
+    ウェブサイト:
+    <a href="<%member(url)%>"><%member(url)%></a>
+
+    <h1>メッセージを送る</h1>
+    <%membermailform%>
+
+  </body>
+</html>
+
+ +

+ このスキンでは、メンバー名とメンバーのウェブサイトのアドレス、そしてメール送信フォームが表示されます。 +

+ +
+ + +
+

スキン:画像ポップアップウィンドウ

+

+このスキンパーツは画像をポップアップウィンドウを使用して表示する場合に使われる、ポップアップウィンドウ内のレイアウトを決定します。 +

+ +

+「画像ポップアップウィンドウ」の基本的な形: +

+ +
+<html>
+<head>
+  <title><%imagetext%></title>
+  <style type="text/css">
+   img { border: none; }
+  </style>
+</head>
+<body>
+  <a href="javascript:window.close();"><%image%></a>
+</body>
+</html>
+
+ +
+ + +
+

スキン:スペシャルスキンパーツ

+

+このスキンパーツは、特別な見せ方をしたいコンテンツやブログの内容以外のコンテンツ、例えばフォームや静的なコンテンツ、もしくはNucleusとは切り離された動的なコンテンツ等を表示する為に使用します。 +スペシャルスキンパーツは次のようにして表示します。 +(fredという名前でスペシャルスキンパーツを作った場合) +

+http://www.yoursite.tld/index.php?special=fred + +

このスキンタイプに関するさらなる議論は、NucleusCMS本家サポートフォーラムで行われています。: +Nucleus 3.31 and Static Pages +

+ +

+標準的なスペシャルスキンパーツ: +

+ +
+<html>
+  <head>
+    <title>私のブログ</title>
+  </head>
+  <body>
+
+    <h1>このサイトについて</h1>
+    <p>This page was published in order
+    to provide a platform to publicize the plight
+    of the peeping-polly parrot whose present
+    prognosis is perturbingly pessimistic.</p>
+
+  </body>
+</html>
+
+ +

+ この例は、ごく一般的なHTML文書として表示されます。 + また、標準的なスキン変数が使えるので、ブログとの連系を持たせた静的ページを持たせたいときなどに役立つでしょう。 +

+
+ + + + +
+

短縮名と表示される名前

+

+ブログ、テンプレート、そしてスキンは名前や説明の他に短縮名を持たなくてはなりません。 +

+ +

+短縮名はa~zと0~9のみで構成され、スペースを含むことはできません。

+

訳注:テンプレートの名前には'/'が利用できたりするので、実際にはこの限りではないようです。 +

+ +

+メンバーの場合、「表示される名前」はログイン名として使われます。a~z、 A~Z、0~9とスペース(半角)が使用できます。ただし、名前の最初や最後にスペースを付けることはできません。 +

+
+ + + + + + +
+

テンプレート:新しいアイテムに付けるマーク

+

+最終訪問日時Cookieの保存オプションを「はい」に設定している時、前回訪問時から後に追加されたアイテムに、「新しいアイテムに付けるマーク」テンプレートの内容が、アイテムのテンプレートに記述した変数<%new%>の部分に表示されます。 +

+ +

+「最終訪問日時Cookieの保存」が「いいえ」に設定されている、または前回訪問時以降にアイテムが新しく追加されていなければ、変数<%new%>は無視されます。 +

+
+ + + +
+

時間変数の概要

+ +

次の変換記述は文字列フォーマットに基づきます(PHPドキュメントのstrftime関数から持ってきたものです)。より詳しい情報は Open Group Specificationにあります。

+ +
    +
  • %a - 現在のロケールに基づく短縮された曜日の名前
  • +
  • %A - 現在のロケールに基づく完全な曜日の名前
  • +
  • %b - 現在のロケールに基づく短縮された月の名前
  • +
  • %B - 現在のロケールに基づく完全な月の名前
  • +
  • %c - 現在のロケールに基づく適当な日付と時間の表現
  • +
  • %d - 日付を10進数で(01から31)
  • +
  • %H - 時間を24時間表示の10進数で(00から23まで)
  • +
  • %I - 時間を12時間表示の10進数で(01から12までの範囲)
  • +
  • %j - 年間での日付を10進数で表現 (001から366)
  • +
  • %m - 月を10進数で表現 (01から12)
  • +
  • %M - 分を10進数で表現
  • +
  • %p - 指定した時間により 'am' または 'pm' 、または 現在のロケールに対応した文字列
  • +
  • %S - 秒を10進数で表現
  • +
  • %U - 年間で何番目の週であるかを 10 進数で表現。 年間で最初の日曜を最初の週の最初の日として数えます。
  • +
  • %W - 現在の年で何番目の週であるかを10進数で表現。 年間で最初の月曜を最初の週の最初の日として数えます。
  • +
  • %w - 曜日を10進数で表現。日曜は0になります。
  • +
  • %x - 時間を除いた日付を現在のロケールに基づき表現します。
  • +
  • %X - 日付を除いた時間を現在のロケールに基づき表現します。
  • +
  • %y - 世紀の部分を除いた年を10進数として表現。(00から99までの範囲)
  • +
  • %Y - 世紀を含む年を 10進数で表現
  • +
  • %Z - タイムゾーンまたはその名前または短縮形
  • +
  • %% - 文字リテラル'%'
  • +
+ +

以下はサーバによって対応が異なりますので、参考程度にお試しください。

+ +
    +
  • %-dまたは%#d - 日付を10進数で(1から31)
  • +
  • %-Hまたは%#H - 時間を24時間表示の10進数で(0から23まで)
  • +
  • %-Iまたは%#I - 時間を12時間表示の10進数で(1から12までの範囲)
  • +
  • %-mまたは%#m - 月を10進数で表現 (1から12)
  • +
  • %-Mまたは%#M - 分を10進数で表現(0から59まで)
  • +
+ +
+ +
+

Pingサーバに更新通知を送信する

+

+ブログを更新した時に、ブログ検索サイト等の公開している複数のpingサーバに更新pingを送信することができます。これらのpingサーバを用意しているサイトでは、リクエストに応じて最近更新されたブログのリストを提示してくれます。このデータを利用した新着記事のリスト等のサービスを、数多くのウェブサイトが提供していますので、このオプションを「はい」に設定することで、あなたのブログは新しい訪問者を得ることになるでしょう。 +

+

注意:この機能を正しく動かすために、blogごとの「設定」にあるweblogの「URL」と「Blogの名前」を埋める必要があります。 +

+ +
+ +
+ +

常に検索対象に含める

+ +

「常に検索対象にする」オプションが選択されていると、同一のNucleus内で行われたすべてのブログ内検索において、常に検索対象に含まれます。

+ +

例として、'lifelog'と'linkdump'という2つのブログを持ち、'linkdump'の「常に検索対象にする」が「はい」、'lifelog'は「いいえ」にになっていると仮定しましょう。そうすると、'lifelog'で検索した場合は'linkdump'も検索するのに対して、'linkdump'での検索では、'linkdump'のエントリーしか検索しません。

+ + +
+ + +
+

改行を変換する

+

+Nucleusはアイテム内の改行を、デフォルトで<br />タグに変換します。この設定によって、アイテム内の改行箇所を出力後の(X)HTMLに反映させることができます。 +

+

+手馴れたユーザーや、Semantic Web(brタグは情報を付加せず、ただ記述のためにのみ使われる)のために努力するユーザーの中には、この機能が迷惑だと感じるかもしれません。その場合はこのオプションを「いいえ」に設定してください。 +

+
+ + +
+

メディア

+

+Nucleusはメディアファイル(画像、動画、音楽など)をウェブサイトにアップロードすることができます。 +

+

+このためにいくつかの設定が必要となります: +

+
    +
  • メディア(画像・音声)ディレクトリ:メディアファイルが保存されるサーバー上の場所(サーバのファイルシステム上のパス)
  • +
  • メディアURL:メディアファイルのURL上の場所
  • +
  • ファイルのアップロードを許可しますか?:ファイルのアップロードを不許可にすることができます
  • +
  • アップロードを許可するファイルタイプ:アップロードできるファイルの拡張子(複数必要な場合は、コンマで区切る)
  • +
  • アップロードファイルの最大サイズ:ここで設定したものよりファイルサイズの大きなものはアップロードすることができません。
  • +
  • アップロードするファイル名の頭に日付を付加する:アップロードされたファイルのファイル名の先頭に、現在の日付を付加するかどうかを選択します。このオプションで「はい」を選んでいると、例えば 'bunny.jpg'という名前のファイルを2008å¹´9月5日にアップロードしたなら、'20080905-bunny.jpg'というファイル名になります。何故こんな機能があるかというと、大量のファイルをアップロードしているときについ同じ名前を用いてしまう問題を避けるためです。
  • +
+ +

+メンバーはそれぞれ、自身のメディアファイルのプライベートなコレクションを持ちます。また、それ以外のメディア・ディレクトリ下のサブディレクトリはグローバルなコレクション(メンバー間で共有)とみなされます。 +

+ +

アップロードは悪用を予防するため、少なくとも一つのブログチームに入っているメンバーでなくては行えません。

+
+ + +
+

メンバー名の保護

+

訪問者によるメンバーへの成りすましを防止するために、メンバーとして登録済みの名前を使ってのゲストコメントはできないようになっています。このオプションを「いいえ」に設定することで、この規制を緩和することができます。

+
+ + +
+

プラグインURL

+

この設定はプラグイン管理領域のベースURLです。通常次のようになります。

+
http://example.jp/nucleus/plugins/
+
+ +
+

スキンURL

+

この設定はNucleusスキン・ディレクトリのベースURLです。通常次のようになります。

+
http://example.jp/skins/
+
+ +
+

action.phpへのフルURL

+

この設定はNucleus付属のスクリプトaction.phpの絶対URLです。通常次のようになります。

+
http://example.jp/actions.php
+
+ + + +
+

アイテムの追加

+

ブログにアイテムを追加する際、「本文」「タイトル」「続き」に4種類の変数を利用することができます:

+
    +
  • <%popup(...)%> ポップアップ画像の挿入
  • +
  • <%image(...)%> インライン画像の挿入
  • +
  • <%media(...)%> メディアオブジェクトの挿入
  • +
  • <%plugin(...)%> プラグインによる処理
  • +
+

<%plugin%>以外のこれらのタグはJavaScriptツールバーにある「メディアの追加」ボタンで書き入れられます。

+ + +
+ + + + +
+ +

スキン変数:referer

+

リンク元のURLを挿入します。アクセス方法や、ブラウザ、ファイアウォール等の設定によって、空白の時があります。

+

引数

+

なし

+

スキンタイプ

+

全て

+

例

+
+<a href="<%referer%>">戻る</a>
+
+
+ + +
+ +

スキン変数:itemid

+

現在選択しているアイテムのIDを挿入します。

+

引数

+

なし

+

スキンタイプ

+

個別アイテム

+

例

+
+<%itemid%>
+
+
+ + +
+ + +

スキン変数:itemlink

+ +

アイテムのURL(permanent link)を挿入します。

+ +

引数

+ +
+
    +
  • オプション: + + + + + + + + + +
    名前適用
    linktext記述されていると、URLの代わりに<a href...タグによるリンクが挿入されます。
    +
  • +
+
+

スキンタイプ

+ +

個別アイテム

+ +

例

+ +
+<%itemlink%>
+
+
+ +
+ +

スキン変数:itemtitle

+

アイテムのタイトルを挿入します。HTMLタグは除去され、エンティティはエンコードされます。

+

引数

+

なし

+

スキンタイプ

+

個別アイテム

+

例

+
+<%itemtitle%>
+
+
+ + +
+ +

スキン変数:archivedate

+

アーカイブの日付としてフォーマット済みの日付を挿入します。パラメーターなしで使うと、例えばアーカイブが2008年9月のものなら、'05 september 2008'か'september 2008'のどちらかが挿入されることになります。

+

引数

+
    +
  • オプション: + + + + + + + + + +
    名前値
    Locale日付がフォーマットされるときに用いられるLocale
    Format日付のフォーマット(strftime変数)
    +
  • +
+

スキンタイプ

+

月別アーカイブ

+

例

+
+Archive for <%archivedate%>
+Archive for <%archivedate(dutch)%>
+Archive for <%archivedate(en,%B %Y)%>
+
+
+ + + +
+ +

スキン変数:blog

+ +

+選択中のブログの、タイムスタンプの新しいアイテム群を挿入します。 +

+ +

引数

+
+
    +
  • 必須: + + + + + + + + + +
    名前値
    template使用するテンプレート名
    +
  • +
  • オプション + + + + + + + + + + + + + +
    名前値
    amount表示するアイテムの数(デフォルトは10)。何番目のアイテムから始めるかというオフセットを含めることもできます。例えば10(5) と記述すると5番目から始めて10個のアイテムを表示します。
    category表示するカテゴリーの名前
    +
  • +
+
+ +

スキンタイプ

+ +

+メインの目次、個別アイテム、月別アーカイブ、月別アーカイブ一覧、検索 +

+ +

例

+ +
+<%blog(default,15)%>
+<%blog(default,5(15))%>
+<%blog(mytemplate)%>
+<%blog(mytemplate,5,mycategory)%>
+
+ +
+ +
+ +

スキン変数:bloglist

+ +

+Nucleusで管理しているブログのリストを、指定されたテンプレートを用いて挿入します。 +

+ +

引数

+
+
    +
  • 必須: + + + + + + + + + +
    名前値
    template使用するテンプレート名
    +
  • +
  • オプション + + + + + + + + + + + + + + + + + + + + + +
    名前値初期値
    bnametype「shortname」を指定することで、ブログ名の変わりにブログの短縮名を挿入しますbname
    orderby並べ替えのキーを指定します。指定可能なキーは「number(ブログID)」「name(ブログ名)」「shortnameブログの短縮名)」「description(ブログの説明)」です。number
    directionorderbyで指定したキーを使って「asc」で昇順、「desc」で降順に並べ替えます。asc
    + 途中の引数を省略する時は「,(カンマ)」のみ記述します。 +
  • +
+
+ +

スキンタイプ

+ +

+全て +

+ +

例

+ +
+<%bloglist(mytemplate)%>
+標準。「mytemplate」を使って、ブログの一覧を「ブログ名」で表示します
+<%bloglist(mytemplate,shortname)%>
+「mytemplate」を使って、ブログの一覧を「ブログの短縮名」で表示します
+<%bloglist(default/index,name,description)%>
+「default/index」を使って、ブログの一覧を「ブログの説明」で並べ替えて「ブログ名」で表示します。
+<%bloglist(default/index,shortname,,desc)%>
+「default/index」を使って、ブログの一覧を「ブログ名」の降順で並べ替えて「ブログ短縮名」で表示します。
+
+ +
+ + + +
+ +

スキン変数:otherblog

+ +

+指定されたブログの、タイムスタンプの新しいアイテム群を挿入します。 +

+ +

引数

+
+
    +
  • 必須: + + + + + + + + + + + + + +
    名前値
    blogname表示するブログの短縮名
    template使用するテンプレート名
    +
  • +
  • オプション + + + + + + + + + + + + + +
    名前値
    amount表示するアイテムの数(デフォルトは10)。何番目のアイテムから始めるかというオフセットを含めることもできます。例えば10(5) と記述すると5番目から始めて10個のアイテムを表示します。
    category表示するカテゴリーの名前
    +
  • +
+
+ +

スキンタイプ

+ +

+全て +

+ +

例

+ +
+<%otherblog(myblog,default,15)%>
+<%otherblog(yourblog,mytemplate)%>
+<%otherblog(yourblog,mytemplate,15,mycategory)%>
+<%otherblog(yourblog,mytemplate,5(15),mycategory)%>
+
+ +
+ + + + + + + + + +
+ +

スキン変数:item

+ +

+現在選択されているアイテムを、指定されたテンプレートを用いて挿入します(コメントは挿入されません)。 +

+ +

引数

+
    +
  • 必須: + + + + + + + + + +
    名前値
    template使用するテンプレート名
    +
  • +
+ +

スキンタイプ

+ +

+個別アイテム +

+ +

例

+ +
+<%item(mytemplate)%>
+
+ +
+ + + + + + + + + +
+ +

スキン変数:comments

+ +

+現在選択されているアイテムについているコメントを、指定されたテンプレートを用いて挿入します。 +

+ +

引数

+
    +
  • 必須: + + + + + + + + + +
    名前値
    template使用するテンプレート名
    +
  • +
+ +

スキンタイプ

+ +

+個別アイテム +

+ +

例

+ +
+<%comments(mytemplate)%>
+
+ +
+ + + + + + + +
+ +

スキン変数:archive

+ +

+選択されているブログの選択された月のアーカイブを、指定されたテンプレートを用いて表示。 +

+ +

引数

+
+
    +
  • 必須: + + + + + + + + + +
    名前値
    template使用するテンプレート名
    +
  • +
  • オプション: + + + + + + + + + +
    名前値
    category表示するカテゴリー名
    +
  • +
+
+ +

スキンタイプ

+ +

+月別アーカイブ +

+ +

例

+ +
+<%archive(mytemplate)%>
+<%archive(mytemplate,mycategory)%>
+
+ +
+ + + + +
+ +

スキン変数:otherarchive

+ +

+指定されたブログの選択された月のアーカイブを、指定されたテンプレートを用いて表示。 +

+ +

引数

+
+
    +
  • 必須: + + + + + + + + + + + + + +
    名前値
    blogname表示するブログの短縮名
    template使用するテンプレート名
    +
  • +
  • オプション + + + + + + + + + +
    名前値
    category表示するカテゴリーの名前
    +
  • +
+ +
+ +

スキンタイプ

+ +

+月別アーカイブ +

+ +

例

+ +
+<%otherarchive(myblog,mytemplate)%>
+<%otherarchive(myblog,mytemplate,mycategory)%>
+
+ +
+ + + + + + + +
+ +

スキン変数:archivelist

+ +

+現在選択しているブログに存在するアーカイブの月ごとのリストを、指定されたテンプレートを使って挿入します。 +

+ +

引数

+
+
    +
  • 必須: + + + + + + + + + +
    名前値
    template使用するテンプレート名
    +
  • +
  • オプション + + + + + + + + + + + + + +
    名前値
    category表示するカテゴリーの名前
    limit表示するリンク数の制限(例えば、過去3ヶ月分へのリンクしか表示させたくないときなど)
    +
  • +
+
+ +

スキンタイプ

+ +

+メインの目次、月別アーカイブ、月別アーカイブ一覧、検索、個別アイテム +

+ +

例

+ +
+<%archivelist(mytemplate)%>
+<%archivelist(mytemplate,mycategory)%>
+
+ +
+ +
+ +

スキン変数:archivedaylist

+ +

+スキン変数archivelistと同様にアーカイブのリストを挿入しますが、月ごとの代わりに日ごとのアーカイブのリストを挿入します。 +

+ +

引数

+
+
    +
  • 必須: + + + + + + + + + +
    名前値
    template使用するテンプレート名
    +
  • +
  • オプション + + + + + + + + + + + + + +
    名前値
    category表示するカテゴリーの名前
    limit表示するリンク数の制限(例えば、過去3日分へのリンクしか表示させたくないときなど)
    +
  • +
+
+ +

スキンタイプ

+ +

+メインの目次、月別アーカイブ、月別アーカイブ一覧、検索、個別アイテム +

+ + +

例

+ +
+<%archivedaylist(mytemplate)%>
+<%archivedaylist(mytemplate,mycategory)%>
+
+ +
+ + +
+ +

スキン変数:otherarchivedaylist

+ +

+スキン変数otherarchivelistと同様に、指定されたブログのアーカイブのリストを挿入しますが、 月ごとの代わりに日ごとのアーカイブを挿入します。 + +

+ +

引数

+
+
    +
  • 必須: + + + + + + + + + + + + + +
    名前値
    blogname表示するブログの短縮名
    template使用するテンプレート名
    +
  • +
  • オプション + + + + + + + + + +
    名前値
    category表示するカテゴリーの名前
    +
  • +
+
+ +

スキンタイプ

+ +

+全て +

+ +

例

+ +
+<%otherarchivedaylist(yourblog,mytemplate)%>
+<%otherarchivedaylist(yourblog,mytemplate,mycategory)%>
+
+ +
+ + + +
+ +

スキン変数:otherarchivelist

+ +

+指定されたブログに存在するアーカイブ月ごとのリストを、指定されたテンプレートを用いて表示します。 +

+ +

引数

+
+
    +
  • 必須: + + + + + + + + + + + + + +
    名前値
    blogname表示するブログの短縮名
    template使用するテンプレート名
    +
  • +
  • オプション + + + + + + + + + +
    名前値
    category表示するカテゴリーの名前
    +
  • +
+
+ +

スキンタイプ

+ +

+全て +

+ +

例

+ +
+<%otherarchivelist(yourblog,mytemplate)%>
+<%otherarchivelist(yourblog,mytemplate,mycategory)%>
+
+ +
+ + + +
+ +

スキン変数:archiveyearlist

+ +

スキン変数archivelistと同様にアーカイブのリストを挿入しますが、月ごとの代わりに年ごとのアーカイブのリストを挿入します。

+ +

引数

+
+
    +
  • 必須: + + + + + + + + + +
    名前値
    template使用するテンプレート名
    +
  • +
  • オプション + + + + + + + + + + + + + +
    名前値
    category表示するカテゴリーの名前
    limit表示するリンク数の制限(例えば、過去3年分へのリンクしか表示させたくないときなど)
    +
  • +
+
+ +

スキンタイプ

+

メインの目次、月別アーカイブ、月別アーカイブ一覧、検索、個別アイテム

+ +

例

+
+<%archiveyearlist(mytemplate)%>
+<%archiveyearlist(mytemplate,mycategory)%>
+
+ +
+ + + +
+ +

スキン変数:otherarchiveyearlist

+ +

+スキン変数otherarchivelistと同様に、指定されたブログのアーカイブのリストを挿入しますが、 月ごとの代わりに年ごとのアーカイブを挿入します。 + +

+ +

引数

+
+
    +
  • 必須: + + + + + + + + + + + + + +
    名前値
    blogname表示するブログの短縮名
    template使用するテンプレート名
    +
  • +
  • オプション + + + + + + + + + +
    名前値
    category表示するカテゴリーの名前
    +
  • +
+
+ +

スキンタイプ

+ +

+全て +

+ +

例

+ +
+<%otherarchiveyearlist(yourblog,mytemplate)%>
+<%otherarchiveyearlist(yourblog,mytemplate,mycategory)%>
+
+ +
+ + + +
+ +

スキン変数:categorylist

+ +

+選択中のブログのカテゴリーリストを、指定されたテンプレートを用いて挿入します。 +

+ +

引数

+
+
    +
  • 必須: + + + + + + + + + +
    名前値
    template使用するテンプレート名
    +
  • +
  • オプション + + + + + + + + + +
    名前値
    blogname表示するブログの短縮名
    +
  • +
+
+ +

スキンタイプ

+ +

+メインの目次、月別アーカイブ、月別アーカイブ一覧、検索、個別アイテム +

+ +

例

+ +
+<%categorylist(mytemplate)%>
+<%categorylist(mytemplate,myweblog)%>
+
+ +
+ + + +
+ +

スキン変数:category

+ +

+現在選択されているカテゴリーに関する情報を挿入します。カテゴリーが選択されていないときは何も挿入されません。 +

+ +

引数

+
+
    +
  • オプション + + + + + + + + + + + + + + + + + +
    名前挿入される設定
    nameカテゴリー名(デフォルト)
    descカテゴリーの説明L
    idカテゴリーのID
    +
  • +
+ +
+ +

スキンタイプ

+ +

+全て +

+ +

例

+ +
+<%category%>
+<%category(id)%>
+<%category(desc)%>
+<%category(name)%>
+
+ +
+ + + + + + + +
+ +

スキン変数:searchresults

+ +

+現在の検索文字列に対する検索結果を、指定されたテンプレートを使用して挿入します。 +

+ +

引数

+
+
    +
  • 必須: + + + + + + + + + +
    名前値
    template使用するテンプレート名
    +
  • +
  • オプション + + + + + + + + + +
    名前値
    maxresults表示する結果の最大数
    +
  • +
+
+ +

スキンタイプ

+ +

+検索 +

+ +

例

+ +
+<%searchresults(mytemplate)%>
+
+ +
+ + + + +
+ +

スキン変数:othersearchresults

+ +

+指定されたブログの、現在の検索文字列に対する検索結果を、指定されたテンプレートを使用して挿入します。 +

+ +

引数

+
+
    +
  • 必須: + + + + + + + + + + + + + +
    名前値
    blognameブログの短縮名
    template使用するテンプレート名
    +
  • +
  • オプション + + + + + + + + + +
    名前値
    maxresults表示する結果の最大数
    +
  • +
+ +
+ +

スキンタイプ

+ +

+検索 +

+ +

例

+ +
+<%othersearchresults(myblog,mytemplate)%>
+
+ +
+ + + + + + + +
+ +

スキン変数:query

+ +

+現在の検索文字列を挿入します。 +

+ +

引数

+

+なし +

+ +

スキンタイプ

+ +

+検索 +

+ +

例

+ +
+<%query%>
+
+ +
+ + + + + + + + +
+ +

スキン変数:version

+ +

現在使用しているNucleusのバージョンを挿入します。

+ +

引数

+ +

+なし +

+ +

スキンタイプ

+ +

+全て +

+ +

例

+ +
+<%version%>
+
+ +
+ + +
+ +

スキン変数:charset

+ +

グローバル設定の既定の言語で設定した言語に基づいたキャラクターセットのコードを挿入します。日本語版では、'UTF-8'か、'EUC-JP'の何れかになります

+ +

引数

+ +

+なし +

+ +

スキンタイプ

+ +

+全て +

+ +

例

+ +
+<meta http-equiv="Content-Type" content="text/html; charset=<%charset%>" />
+
+ +
+ + + + + +
+ +

スキン変数:previtem

+ +

+そのブログにおける一つ古いアイテムのIDを挿入します。 +

+ +

引数

+

なし

+ +

スキンタイプ

+ +

+個別アイテム +

+ +

例

+ +
+<%previtem%>
+
+ +
+ + + + + + +
+ +

スキン変数:nextitem

+ +

+そのブログにおける一つ新しいアイテムのIDを挿入します +。

+ +

引数

+

なし

+ +

スキンタイプ

+ +

+個別アイテム +

+ +

例

+ +
+<%nextitem%>
+
+ +
+ + +
+ +

スキン変数:nextitemtitle

+ +

+そのブログにおける一つ新しいアイテムのタイトルを挿入します。 +

+ +

引数

+

なし

+ +

スキンタイプ

+ +

+個別アイテム +

+ +

例

+ +
+<%nextitemtitle%>
+
+ +
+ + +
+ +

スキン変数:previtemtitle

+ +

+そのブログにおける一つ古いアイテムのタイトルを挿入します。 +

+ +

引数

+

なし

+ +

スキンタイプ

+ +

+個別アイテム +

+ +

例

+ +
+<%previtemtitle%>
+
+ +
+ + + + +
+ +

スキン変数:prevarchive

+ +

+表示中のアーカイブの形式に応じて、一つ古いアーカイブの月、または日を挿入します。 +

+ + + + + + + + + + + + + + +
表示中の形式挿入される日付のフォーマット
日単位で表示している時YYYY-MM-DD
月単位で表示している時YYYY-MM
+ +

引数

+

なし

+ +

スキンタイプ

+ +

+月別アーカイブ +

+ +

例

+ +
<a href="index.php?archive=<%prevarchive%>">....
+ +
+ + + + + + +
+ +

スキン変数:nextarchive

+ +

+表示中のアーカイブの形式に応じて、一つ新しいアーカイブの月、または日を挿入します。 +

+ + + + + + + + + + + + + + +
表示中の形式挿入される日付のフォーマット
日単位で表示している時YYYY-MM-DD
月単位で表示している時YYYY-MM
+ +

引数

+

なし

+ +

スキンタイプ

+ +

+月別アーカイブ +

+ +

例

+ +
<a href="index.php?archive=<%nextarchive%>">....
+ +
+ + +
+ +

スキン変数:archivetype

+ +

+日単位か月単位、どちらのアーカイブタイプが現在表示されているのか示す。 +

+ +

引数

+

なし

+ +

スキンタイプ

+ +

+月別アーカイブ +

+ +
+ + + + + +
+ +

スキン変数:todaylink

+ +

+選択中のブログ、あるいはカテゴリーのトップページのURLを挿入します。 +

+ +

引数

+
+ +
    +
  • オプション + + + + + + + + + +
    名前値
    linktext記述されていると、URLの代わりに<a href...タグによるリンクが挿入されます。
    +
  • +
+
+ + +

スキンタイプ

+ +

+全て +

+ +

例

+ +
+<%todaylink%>
+
+ +
+ + + + + + + +
+ +

スキン変数:archivelink

+ +

+選択中のブログ、あるいはカテゴリーのアーカイブへのリンクを挿入します。 +

+ +

引数

+ +
+ +
    +
  • オプション + + + + + + + + + +
    名前値
    linktext記述されていると、URLの代わりに<a href...タグによるリンクが挿入されます。
    +
  • +
+
+ + +

スキンタイプ

+ +

+全て +

+ +

例

+ +
+<%archivelink%>
+
+ +
+ + + + + + +
+ +

スキン変数:nextlink

+ +

+アイテムページでは一つ新しいアイテムへの、アーカイブページでは一つ新しいアーカイブへのURLを挿入します。「検索ページ」と「メインの目次ページ」でも使えます。「検索ページ」と「メインの目次ページ」で使用したときは、「次のページ」へのURLを挿入します。 +

+ +

引数

+
+
    +
  • オプション + + + + + + + + + + + + + +
    名前値
    linktext記述されていると、URLの代わりに<a href...タグによるリンクが挿入されます。
    amount「検索ページ」と「メインの目次ページ」で使用したときに、前または次のページに進んだときに表示されるアイテムの数
    +
  • +
+
+ + +

スキンタイプ

+ +

+個別アイテム、月別アーカイブ、検索、メインの目次 +

+ +

例

+ +
+<%nextlink%>
+
+ +
+ + + + + + + + +
+ +

スキン変数:prevlink

+ +

+アイテムページでは一つ古いアイテムへの、アーカイブページでは一つ古いアーカイブへのURLを挿入します。「検索」と「メインの目次」でも使えます。「検索ページ」と「メインの目次ページ」で使用したときは、「次のページ」へのURLを挿入します。 +

+ +

引数

+
+
    +
  • オプション + + + + + + + + + + + + + +
    名前値
    linktext記述されていると、URLの代わりに<a href...タグによるリンクが挿入されます。
    amount「検索ページ」と「メインの目次ページ」で使用したときに、前または次のページに進んだときに表示されるアイテムの数
    +
  • +
+
+ +

スキンタイプ

+ +

+個別アイテム、月別アーカイブ、検索、メインの目次 +

+ +

例

+ +
+<%prevlink%>
+
+ +
+ + + + + + + + +
+ +

スキン変数:errormessage

+ +

+エラーが発生したときにエラーメッセージを挿入します。 +

+ +

引数

+

なし

+ +

スキンタイプ

+ +

+エラー +

+ +

例

+ +
+<%errormessage%>
+
+ +
+ + + + + + + + + + + + +
+ +

スキン変数:image

+ +

+選択された画像を挿入します(画像ポップアップ用)。 +

+ +

引数

+ +
    +
  • オプション + + + + + + + + + + + + + + + + + + + + + + + + + +
    名前値
    imgtag(デフォルト)(x)htmlのimgタグ <img ... />
    url画像ファイルへのURL
    widthイメージの幅
    heightイメージの高さ
    caption画像の見出し(画像と共に表示されるテキスト)
    +
  • +
+ +

スキンタイプ

+ +

+画像ポップアップウィンドウ +

+ +

例

+ +
+<%image%>
+
+ +
+ + + + + + + + + +
+ +

スキン変数:sitevar

+ +

+「グローバル設定」でのサイトの設定を挿入します。 +

+ +

引数

+
    +
  • 必須: + + + + + + + + + + + + + + + + + +
    名前挿入される設定
    urlサイトのURL
    nameサイトの名前
    admin管理者のメールアドレス
    +
  • +
+ +

スキンタイプ

+ +

+全て +

+ +

例

+ +
+<%sitevar(name)%>
+<%sitevar(url)%>
+<a href="mailto:<%sitevar(email)%>">管理人</a>
+
+ +
+ + + + + + +
+ +

スキン変数:blogsetting

+ +

+選択中のブログの設定を挿入します。 +

+ +

引数

+
    +
  • 必須: + + + + + + + + + + + + + + + + + + + + + + + + + +
    名前挿入される設定
    idブログのID
    urlブログのURL
    nameブログの名前
    descブログの説明
    shortブログの短縮名
    +
  • +
+ +

スキンタイプ

+ +

+メインの目次、月別アーカイブ、月別アーカイブ一覧、検索、個別アイテム、メンバー詳細 +

+ +

例

+ +
+<%blogsetting(name)%>
+<%blogsetting(id)%>
+<%blogsetting(desc)%>
+<a href="<%blogsetting(url)%>">...</a>
+
+ +
+ + + + + + +
+ +

スキン変数:member

+ +

+訪問者がログイン中のメンバーの場合、そのメンバーに関する情報を挿入します。メンバーの詳細ページにおいては、指定されたメンバーについての同じ情報を表示する追加オプションがあります。 +

+ +

訪問者がログイン中のメンバーではない場合は、your...のパラメーターは何も挿入しません。

+ +

引数

+
    +
  • 必須: +
      +
    • ログインしたメンバーの情報(全てのスキンタイプで使用可能): + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      名前挿入される設定
      yourname訪問メンバーの表示される名前(ログインID)
      yourrealname訪問メンバーのハンドルネーム(本名)
      yournotes訪問メンバーが自身のために設定できるその他の情報(備考欄)
      yoururl訪問メンバーのウェブサイトURL
      youremail訪問メンバーのメールアドレス
      yourid訪問メンバーのID
      +
    • +
    • 指定されたメンバーの情報(「メンバーの詳細ページ」でのみ使用可能): + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      名前挿入される設定
      name指定されたメンバーの表示される名前(ログインID)
      realname指定されたメンバーのハンドルネーム(本名)
      notes指定されたメンバーが自身のために設定できるその他の情報(備考欄)
      url指定されたメンバーのウェブサイトURL
      email指定されたメンバーのメールアドレス
      id指定されたメンバーのID
      +
    • +
    +
  • +
+ +

スキンタイプ

+ +

+全て +

+ +

例

+ +

+<%if(loggedin)%>
+こんにちは<%member(yourrealname)%>さん
+<%endif%>
+
+ +
+ + + + + + +
+ +

スキン変数:preview

+ +

+指定されたテンプレートを用いて、ページ内にアイテムのプレビューを挿入します。(additemformと一緒に使われることが多いようです) +

+ +

引数

+
    +
  • 必須: + + + + + + + + + +
    名前値
    template使用するテンプレート名
    +
  • +
+ +

スキンタイプ

+ +

+メインの目次 +

+ +

例

+ +
+<%preview(mytemplate)%>
+
+ +
+ + + + +
+ +

スキン変数:adminurl

+ +

管理領域のURLを挿入します。

+ +

引数

+

なし

+ +

スキンタイプ

+ +

+全て +

+ +

例

+ +
+<a href="<%adminurl%>">管理領域</a>
+
+ +
+ + + + +
+ +

スキン変数:additemform

+ +

+現在選択しているブログへのアイテムの追加フォームを挿入します。多くの場合、previewと共に使用されます。 +

+ +

引数

+

なし

+ +

スキンタイプ

+ +

+メインの目次 +

+ +

例

+ +
+<%additemform%>
+
+ +
+ + + + + + +
+ +

スキン/テンプレート変数:include

+ +

+Webページ出力時に、指定されたテキストファイルを取り込んで挿入します。ファイルの中身がそのまま出力されるので、スキン/テンプレート変数やPHPコードを使っても反映されません。同じような変数に、取り込み時にスキン/テンプレート変数を展開するparsedincludeや、PHPコードを実行するphpincludeがあります。 +

+ +

引数

+
    +
  • 必須: + + + + + + + + + +
    名前値
    filename取り込むファイルの名前(index.phpからの相対位置でも絶対位置でもかまいません。URLを指定することもできます)
    +
  • +
+ +

注意

+ + +

スキンタイプ

+ +

+全て +

+ +

例

+ +
+<%include(filename.txt)%>
+<%include(/home/user/myself/filename.txt)%>
+<%include(http://example.jp/filename.html)%>
+
+ +
+ + + + + + + +
+ +

スキン/テンプレート変数:phpinclude

+ +

+Webページ出力時に、指定されたPHPファイルを実行し、その結果を挿入します。ファイルの中身はPHPとして解釈され、実行されるので注意が必要です。また、Nucleusのスキン/テンプレート変数は展開されません。同じような変数に、取り込み時にスキン/テンプレート変数を展開するparsedincludeや、ファイルの中身をそのまま表示するincludeがあります。 +

+ +

引数

+
    +
  • 必須: + + + + + + + + + +
    名前値
    filename取り込むファイルの名前(index.phpからの相対位置でも絶対位置でもかまいません。)
    +
  • +
+ +

注意

+
    +
  • この変数はパーサー設定のIncludeMode とIncludePrefixに影響を受けます。
  • +
  • ファイルはphpのコマンドinclude()を使ってインクルードされます。このコマンドは内部のクラス・メソッドから呼び出されるので、Nucleus内部やプラグインで使用されているグローバル変数にアクセスしたい時は、自身でグローバル変数を宣言する必要があります。多くの標準的な変数はNucleusによって自動的にグローバルが宣言されます。
  • +
+ +

スキンタイプ

+ +

+全て +

+ +

例

+ +
<%phpinclude(filename.php)%>
+<%phpinclude(/home/user/myself/filename.php)%>
+ +
+ + + +
+ +

スキン/テンプレート変数:phpinclude:vars

+ +

+次のグローバル変数は、スキン/テンプレート変数のphpincludeによってインクルードされたファイルからアクセスできるものです: +

+ +

+$GATEWAY_INTERFACE, $SERVER_NAME, $SERVER_SOFTWARE +
$SERVER_PROTOCOL, $REQUEST_METHOD, $QUERY_STRING +
$DOCUMENT_ROOT, $HTTP_ACCEPT, $HTTP_ACCEPT_CHARSET +
$HTTP_ACCEPT_ENCODING, $HTTP_ACCEPT_LANGUAGE +
$HTTP_CONNECTION, $HTTP_HOST, $HTTP_REFERER +
$HTTP_USER_AGENT, $REMOTE_ADDR, $REMOTE_PORT +
$SCRIPT_FILENAME, $SERVER_ADMIN, $SERVER_PORT +
$SERVER_SIGNATURE, $PATH_TRANSLATED, $SCRIPT_NAME +
$REQUEST_URI, $argv, $argc, $PHP_SELF +
$HTTP_COOKIE_VARS, $HTTP_GET_VARS, $HTTP_POST_VARS +
$HTTP_POST_FILES, $HTTP_ENV_VARS, $HTTP_SERVER_VARS +
$HTTP_SESSION_VARS, $PATH_INFO, $HTTPS +
$HTTP_RAW_POST_DATA, $HTTP_X_FORWARDED_FOR +

+ +

+他の変数に関しては、'global $varname;'をきっちりとコードに加える必要があります。 +

+ +
+ + + +
+ +

スキン/テンプレート変数:parsedinclude

+ +

+Webページ出力時に、指定されたスペシャルスキンもしくはファイルを取り込んで挿入します。スペシャルスキンが優先されます。このファイルのは、取り込み時にNucleusのスキン/テンプレートによる構文解析にかけられるので、スキン/テンプレート変数が使用できます。同じような変数に、取り込んだファイルのPHPを実行するphpincludeや、ファイルの中身をそのまま表示するincludeがあります。 +

+ +

引数

+
    +
  • 必須: + + + + + + + + + +
    名前値
    filename取り込むスペシャルスキンもしくはファイルの名前(index.phpからの相対位置でも絶対位置でもかまいません。URLを指定することもできます)
    +
  • +
+ + +

注意

+
    +
  • この変数はパーサー設定のIncludeMode とIncludePrefixに影響を受けます。
  • +
  • インクルードしたパーツの中からでも、再び<%parsedinclude (filename)%>を呼び出すことができますが、無限ループを避けるために最大で3段階までとなります。
  • +
+ + +

スキンタイプ

+ +

+全て +

+ +

例

+ +
+<%parsedinclude(specialskinname)%>
+<%parsedinclude(filename.txt)%>
+<%parsedinclude(/home/user/myself/filename.txt)%>
+
+ +
+ + + + + + +
+ +

スキン/テンプレート変数:plugin

+ +

+プラグインを呼び出します。 +

+ +

引数

+
    +
  • 必須: + + + + + + + + + +
    名前値
    PluginName呼び出されるプラグインの名前。大文字小文字が区別されるので注意が必要です。
    +
  • +
  • この他、プラグインごとに引数が定義・追加されます。

  • +
+ +

注意

+
    +
  • プラグイン名が既存の変数とぶつからない場合、<%PluginName (parameters)%>と記述することで、プラグインを直接呼び出すこともできます。現在はそのようにプラグイン名で呼び出す方法が主流ですが、プラグイン呼び出しであることをあえて明示したい場合は<%plugin(parameters)%>のほうを利用するといいでしょう。
  • +
+ +

スキンタイプ

+ +

+全て +

+ +

例

+ +
+<%plugin(Calendar)%>
+<%plugin(LastComments,myweblog)%>
+<%LastComments(myweblog)%>
+
+ +
+ + + + +
+ +

スキン変数:loginform

+ +

ログインフォームまたは、ログイン中メッセージ("ログイン中:ketsunet (ログアウト)")を挿入します

+ +

引数

+

+ なし +

+ +

スキンタイプ

+ +

全て

+ +

例

+ +
<%loginform%>
+ +
+ + + + +
+ +

スキン変数:commentform

+ +

+アイテムページにコメントフォームを挿入します。 +

+ +

引数

+
+
    +
  • オプション: + + + + + + + + + +
    名前値
    destinationurlコメント追加後にリダイレクトさせるURL(デフォルトでは、投稿したアイテムの「個別アイテムページ」にリダイレクトされます)
    +
  • +
+ +
+ + +

スキンタイプ

+ +

+個別アイテム +

+ +

例

+ +
+<%commentform%>
+<%commentform(http://example.jp/thanks.html)%>
+
+ +
+ + + +
+ +

スキン/テンプレート変数 set

+ +

+パーサーのプロパティを設定します。 +

+ +

引数

+
+
    +
  • 必須: + + + + + + + + + + + + + +
    名前値
    propertyプロパティの名前
    valueプロパティの値
    +
  • +
+ +
+ +

スキンタイプ

+ +

+全て +

+ +

例

+ +
+<%set(IncludeMode,skindir)%>
+<%set(IncludePrefix,somedir/)%>
+
+ +
+ + +
+ +

スキン/テンプレート変数:skinfile

+ +

表示に使用中のスキンのあるディレクトリにリンクを張る時に使用します。パーサーのプロパティIncludePrefixと共に使用することで、最良の結果を得ることができます。

+ +

引数

+
+
    +
  • 必須: + + + + + + + + + +
    名前値
    filenameファイルの名前(「http://~」から始まるURLに変換されます)
    +
  • +
+
+ +

スキンタイプ

+ +

+全て +

+ +

例

+ +
+<%skinfile(mystyle.css)%>
+
+ +
+ + + +
+ +

スキン/テンプレート変数:skinname

+ +

現在使用しているスキンの名前を挿入します。

+ +

引数

+

+なし +

+ +

スキンタイプ

+ +

+全て +

+ +

例

+ +
+<%skinname%>
+
+ +
+ + + +
+ + + + + + +

スキン変数:if/ifnot/else/elseif/elseifnot/endif

+ +

決まった条件を満たしているときにのみ、コンテンツ・ブロックを挿入。

+ +

引数

+

スキン変数if/ifnot/elseif/elseifnotに対してのみ、引数が必須になります

+ + +
    +
  • 必須: + + + + + + + + + + + + + + + + + + + + + + +
    名前値
    type条件の種類
    typeによって、以下のオプションをとることがあります
    name条件の名前
    value条件の名前の値
    +
  • +
+ +

条件の種類

+ +
    +
  • category:カテゴリーを選択しているとき、条件は満たされる +
      +
    • category:カテゴリが選択されているか調べる
    • +
    • category,catname,CategoryName :現在のカテゴリが CategoryName と一致するか調べる
    • +
    • category,catid,CategoryID:現在のカテゴリのIDが CategoryId と一致するか調べる
    • +
    +
  • +
  • blogsetting:Blog設定の name項目の値がvalueと一致しているか調べる(nameはSQLテーブル nucleus_blogにあるカラム名)
  • +
  • loggedin:訪問中のメンバーが現在ログインしていれば、条件は満たされる
  • +
  • onteam:訪問中のメンバーがログインしており、かつ現在いるブログ(あるいはnameパラメーターで指示されたブログ)のチームに入っていれば、条件は満たされる
  • +
  • admin:訪問中のメンバーがログインしており、かつ現在いるブログ(あるいはnameパラメーターで指示されたブログ)の管理権限があれば、条件は満たされる
  • +
  • archiveprevexists:もし現在のブログに現在表示しているものより新しい月、または日のアーカイブがあれば真
  • +
  • archivenextexists:もし現在のブログに現在表示しているものより古い月、または日のアーカイブがあれば真
  • +
  • previtem:もし現在のブログにより新しいアイテムがあるのなら真となる(個別アイテムページでのみ使用可能)
  • +
  • nextitem:もし現在のブログにより古いアイテムがあるのなら真となる(個別アイテムページでのみ使用可能)
  • +
  • skintype:現在のスキンタイプが value(index, search, item, archive, archivelist, ...)と一致するか調べる(URLによって判別)
  • +
  • hasplugin:プラグインがインストールされているか、またはプラグインのオプションが特定の値をとっているか調べる +
      +
    • hasplugin,PluginName:該当プラグインが存在すれば、条件は満たされる
    • +
    • hasplugin,PluginName, OptionName:プラグインのオプションが「いいえ」に設定されてなければ、条件は満たされる
    • +
    • hasplugin,PluginName, OptionName=value:プラグインのオプションが特定の値に設定されていれば、条件は満たされる
    • +
    +
  • +
  • if拡張対応プラグイン名:第1引数には、'NP_'を取ったプラグイン名を指定します。第1引数で指定したプラグインに、第2引数、第3引数を渡した結果が真なら真 +
      +
    • プラグイン名,属性名: 使用法 プラグイン名 プラグインが 属性名 をチェックします
    • +
    • プラグイン名,属性名,属性値: 使用法 プラグイン名 プラグインが 属性名 の値が 属性値 かどうかチェックします
    • +
    +
  • +
+ +

スキンタイプ

+ +

+全て +

+ +

例

+ +
+<%if(loggedin)%>
+おかえりなさい!
+<%else%>
+ようこそ!
+<%endif%>
+
+ +
+<%if(category,catname,Off Topic)%>
+'Off Topic' カテゴリへようこそ。
+<%endif%>
+
+ +
+<%ifnot(loggedin)%>
+アクセス禁止!
+<%elseif(admin)%>
+管理者さんようこそ!
+<%elseif(onteam)%>
+チームメンバーさんようこそ!
+<%else%>
+サイトメンバーさんようこそ!
+<%endif%>
+
+ +

注意

+ +

条件が満たされない時にだけ何らかの表示を行いたい場合は、次のようにすることができます:

+ +
+<%ifnot(skintype,error)%>
+<%blogsetting(name)%>
+<%endif%>
+
+ +
+ + + + + + +
+ +

スキン変数:membermailform

+ +

+メンバー詳細のページで、表示されているメンバーに対して、他のログインしているメンバーがメッセージを送ることのできるフォームを挿入します。 +

+ +

引数

+ +
+
    +
  • オプション: + + + + + + + + + + + + + + + + + +
    名前値
    rowsボックスの横列の数値(デフォルトは10)
    colsボックスの縦列の数値(デフォルトは40)
    destination urlメッセージを送信した後リダイレクトされるURL
    +
  • +
+ +
+ + +

スキンタイプ

+ +

+メンバー詳細 +

+ +

例

+ +
+<%membermailform%>
+
+ +
+ + + + + + +
+ +

スキン変数:searchform

+ +

+現在のブログに対する検索フォームを挿入します。 +

+ +

引数

+
+
    +
  • オプション: + + + + + + + + + +
    名前値
    blogname検索を実行するブログの短縮名(ブログの短縮名を指定していても、常に検索対象に含めるの設定が「はい」のブログは検索対象になります)
    +
  • +
+
+ +

スキンタイプ

+ +

+メインの目次、月別アーカイブ、月別アーカイブ一覧、個別アイテム +

+ +

例

+ +
+<%searchform%>
+<%searchform(otherweblog)%>
+
+ +
+ + + + + + +
+ +

スキン変数:nucleusbutton

+ +

本家Nucleusウェブサイト(英語)へのリンクが付いたボタン、あるいはバナーを挿入します。

+ +

引数

+
+
    +
  • オプション: + + + + + + + + + + + + + + + + + +
    名前値
    imgurl画像のURL(デフォルトのものを使わない場合)
    imgwidth画像の横幅(ピクセル単位)
    imgheight画像の高さ(ピクセル単位)
    +
  • +
+
+ +

注意

+ + +

スキンタイプ

+ +

+全て +

+ +

例

+ +
+<%nucleusbutton%>
+<%nucleusbutton(nucleus/nucleus.gif,46,43)%>
+
+ +
+ + + + +
+ +

スキン変数:self

+ +

+現在表示しているページのファイル名を挿入します(index.php等で記述した「$CONF['Self']」の値です)。 +

+ +

引数

+

なし

+ +

スキンタイプ

+ +

+全て +

+ +

例

+ +
+<%self%>
+
+ +
+ + +
+ +

スキン変数:addlink

+ +

+表示中のブログにアイテムを追加するためのブックマークレットのURLを出力します +

+ +

引数

+

なし

+ +

スキンタイプ

+ +

+全て +

+ +

例

+ +
+<dd><a href="<%addlink%>" onclick="<%addpopupcode%>" title="ブログにアイテムを追加する">アイテムを投稿する</a></dd>
+
+ +
+ +
+ +

スキン変数:addpopupcode

+ +

+アイテムを追加するブックマークレットをポップアップさせるためのJavascriptコードを出力します +

+ +

引数

+

なし

+ +

スキンタイプ

+ +

+全て +

+ +

例

+ +
+<dd><a href="<%addlink%>" onclick="<%addpopupcode%>" title="ブログにアイテムを追加する">アイテムを投稿する</a></dd>
+
+ +
+ + +
+ +

スキン変数:sticky

+ +

+スキンにアイテムを表示します +

+ +

引数

+ + +

スキンタイプ

+ +

+全て +

+ +

例

+ +
+<%sticky(11,default/index)%>
+
+ +
+ + + +
+ +

テンプレート変数:概略

+ +

どういったものなのか?

+ +

テンプレート変数はスキン変数と同じ方法で広く働きますが、テンプレート内部で利用できる点でスキン変数と区別されます。変数は <%変数名%>という形で呼び出され、変数の機能によってはテキストを挿入します。また、その他のオプションパラメーターを持つ変数もあります。

+ +

利用可能な変数

+ +

+テンプレート変数は、「アイテムのヘッダー」、「アイテムの本体」、「アイテムのフッター」、「日付ヘッダー」、「日付フッター」、「続きへのリンク」、「アイテムリンクの編集」といった、テンプレート・パーツの中で使用できます。(変数image、 popup、media、 pluginはブログアイテムの中でも使用できます。) +

+ + + +

コメント関連のテンプレート・パーツ(「コメントのヘッダー」、「コメントの本体」、「コメントのフッター」、「コメントが1 つの時」、「コメントが2つ以上の時」、「コメントの続きを読む」、「コメントが無い時」、「長すぎるコメントの時」)では、利用可能な変数のセットが異なります:

+ + + + +
+ + + +
+ +

テンプレート変数:基本の変数

+ +

これらの変数はすべて、そのときパースされているアイテムに関わる値になります。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
名前説明
titleアイテムのタイトル
body「本文」のテキスト
more「続き」のテキスト
categoryアイテムが所属しているカテゴリーの名前
categorylinkアイテムが所属しているカテゴリーのURL
karmaカルマ投票の得点
authorlink投稿者の「メンバーの詳細ページ」のURL
itemlinkアイテムのURL(permanent)
author投稿者の「表示される名前」
smartbody本文か続きのどちらか
morelink「続き」部分のURL
dateフォーマット済みの日付
timeフォーマット済みの時刻
daylinkアイテムが投稿された日付のアーカイブのURL
commentsコメント・ブロック、もしくはコメント数
itemidアイテムのID
blogurlブログのURL
+ +

テンプレート変数の概略...

+ + +
+ + + +
+ +

テンプレート変数:上級の変数

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
名前説明
authorid現在のアイテムの投稿者のID
blogidアイテムが所属するブログのID
catidアイテムが所属するカテゴリーのID
query存在していれば、検索文字列
syndicate_titleRSSなどの配信用に、指定文字数以上を省略したアイテムのタイトル
syndicate_descriptionRSSなどの配信用に、指定文字数以上を省略した「本文」テキスト
karmaposlink投票用のURL
karmaneglink投票用のURL
new前回訪問時意向に追加されたアイテムを示すテキストなど
include指定されたファイルの内容をそのまま挿入
parsedinclude指定されたファイル内のスキン/テンプレート変数を展開して、その結果を挿入
phpinclude指定されたファイルをPHPとして実行した結果を挿入
pluginプラグインを実行
editテンプレート「アイテムを編集するためのリンク」の内容を挿入
editlinkアイテム編集画面(bookmarklet)のURL
editpopupcodeeditlink用のウィンドウをポップアップするjavascriptコード
skinfileインポートされたスキンに属しているファイルへの正確なURLを挿入
setパーサーのプロパティを設定
imageメディア・ライブラリの画像をインライン表示
popupメディア・ディレクトリの画像をポップアップ
mediaメディア・ディレクトリの他のメディア・オブジェクト
relevance検索結果を表示するテンプレートに「検索関連度」を挿入する(2.5より)
+ +

テンプレート変数の概略...

+ +
+ + + + +
+ +

テンプレート変数:コメント関連(前半)

+テンプレート変数:コメント関連(後半) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
名前説明
bodyコメントの本体
userコメント者の名前
useridコメント者のWebサイトのURL、もしくはコメント者のメールアドレス(入力されたままのものが挿入されます)
emailコメント者のメールアドレス(スパム対策として、"@"は"(at)"に、".(ピリオド)"は"(dot)"に変換されます)
userlinkコメント者がログイン中の登録メンバーの時はメンバー詳細ページに、それ以外の時は入力されたWebサイトのURL、もしくはメールアドレスに対する<a href="...">タグ付きのリンク(有効なURLかメールアドレスが入力されていない場合は、コメント者の名前のみが表示されます)
userlinkrawuserlinkと同じ。ただし、aタグの付いたリンクではなくURL、もしくはmailto:メールアドレスのみの表記。(入力されたURLやメールアドレスがいずれも文法的に有効でない場合は空になります)
useremailユーザーのメールアドレス。もしコメント者によって入力されていない場合は空
userwebsiteユーザーのwebsiteのURL。もしコメント者によって入力されていない場合は空
userwebsitelinkコメント者が登録メンバーの時はメンバー詳細ページに、それ以外の時は入力されたWebサイトのURLに対する<a href="...">タグ付きのリンク(有効なURLが入力されていない場合は、コメント者の名前のみが表示されます)
memberidメンバーのID(コメント者がログイン中の登録メンバーでない時は0になります)
commentcount該当アイテムに付けられたコメントの総数
commentwordアイテムに付けられたコメントの件数の数え方の表記
+テンプレート変数:コメント関連(後半) +

テンプレート変数の概略...

+
+
+ +

テンプレート変数:コメント関連(後半)

+テンプレート変数:コメント関連(前半) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
dateコメントが追加された時の日付
timeコメントが追加された時の時刻
hostコメントが投稿されたホスト名
ipコメントが投稿されたIPアドレス
commentid現在のコメントのID
itemid現在のアイテムのID
itemlinkアイテムの詳細ページへのリンク
itemtitle現在のアイテムのタイトル
blogidブログのID
blogurlブログのURL
authtextコメント者がログイン中の登録メンバーの時は「登録メンバーからのコメントへの追加表示」テンプレートで設定した内容、それ以外は空
short最初の改行部分から先が省略されたコメントの本体。テンプレートによっては末尾にリンクが追加されます。
excerptコメントの本体。60文字でカットし'...'を追加
timestampコメントが追加された時のタイムスタンプ
include指定されたファイルの内容をそのまま挿入
parsedinclude指定されたファイル内のスキン/テンプレート変数を展開して、その結果を挿入
phpinclude指定されたファイルをPHPとして実行した結果を挿入
pluginプラグインを実行
skinfileインポートされたスキンに属しているファイルへの正確なURLを挿入
setパーサーのプロパティを設定
+テンプレート変数:コメント関連(前半) + + + +

テンプレート変数の概略...

+ +
+ + + +
+ +

テンプレート変数:karma

+ +

カルマ投票のデータを挿入します。カルマ投票は、アイテムの'カルマ'を投票する方法で、正にでも負にでも投票できます。これら投票の総計によって、該当記事が訪問者にどのように思われているのか知ることができます。

+ +

引数

+ +
    +
  • オプション: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    名前挿入される情報の種類
    totalscoreカルマ投票の総合得点(正の投票数から負の投票数を引いたもの/デフォルト)
    pos正の投票の総計
    neg負の投票の総計
    votes投票数の総計
    posp正に投じられたパーセンテージ
    negp負に投じられたパーセンテージ
    +
  • +
+ + +

例

+
<%karma(posp)%>がよい記事だと評価しました(総計<%votes%>票)
+ + +
+ + + +
+ +

テンプレート変数:templateitemtitle

+ +

コメント関連テンプレート変数で、元記事のタイトルを挿入します。

+ +

引数

+ +
    +
  • オプション: + + + + + + + + + +
    名前値
    maxlengthmaxlengthで指定された数値で、アイテムのタイトル省略。
    +
  • +
+ +
+ + + + + + +
+ +

テンプレート変数:author

+ +

投稿者のデータを挿入します。

+ +

引数

+
    +
  • オプション: + + + + + + + + + + + + + + + + + + + + + + + + + +
    名前挿入される情報の種類
    name投稿者の「表示される名前」(ログインID)
    realname投稿者のハンドルネーム(本名)
    id投稿者のメンバーID
    url投稿者のウェブサイトのURL
    email投稿者の登録メールアドレス(使うのは避けるべき)
    +
  • +
+ +

例

+ +
<%author%>
+<%author(realname)%>
+<a href="<%author(url)%>"><%author%></a>
+ +
+ + + + +
+ +

テンプレート変数:smartbody

+ +

+現在のアイテムを調べてから、「本文」と「続き」のどちらを表示するか決定します。 +

+ +

「続き」に何かが入力されていれば「続き」が、何も入力されていなければ「本文」が挿入されます。

+ + + + + + + + + +
部分名何か入力されている?
本文入力あり入力あり
続き入力なし入力あり
smartbodyで挿入される部分「本文」部分「続き」部分
+ +

使用例

+ +

「本文」に詳しい内容を入力し、「続き」には"紹介"、"抜粋"といった内容のものを入力し、「メインの目次ページ」で使用するテンプレートには<%smartbody%>を使い、抜粋が存在するときにはそれを、無い時は「本文」を使用するような使い方をします

+

この時、「個別アイテムページ」で使うテンプレートには、 <%body%> + <%more%>のかわりに<%body% >だけを記述するようにすると、より効果的に使えるでしょう

+ + + + + +
+ + +
+ +

テンプレート変数:morelink

+ +

+テンプレート続きへのリンクで定義されているリンクを挿入します。「続き」に何も入力されていない時は無視されます。 +

+ +

テンプレート部品'続きへのリンク'の中身もまたパースされるので、同様にテンプレート変数を含むことができることに注意してください(例:続きへのリンクに<%morelink%>を記述することは可能ですが、無限ループを起こします)。

+

引数

+

なし

+
+ + +
+ +

テンプレート変数:date

+ +

+日付フォーマットで設定した書式で日付を挿入します。オプションの引数にstrftime変数を使用して、フォーマットを変更することもできます。 +

+ +

引数

+
    +
  • オプション: + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    名前値
    format日付のフォーマットに用いる形式
    下記の4つの特別なパラメーターが利用可能です
    rfc822LocaleにあわせたRFC822フォーマットの日付
    rfc822GMTGMTにあわせたRFCフォーマットの日付
    iso8601ISO-8601フォーマットの日付(W3Cの時刻と日付フォーマット(新しいウィンドウが開きます)に概略があります)。例:2008-09-05T10:00:00-05:00
    utciso8601と同じ。ただし、タイムゾーンの表示として"Z"を使うUTCで表現される。
    +
  • +
+ +

例

+
+<%date%>
+<%date(%x)%>
+<%date(rfc822)%>
+<%date(rfc822GMT)%>
+
+ + +
+ +
+ +

テンプレート変数:time

+ +

+時刻フォーマットで設定した書式で時刻を挿入します。オプションの引数にstrftime変数を使用して、フォーマットを変更することもできます。 +

+ +

引数

+
    +
  • オプション: + + + + + + + + + +
    名前値
    format時刻のフォーマットに用いる形式
    +
  • +
+ +

例

+
+<%time%>
+<%time(%X)%>
+
+ +
+ + +
+ +

テンプレート変数:comments

+ +

+コメントブロックを挿入します。このブロックの詳しい説明。 +

+ +

引数

+
    +
  • オプション: + + + + + + + + + +
    名前値
    MaxToShow表示するコメントの数(設定されていれば、Blog設定にあるコメントの最大量を上書きします)
    +
  • +
+ +

例

+ +
+<%comments%>
+<%comments(5)%>
+
+ +
+ + +
+ +

テンプレート変数:syndicate_title

+ +

+HTMLタグを取り除き、指定された長さにまで縮めたアイテムのタイトルを挿入します(指定が無い時は100)。省略された場合、末尾に"..."が追加されます。 +

+ +

+この変数はRSS等のために使うことが意図されていましたが、他にも便利な使い方があるでしょう。 +

+ +

引数

+
    +
  • オプション: + + + + + + + + + +
    名前値
    MaxChars省略せずに残す最大の幅(デフォルトは100)
    +
  • +
+ +

例

+ +
+<%syndicate_title%>
+<%syndicate_title(25)%>
+
+ +
+ +
+ +

テンプレート変数:syndicate_description

+ +

+HTMLタグを取り除き、指定された幅にまで縮めたアイテムの本文を挿入します(指定が無い時は250)。テキストが縮められた場合は、末尾に"..."が追加される。 +

+ +

+この変数はRSSのために使うことが意図されていましたが、他にも便利な使い方があるでしょう。 +

+ +

引数

+
    +
  • オプション: + + + + + + + + + +
    名前値
    MaxChars省略せずに残す最大の幅(デフォルトは250)
    +
  • +
+ +

例

+ +
+<%syndicate_description%>
+<%syndicate_description(25)%>
+
+ +
+ + +
+ +

テンプレート変数:image

+ +

アイテム本体やテンプレートにインライン画像を挿入します。

+ +

通常テンプレート変数<%image%>はアイテムに画像を挿入するときに自動的に生成されますが、テンプレート内部で直接呼び出すこともできます。その場合は、メディア・ディレクトリにある、現在のアイテムの投稿者のプライベート・コレクションから画像が持って来られるので注意が必要です。

+ +

引数

+
    +
  • 必須: + + + + + + + + + + + + + + + + + + + + + +
    名前値
    filename画像ファイルの名前
    width画像の横幅(ピクセルかパーセンテージ)
    height画像の高さ(ピクセルかパーセンテージ)
    text画像の代用テキスト
    +
  • +
  • 注意:画像、ポップアップ、メディアタグでは、引数はコンマではなく '|'で区切られなければなりません。
  • +
+ +

例

+ +
+<%image(myphoto.jpg|100|200|これが私です)%>
+<%image(myphoto.jpg|50%|50%|縮小していますが、これが私です)%>
+
+ +
+ + + +
+ +

テンプレート変数:popup

+ +

アイテム本体やテンプレートにポップアップ画像を挿入します。

+ +

通常テンプレート変数<%popup%>はアイテムに画像を挿入するときに自動的に生成されますが、テンプレート内部で直接呼び出すこともできます。その場合は、メディア・ディレクトリにある、現在のアイテムの投稿者のプライベート・コレクションから画像が持って来られるので注意が必要です。

+ +

引数

+
    +
  • 必須: + + + + + + + + + + + + + + + + + + + + + +
    名前値
    filename画像ファイルの名前
    width画像の横幅(ピクセルかパーセンテージ)
    height画像の高さ(ピクセルかパーセンテージ)
    text画像の代用テキスト
    +
  • +
  • 注意:画像、ポップアップ、メディアタグでは、引数はコンマではなく '|'で区切られなければなりません。
  • +
+ +

例

+ +
+<%popup(myphoto.jpg|100|200|これが私です)%>
+<%popup(myphoto.jpg|50%|50%|縮小していますが、これが私です)%>
+
+ +
+ + + +
+ +

テンプレート変数:media

+ +

アイテム本体やテンプレートにメディアオブジェクトを挿入します。

+ +

通常テンプレート変数<%media%>はアイテムにメディアファイルを挿入するときに自動的に生成されますが、テンプレート内部で直接呼び出すこともできます。その場合は、メディア・ディレクトリにある、現在のアイテムの投稿者のプライベート・コレクションから画像が持って来られるので注意が必要です。

+ +

引数

+
    +
  • 必須: + + + + + + + + + + + + + +
    名前値
    filenameオブジェクトファイルの名前
    textオブジェクトの説明テキスト
    +
  • +
  • 注意:画像、ポップアップ、メディアタグでは、引数はコンマではなく '|'で区切られなければなりません。
  • +
+ +

例

+ +
<%media(mysong.mp3|新曲を聞いてみてください)%>
+ +
+ + +
+ +

テンプレート変数:edit

+ +

+テンプレート:アイテムを編集するためのリンクの内容を挿入します。 +

+ +

注意:ログイン状態のメンバーが、閲覧中のアイテムの編集を許可されている時のみ、この変数が働きます。それ以外の場合は、テンプレート変数<%edit%>は何も表示しません。

+ +

例

+

「アイテムの本体」テンプレートの一例

+
<h1><%title%></h1>
+<p><%body%> <%morelink%></p>
+<div class="metadata">
+    <%edit%> <%comments%>
+</div>
+ +

結果は次のようになります

+ +
+タイトル +

アイテムの本文

+ +
+ +
+ + +
+ +

テンプレート変数:editlink

+ +

+アイテムを編集するためのbookmarkletのURLを挿入します。この変数はテンプレート:アイテムを編集するためのリンク内で使用することができます。 +

+ +

例

+ +

「アイテムを編集するためのリンク」テンプレートの一例

+
+<a href="<%editlink%>"
+    onclick="<%editpopupcode%>">編集</a> -
+
+ +
+ + +
+ +

テンプレート変数:editpopupcode

+ +

+'アイテムの編集'ウィンドウをポップアップで開くためのjavascriptのコードを挿入します。 +

+ +

例

+ +

「アイテムを編集するためのリンク」テンプレートの一例

+
+<a href="<%editlink%>" onclick="<%editpopupcode%>">編集</a> -
+
+ +
+ + + +
+ +

プラグイン

+

+Nucleusでは機能を追加するために、プラグインをインストールすることができます。プラグインは次のリストの様に働き、Nucleus本体だけでは実現できな様々な機能を提供してくれるでしょう。 +

+
    +
  1. スキン変数のように振舞う
  2. +
  3. テンプレート変数のように振舞う
  4. +
  5. Nucleusによって生成されたイベントのフック。「プラグインの管理」画面での「↑ ひとつ上へ」と「↓ ひとつ下へ」リンクは、イベント発生時にプラグインを呼び出す順番を決定するために用いられます。最初のプラグインは最初に呼び出され、最後のプラグインは最後に呼び出されます。
  6. +
  7. action.phpを通して呼び出されたときにアクタのように振舞う
  8. +
+

+プラグインに対する責任は、完全にプラグインの作者にあることをお忘れなく。プラグイン作者は、プラグインが問題なく動くように作らなければなりません。 +

+ +

+NucleusCMSのプラグインの主だったものは、以下の二つのページから見つけ出すことが出来ます。 +

+ +

+どちらのページも全てのプラグインを網羅しているわけではありませんが、これらのページのどちらかであなたが必要としているプラグインを見つけることが出来るでしょう。 +インターネット上には無料の翻訳サービスがあるので、「読めない」と恐れることはありません。 +

+あなたがプラグインを開発したり、機能を検索するその他のリソースとして、本家フォーラムやNucleus日本語フォーラムがあります。 +これらのフォーラムの中でも、プラグインリストに掲載されていない小さなプラグインを見つけることが出来るでしょう。 +

+

+
+ +
+ + + +

パーサーのプロパティ

+ +

利用可能なパーサーオプションを以下に記述します。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
パーサーのプロパティ
オプション名値
Includeモードnormal通常の動作。ページを作成する「.php」ファイルのディレクトリ/URLから相対位置のファイルを取り出しインクルードします。
skindirスキンディレクトリ/スキンURLから相対位置のファイルを取り出しインクルードします。
影響を与えるスキン変数 + +
Includeプリフィックス

このプロパティはインクルードするファイルそれぞれの頭に追加されるプリフィックスです。例えば、プリフィックスがbase/でインクルードするファイルがsomefile.txtなら、最終的にはbase/somefile.txtをインクルードすることになります。

+

このプロパティはIncludeModeのプロパティと共に使われることが意図されています。この方法で、 skindir/somename/にインポートされたスキンは、IncludeModeをskindirを使うに IncludePrefixをsomename/に設定しておくことができます。

影響を与えるスキン変数 + +
+ +

IncludeプリフィックスとIncludeモード のプロパティは、「スキンの一般的設定」において該当スキンでの包括的な設定が可能です。なお、プロパティが設定されてしまうと、例えばテンプレートも含めたすべてのパースデータにそれが適用されることを心にとめておいてください。

+ +
+ + + \ No newline at end of file diff --git a/utf8/nucleus/documentation/history.html b/utf8/nucleus/documentation/history.html new file mode 100755 index 0000000..190a07e --- /dev/null +++ b/utf8/nucleus/documentation/history.html @@ -0,0 +1,1056 @@ + + + + + + + + + + + + Nucleus - History + + + + + + +
+ 小 + 中 + 大 +
+
+ +

更新履歴

+ +

+ Nucleusマニュアルに戻る +

+ +
    +
  • + Nucleus v3.51 (November 1, 2009) +
      +
    • FIX: fix warning caused by unreachable code in PDO (admun)
    • +
    • FIX: fix typo in NP_Ping (admun)
    • +
    • FIX: fix typo in XMLRPC api (admun)
    • +
    • FIX: Bug in upgrade procedure where no check to verify new column does not currently exist before running the add query. See this thread (ftruscot)
    • +
    • FIX: Bug where activation not completed. See this thread (ftruscot)
    • +
    +
  • +
  • + Nucleus v3.5 (SVN) +
      +
    • ADD: Comment template variable userwebsitelink which acts like userlink, but only shows web address and never email. (ftruscot)
    • +
    • ADD: 2 Category List template variables, catiscurrent and its synonym, currentcat. (ftruscot)
    • +
    • ADD: code to warn if using a non-mysql database handler and a plugin does not supportsFeature 'SqlApi'. (ftruscot)
    • +
    • CHANGE: set php setting, display_errors, to 0 when not in debug mode to keep users with poorly configured servers from displaying errors on the page. (ftruscot)
    • +
    • FIX: PHP5.3 warning caused by MANAGER::notify(). See this thread. (ftruscot)
    • +
    • FIX: bookmarklet unaware of character set being used. Fix suggested by wgroleau. (ftruscot)
    • +
    • FIX: super-admin disallowed from uploading files if not on any teamlists. (ftruscot)
    • +
    • ADD: $CONF['ActivationDays'] variable to control days before activation expire. Manually set in config.php if needed (no admin interface). (ftruscot)
    • +
    • CHANGE:Notify ITEM link after karma votes(ACTION.php). (shizuki)
    • +
    • CHANGE:Remove bsendping col from nucleus_blog table(install.sql/upgrade3.5.php). (shizuki)
    • +
    • ADD:sql_field_name function for backup class(mysql.php/pdo.php). (shizuki)
    • +
    • FIX:Fix short open tag(NP_Ping.php). (shizuki)
    • +
    • CHANGED: NP_Ping and related infrastructure changes. (admun)
    • +
    • ADDED: upgrade code for 3.5 in upgrades folder. Includes notices about end of PHP4 support and info on 2 new plugins included in plugins folder. (ftruscot)
    • +
    • CHANGED: modified upgrade functions to use 3 digit version indicators everywhere. i.e. 340 instead of 34. (ftruscot)
    • +
    • CHANGED: increased length of displayname, mname, to 32 characters. (ftruscot)
    • +
    • CHANGED: modified install.php and sql_* handlers to allow installation using PDO. Activation is manual and not intended for public consumption in 3.50. Only tested for pdo-mysql handler. (ftruscot)
    • +
    • ADDED/CHANGED: extended sql_* api to cover all mysql_* functions used in core. Functions loaded from nucleus/libs/sql/ folder. See here. (ftruscot)
    • +
    • FIXED: atom.phpとxml-rss2.phpで_CHARSETをチェックして文字コード変換(Nicleus3.41 へアップグレード後 xml-rss2.php でエラー)(きゃしゃ)
    • +
    • CHANGED: SEARCH.php改良(<%relevance%>対応SEARCH.php、検索結果の正確さ)(きゃしゃ)
    • +
    • CHANGED: _CHARSETチェックのときにstrtoupper(きゃしゃ)
    • +
    • CHANGED: インストーラの文字化け対策部分をデフォルトで有効に。globalfunctions.phpの方は、状況に応じて。(インストール後管理画面は正常表示、サイトが真っ白)(きゃしゃ)
    • +
    • CHANGED: インストーラエラーページをUTF-8固定に。(3.41インストール->スキンエラー(きゃしゃ)
    • +
    • CHANGED: 言語ファイルの反映漏れ修正。ただし、言語ファイル読み込み前に表示される可能性のあるメッセージは定数定義前なのでそのまま(インストール後管理画面は正常表示、サイトが真っ白)(きゃしゃ)
    • +
    • FIXED: pingオプションのチェックボックス削除(きゃしゃ)
    • +
    • FIXED: parsedincludeの無限ループ対策、NP_includespecialからの移植時仕様変更に伴うコード修正。(きゃしゃ)
    • +
    • FIXED: karma通知修正(きゃしゃ)
    • +
    • FIXED: catidのみがURLで指定された場合、blogidを補完する(ShowBlogsのページ送りにblogidの付加をするには?)(きゃしゃ)
    • +
    • ADDED: NP_Text plugin to core installation. Makes distribution of internationalised plugins easier. See this thread. (ftruscot)
    • +
    • ADDED: links in plugins help of help.html to link to two main plugin repositories. See this thread. (ftruscot)
    • +
    • ADDED: selectSpecialSkinType() function to globalfunctions.php. (ftruscot)
    • +
    • ADDED: Check in ADMIN.php pagehead() function to display alert if newer version is available. new function, getLatestVersion() in globalfunctions.php, and new files on nucleuscms.org, version_check.php, to serve latest version. (ftruscot)
    • +
    • ADDED: skinvar for all skin types to display a sticky item from any blog anywhere. (ftruscot)
    • +
    • REMOVED: check on canlogin during forgotpassword process. See this thread. Suggestion by phillip_r. (ftruscot)
    • +
    • ADDED: div with id of adminwrapper around contents of admin page for improved control of admin page look. See this thread. Suggestion by monkeybrain. (ftruscot)
    • +
    • ADDED: NP_SecurityEnforcer plugin to core installation. It can be set to enforce password length and complexity rules, as well as maximum failed login attempts. Put in plugin so can be superceded later by better techniques. (ftruscot)
    • +
    • CHANGED: LoginSuccess event in globalfunctions.php to inlcude username in the data array to specify the login name entered by the user. (ftruscot)
    • +
    • FIXED: backup.php, _backup_dump_structure() function, to use SHOW CREATE TABLE name, to generate table creation SQL. Adds ENGINE, AUTO_INCREMENT, and DEFAULT CHARSET. (ftruscot)
    • +
    • ADDED: PrePasswordSet event in ADMIN.php to allow plugin to enforce any password length or complexity rules for improved security. (ftruscot)
    • +
    • CHANGED: move send update ping option override to NP_Ping
    • +
    • ADDED: Year-based archives and archivelists, adds archiveyearlist and otherarchiveyearlist skin vars (ftruscot)
    • +
    +
  • +
  • + Nucleus v3.41(March 14, 2009) +
      +
    • CHANGED: ドキュメントの文字サイズを可変に(jQuery使用)(character size of the document, variably via jQuery.) (shizuki)
    • +
    • FIXED: (#89(JP)): metaWeblog.newPostにおけるコメント可否. (shizuki/NKJG)
    • +
    • CHANGED: help.htmlのポップアップサイズ変更(Adjust popup window size for help.html). (shizuki)
    • +
    • CHANGED: ブックマークレット差し替え(nucleus/libs/include/bookmarklet-add.template、bookmarklet-edit.template)(Bookmarklet use tab navigation)(shizuki)
    • +
    • CHANGED: NP_SkinFilesオプション用言語定義追加(NP_SkinFiles option word update via language file)(shizuki)
    • +
    • UPDATED: NP_SkinFiles 2.03に差し替え(code:yama/commit:shizuki)(NP_SkinFiles update to 2.03)(code:yama,katsumi/commit:shizuki)
    • +
    • FIXED: 「General」カテゴリのUPDATE漏れ修正(install.php)(preinstall default category name is not localize)(shizuki)
    • +
    • FIXED: When inclusion tried to do the special skin type by skin of error types, $skinid wasn't set.(yu/shizuki)
    • +
    • FIXED: Reduce PHP Notices caused by undefined variables and wrong offsets (shizuki, kaigreve)
    • +
    • FIXED: additional changes in the language files english.php and english-utf8.php to reflect modifications since version 3.30 (kaigreve)
    • +
    • FIXED: SQL error in MEMBER::write() where mautosave not forced to be integer. See Problem with 3.40. (ftruscot)
    • +
    • ADDED: debug info in System info to show if $CONF['ItemURL'] is broken in admin panel (admun)
    • +
    • FIXED: Reorder the setting of config vars ($CONF) to avoid notices (should have no side effects)(kaigreve)
    • +
    • FIXED: Avoid notices caused by explode because the string '\\' is not a part of the $val and no array is returned(kaigreve)
    • +
    • FIXED: remove one redundant definition of the constant _MANAGER_PLUGINFILE_NOTFOUND(kaigreve)
    • +
    • FIXED: bug in showlist.php for displaying plugin dependency. See Manage Plugins error in Nucleus 3.40 (ftruscot, thanks ajmiller)
    • +
    • CHANGED: Modify Fix SQL error when new blog add by shizuki, to give a default english value for category name, category desc, first item title, and first item body in case where user does not have updated language file. (ftruscot)
    • +
    • FIXED: Fix SQL Error when new blog add. (shizuki)
    • +
    • CHANGED: Mod Change link URI of 'help icon' to full URI (documentation/help.html to $CONF['AdminURL'].'documentation/help.html') (shizuki)
    • +
    • ADDED: getTeamBlogs() method to MEMBER class to retrieve list of blogs to which a member has team rights (ftruscot)
    • +
    • FIXED: rearrange english.php and english-utf8.php files so all new-to-3.40 contants are grouped together at top (ftruscot)
    • +
    • FIXED: Add missing language item to english-utf-8.php (admun)
    • +
    • FIXED: CONF['Self'] merging error in globalfunctions.php (admun)
    • +
    • CHANGED: Comment count at items list display via 'sprintf()'. (shizuki)
    • +
    • ADDED: instructions for manually adding .htaccess files to media and skins folder after upgrade. (ftruscot)
    • +
    • FIXED: the unwished ping after adding an item to a new category (what you have written here: http://forum.nucleuscms.org/viewtopic.php?p=89142#89142)(shizuki)
    • +
    • FIXED: Few hardcoded strings moved to langage file(shizuki)
    • +
    • CHANGED: Ease the solution for the new member option for autosave draft(kaigreve)
    • +
    • CHANGED: Move System overview in the menu of the admin area under the entry for the configuration (ADMIN.php)
    • +
    • CHANGED: Shorten menu entry to 'System info' and correct 'enable' to 'enabled' (english.php)
    • +
    • CHANGED: height of page class in help.html to avoid overlaps on long help topics. (ftruscot)
    • +
    • ADDED: .htaccess file in skins/ and nucleus/libs/ to fight possible script execution due to certain apache configurations. (Code recommended by Katsumi, added to svn by ftruscot)
    • +
    • ADDED: .htaccess file in media/ to fight possible script execution due to certain apache configurations. (Code recommended by Katsumi, added to svn by ftruscot)
    • +
    • ADDED: New member option to decide whether the autosave draft function is used or not (kaigreve)
    • +
    • CHANGED: Additional improvements and updates in devdocs and help.html (ftruscot)
    • +
    • ADDED: Warning for PHP 4.x depreciated during upgrade(admun)
    • +
    • ADDED: Documentation, as needed, for changes below. (ftruscot)
    • +
    • ADDED: BLOG::readLogFromList() and BLOG::getSqlItemList() to allow using the core item display mechanisms for customized lists of items. Will be used primarily by plugins. (ftruscot)
    • +
    • CHANGED: MEMBER::login() to add CustomLogin event. Provides hook for plugins to perform authentication from external sources. (ftruscot)
    • +
    • ADDED: Upgrade scripts for version 3.40. Lengthen nucleus_template.tpartname column to 64. Lengthen nucleus_template_desc.tdname to 64. (ftruscot)
    • +
    • ADDED: Warning for PHP 4.x depreciated (admun)
    • +
    • FIXED: MySQL version check failure in install.php (admun)
    • +
    • FIXED: bugs in last fix of directory traversal vulnerability in Nucleus media manager. Fix code providedby kmorimatsu inserted by ftruscot.
    • +
    • FIXED: directory traversal vulnerability in Nucleus media manager. Fix code provided by kmorimatsu inserted by ftruscot.
    • +
    • FIXED: cuser field of non-member comments being blanked out intermittentlyOld comments from field is gone. Caused by registration with names longer than 16 characters. Enforce 16 character limit in createaccount.php, ADMIN.php, ACTION.php (ftruscot)
    • +
    • ADDED: Add delete permission check (katsumi/admun)
    • +
    • ADDED: Add ATOM1.0 autodiscovery for default skin. (shizuki)
    • +
    • FIXED: Fix short open tag on skins/default/show_benchmark.inc. (shizuki)
    • +
    • FIXED: Fix broken XML for Skins. (shizuki)
    • +
    • ADDED: Japanese forum:Special skin parts are used as a skin part. (Andy/shizuki)
    • +
    • ADDED: The number of comments is indicated on the item list screen. Japanese forum(The confirmation and the elimination which are a comment every item.) (shizuki)
    • +
    • ADDED: Automatic re loading after an item renewal. Bibou-Nikki/Automatic re loading after an item renewal. (shizuki)
    • +
    • ADDED: Prevention of comment double contribution. Bibou-Nikki/Prevention of comment double contribution. (shizuki)
    • +
    • ADDED: Addition of an item The hack which checks a radio button of "of the date and time, designation" automatically if the item of the date is changed at the time of edit. Japanese forum(Check box of "later, addition" and "of a time stamp, renewal") (shizuki)
    • +
    • FIXED: (#110(JP)): When an item is added by "new category", a SendPing event doesn't occur. (shizuki)
    • +
    • FIXED: (#58(JP)): When database backup, table name and a column name are bound up with back quotat. (shizuki)
    • +
    • CHANGED: Eliminate few hardcoded language (shizuki)
    • +
    • FIXED: (#94(JP)): A plugin option isn't generated. (kimitake/shizuki)
    • +
    • FIXED: (#79(JP)): Permission setting of upload isn't effective. (shizuki/yu)
    • +
    • FIXED: (#77(JP)): [XHTML] When the attribute of the option is hidden,<tr> isn't output. (shizuki)
    • +
    • FIXED: (#76(JP)): [XHTML] Validate admin-area. (shizuki)
    • +
    • FIXED: (#67(JP)): Change isn't reflected on ValidateForm event. (shizuki)
    • +
    • FIXED: (#107(JP)): When editing an item, time generation will be an error. (kotorisan/yu/shizuki)
    • +
    • FIXED: (#108(JP)): Pop-up, for if a character string is empty, nothing is indicated. (sato-na/shizuki)
    • +
    • FIXED: Fix history. (shizuki)
    • +
    • FIXED: "history.html" is XHTML 1.0 Strict. (shizuki)
    • +
    • FIXED: (#142#97(JP)): Plugin API: Incorrect operation order. (shizuki/Andrew Black)
    • +
    • ADDED: Add tool tip for "MEDIA" button (shizuki/kyasya)
    • +
    • CHANGED: make ItemVars case insentive to ease the usage (work with plugins that use the function doItemVar) (kaigreve)
    • +
    • ADDED: new event in TEMPLATE.php called PreTemplateRead to allow plugin developers to change name of template being used. This is obscure and probably won't be publicized, but I need it for NP_MultiLanguage to allow mapping of templates depending on language being viewed, permitting translations of all parts of a template and localization of dates. (ftruscot)
    • +
    • ADDED: three new events in BLOG.php called PreArchiveListItem, PreCategoryListItem, and PreBlogListItem to allow plugin developers to modify or add template variables to the ArchiveList Item, Category List Item and Blog List Item template fields (ftruscot)
    • +
    • FIXED: fix redirect function in globalfunctions so that it does not strip out the permitted "*" character. See forum(Trying to get a create an account link) (ftruscot)
    • +
    • ADDED: add description of the doIf function to the plugin documentation (ftruscot)
    • +
    • FIXED: fix description of if/else/endif skin variables to documentation, inlcuding ifnot, elseif, and elseifnot (ftruscot)
    • +
    • ADDED: add description of charset skin variable to documentation. (ftruscot)
    • +
    • ADDED: add global configuration, DefaultListSize, which sets and maintains a custom value for length of item/comment lists in the admin area (ftruscot)
    • +
    • FIXED: fix content type of bookmarklet.php file to text/html to conform with other pages (ftruscot)
    • +
    • ADDED: new event in createaccount.php called RegistrationFormExtraFields to allow fields from plugins onto registration form (ftruscot)
    • +
    • FIXED: CONF['Self'] fix (admun)
    • +
    • ADDED: Add a link to the front end that allows to add an item in a bookmarklet popup window (two new skinvars addlink and addpopupcode needed) (kaigreve)
    • +
    • ADDED: add a cancel button to the bookmarklet add and edit forms (kaigreve)
    • +
    • CHANGED: Move the submit button in the bookmarklet edit from to the end of the button bar (logical order) (kaigreve)
    • +
    • ADDED: Add the possibility to move a published item back to drafts (kaigreve)
    • +
    • ADDED: more and improved comments in classes NucleusPlugin, BACKUP, ITEM and ITEMACTIONS (kaigreve)
    • +
    • CHANGED: Use ISO date for backup filename and add hour, minute and second (kaigreve)
    • +
    • CHANGED: Put backup functions in an own class Backup (kaigreve)
    • +
    • FIXED: add default values for the parse_bloglist function to avoid warnings (kaigreve)
    • +
    • FIXED: fix case sensitive function name createDraftFromRequest in class ACTION (admun)
    • +
    • ADDED: add description of the doItemVar function to the plugin documentation (kaigreve)
    • +
    • ADDED: add language file install_lang_english.php to install process (admun)
    • +
    • ADDED: add option to install NP_Ping during installation (admun)
    • +
    • FIXED: remove bug in the plugin api: function clearOptionValueCache hasn't worked correct with the getOption function (kaigreve)
    • +
    • ADDED: add global configuration DebugVars which decides if unresolved Vars (SkinVars, TemplateVars, ItemVars) are shown on the blog (kaigreve)
    • +
    • FIXED: Fix getNotifyFromMailAddress to use email field now that we've separated email/url fields (gregorlove)
    • +
    • CHANGED: extend skinvar Bloglist with parameters to specify the sort order (kaigreve)
    • +
    • ADDED: add comment URL and email to "edit comment" form and make them editable (gregorlove)
    • +
    • ADDED: new event in ADMIN.php called TemplateExtraFields to allow plugin developers to add fields to templates. This should encourage plugin authors to make use of the core template storage to provide formatting for their output. This event just presents the extra fields on the template edit form and stores data entered there into the nucleus_template table. It is the responsibility of the plugin authors to use the template fields they add and to provide the variables used in those fields. Plugins should also document their variables and provide for a default, either in the code or through a plugin option. (ftruscot)
    • +
    • FIXED: (#73(JP)): スキン読み込みの改良. (kotorisan/yu/shizuki)
    • +
    • FIXED: (#74(JP)): スキン編集画面の日本語化漏れ. (shizuki)
    • +
    • CHANGED: プラグイン一覧画面の「入手元URL」を本家にあわせて表示しないようにした。
    • +
    • CHANGED: スキンタイプ一覧のヘルプアイコンの位置を本家にあわせて名前の前に移動。
    • +
    • CHANGED: 管理画面CSS差し替え(code:yama/commit:shizuki)
    • +
    • FIXED: スキン差し替えによる問題修正(PHP4のみ。PHP5オンリーになったら戻す。SKIN.php、TEMPLATE.php)(shizuki)
    • +
    • CHANGED: デフォルトスキンを日本語版に差し替え(coded:yama/commit:shizuki)
    • +
    • CHANGED: バージョンチェックの飛び先を日本公式に変更(shizuki)
    • +
    +
  • +
  • + Nucleus v3.31 SP3 (Dec 17, 2008) +
      +
    • FIXED: Avoid directory traversal in media manager (kmorimatsu)
    • +
    • FIXED: Security fix to avoid deletion of item by non-admin acount (kmorimatsu)
    • +
    +
  • +
  • + Nucleus v3.31 SP2 (EUC-JP only) (September 26, 2008) +
      +
    • FIXED: An XSS issue
    • +
    +
  • +
  • + Nucleus v3.31 SP1 (February 5, 2008) +
      +
    • FIXED: An XSS issue
    • +
    • FIXED: (#82(JP)): fix <%itemtitle%> on COMMENT_HEADER COMMENT_BODY COMMENT_FOOTER (shizuki)
    • +
    • CHANGED: (#83(JP)): Change bookmarklet height. Add 50pix. (kmorimatsu)
    • +
    • CHANGED(JP): (#84(JP)): To avoid showing ticket in the URL, redirect to pluginlist, instead. (kmorimatsu)
    • +
    • ADDED: add createaccount.html with a redirect to createaccount.php for backward compatibility with the old location of the form
    • +
    • CHANGED: protect the 'create account form' against abuse: show the form only if needed and add FormExtra (e.g. Captcha) and ValidateForm (to validate input) events (ftruscot and kaigreve)
    • +
    • FIXED: bug in upgrade script (admun)
    • +
    • CHANGED: update xmlrpc client to version 2.2, this version supports PHP 5.2.x (kimitake)
    • +
    • CHANGED: use require instead of include for the file inclusion (kimitake)
    • +
    • CHANGED: rollback benchmark default skin (admun)
    • +
    • FIXED: possible security problem in NP_Ping (admun)
    • +
    • ADDED: NP_Ping sends ping for future post via JustPosted event (admun)
    • +
    • ADDED: JustPosted event (admun)
    • +
    • ADDED: move weblogs.com ping function into plugin (admun)
    • +
    +
  • +
  • + Nucleus v3.3 (May 1, 2007) +
      +
    • ADDED: check cmail column to separate to URL and cemail when Nucleus upgrade to 3.3 or later. (kimitake/katsumi)
    • + + +
    • + ADDED: Serveral changes and fixes from Nucleus Japan (details in the log files of the Nucleus repository at sourceforge.net) +
        +
      • ADDED(JP): (#68(JP)): Encrypted cookie key. (Katsumi)
      • +
      • FIXED(JP): (#60(JP)): Item link in notification email is wrong. (shizuki)
      • +
      • FIXED(JP): (#62(JP)): email address is not referred in <%usermail%>. (shizuki)
      • +
      • FIXED(JP): (#66(JP)): Even if calling PostPluginOptionsUpdate, getOption does not returns correct value. (Katsumi)
      • +
      • FIXED(JP): (#49(JP)): PLUGIN::getAllItemOptions does not work correctly. (NKJG)
      • +
      • FIXED(JP): (#57(JP)): SQL error happens when updating plugin option. (Katsumi)
      • +
      • FIXED(JP): (#56(JP)): When creating db backup, the key length drops (Katsumi)
      • +
      • FIXED(JP): (#41(JP)): fixed dropped info during backing up (Katsumi)
      • +
      • FIXED(JP): (#40(JP)): fixed PostAddCategory event (Kimitake)
      • +
      • CHANGED(JP): (#48(JP)): Super-admin always can login to admin page (Kimitake)
      • +
      • ADDED: (#45 from the Japanese Tracker): include code from NP_0TicketForPlugin in the core (Changes from Nucleus Japan)(Katsumi)
      • +
      +
    • +
    • ADDED: Sanitize parameters such as $_GET and $_SERVER['REQUEST_URI'] etc. to avoid XSS (from Nucleus Japan)
    • +
    • ADDED: new events for Media upload: PreMediaUpload and PostMediaUpload (kaigreve)
    • +
    • ADDED: new skinvar bloglist (kaigreve)
    • +
    • ADDED: new method for URL rewriting with the global variable virtualpath, new .htaccess file can be found in the folder extra/fancyurl-2, more information forum(Another approach to Fancy URLs) (kaigreve and Legolas)
    • +
    • FIXED: allow + in email address, see forum(Minor bug fix in globalfunctions.php) (wgroleau)
    • +
    • FIXED: XHTML compliance in default skin (admun)
    • +
    • FIXED (#80): Atom 1.0 support (rakaz)
    • +
    • FIXED (#129): Plugin API: SpamCheck event called from core. (rakaz)
    • +
    • FIXED (#128): Don't show DISALLOWED(XXXX) errors (karma)
    • +
    • FIXED (#127): parse_commentform: double-escaped URLs (karma)
    • +
    • FIXED (#121): backup fails when $plugin->getTableList() doesn't return an array (karma)
    • +
    • FIXED (#118): Errors in default skin (legolas)
    • +
    • ADDED (#119): Added optional includeMode/includePrefix parameters to parseFile() (karma)
    • +
    • FIXED (#115): Redundant database queries on member table (karma)
    • +
    • FIXED (#114): Magic quotes not correctly undone when magic_quotes_sybase enabled (karma)
    • +
    • FIXED (#104): Return to blogsettings - link missing on edit category
    • +
    • FIXED (#107): Better path detection in install.php (dekarma)
    • +
    • FIXED (#106): Make 'Log Out' link under Comment box work with Fancy URLs (Wendy Smoak)
    • +
    • FIXED (#99): Use workaround when the only installed MySQL PHP extension is mysqli (dekarma)
    • +
    • FIXED (#98): More "Fatal error: Only variables can be passed by reference" occurrences on some installations (pete)
    • +
    • ADDED (#23): adding email/url + email field display in blog comment list (admun)
    • +
    • FIXED (#12): item id and timestamp were not sent along with GenerateURL event when itemlink called from commentvars (karma)
    • +
    • CHANGED: Now using XML-RPC for PHP (phpxmlrpc) v1.2.1
    • +
    • FIXED: (#97): file uploads didn't check $_FILES['file']['error'] codes. (dekarma)
    • +
    • CHANGED: Update user instruction for Blogger conversion tool
    • +
    • ADDED: When an e-mail is provided in the comment-form it is validated. (TeRanEX)
    • +
    • ADDED (#23): Splitted the URL & E-mail field in comments. (gRegor, ketsugi, Red Dalek, TeRanEX)
    • +
    • ADDED: (bug 817364): delete member enhancement (admun)
    • +
    • ADDED: Auto save draft (Legolas)
    • +
    • ADDED: Custom skin parts (tutorio)
    • +
    • ADDED: ヘルプファイルにスキン変数<%charset%>のヘルプを追加(add description of charset skin variable to documentation.) (shizuki)
    • +
    • FIXED: ヘルプファイルの「if/else/endif」の項目を修正。「ifnot/elseif/elseifnot」を追加(fix description of if/else/endif skin variables to documentation, inlcuding ifnot, elseif, and elseifnot) (shizuki)
    • +
    • ADDED: プラグインAPIドキュメントに「doIf()」メソッドの項目を追加(add description of the doIf function to the plugin documentation) (shizuki)
    • +
    • CHANGED(JP): (#39(JP)): 管理領域のContent-Typeをtext/htmlのままに(reverted content type for admin area)(Kimitake)
    • +
    • FIXED(JP): (#42(JP)): プリインストールされるATOMのスキンの「xml:lang」が「en-us」になっていたのを修正(atom feed template specifies xml:lang but it is en-us, it should be ja, in install.sql)(Kimitake)
    • +
    • FIXED(JP): (#46(JP): ドラフト保存されるアイテムの日付のフォーマットを修正(fixed date format for draft entry)(Kimitake)
    • +
    +
  • +
  • + Nucleus v3.24 (November 11, 2006) +
      +
    • FIXED: XSS issue (reported by JPCERT/CC).
    • +
    +
  • +
  • + Nucleus v3.23 (May 23, 2006) +
      +
    • FIXED: Remote code execution vulnerability (reported by rgod).
    • +
    +
  • +
  • + Nucleus v3.22 (August 21, 2005) +
      +
    • FIXED: Major security vulnerability in the phpxmlrpc library.
    • +
    • FIXED: New NP_SkinFiles version, fixing a minor security issue. (rakaz)
    • +
    • CHANGED (#17): An errormessage is now displayed when logon through loginform failed. (karma)
    • +
    • FIXED (#91): Initialize variables in MEMBER class (andrew)
    • +
    • FIXED (#90): there was no plugin callback on member edits when the email address changed (andrew)
    • +
    • FIXED (#90): when editing members other than yourself, you shouldn't be logged out (andrew)
    • +
    • FIXED (#85): If both itemid and catid are specified in the URL, ignore catid if it doesn't match itemid (karma)
    • +
    • FIXED (#49): 'name clashes' warning on skin import no longer displayed when no clashes detected (karma)
    • +
    • FIXED (#67): Add resilency to upgrade scripts (Frankenstein)
    • +
    • FIXED (#88): PHP5.1: "Fatal error: Only variables can be passed by reference" (karma)
    • +
    • FIXED (#87): Translate & -> &amp; when links added via toolbar (karma)
    • +
    • FIXED (#42): formatDate didn't always use the correct timezone (karma)
    • +
    • FIXED (#43): Only load user language file when logged in (karma).
    • +
    • FIXED (#76): Disabling site blocked admin menu access (karma).
    • +
    • FIXED (#57): PostRegister event not fired from inside admin area.
    • +
    • FIXED (#58): images and popups were not in feeds. (karma)
    • +
    • FIXED (#33): add item form invalid ticket error (admun)
    • +
    • FIXED: Most buttons of the toolbar reset the scroll position of the textarea to the top in Firefox (leonbloy)
    • +
    • ADDED (#64): Applications that use the metaweblogAPI, such as Ecto can now also access and edit the extended body (rakaz)
    • +
    • FIXED (#63): _getArrayVal() always returned first element of array (rakaz)
    • +
    • ADDED: add InitSkinParse event (rakaz)
    • +
    • ADDED (#38): added alternative output for <%title%>, <%itemtitle%>, <%previtemtitle%> and <%nextitemtitle%> (rakaz)
    • +
    • FIXED (#51): removed hardcoded charset declaration from the RSS 2 skin (rakaz)
    • +
    • ADDED (#55): add <%skinvar%> variable that corresponds with _CHARSET (rakaz)
    • +
    • ADDED (#24): add PostUpdateItem event (admun)
    • +
    • FIXED (#48): <%if(nextitem)%> and <%nextlink%> didn't use the timezone offset. (Basic)
    • +
    • FIXED: "ADMIN.php line 5270" fatal error when plugin filename and plugin classname mismatch (Frankenstein)
    • +
    • CHANGED (#16): Event PreSkinItem can now modify the skin contents; PreComment now knows the ItemID. (suggested by Andy)
    • +
    +
  • +
  • + Nucleus v3.21 (June 30, 2005) + +
  • +
  • + Nucleus v3.2 (March 7, 2005) +
      +
    • ADDED: NP_SkinFiles plugin installed on full install
    • +
    • FIXED: Installing plugins through install.php failed (karma)
    • +
    • FIXED: whitespace at start/end got trimmed on skin edit/import (karma)
    • +
    • ADDED: title-attributes on inline/popup images (moraes)
    • +
    • ADDED: New default skin (Ivan, hcgtv, moraes, ...)
    • +
    • ADDED: fr 1081569, <%if(category,catid,1)%> support (moraes)
    • +
    • ADDED: support for rel="nofollow" (Rakaz)
    • +
    • FIXED: bug 1058978, subscription list of updated plugin showed the updated subscriptions while the old subscription-list was still in the database. Nucleus now gives a warning (TeRanEX)
    • +
    • FIXED: bug 1083959, closed site still allowed posting comments (karma)
    • +
    • FIXED: bug 1083971, editing blog settings was not possible on PHP versions < 4.2.0 (floatval) (karma)
    • +
    • FIXED: In v3.15, deleting an item via the bookmarklet failed (karma)
    • +
    • ADDED: Support for <%blogsetting(short)%>, as suggested by caw (karma)
    • +
    • FIXED: Default skin used application/xml+rss instead of application/rss+xml, causing RSS autodiscovery to fail. (karma)
    • +
    • FIXED: Moved more hardcoded text into language files
    • +
    • FIXED: Made it so malicious users cannot trick a logged in site member/admin into visiting a specifically crafted URL that performs some admin area task. (karma).
    • +
    • FIXED: bug 976777, weblogs.com was not ping when posting draft (admun)
    • +
    • ADDED: bug 1008171, cookie-prefix (karma)
    • +
    • CHANGED: bug 1008175, move getTemplate into MANAGER class + some other performance tweaks (karma)
    • +
    • ADDED: add plugin dependency check (admun)
    • +
    • CHANGED: Sending out activation links rather than new passwords on new accounts, forgotten passwords, etc. (karma)
    • +
    • ADDED: Plugins can now make text- and textarea-optiontypes readonly (TeRanEX)
    • +
    • CHANGED: new plugin event FormExtra (for use with ValidateForm) (karma)
    • +
    • CHANGED: better error handling when commenting. Errors now displayed together with comment form. (karma)
    • +
    • CHANGED: actions (commenting, membermail, ...) can be done using any entry point, not just through action.php (karma)
    • +
    • CHANGED: Added $Id$ info in sourcefiles (karma)
    • +
    • CHANGED: PrePluginOptionsEdit-event now has an extra-field which can be used to add option-specific code to the page (TeRanEX)
    • +
    • ADDED: new event, PrePluginOptionsUpdate, can be used by plugins to verify/modify the new value for an option (TeRanEX)
    • +
    • ADDED: Plugins can now provide a documentation page, which is shown inside the admin area (TeRanEX)
    • +
    • ADDED: Plugins can now limit values for an option to be only numeric (datatype=numerical) (TeRanEX)
    • +
    • ADDED: OptionTop-methods, to let a plugin retreive an array of the x-highest (or lowest) values of an option (TeRanEX)
    • +
    • ADDED: Plugins can now make specific options for items. These options can be edited directly from the item add or edit page (TeRanEX)
    • +
    +
  • +
  • + Nucleus v3.15 (November 14, 2004) +
      +
    • FIXED: Some XSS issues, as reported by Alexander Antipov
    • +
    • FIXED: Validate data that is sent as HTTP headers (redirects etc) (karma)
    • +
    • FIXED: bug 1029057, parsed include doesn't accept empty files (karma)
    • +
    • FIXED: bug 1036849, 'relevance' listed in list of available skinvars, while it's a templatevar (karma)
    • +
    • FIXED: It was possible to spoof the username on comments, even when "protect member names" was turned on. Reported by bigmouth. (karma)
    • +
    • FIXED: bug 1025675, if(hasplugin) causes warnings in action log when plugin does not exist (karma)
    • +
    • FIXED: bug 1008700, taking away admin attribute from a member was disallowed when that member did not have logon rights (karma)
    • +
    • FIXED: bug 968925, member edit leak out repeat password box while it should be hidden (admun)
    • +
    • FIXED: bug 933580, URLs in comments followed with a comma should not have the comma in the generated hyperlink (karma)
    • +
    • FIXED: bug 1019584, separating search terms with a '+' character caused SQL errors (karma)
    • +
    • FIXED: bug 1016217, superadmin should be allowed to edit all items/comments (karma)
    • +
    • FIXED: bug 1019191, <%if(blogsetting,..)%> / <%if(category,...)%> broken on error pages (karma)
    • +
    • FIXED: Made sure no code relies on the PHP5 setting register_long_arrays to be On (karma)
    • +
    • FIXED: Call to undefined function when user specified a language in its profile (jef pober)
    • +
    • FIXED: Quickmenu didn't show up after login from index.php?action=showlogin (karma)
    • +
    • CHANGED: new plugin event ValidateForm (karma)
    • +
    • CHANGED: Extra whitespace to make skin exports easier to read in text editors (karma)
    • +
    • CHANGED: e-mail notifications are now sent as utf-8 rather than iso-8859-1 (karma)
    • +
    • ADDED: Admin members can click the version number in the admin area to check for a newer version (karma)
    • +
    • ADDED: <%if(admin)%> and <%if(admin,blogname)%> in skins (karma)
    • +
    • ADDED: In the admin area, a list of all comments for a blog is now available (karma)
    • +
    • ADDED: ITEM::getitem returns blogid, as suggested by leonbloy (karma)
    • +
    +
  • +
  • + Nucleus v3.1 (July 28, 2004) +
      +
    • FIXED: Nucleus v3.01 was missing a fix in backup.php, which could cause fulltext key info not to be backed up correctly
    • +
    • ADDED: support for patch levels, so plugin API enhancements can be distributed to power users earlier (suggested by TeRanEX)
    • +
    • FIXED: bug 974090, multiple identical SQL queries were executed when checking if a plugin is available (karma)
    • +
    • FIXED: Default language wasn't always respected (fushimi)
    • +
    • CHANGED: new bookmarklet style (TeRanEX / moraes)
    • +
    • FIXED: After a karma vote, redirection to referer URL failed if register_globals is turned off (karma)
    • +
    • FIXED: SQL Injection Vulnerability, reported by aCiDBiTS
    • +
    • FIXED: bug 689468, moved PostAddComment from action.php to COMMENTS.php(admun)
    • +
    • FIXED: bug 967580, Class variables were not explicitly defined in PHP classes (karma)
    • +
    • FIXED: IE6 unreadable Admin menu textarea (admun)
    • +
    • FIXED: Skin exports for skins containing CDATA sections (like the RSS feeds) caused the skinbackup.xml to contain invalid XML. (Import still worked, however) (karma)
    • +
    • FIXED: German language file wrong translation (admun)
    • +
    • CHANGED: replaced split by preg_split in the parser class. Should be faster according to PHP docs (karma)
    • +
    • FIXED: documentation typo (admun)
    • +
    • FIXED: PHP5: Install script failed to discover install path automatically (karma)
    • +
    • FIXED: Skin parser no longer parses skinvars when they are inside a non-displayed if-section (karma)
    • +
    • FIXED: bug 817361, prefix http:// to member's URL if missing (admun)
    • +
    +
  • +
  • + Nucleus v3.01 (July 13, 2004) +
      +
    • FIXED: PHP5: Links to plugin admin area broken (radekradek)
    • +
    • FIXED: bug 966011, skins created with v2.0 could not be imported (karma)
    • +
    • FIXED: Security issue spotted by rADo2
    • +
    +
  • +
  • + Nucleus v3.0 (May 30, 2004) +
      +
    • FIXED: When adding a weblog, select globally defined default skin by default (TeRanEX)
    • +
    • FIXED: CSS conflict in default skin (moraes)
    • +
    • FIXED: ADMIN.php no-cache after doctype added to support dynamic content for plugins in admin area (rADo2)
    • +
    • FIXED: vars4.1.0.php fixed a strange bug for some PHP installs having empty $_REQUEST[] (rADo2)
    • +
    • FIXED: globalfunctions.php - added a flag preventing include of vars...php twice for custom install (rADo2)
    • +
    • FIXED: install.php - added a flag preventing include of vars...php twice for custom install (rADo2)
    • +
    • FIXED: install.php - installCustomSkins skinbackup.xml renamed (rADo2)
    • +
    • FIXED: install.php - installCustomPlugs now correctly syncs plugin events (rADo2)
    • +
    • FIXED: Forcing focus on add/edit window after closing media library (nakahara21)
    • +
    • ADDED: class attributes on textareas that allow skins/templates to be edited (karma)
    • +
    • FIXED: Documentation and errors now tell to chmod config.php to 444 instead of 644 (hcgtv)
    • +
    • CHANGED: Admin area style power-up (Radek)
    • +
    • FIXED: Install script used $PHP_SELF, which is not available when register_globals is off (nakahara21)
    • +
    • FIXED; Skin import failed if there were CDATA sections (Nucleus Japan)
    • +
    • FIXED: undoMagic choked on array variables (Nucleus Japan)
    • +
    • FIXED: htmlspecialchars causes broken url like "&amp;amp;" (Nucleus Japan)
    • +
    • FIXED: PostAddCategory event was never called (Nucleus Japan)
    • +
    • FIXED: PostAddCategory event was not called when creating a new weblog (Nucleus Japan)
    • +
    • FIXED: <%blogurl%> problem on category lists (nakahara21)
    • +
    • CHANGED: Took out the HTTP Authentication part for now (it has no real use yet, and caused problems when Nucleus is installed in a protected directory)
    • +
    • FIXED: When the 'Allow login edit' option was disabled, the e-mail address was not checked for validity when a user edited his/her settings. This would cause an e-mail with new password to be sent out to an invalid address. (Frankenstein)
    • +
    • FIXED: Some PHP files were missing the closing ?> tag (ikeizer)
    • +
    • FIXED: Plugins were inable to delete options (leonbloy)
    • +
    • FIXED: XML-RPC: metaWeblog.newPost fails when an empty array is passed as list of categories (caused problems with Ecto)
    • +
    • FIXED: Eliminated 2 SQL queries on most requests.
    • +
    +
  • +
  • + Nucleus v3.0 RC (April 27, 2004) +
      +
    • CHANGED: Labeled it v3.0, since users started believing "2.5 beta == 25 final"
    • +
    • FIXED: XML-RPC: metaWeblog.editPost assigned the default category again when no categories were passed along (karma).
    • +
    • FIXED: XML-RPC: mt.getPostCategories returned an invalid result (karma)
    • +
    • CHANGED: On clean install, RSS and Atom feeds contain full items rather than excerpts only (karma)
    • +
    • REMOVED: Clean installation does not include RSS 0.91 feed anymore. Only the RSS 2.0 and Atom 0.3 feeds are included (karma)
    • +
    • ADDED: When a skin provides a preview thumbnail, it is displayed in the skin overview (include prefix required, 100x75 preview.png, preview-large.png). Also, when a readme.html file is present in the skin include dir, a link to that file is added (karma)
    • +
    • CHANGED: Allowed skin names to have slashes (/) in them (karma)
    • +
    • FIXED: When adding media in non-IE browsers, all text was removed
    • +
    • FIXED: Wrong times displayed / 'no such item' errors when MySQL server and PHP server are in different timezones (karma)
    • +
    • ADDED: Made sure language files for v2.5beta can be used with v2.5final without strange strings (e.g. _SETTINGS_EXTAUTH) showing up in the admin area (karma)
    • +
    • FIXED: No CSS styles were applied on 'insert media' popup (karma)
    • +
    • FIXED: Some more possible problems with URL linking in comments (karma)
    • +
    • FIXED: In Opera, buttons on the extended area added text to the main body text instead (karma)
    • +
    • CHANGED: Admin pages are being sent as text/html instead of application/xhtml+xml again, since it caused too much javascript problems. When $CONF['debug'] is 1 however, the pages are still sent as application/xhtml+xml (karma)
    • +
    • FIXED: itemlink in templatevars didn't include itemid when used on item skins (mas)
    • +
    • FIXED: Errors when deleting plugins with options (Curtis)
    • +
    • FIXED: & not encoded in category names/descriptions in admin area (karma)
    • +
    • ADDED: hasplugin option on if skinvars (Kazuhiko)
    • +
    • ADDED: External Authentication (plugin contains authentication code) (Frankenstein) (not in 3.0 final)
    • +
    • ADDED: HTTP Authentication (Frankenstein) (not in 3.0 final)
    • +
    • FIXED: When using the JavaScript buttons to add images/bold text/... to the extended text area, the text was added to the main text body instead if JavaScript toolbar style was set to 'simple' (karma)
    • +
    • FIXED: XML-RPC: Added postid in structs returned by metaWeblog.getPost and metaWeblog.getRecentPosts (karma)
    • +
    • FIXED: XML-RPC: metaWeblog.getRecentPosts expected a string instead of an int for the amountOfPosts parameter. (karma)
    • +
    • FIXED: convert linebreaks broke \r\n linebreaks (jmuto)
    • +
    • FIXED: On index and search skinparts, nextlink/prevlink could not be used before a blog or searchresults skinvar was called (karma)
    • +
    • FIXED: SQL errors when search query contained single quotes (') (karma)
    • +
    • FIXED: Backup did not store information about FULLTEXT keys. (karma)
    • +
    • ADDED: Extended the date templatevariables with pre-defined formats utc and iso8601 (needed for Atom syndication; karma)
    • +
    • FIXED: super-admins that were not on a blog team did not see the categories when trying to add an item to that blog (karma)
    • +
    • FIXED: nextresults and prevresults were listed as available skunvars, while they don't exist (karma)
    • +
    • FIXED: XML-RPC library wrote <?phpxml version="1.0"?> as XML header (jmuto)
    • +
    • FIXED: not longer showing comment form when comments disabled for blog (jmuto)
    • +
    • CHANGED: Plugin options are no longer limited to 128 characters (karma)
    • +
    • CHANGED: Exported skins are now saved as skinbackup.xml instead of skindata.xml to avoid confusion. (karma)
    • +
    • ADDED: New plugin events AdminPrePageHead, AdminPrePageFoot, PreSendContentType, QuickMenu, BookmarkletExtraHead (karma)
    • +
    • FIXED: Fix for bookmarklet, which failed in Opera (jmuto)
    • +
    • FIXED: nextitemtitle and previtemtitle skinvars did not htmlencode their output (karma)
    • +
    • CHANGED/ADDED: make all skinvars that insert links consistent. They can now all take a linktext parameter to insert a full link instead of a raw link. The nextlink/prevlink on search/index pages (introduced 2.5 beta) had to change for this. Skinvars that can take a linktext: todaylink, archivelink, prevlink, nextlink and itemlink (karma)
    • +
    • FIXED: XML-RPC: mt.setPostCategories asumed that isPrimary was always present (karma)
    • +
    • FIXED: Plugins that generate output when they are loaded can not longer break backups. (Xiffy)
    • +
    • FIXED: The test that auto-disabled fancy URLs was incorrect, and also applied to top-level domains that use 3 characters (like .com) (karma)
    • +
    +
  • +
  • + Nucleus v2.5 beta (October 11, 2003) +
      +
    • ADDED: if(previtem), if(nextitem) and if(skintype,typename) skinvars.
    • +
    • FIXED: RSS conditional GET wasn't working correctly (Visa Kopu)
    • +
    • ADDED: Templatevar relevance available when displaying search results (Xiffy)
    • +
    • CHANGED: nextlink and prevlink skinvar now also available on search and index skins. (Xiffy)
    • +
    • ADDED: Skinvars nextitemtitle and previtemtitle on item skins (Xiffy)
    • +
    • FIXED: Upload did not notice duplicates correctly
    • +
    • ADDED: XML-RPC: Support for metaWeblog.newMediaObject and metaWeblog.getRecentPosts methods
    • +
    • ADDED: XML-RPC: Support for the Movable Type API (except for mt.getTrackbackPings)
    • +
    • CHANGED: Fulltext search, prev/next links on search pages, ... (Xiffy)
    • +
    • FIXED/CHANGED: Action log size drops back to 250 when more than 500 entries.
    • +
    • FIXED: No more restrictions on category names
    • +
    • ADDED: possibility to create custom installs
    • +
    • FIXED: XHTML admin documents now have a proper xmlns attribute set; admin pages are now sent as application/xhtml+xml if the client browser accepts it. Removed again in 3.5final
    • +
    • ADDED: Plugins can now make specific options for blogs, categories and members. These options can be edited directly from the blogsettings or member settings page.
    • +
    • FIXED: It's no longer possible to select an item from an other weblog through ?itemid= when there is a different blogid= parameter set in the request (or set using selectBlog)
    • +
    • FIXED: Disallowed while trying to create a new category on item edit
    • +
    • FIXED: Date/Time variables in date footer were not parsed
    • +
    • FIXED: Adding an item while creating a new category prevented ping to be sent to weblogs.com
    • +
    • FIXED: Right-click bookmarklet for IE (re-install to get it working with IE6)
    • +
    • FIXED/CHANGED: hyperlink conversion in comments: ftp/http/mailto supported
    • +
    • FIXED: spaces in between multiple notify e-mail addresses caused ar error message saying the e-mail address is invalid.
    • +
    • FIXED: archivedate skinvar ignored the 'locale' parameter that was passed to it
    • +
    • FIXED: selectBlog did not protect for changes in ?archivelist
    • +
    • FIXED: selectCategory now takes a category id instead of a name (multiple categories can have the same name)
    • +
    • CHANGED: Fancy URLs are only generated when $CONF['Self'] does not end in .php (this avoids URLs like index.php/item/95/item/94/member/1 when turning fancy URLs on without further configuration)
    • +
    • CHANGED: Install script updates config.php automatically when it is writable
    • +
    • CHANGED: When the content type of a skin is application/xhtml+xml, only send this to browsers that specify this type in their HTTP_ACCEPT header (otherwise, send text/html instead)
    • +
    • CHANGED: More intelligent search keywords highlighting (multiple separate keywords etc), also available inside comment bodies now
    • +
    • ADDED: Possibility to filter on filename in media library
    • +
    • FIXED: include('config.php') caused problems when another config.php was in the PHP include path (nils bernhard)
    • +
    • ADDED: LiveJournal conversion (moraes)
    • +
    • FIXED: Karma Vote URLs used relative links to action.php
    • +
    • CHANGED: Support for PHP versions having short_open_tag = Off (Andrew Brampton/Terry Chay)
    • +
    • ADDED: Plugin options can now also use a textarea type. (max. size for data is still 128 bytes though)
    • +
    • FIXED: When unable to load a plugin, an error message is added to the actionlog
    • +
    • FIXED: Not all messages sent to the actionlog actually appeared there
    • +
    • ADDED: Made it possible to install more than one Nucleus installation in the same database (using a prefix to the tablenames)
    • +
    • ADDED: Nucleus does not longer allow access to the Admin Area when files like install.php, install.sql or the nucleus/upgrades directory are still on the server.
    • +
    • ADDED: <%member%> skinvar now also accepts id and yourid as parameter
    • +
    • FIXED: JavaScript toolbar works better in Gecko-based browsers (Mozilla Firebird/Netscape 7)
    • +
    • ADDED: supportsFeature method to plugin interface
    • +
    • FIXED: Destination URL parameter on membermailform skinvar didn't work
    • +
    • FIXED: Encoding of the window title of popup images (Osamu Higuchi)
    • +
    • FIXED: Link at end of install sequence was pointing to install.php
    • +
    +
  • +
  • + Nucleus v2.0 Final (April 3, 2003) +
      +
    • FIXED: renamed the xmlrpc_encode and xmlrpc_decode methods in xmlrpc.inc.php, avoiding naming conflicts on some PHP configurations that are compiled with XMLRPC support
    • +
    • FIXED: restore did not work on some PHP configurations, and did not correctly recognize application/x-gzip encoding type
    • +
    • ADDED: if(onteam[,blogname]) skinvar
    • +
    • ADDED: automatic warning when headers have already been sent, with filename and linenumber included
    • +
    • ADDED: About 40 extra plugin events
    • +
    • ADDED: Made <%member%> available on all skin parts, and added yourname, yoururl, ... parameters
    • +
    • FIXED: plugin loading is now a little more robust (non-fatal errors in the plugin PHP file used to cause a fatal error afterwards)
    • +
    • ADDED: extra variables inside popup code/image code/media code template-parts: width, height, link and text
    • +
    • ADDED: Extra optional parameter for image skinvar, indicating which information to insert on the page
    • +
    • CHANGED: Marked the imagetext skinvar as deprecated (use image(caption) instead)
    • +
    • CHANGED: Marked the ifcat skinvar as deprecated (use if(category) instead)
    • +
    • CHANGED: Marked the vars skinvar as deprecated (if anyone needs a hidden 'itemid' formfield [are there?], the itemid skinvar can be used instead)
    • +
    • ADDED: doTemplateCommentsVar(&$item, &$comment) method in plugin interface
    • +
    • CHANGED: comments are now also parsed using the same method as skins and items, allowing plugins, includes and more to be used there as well
    • +
    • FIXED: guests cannot longer place 'fake' comments (making it look as if a regsitered memeber made the comment)
    • +
    • FIXED: item contents is no longer trimmed
    • +
    • FIXED: Made install script look less messy
    • +
    • ADDED: selectItem($id) method
    • +
    • FIXED: Unable to disable comments through 'edit item'
    • +
    • ADDED: Plugins: EditItemFormExtras event gets itemid as separate parameter
    • +
    • FIXED: missing ; in presented new blog code
    • +
    • FIXED: PHP 4.0.6 didn't show item/member/... lists on admin area (PHP bug)
    • +
    • ADDED: Plugin Hook: BlogSettingsFormExtras
    • +
    • FIXED: <%if(blogsetting,bcomments,1)%> skinvars were not working
    • +
    • ADDED: <%if(loggedin)%> skinvars were not working
    • +
    +
  • +
  • + Nucleus v2.0 beta (January 18, 2003) +
      +
    • FIXED: Highlighted text no longer has <!--h--> in it
    • +
    • ADDED; Plugin hook: PostAuthentication
    • +
    • ADDED: Plugin hooks PreAddItemForm, AddItemFormExtras and EditItemFormExtras
    • +
    • CHANGED: Notifications emails (new comment, etc) are not sent to the person causing the notification (comment author)
    • +
    • ADDED: plugins can access global variables $currentTemplateName and $currentSkinName
    • +
    • CHANGED: Spaces after commas in <%image%>, <%popup%>, <%media%>
    • +
    • FIXED: HTML to Text conversion didn't always work
    • +
    • ADDED: <%date%> templatevars extras (rfc822 & rfc822GMT) (Xiffy)
    • +
    • ADDED: ranges for <%blog(...)%> and <%otherblog(...)%> skinvars
    • +
    • ADDED: templatevars <%author(email)%>, <%author(url)%> and <%author(id)%<
    • +
    • CHANGED: Added info on new weblog creation (split up creation process into two steps)
    • +
    • FIXED: Login screen after email address change did not work correctly
    • +
    • ADDED: Plugin Hook: PrePluginOptionsEdit
    • +
    • ADDED: Added a getMinNucleusVersion method to the plugin interface
    • +
    • ADDED: PostPluginOptionsUpdate plugin event
    • +
    • ADDED: Javascript toolbar: align left/center/right buttons (Irmo)
    • +
    • ADDED: RSD skin/template
    • +
    • ADDED: 'Fancy' URLs option & support files. Allows for URLs like http://hostname/archive/1/2003-01-05 instead of http://hostname/index.php?blogid=1&archive=2003-01-05
    • +
    • ADDED: RSS 2.0 skin/template (Xiffy)
    • +
    • ADDED: skinvar <%skinname%>
    • +
    • ADDED: if/else in skins. parameters for 'if' are currently 'category' (=ifcat) or 'blogsetting/settingname' (settingname = columnname from database...)
    • +
    • ADDED: Etag/If-None-Match support for xml-rss.php (needs some more work)
    • +
    • FIXED: more friendly bookmarklet for Opera 6 users (all tabs are visible, editing through bookmarklet works)
    • +
    • ADDED: on edit item, the post time can be changed (only if 'allow post to past' is enabled)
    • +
    • ADDED: 'Allow Post to Past' option on weblog basis
    • +
    • ADDED: IncludeMode and IncludePrefix settings in nucleus_skin_desc + interface to change these settings + user IncludePrefix while parsing includes.
    • +
    • CHANGED: nucleusbutton skinvar now takes into account IncludeMode
    • +
    • CHANGED: btimeoffset column is now DECIMAL instead of INT
    • +
    • CHANGED: took away actionurl parameters from commentform and membermailform skinvars (it's a global setting now)
    • +
    • ADDED: <%set(property,value)%< skin/template-var to set global parser properties. Only one option defined so far: 'IncludeMode'. Can be 'skindir' or 'normal' and affects the include/parseinclude/phpinclude skin/templatevars
    • +
    • ADDED: <%skinfile(filename)%> skinvar (to be used on imported skins)
    • +
    • ADDED: $CONF['SkinsURL'] and $DIR_SKINS (config.php)
    • +
    • CHANGED: friendly names used on skin edit (instead of 'index', 'item' etc)
    • +
    • ADDED: action url to global settings (action.php location)
    • +
    • ADDED: $desturl and $actionurl parameters on membermailform skinvar
    • +
    • ADDED: skin import/export class
    • +
    • CHANGED: media library now works with multiple collections, of which one is private to the site member, and the rest is globally shared.
    • +
    • CHANGED: base skin can now be changed (it's now a config setting). This skin is ONLY used in two cased: when all else fails, and when the selected skin does not have contents for the needed skinpart
    • +
    • CHANGED: positive and negative karma votes are now kept separately, since that works better and is more flexible. The <%karma%> templatevar received an extra parameter to select which information to show
    • +
    • ADDED: skinvars archivenext/archiveprev/archivetype
    • +
    • CHANGED: skinvars nextlink/prevlink now also work on archive skins
    • +
    • CHANGED: move item now also allows to choose a category
    • +
    • CHANGED: new items can be added to other blogs also now
    • +
    • FIXED: archivedate skinvar displaying wrong date
    • +
    • FIXED: serverVar function was not working when using vars4.0.6.php
    • +
    • ADDED: now also listing category in itemlist
    • +
    • CHANGED: Admin Area now uses the Site Name instead of Nucleus
    • +
    • CHANGED: admin.css and admin area: corrected h1, h2, h3 depth levels
    • +
    • ADDED: batch operations
    • +
    • FIXED: when language settings are changed, the new language is used immediately (only for global settings, not for member settings)
    • +
    • CHANGED: archivelist query now uses the SUBSTRING MySQL function instead of the YEAR/DAYOFMONTH/MONTH functions (caused trouble for some people)
    • +
    • ADDED: maxlength attributes on forms
    • +
    • CHANGED: commentlists: placed time/author in same table cell
    • +
    • ADDED: extra convertor for Blogger blogs that use YACCS comments (exportable in CAIF format)
    • +
    • FIXED: some possible security issues (thanks to Morgan Tocker)
    • +
    • FIXED: shortening of strings does not corrupt HTML entities anymore (e.g. in RSS-feeds)
    • +
    • CHANGED: links in comments are now handled differently. Part of the URL is now displayed instead of just http://.../
    • +
    • ADDED: Opera version of bookmarklet
    • +
    • ADDED: selectLanguage() function to force the use of a certain language file
    • +
    • REMOVED: there was a plugin event AddItem which was actually not needed at all (wasn't included in the documentation too)
    • +
    • ADDED: archivelist skinvars now takes an extra limit-parameter
    • +
    • CHANGED: moved all forms which can be included through skinvar out of SKIN.php and into .template files in the nucleus/forms directory.
    • +
    • FIXED: 'clone skin' did not copy contenttype
    • +
    • FIXED: Errors in XML-RSS template (upgrading users might need to change this manually or by importing an updated skin)
    • +
    +
  • +
  • + Nucleus v1.55 (August 26, 2002) +
      +
    • ADDED: <%archivedaylist%> and <%otherarchivedaylist%> skinvars (to show archives by day instead of by month)
    • +
    • FIXED: PHP error on createAccount through action.php
    • +
    • ADDED: new parseFile-method available in index.php. Allows to parse non-blog pages with skinvars
    • +
    • FIXED: editing comments with hyperreffed links
    • +
    • ADDED: 'delete item' option on edit item, plus 'delete item' confirmation screens (also on bookmarklet)
    • +
    • CHANGED: on multi-blog systems, the admin now only gets to see the blogs for which (s)he is on the team. All other blogs are available through an 'show all blogs...' link
    • +
    • FIXED: link to recent items after weblogs.com ping was broken
    • +
    • CHANGED: plugin event call 'PreAddComment' moved to immediately before the item is added to the database
    • +
    • FIXED: tab-orders were not correct on multiple admin pages
    • +
    • ADDED: <%itemid%> and <%itemlink%> available on item pages
    • +
    • FIXED: install.php now works when the PHP option magic_quotes_runtime is enabled
    • +
    • CHANGED: install.php gives an error when PHP is compiled without MySQL installed
    • +
    • CHANGED: install.php automatically fills the 'mysql hostname' field when PHP option mysql.default_host is set.
    • +
    • FIXED: greymatter convert was not putting a reference to the weblog in the comments table.
    • +
    • CHANGED: added some linebreaks in the login screen of the admin area
    • +
    • ADDED: new plugin events: PreAddItem, PreUpdateItem, PrepareItemForEdit, PreUpdateComment, PrepareCommentForEdit
    • +
    • ADDED: JavaScript to hide empty fields when editing templates
    • +
    • CHANGED: Admin area CSS now uses relative fontsizes and fontsize-keywords (also added trick to make IE5 get it right)
    • +
    • FIXED: backup was broken :(
    • +
    • CHANGED: replaced an SQL query that caused problems (NATURAL JOIN replaced by implicit inner join)
    • +
    • ADDED: <%self%> available in categorylist templates
    • +
    • ADDED: <%itemtitle%> skinvar available on item-skins
    • +
    • FIXED: editing a comment you made in a blog that's not your own resulted in a 'disallowed action' error
    • +
    • FIXED: plugin was listed twice in the list of available skinvars
    • +
    • ADDED: <%archivedate%> skinvar on archive skins
    • +
    • FIXED: admininstrators could not edit details of other members
    • +
    +
  • +
  • + Nucleus v1.5 (August 13, 2002) +
      +
    • ADDED: Introducing plugins (define your own skinvars and templatevars, add event listeners, ...)
    • +
    • CHANGED: simpler and more accessible default templates/skins
    • +
    • FIXED: GreyMatter convert now works when the asp_tags option in PHP is enabled
    • +
    • ADDED: title and authorName fields in Blogger API getRecentItems call
    • +
    • ADDED: HTML label tags for radio buttons and checkboxes (this way you can click anywhere on the text instead of only on the radio button/checkbox itself)
    • +
    • FIXED: deleting a comment you made in a blog that's not your own resulted in a 'disallowed action' error (thanks moraes)
    • +
    • CHANGED: the place where comments are inserted can now be chosen from within the template. Just include <%comments%> in the ITEM templatepart whereever you want the comment count (or comments) to appear. In upgrading, the old ordening is imitated by adding '<%comments%>' to the end of the ITEM template part.
    • +
    • CHANGED: now trimming parameters that were passed to skinvars/templatevars
    • +
    • ADDED: <%referer%> skinvar, which inserts HTTP_REFERER
    • +
    • ADDED: '- New Category -' can now be chosen on add/edit item (only for blog admins). A new category is then created, and the chance is given to edit the category details.
    • +
    • ADDED: optional attributes for templatevars <%time(format)%>, <%date(format)%>, <%syndicate_title(maxLength)%>, <%syndicate_description(maxLength)%>
    • +
    • ADDED: new user registrations show up in action log
    • +
    • ADDED: new option to allow non-members to send messages (the membermailform)
    • +
    • FIXED: when an admin edits an item written by someone else, and uploads an image, the image is now saved under the original authors media directory
    • +
    • CHANGED: <%author(realname)%> in item templates now inserts the real name of the author
    • +
    • FIXED: install.php now works when magic_quotes_gpc is disabled
    • +
    • ADDED: New settings: PluginURL, MaxUploadSize, ProtectMemNames
    • +
    • ADDED: hotlinks to the defined skinparts from the skin overview (also gives a good view on which skinparts have been defined and which have not been defined)
    • +
    • ADDED: <%smartbody%> for item templates, which chooses between showing the body and extended part, based on the extended part being empty or not. Using this, the body text can be your full text, and the extended part could be seen as an 'introduction', which you want to show on the front page. (request from smarko)
    • +
    • ADDED: <%edit%>, <%editlink%> and <%editpopupcode%> can be used in item templates (and in items themselves) to insert a link to where the item can be edited/deleted. (default setting uses bookmarklet to do this). The edit links only get shown when the user is allowed to edit a certain item (blog admin or item author).
    • +
    • FIXED: bookmarklet now works correctly when magic_quotes_gpc and register_globals are turned off
    • +
    • ADDED: PHP and MySQL versions are listed during the installation proces, with warnings when those version numbers are lower than what Nucleus requires
    • +
    • CHANGED: item parsing method changed, so it's more easily extensible. plugin, parsedinclude, include and phpinclude are now also allowed in some templates. Inside items, there are also 3 allowed variables: 'image', 'media' and 'popup'
    • +
    • FIXED: image popups didn't work with register_globals disabled
    • +
    • CHANGED: renamed method: getBlogidFromName -> getBlogIDFromName (consistency)
    • +
    • ADDED: method selectCategory($name)
    • +
    • FIXED: Nucleus now handles data correctly when magic_quotes_gpc is disabled (solves some problems with template editing)
    • +
    • CHANGED: categories in selection box are now sorted by name (tip from katatonik)
    • +
    • FIXED: Not all tables got exported on backup :( (thanks Xiffy!)
    • +
    • FIXED: add item form didn't handle keyboard shortcuts correctly (thanks Hop!)
    • +
    • CHANGED: 'remember me' checkbox is now checked when the information was remembered from before (this way, the cookie gets set again and does not expire)
    • +
    • FIXED: after a category got selected through skinvar parameters, skinvars applying to all categories also got applied only to the last category that was selected (thanks Xiffy!)
    • +
    • ADDED: table nucleus_comment got an extra cblog column (redundant) to allow to find the blog that goes with a comment more easily.
    • +
    • FIXED: email address checking routine (false email addresses like foo@@bar.com were allowed)
    • +
    • CHANGED: New installations now get a robots.txt file (disallows karma voting/commenting/... by bots)
    • +
    • CHANGED: JavaScript preview now shows image outlines and popup image links
    • +
    • CHANGED: searchform now available on ALL skintypes
    • +
    • FIXED: headers in globalfunctions/SKIN.php now sent _only_ when no other headers have been sent before. Should make including easier.
    • +
    • CHANGED: RSS-auto-discovery tag in default skin
    • +
    • CHANGED: formfields got labels (accessibility issue). Also access keys have been defined: L for login, 4 for Search (on windows, actions keys are used together with the ALT key)
    • +
    • ADDED: left and right box buttons on JS toolbar
    • +
    • FIXED: truncated entry when login is requested after adding (data didn't get passed on correctly)
    • +
    • ADDED: <%authorlink%> to template vars for item templates (this one can take catid into account)
    • +
    • ADDED: $CONF['Self'] => $CONF['ItemURL'], $CONF['IndexURL'], ... to optionally allow people to use different files for items/archives/...
    • +
    • CHANGED: Now using mysql_fetch_assoc instead of mysql_fetch_array (efficiency)
    • +
    • CHANGED: The <%searchresults%> and <%othersearchresults%> skintags got an extra parameter to limit the number of results (defaults to 50)
    • +
    • FIXED: doError did not take into account chosen skin
    • +
    • FIXED: Commentform not shown anymore for closed items (a message is shown instead)
    • +
    • CHANGED: Removed all unneccessary javascript: links (deprecated)
    • +
    • CHANGED: Media: Procentual width and height values are now allowed in image and inline constructs (e.g. <%image(bla.gif|50%|50%|lala)%>)
    • +
    • FIXED: Blogger API: getPost wasn't returning category name
    • +
    • FIXED: Blogger API: getRecentPosts wasn't converting linebreaks
    • +
    • FIXED: surpressed warning on mysql_close
    • +
    • FIXED: install-script now also accepts email addresses that contain uppercase characters
    • +
    • FIXED: imported items did not show up in the weblog
    • +
    • FIXED: blogger api <title> thingie didn't work
    • +
    • CHANGED: Made all uploaded files be chmodded to 644
    • +
    • FIXED: template cloning didn't clone all parts
    • +
    • FIXED: After new user registration, there was a redirect to the members url (use 'desturl' now to indicate destination url)
    • +
    • ...and a lot of small changes
    • +
    +
  • +
  • + Nucleus v1.1 (April 30, 2002) +
      +
    • Started assuming that at least PHP 4.0.5 is available. (for older PHP versions, some small code-changes should do the trick)
    • +
    • Added bookmarklets for Mac/IE5 users and Mozilla. Also, made the title of the page also show up in the title field of the new item. Makes more sense. (thanks to Ricardo Lamego)
    • +
    • Made the predefined PHP variables available in scripts called through <%phpinclude(..)%> (thanks to Polskaya for noticing the problem)
    • +
    • Fixed: <%additemform%> and <%nucleusbutton%> didn't work when admin area was not in a dir named 'nucleus'
    • +
    • Added: <%sitevar(adminurl)%> and shortcut <%adminurl%> to include the URL of the admin area
    • +
    • Changed all references to nucleus.demuynck.org into references to nucleuscms.org
    • +
    • Extra settings: cookie domain, cookie path, secure cookie (for https)
    • +
    • Instead of stripping tags in comments, < and > are now replaced by their entities (&lt; and &gt;). This way, greater than and lower than signs can be used in comments (inspiration by Steven Verbruggen)
    • +
    • Added charset to language files, so international character sets can be used when needed (forum)
    • +
    • Added an extra content-type attribute to skins, so the output type can be set correctly by Nucleus
    • +
    • Removed the 'headlines' skin and templates. Don't want new users to get too confused.
    • +
    • Notification emails now also get the senders display name
    • +
    • All errors now handled by doError method in globalfunctions.php (makes it easier when you want to use your own error handler instead of the error skin)
    • +
    • Site-members can now override the default site-language setting for the pages they visit
    • +
    • Added skinvars <%otherarchive%> and <%othersearchresults%> for use on archive/search pages.
    • +
    • Skinvar <%searchform%> now takes an optional parameter: blogname (for which you want a search form)
    • +
    • Introducing categories! (new settings; new skinvars category, categorylist and ifcat; new template vars <%category%>, <%catid%> and <%categorylink%>; new optional category params for skinvars blog, otherblog, archive, otherarchive, archivelist, otherarchivelist)
    • +
    • Fixed: error skin didn't get copied on skin cloning
    • +
    • Even more new skinvars to make skinning easier: <%todaylink%>, <%archivelink%>, <%prevlink%> and <%nextlink%> (forum)
    • +
    • Fixed: The install script was giving warnings about uninitialized variables on some PHP configurations
    • +
    • Moved version history to separate file
    • +
    • Made upgrade scripts a little more robust and more verbose
    • +
    • XML-RPC: metaWeblog API support
    • +
    • XML-RPC: <title> and <category> tags can now be used with the Blogger API (similar to b2)
    • +
    • Fixed problem with create account (forum)
    • +
    • Made it so Nucleus still works when using PHP >4.1.0 with register_globals turned off, which is the default setting for new installations (forum)
    • +
    • Media library: popup now requests login when needed
    • +
    • Media library: option to auto-prefix uploaded files with date (turned on by default)
    • +
    • Backup/Restore: backup file name now has date + nucleus.sql renamed to install.sql + extra "I'm sure"-checkbox on restore to avoid errors (forum)
    • +
    • Javascript toolbar: simpler version available that works in Mozilla
    • +
    • Fixed: Closed items don't show 'no comments' link anymore (forum)
    • +
    • Fixed: Drafts items don't result in 'January 1970' entries in archivelist
    • +
    • Fixed: Added <image> tag to xmlrss skin for new installs. It's required. (defaults to a nucleus logo, up to you to change it)
    • +
    • Fixed: Error with restore (content with semicolons in it would not get restored)
    • +
    • Added: Extra notification options
    • +
    • Archives can now also be accessed by day, and an extra daylink template var is available in date headers
    • +
    • Fixes in default skin
    • +
    • As always, lots of small fixes & code rewrites
    • +
    • + Changes (additions to and deletions from) language file: +
        +
      • _SETTINGS_COOKIES_TITLE
      • +
      • _SETTINGS_COOKIEDOMAIN
      • +
      • _SETTINGS_COOKIEPATH
      • +
      • _SETTINGS_COOKIESECURE
      • +
      • _SKIN_UPDATED
      • +
      • _TEMPLATE_UPDATED
      • +
      • _CHARSET
      • +
      • _MEMBERS_DEFLANG
      • +
      • _MEMBERS_USESITELANG
      • +
      • _ADD_CATEGORY
      • +
      • _ADD_DRAFTNFUTURE
      • +
      • _ERROR_NOSUCHLANGUAGE
      • +
      • _ERROR_NOSUCHCATEGORY
      • +
      • _ERROR_DELETEDEFCATEGORY
      • +
      • _ERROR_DELETELASTCATEGORY
      • +
      • _ERROR_BADCATEGORYNAME
      • +
      • _ERROR_DUPCATEGORYNAME
      • +
      • _CONFIRMTXT_CATEGORY
      • +
      • _DELETED_CATEGORY
      • +
      • _LISTS_TYPE
      • +
      • _SKIN_TYPE
      • +
      • _YOURSITE
      • +
      • _LIST_COMMENT_HOST
      • +
      • _SETTINGS_MEDIA
      • +
      • _SETTINGS_MEDIAPREFIX
      • +
      • _SETTINGS_MEMBERS
      • +
      • _LOGIN_FORGOT
      • +
      • _TEMPLATE_CATEGORYLIST
      • +
      • _TEMPLATE_CATHEADER
      • +
      • _TEMPLATE_CATITEM
      • +
      • _TEMPLATE_CATFOOTER
      • +
      • _EBLOG_DEFCAT
      • +
      • _EBLOG_CAT_TITLE
      • +
      • _EBLOG_CAT_NAME
      • +
      • _EBLOG_CAT_DESC
      • +
      • _EBLOG_CAT_CREATE
      • +
      • _EBLOG_CAT_UPDATE
      • +
      • _EBLOG_CAT_UPDATE_BTN
      • +
      • _EBLOG_NOTIFY_ON
      • +
      • _EBLOG_NOTIFY_COMMENT
      • +
      • _EBLOG_NOTIFY_KARMA
      • +
      • _EBLOG_NOTIFY_ITEM
      • + +
      +
    • +
    +
  • +
  • + Nucleus v1.0 (March 6, 2002) +
      +
    • Fixed: width & height of <%image()%> construct
    • +
    • Changed: windows in popup windows don't have a white border anymore (see forum) +
    • +
    • Fixed: bug with single quotes in image/popup constructs (see message)
    • +
    • Fixed: fatal error in 'send password' method (thanks to HANK!)
    • +
    • Fixed: removed some illegal characters from code documentation since they caused parse errors on some systems (thanks to Martin Belle-Isle and Rodrigo Moraes; see forum for extra details)
    • +
    • Refined: added a note about spaces to the install-script (see forum)
    • +
    • Added: donate-link on admin page (hey! it's free, I have the right to bug you with this sort of things ;-)
    • +
    • Changed: it's not possible anymore to create a draft future item. That didn't make sense. You can now choose whether you want to publish a draft item either immediately or in the future when editing the item
    • +
    • Changed: made it so that the 'disable comments' choice is not offered anymore on add/edit item form when commenting is disabled in the blogsettings
    • +
    • Fixed: where possible, redirection after commenting is now done to the correct file (instead of index.php)
    • +
    • Fixed: bug where only superadmins could change usernames/passwords, even if the corresponding option in the settings was set (thx slekke)
    • +
    • Added: allowed variables for a skinpart now shown when editing skin
    • +
    • Wrote new re-usable parser that does skin parsing in a way that is more flexible and less prone to errors.
    • +
    • Changed: passwords now stored in encrypted form
    • +
    • Optimizing: optimized some queries
    • +
    • Added: <%otherarchivelist(blogname,templatename)%> in skins
    • +
    • Added: Blogger Convert
    • +
    • Added: "shared computer" checkbox on login. Checking this box will make your cookie expire at the end of the session (instead of taking the global site setting) (see forum)
    • +
    • Added: "remember me" checkbox on comment forms for non-members
    • +
    • Most language related things are now moved to language files. Now you can roll your own :)
    • +
    • Added: optional parameters rows/cols in membermailform skinvar
    • +
    • Added: skinvars: <%phpinclude(file)%> and <%parsedinclude(file)%>. <%plugin%> is now deprecated (in favor of phpinclude). The plugins directory should also not be used anymore (it'll get another function in a later version)
    • +
    • Added: skinvar <%self%> which includes the filename of the currently executing script (index.php or whatever is sen in $CONF['Self'])
    • +
    • Automatich hyperlink detection in comments now also recognizes comma's
    • +
    • Added: selectSkin('name') and selectBlog('name') functions available for use in index.php
    • +
    • Added: Small restore-guide for the worst case scenario
    • +
    • Added: A toolbar with markup buttons on add/edit item, plus option to disable it in the settings. When Mozilla is used, Nucleus tries to disable it automatically (since it doesn't work there anyway)
    • +
    • Fixed: media were not expanded in extended text (thx raoul)
    • +
    • Changed javascript code of popup help so it works better in Mozilla (thanks to Paul Sowden)
    • +
    • UI improvements
    • +
    • New default skin (the old one was just plain ugly :-)
    • +
    • Small bug-fixes
    • +
    +
  • +
  • + Nucleus v0.96 (December 13, 2001) +
      +
    • Added: add-item-preview now also in admin area
    • +
    • Added: action log
    • +
    • Added: media library and file-upload
    • +
    • Added: karma votes
    • +
    • Added: Option to disable loginname/password changing by members
    • +
    • Added: simple popup windows for image viewing
    • +
    • Fixed: E-mail address validation check does not longer require addresses to be all lowercase
    • +
    • Fixed: magic_quotes are now explicitly disabled, solving escaping problems (thanks to Dennis Slagers)
    • +
    • Fixed: error handling when pinging weblogs.com
    • +
    • Added: now also storing IP with comments (next to hostname)
    • +
    • Added: IP banlist (to prevent nasty people from commenting/voting)
    • +
    • Changed: Notification mails now include the item's title
    • +
    • Changed: Weblogs can only be deleted by super-admins
    • +
    • Changed: XML-RPC for PHP v1.02
    • +
    • Added: Small guide to changing/setting filepermission in docs
    • +
    • Changed: Upgrade and conversion scripts now get packed separately
    • +
    • Fixed: For error skins, the default skin is used now instead of 'default' (thanks to Slekke)
    • +
    • Fixed: The code to insert the Nucleus button was not XHTML (strict) compliant, oh my!
    • +
    • GM Conversion: The conversion of {{popup}} now works correctly (and copies image files to the media dir)
    • +
    • Fixed: a minor bug in XML-RPC call blogger.getUsersBlogs
    • +
    • Fixed: a major bug in XML-RPC call blogger.getRecentPosts
    • +
    • Fixed: problem concerning template editing and the XML-RPC call blogger.setTemplate
    • +
    +
  • +
  • + Nucleus v0.95 (October 10, 2001) +
      +
    • Added: per-blog setting to enable/disable line break conversion
    • +
    • Added: per-blog setting to send a ping to Userland (weblogs.com) when you update your blog. This way, you'll be able to end up in the weblogs.com update-list
    • +
    • Switched to v1.01 of the XML-RPC for PHP libs (was v1.0)
    • +
    • Upgrade scripts are available (for upgrade from versions < 0.95 to v0.95)
    • +
    • Added: <%previtem%> and <%nextitem%> can be used in item-skins
    • +
    • Some changes in the default database dump
    • +
    +
  • +
  • + Nucleus v0.94 (September 27, 2001) +
      +
    • Changed: 'Add Item' in admin-area now redirects to blog url (if available)
    • +
    • Changed: headlines.php and xml-rss.php adapted to behave better in disabled-site situations
    • +
    • Changed: <%userlink%> got smarter in recognizing e-mail addresses
    • +
    • Added: tabindices in forms to make traversal with the TAB-button more natural
    • +
    • Fixed: bookmarklet login did not pass data correctly
    • +
    • Added: JavaScript to open links in new window (javascrip/opennew.js)
    • +
    • Added: <%year%> and <%month%> in templates for archivelist-items
    • +
    • CSS lightly changed because IE6 is a little bit more picky (which is actually a good thing)
    • +
    • Fixed: popup code (JavaScript) for help-windows (didn't work ok in IE6)
    • +
    • Added: Description or summary of what you are going to delete on the confirmation screens
    • +
    • Added: Workaround (for advanced users) to get your archives into search engines (on tips & suggestions page)
    • +
    • Fixed: A bug in the XML-RPC server
    • +
    +
  • +
  • + Nucleus v0.93 (September 19, 2001) +
      +
    • Added: friendly error message on error with nucleusdir definition in config.php
    • +
    • Changed: call_user_func instead of eval
    • +
    • Added: forms included by skin variables now have class="formfield" and class="formbutton" arguments, to allow more control on the layout
    • +
    • Created a 'Tips & Suggestions' page next to this manual
    • +
    • XML-RPC API: added nucleus.addDatedItem method
    • +
    • XML-RPC API: added nucleus.editItem method
    • +
    • XML-RPC API: added nucleus.getRecentItems method
    • +
    • XML-RPC API: added nucleus.getItem method
    • +
    • Added documentation for XML-RPC nucleus.* methods
    • +
    • Fix: Search results didn't show the amount of comments. Now they do.
    • +
    +
  • +
  • + Nucleus v0.92 (September 18, 2001) +
      +
    • GM conversion: {{linkmo and {{emailmo conversion now also works with PHP versions < 4.0.4
    • +
    • GM conversion: Fixed occasional JavaScript errors with {{linkmo and {{emailmo
    • +
    • GM conversion: Fixed [read more] bug
    • +
    • GM conversion: Extra intelligence in choosing URL or e-mail to save as userid for comments
    • +
    • Added: ?archivelist can now be used without arguments to show the list of archives for the default weblog
    • +
    • Fixed: Editing comments now does not allow the use of HTML anymore. The same checks as when adding new comments are performed on update attempts.
    • +
    • Added: check to find out if update file is writable (on changing blogsettings and creating new weblog)
    • +
    • Changed: hard returns in add item now get converted to line breaks (<br />), Also, modified javascript code that handles preview to behave in the same way.
    • +
    • Changed: <%commentform%> does not show user and userid fields for logged in users. Instead, it shows the name of the user.
    • +
    • GM Conversion: {{popup command now also translated (will be converted into a link to the image, not into a popup window!)
    • +
    • Updated: default templates (?archivelist)
    • +
    • Changed: E-mail Address Validation Check
    • +
    +
  • +
  • + Nucleus v0.91 (September 15, 2001) +
      +
    • Improved conversion for GreyMatter blogs. Special markup commands are now recognized. (thanks to Raoul for pointing this out)
    • +
    +
  • +
  • + Nucleus v0.90 [beta 2 release] (September 14, 2001) +
      +
    • an install-script is now available, no more messing around in shells
    • +
    • created default skins/templates for a release version
    • +
    • option to store 'last visit' cookie and to use 'new' indication on items
    • +
    • ?archivelist=.. request can now also be used with a blogid instead of a blog shortname
    • +
    • forgotten password reminder
    • +
    • Bookmarklet can be used without being logged in. A login prompt is shown in that case.
    • +
    • When not being logged in to the admin area, requested actions are now completed after passing login information. Before, you would always end up at the action overview after passing login information, and your requested action would have gone lost.
    • +
    • Super-admins now have access to all blogs, even if they are not on the team
    • +
    • Logtext passed to bookmarklet now gets <br /> added before each newline
    • +
    • Added little JavaScript to prevent submitting form data twice
    • +
    • Sample plugin: google referer check
    • +
    • Conversion script to import GreyMatter blogs included
    • +
    • Removed 'assign comment to member' feature
    • +
    • Added toolbar to popup help windows (because of the back/forward buttons)
    • +
    • Added <%blogurl%> variable for item templates
    • +
    • bug-fixes
    • +
    • small esthetic changes
    • +
    • ...
    • +
    +
  • +
  • + Nucleus v0.80 [beta 1 release] (September 2, 2001) +
      +
    • XML-RPC Interface implementing the blogger methods
    • +
    • fixes and code-reorganisation
    • +
    • popup-help on item pages
    • +
    • bookmarklets/right click blogging
    • +
    • the start of something that looks like documentation
    • +
    +
  • +
  • + Nucleus v0.70 [not released] (August 20, 2001) +
      +
    • mySQL instead of XML
    • +
    • extensive admin area
    • +
    • 'member' concept, including blog teams/admins/...
    • +
    • rewrote most of the code
    • +
    • skin format slightly changed
    • +
    • almost ready for public release :)
    • +
    • adding items with instant preview (when viewing the weblog)
    • +
    • LOCALE used for time/date notations.
    • +
    +
  • +
  • + Nucleus v0.60 and earlier (since February 2001) +
    + no history (XML versions with limited functions) +
  • +
+ +
+ + diff --git a/utf8/nucleus/documentation/icon-help.gif b/utf8/nucleus/documentation/icon-help.gif new file mode 100755 index 0000000000000000000000000000000000000000..12cabfd2a33832106e4282ac4756de9ee085d494 GIT binary patch literal 157 zcmV;O0Al|~Nk%w1VGjTg0J8u9T5FtRbER{8t$U2Mgp{?IpuwQ6#U>p&fd<> z-qzmd-skV{@Av=z|3LphA^8LW000jFEC2ui01p5U000C^@X1LlZO9a(tXu;iiUm_G z!l)9>)P$lVkHv(jqay~3WZ<#UK~ezfMg|}5D3mCcs(^_IY`S0oX0p;K1V({F%dtHs literal 0 HcmV?d00001 diff --git a/utf8/nucleus/documentation/icon-up.gif b/utf8/nucleus/documentation/icon-up.gif new file mode 100755 index 0000000000000000000000000000000000000000..4e47be1e4f16ca59dfea3d3b116f29ac5b64b342 GIT binary patch literal 159 zcmV;Q0AT+|Nk%w1VGjTg0J8u9T5FtRbER{8t$U2Mgp{?IpuwQ6#U>p&fd<> z-qzmd-skV{@Av=z{{a60A^8LW000jFEC2ui01p5U000C`@X1LlZO9a(tXu;iiUm_G z!l)9>)P$p>789a6_!umb5z9HzK~fL}0YO6#DZ9yr4~1$92$+b}5mfTZDl3gbKzC?) N7KlUQ>S<3R06Y4NMGgP} literal 0 HcmV?d00001 diff --git a/utf8/nucleus/documentation/index.html b/utf8/nucleus/documentation/index.html new file mode 100755 index 0000000..10c69e6 --- /dev/null +++ b/utf8/nucleus/documentation/index.html @@ -0,0 +1,474 @@ + + + + + + + + Nucleus CMS マニュアル + + + + + +
+ 小 + 中 + 大 +
+ +
+ +
+ Nucleus CMS マニュアル + (v3.4) +
+ +
+ はじめに: +
    +
  • このマニュアルは管理エリアにて使用しているポップアップヘルプ(help.html)に記載されていない内容を収録しております。Nucleusのインストールガイドも収録しておりますので参考にしてください。
  • +
  • デベロッパーの方は、 開発者向けマニュアル を併せてご覧下さい。
  • +
+
+ +

目次

+ + + +

Nucleus とはback to top

+ +

+ Nucleus とはコンテンツマネジメントシステム(Contents Management System : 略してCMS)ツールです。PHPで書かれており、blogサイト運営に強力に役立ちます。主な特徴は以下の通りです: +

+ +
    +
  • 自分のサーバで運用できる
  • +
  • 複数のblog設置が可能で単一ページに複数blog表示も可能
  • +
  • プラグインによる機能拡張
  • +
  • コメント投稿の標準装備
  • +
  • 自動過去ログ作成
  • +
  • カテゴリ分け
  • +
  • 検索機能の標準装備
  • +
  • 複数人による記事投稿
  • +
  • 未来の日付での投稿
  • +
  • 草稿機能
  • +
  • 拡張性のある管理エリア
  • +
  • 画像などのファイル添付機能
  • +
  • ページデザインのフルカスタマイズ
  • +
  • スキンのインポート/エクスポート
  • +
  • コメント悪用者のブロック
  • +
  • RSS 自動作成
  • +
  • インストールが簡単
  • +
  • バックアップが簡単
  • +
  • XML-RPC インターフェイス ( Blogger API / metaWeblog API / Movable Type API 採用)
  • +
  • XHTML 準拠
  • +
  • Blogger と GreyMatter blogsからのコンバートツール
  • +
  • ...
  • +
+ +

+ Nucleusのインストールには以下の環境が必要です: (不明な点はサーバ管理者にお尋ね下さい) +

+ +
    +
  • PHP (バージョン 4.0.6 以降)
  • +
  • MySQL データベース (バージョン 3.23.38 以降)
  • +
  • デザインのカスタマイズをする場合は、HTML と CSS の基礎知識
  • +
+ + + +

+ Nucleus はサイト構築にあたって痒いところに手が届くように設計されています。HTMLに関する知識が全くなく、簡単にblogサイトを持ちたい人は インストール不要のホスティング型のblogサービス(Yahoo! JAPANの該当カテゴリ参照)を利用した方が良いかもしれません。 +

+ + + + +

+

ライセンスについて back to top

+ +

+ Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/) +
+ Copyright (C) 2002-2007 The Nucleus Group +

+ +

このプログラムはフリーウェアです。 + フリーソフトウェア財団(the Free Software Foundation)が公表したGNU一般公共使用許諾(GNU General Public License)の + 「バージョン2」或いはそれ以降の各バージョンの中からいずれかを選択し、 + そのバージョンが定める条項に従ったうえで、本プログラムの再配布・改変を認めています。

+ +

このプログラムがご自身の使用目的に合ったものであれば幸いです。 + しかしながら 、商品性および特定目的に対する適合性に関する黙示的な保証を含み、 + いかなる保証もいたしません。 + 詳細につきましてはGNU 一般公有使用許諾書をお読みください。

+ +

このプログラムと併せてGNU General Public Licenseのコピー + をお受け取りのはずかと思いますが、受取られていない方は「Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA」までその旨をお知らせ下さい。

+ +

+ このソフトウェアを所有することは、これらの条件に同意することを意味します。これらの条件に同意されない方は、所持するこのソフトウェアのコピーを削除してください。 +

+ + +

インストールガイド back to top

+ +
+ 注意: 旧バージョンをすでにご使用の方は、Nucleus Webサイトのアップグレードガイドの方をご覧下さい。 +
+ +

+ ほんの数ステップでインストールは完了します。手順は以下の通り: +

+ +

1. 圧縮ファイルの解凍

+ +

+ ダウンロードしたパッケージファイルを解凍します。生成されるディレクトリ構成は以下のようになっているかをご確認下さい。(*はディレクトリ以下にファイルがある事を意味します) +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
/*(サイト表示用メインファイル)
/nucleus/*(サイト管理用ファイル)
/nucleus/javascript/*(javascripts スクリプト)
/nucleus/libs/*(Nucleus のコアライブラリ)
/nucleus/language/*(言語ファイル)
/nucleus/plugins/*(プラグインファイル)
/nucleus/xmlrpc/*(XML-RPC インターフェイス用ファイル)
/nucleus/documentation/*(説明書)
/nucleus/styles/*(管理エリア専用cssファイル)
/nucleus/images/*(管理エリア専用画像ファイル)
/nucleus/forms/*(入力フォーム部品ファイル)
/extra/*(fancy URL用ファイルなど特殊なファイル)
/skins/*(スキンファイル [読込み時にも使用])
/media/*(添付ファイル [インストール時は空])
+ +
+ 補足: +
    +
  • 英語バージョンは一部の環境において正常に解凍できないとの報告があります。ファイルサイズが0バイトでないことを確認してください。
  • +
  • /nucleus/forms/ ディレクトリにあるファイルの拡張子はすべて「.template」です。
    + ファイル名が長いため拡張子の一部がカットされている場合がありますので確認してください。
  • +
+
+ +

2. サーバに転送

+ +

+ FTPソフトを使ってサーバに全部のファイルを転送します。拡張子が.phpのファイルは必ずASCIIモードで転送してください。モードを間違えると動作しません。 +

+ +

パーミッションの変更(やらなくてもOK):

+ +
    +
  1. + この段階で config.php のパーミッションを 666に変更しておくと、後のインストール手順を減らす事ができます。この手順をスキップした方は手動で config.php を編集するだけですのでどちらでも構いません。 (パーミッションの変更方法につきましてはパーミッションの変更ガイドを参照してください) +
  2. +
  3. + 画像など添付ファイルを使用される予定のある方は、mediaディレクトリを作成してこのディレクトリのパーミッションを書き込み可能に変更してください。書き込み可能にしておかないとアップロードが正常に行えません。通常は 777 かと思います(パーミッションの変更方法につきましてはパーミッションの変更ガイドを参照してください)。
    (root 権限をお持ちの場合は、ディレクトリを httpd プロセスが動作しているユーザに chgrp してください。通常は httpd もしくはnobody で、ディレクトリは chmod 755 になるでしょう。) +
  4. +
  5. + ファイル編集に SkinFiles プラグインをお使いになる場合は、/skins/ ディレクトリ以下にあるすべてのファイルとディレクトリのパーミッションを変更する必要があるでしょう。ファイルの編集を可能にするには、ファイルのパーミッションは 666 にしておくことになるでしょう(パーミッションの変更方法につきましてはパーミッションの変更ガイドを参照してください)。新しいファイルやディレクトリを作成できるようにするためには、親ディレクトリのパーミッションを 777 にしておくことになるでしょう。 +
  6. +
+ + +

3. install.phpにアクセス

+ +

+ ブラウザを開いてサーバに転送したinstall.phpにアクセスします。URLは下記のようになります。(www.yoursite.com と yourpathの部分は読み替えてください) +

+ +
	http://www.yoursite.com/yourpath/install.php
+ +

+ 表示されたページに必要入力事項を入力します。あらかじめ自動検知して入力済の部分がありますが確認をお願いします。送信後に次に行う手順が表示されますのでそれに従って作業してください。(最後にいくつかのファイルを手動でサーバから削除する作業が必要ですのでお忘れなく。) +

+ +
+ 注意: install.php にアクセスした際、「If you see this text in your browser...」というテキストが表示されたり、 install.phpのダウンロードが促されたりした場合は、そのサーバではphpスクリプトは動作しません。当然、残念ながらphpスクリプトであるNucleusを運用することができません。 +
+ +

4. 完了

+ +

+ インストールが完了したらすぐにトップページにアクセスすることができます。インストール完了画面の一番下にリンクが自動表示されていますのでジャンプして確認してみてください。 +

+ + + + + + + +

セキュリティについて back to top

+ +

mySQL のパスワード

+ +

+ NucleusはphpスクリプトからmySQLデータベースにアクセスしますので、phpスクリプト内にmySQLパスワードを書き込んでおく必要があります。 複数ユーザーで使用するサーバの場合は100%安全ではないことをご了解下さい。また、ログイン名とログインパスワードを盗まれる可能性もあることもお知りおきください。phpスクリプトに重要な情報を埋め込んで使用する事の是非について調べたい方は詳しい方におたずね下さい。 +

+ +

+ この危険性はデータベースを使用するすべてのphpスクリプトに共通する問題です。通常はユーザー側で解決できる問題ではありません。100%安全ではないと言うことを念頭に置いておいて下さい。 +

+ +

クッキー

+ +

+ Nucleus ではログイン情報の保持にクッキーを使用しています。クッキーが盗まれ誰かにログインされる危険性があります。 クッキーを覗いただけではパスワードは推測できません (実際にはパスワードは暗号化して格納しています) が、残念ながら、盗んだクッキーを利用してログインユーザーを偽装することが技術的に可能ではあります。 +

+ +

メディアディレクトリ

+ +

+ 添付ファイルを使用する際はメディアディレクトリのパーミッションを777にする必要があります。777にするという事は、そのサーバ上にいる誰もがそのディレクトリを操作できる権限を持つという事です。しかしながら、オンラインでPHPスクリプトからファイルをアップロードするためにはこの設定は必須です。代替案はありません。 +

+ + + + + +

パフォーマンスについて back to top

+ +

+ ほかのweblogツールとは異なり、Nucleusではあらゆる表示ページをサーバ上に保存しません。アクセスがあったURLを元にデータを呼出しその都度ページを生成して表示するという方法を採っています(動的ページ生成)。 +

+ +

+ この仕組みが原因でトラブルが起きる事はまずありません。1秒あたりものすごい数のアクセスのある大規模なサイトであれば動作に問題があるかもしれませんが、今のところはよくわかっていません。そこそこ大きなサイトで、1つのNucleusで30以上のblogを運用しているサイトでも特に問題点はないという報告を受けていることをご紹介しておきます。 +

+ + + + + + + +

コメント受付時のルール back to top

+ +

+ Nucleus では、コメントの性質を考えて以下のルールを設けています: +

+ +
    +
  • 90字を越える連続した半角の英数字記号の投稿を禁止 (レイアウトが崩れるため)
  • +
  • コメント文は3文字以上であること
  • +
  • コメント文は5,000文字以下であること
  • +
  • ゲストの名前は2文字以上であること
  • +
  • ゲストの名前やe-mail欄は引用符、改行使用禁止
  • +
  • コメント本文の3つの連続改行を1つの改行に置換 (見映え優先)
  • +
  • HTML タグは使用不可能
  • +
  • 左右の余分なスペースは削除
  • +
  • URL はリンクテキストを短縮した上で自動リンク
  • +
+ +

+ これらのルールを変更したい場合はコアファイルの書き換えが必要となります。 +

+ + + + + + +

XML-RPC インターフェイス back to top

+ +
+ Nucleusの XML-RPC インターフェイスにつきましては下記URL参照: +
+ http://www.yourserver.com/yourpath/nucleus/xmlrpc/server.php +
+ +

+ XML-RPC とは、XMLを利用してデータを読み書きする規格です。難しく聞こえるかもしれませんが、このXML-RPCという規格を組み込んでいれば他のツールを使ってデータの読み書きが可能になるという事だけ覚えておいてください。 +

+ +

+ 現在の所、Blogger API、metaWeblog APIとMovable Type APIの3つの規格を充足しています。この規格を使用した記事投稿ツールに興味のある方は、 WB Editor (Windows版:日本語対応) または Ecto (MacOS版:日本語対応不明) を使ってみてください。 +

+ +

+ このXML-RPC インターフェイスの呼出し方法につきましては、開発者向けドキュメントにて解説しています。 + Nucleus - XML-RPC インターフェイスをご覧下さい。 +

+ + + +

困った時は (FAQ) back to top

+ +

Nuleusについて良く聞かれる質問をFAQとしてまとめました。質問される前にご一読下さい。大概のケースでは解決できるのではないでしょうか。 +

+ +
+
このようなエラーが表示されるのですが: Cannot send headers. Headers already sent...
+
+ config.phpの冒頭と末尾に空白(スペース)が入っている場合によく起こります。<? の前、あるいは ?>よりも後にスペースが挿入されていないかどうか確認してください。このスペースを削除するとエラーは解消されます。また、同様に言語ファイルやインストールしているプラグインのファイルについても同じ事が起きますので確認してみてください。 +
+
+ +
+
インストール時にinstall.phpにアクセスするとダウンロードを促されるのですが。
+
そのサーバはPHPプログラムに対応していません。残念ながらそのサーバでNucleusを運用することはできません。
+
+ +
+
トップページにアクセスすると「Connection Error」と表示されました。なぜですか?
+
+ Nucleusがデータベースサーバにアクセスできないことを意味しています。config.phpの最初で定義しているデータベース接続情報が正確かどうかをもう一度確認してみてください(パスワードがxxxxxxのままというケースがよくあります)。 また、本当にmySQLサーバがダウンしているのが原因かもしれません。 +
+
+ +
+
更新記録ファイルに更新情報が記録されないのですが。
+
+ 更新記録ファイルを使うためにはファイルのパーミッションの適切な設定が必要です。またblog設定にて設定する前にこのファイルを置いておく必要があります(空のファイルを作成してアップロードを先にしてください)。この更新記録ファイルのパーミッションは666、このファイルがあるディレクトリは755としてください。 (パーミッションの変更方法につきましてはパーミッションの変更ガイドを参照してください) +
+
+ +
+
XML-RPC インターフェイスを有効にしたくないのですが。
+
xmlrpc/ ディレクトリを削除するだけでOKです。何も問題はありません。
+
+ +
+
RSSの吐出しをしたくないのですが。
+
xml-rss.php ( xml-rss2.php , rsd.php ) を削除して、念のために「xmlrss」(「feeds/rss20」)という名前のスキン/テンプレートを削除してください。
+
+ + +

現在指摘されている問題点 back to top

+ +

制限事項は以下の通りです: +

+ +
    +
  • このリリース時点においては、Nucleus 3.0への公式なログ移行ツールはありません。今後のログ移行ツールの情報はログ移行ツール情報(英語:最新情報) (ログ移行ツール情報(日本語))に掲載していきます。
  • +
  • Ctrl + Shift + A ショートカットキーは ICQ/Trillian と衝突します。
  • +
  • サーバのPHPの設定がセーフモードonの場合、添付ファイルの使用時に問題が生じます。(画像ファイルのサイズが自動判定できない、アップロードがうまくいかない、など)
    *あらかじめmediaディレクトリに「1」、「2」など記事投稿者の数だけ数字のディレクトリを作成しておいて書き込み可能にしておくことで回避できます。
  • +
  • RSSの表示が乱れることがあります。(特殊文字変換が原因。&amp; が &amp;amp; となるなど)
  • +
  • blog設定で入力するメールアドレス欄の登録の上限は255バイトです。ですから、たくさんのメールアドレスを登録することはできません(件数ではなく合計文字数です)。
  • +
  • Mozilla系のブラウザではプレビュー機能がうまく動作しません。
  • +
  • Internet Explorer 6 で記事の投稿直後にたまにブラウザが落ちることがあります。ブラウザが落ちても記事の投稿は反映されています。(このトラブル報告から時間が経っているので解決していればよいのですが...)
  • +
+ + + +

謝辞 back to top

+ +

これまでの開発の陰には以下の方々の協力があったことを忘れてはなりません。どうかご一読を。

+ +

作者

+ +
    +
  • Wouter Demuynck
  • +
+ +

コアファイル改良

+ +
    +
  • Andy Matsubara氏
  • +
  • Armon Toubman氏
  • +
  • Edmond Hui氏
  • +
  • gRegor alias gregorlove氏
  • +
  • Kai Greve alias kg氏
  • +
  • Joel Pan alias ketsugi氏
  • +
  • Kimitake氏
  • +
  • Legolas氏
  • +
  • Niels Leenheer alias rakaz氏
  • +
  • Rodrigo Moraes氏
  • +
  • Jeroen Budts氏
  • +
  • Appie Verschoor氏 (全文検索)
  • +
  • その他たくさんの方々... (開発履歴をご覧下さい)
  • +
+ +

ライブラリなど

+ +
    +
  • Jeff MacMichael氏(NP_SkinFiles プラグイン)
  • +
  • Ivan Fong氏、Moraes氏、Hcgtv氏(Nucleus 3.2 標準スキン)
  • +
  • 各種プラグイン作者の方々
  • +
  • 言語ファイルを提供してくださった方々 (NucleusのWebサイトにて言語ファイルのダウンロードができます)
  • +
  • ロゴを作成してくださったRodrigo Moraes氏
  • +
  • RSS 2.0 スキン作成された Xiffy氏
  • +
  • XML-RPC インターフェイス 部分に使用した 'XML-RPC for PHP' (from Useful Inc.)
  • +
  • バックアップ/リストア部分の開発の元にさせていただいた phpBB
  • +
  • 即時プレビューのJavaScript コード の元にさせていただいたコードを書いた Mijn Kop Thee氏 (dutch) と milov.nl氏
  • +
  • 管理エリアで地球アイコンを使用させていただいている QBullets
  • +
+ +

感謝

+ +

+ Nucleusが今日に至るのも、また、このほかのたくさんの方々の支援に支えられているからです。御礼申し上げます。

+ + + +
+ + + \ No newline at end of file diff --git a/utf8/nucleus/documentation/pics/chmod_menu.png b/utf8/nucleus/documentation/pics/chmod_menu.png new file mode 100755 index 0000000000000000000000000000000000000000..7ffc0796e537f7d96e8f28424b61435843849871 GIT binary patch literal 8134 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 a+y4VM+_BO%z?$3u0000Q8~ijmHe@xud_ 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 ~=sGmhjgof1m`rq4a9(QvjbVMYX0-hnB?|Eq>tg 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 literal 0 HcmV?d00001 diff --git a/utf8/nucleus/documentation/pics/skinsandtemplates.png b/utf8/nucleus/documentation/pics/skinsandtemplates.png new file mode 100755 index 0000000000000000000000000000000000000000..73b16252e0a09caa1733677e56fdba4c157ff54f GIT binary patch literal 15424 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 q + + + + + + + Nucleus - スキンとテンプレートについて + + + + + +
+ 小 + 中 + 大 +
+
+
+スキン & テンプレート +
+ +

Introduction

+ +

+Nucleusマニュアルに戻る +

+ +

Nucleusのインストールは無事完了したと思います。ここでは、ページ表示を定義するスキン/テンプレートの編集について説明をしたいと思います:

+
    +
  1. 標準でインストールされるスキン/テンプレートの編集画面に入ります(又はこれを複製した物を編集すればいつでも標準表示に戻れます)
  2. +
  3. 標準でインストールされるスキン/テンプレートを元に、希望通りの修正を行います
  4. +
  5. 自分で編集したスキン/テンプレートを元に、スタイルシートを定義します
  6. +
+

このドキュメントは、これらの作業を行うにあたりヒントになる事項を紹介します。

+ +

目次

+ + + +

HTMLとCSSの関係について back to top

+ +

+スキンとテンプレートを編集するにあたっては、HTMLとCSSの基礎知識が必要です。このセクションでは基礎知識を得る事ができる解説サイトを紹介しておきます。 +

+ + + + + + + + + +

標準のデザインで使用するファイル back to top

+ +

このセクションでは、標準のスキンで使用しているファイル名と、編集の注意点を説明します。

+ +

標準のスキンは以下の3つのファイルを使用しています:

+
    +
  1. default.css (v3.0は grey.css): ページのデザインを定義するCSS(カスケーディング・スタイルシート)ファイル。色指定やレイアウト指定などを定義します。
  2. +
  3. atom.gif: ページの左上に表示されるロゴ。
  4. +
  5. nucleus2.gif: Nucleus ロゴ。
  6. +
+ +

CSSファイル (default.css / grey.css) には、標準のスキン/テンプレートを使用した際のページ構成(ブロック構造)を書き入れています。 基本的には.contents、 .logo、.menuの3つのdivブロックとなっています。

+ +

default.css / grey.cssを編集するにあたっては、テキストエディタを使用してください。 例えばWindowsに標準添付されている「Notepad」やemacs や TextPadなどです。「WordPad」、「Word」、「OpenOffice Writer」などは余計なデータが混入しますので、絶対に使用しないでください。

+ + + + + + +

テンプレートとスキンの相互関係 back to top

+ +

+Nucleusではページ表示に「スキン」と「テンプレート」の両方を使用します。ではこれら2つの違いは何でしょう? +

+ +
    +
  1. + スキン とは出力する内容(タグを含むソース)を定義するものです。1つのスキンでもいくつかの種別ごとに定義が必要で、メインページや個別アイテムページ、アーカイブページなど(標準で8タイプ)があります。 + スキン内の定義内容は、どの部分にblogデータを展開するのか、どのテンプレートを使用して展開するのかなどの指定を含みます。 +
  2. +
  3. + テンプレートとは、blogデータを展開するのに使われるひな形です。スキン内で指定されたテンプレートをひな形に、blogデータが指定された場所に出力されるのです。もちろん、複数のスキンで1つのテンプレートを使い回しすることもできますし、逆に1つのページに複数のテンプレートを使用するケースもあります。 +
  4. +
+ +

下のサンプル画像をご覧下さい。ページ全体のソースはスキンで定義しています。その中の赤点線で囲った部分(カテゴリリストとblog記事)はテンプレートをひな形にして展開されたデータ部分です。この赤点線部分をどこに出力させるのかはスキンの方で指定しています。

+ +
+Skins and Templates example +
+ + + + + + + + + +

適用されるスキンの優先順位 back to top

+ +

+このセクションではページ表示に使うスキンを設定する方法を説明します。 +

+ +

スキンのタイプ

+ +

+まず最初に、スキンタイプの種別について紹介しておきます。NucleusはアクセスされたURLを元に表示するスキンタイプを判別してページ表示に使います。下記が種別のリストです。(実際のURLは状況に応じて他のクエリが付加され、様々に変化します。) +

+ + + + + + + + + + + +
クエリ文字列スキンの種別表示される記事
?itemid=..item(個別アイテム)指定されたitemidの記事
?archive=..archive(アーカイブ)標準のblog記事、又はblogidで指定されたblog記事(の該当記事)
?archivelist=...archivelist(アーカイブリスト)指定されたarchivelistのblog記事(のリスト)
?archivelistarchivelist(アーカイブリスト)標準のblog記事(のリスト)
?query=...search(検索)標準のblog記事、又はblogidで指定されたblog記事(の該当記事)
?memberid=..member(メンバー)なし
?imagepopup=..imagepopup(ポップアップ画像)なし (画像のみ表示するポップアップ・ウィンドウ)
(その他 又は クエリなし)index(メイン)標準のblog記事、又はblogidで指定されたblog記事
+ +

+これら7つのタイプに併せて、エラーの場合に使われる error タイプがあります。 +

+ +

スキンの補完適用

+ +

+上の表において、それぞれのケースで選択適用するblogがどれになるかを併せて説明しています。表示に使用するスキンは、blog設定で設定した「標準のスキン」です。 +

+ +

+新しくスキンを作成する際はすべてのスキンタイプを定義する必要はありません。選択適用するスキンタイプが定義されていない場合は、グローバル設定において設定した「標準のスキン」を代替適用します。(下記参照)。つまり、エラーページのスキンタイプだけを定義したスキンを使用するといったことが可能な訳です。 +

+ +

標準のスキン

+ +

+Nucleus は「標準のスキン」が必ず必要です。この標準のスキンは、スキンタイプ定義が見あたらない場合の補完表示に使われるからです。もし、標準のスキンにおいても適用すべきスキンタイプの定義が見あたらない場合は、エラーメッセージが表示されてしまいます。 +

+ +

+また、指定されたblogが見あたらない場合は、適用するスキンのblog設定そのものが存在しませんから、エラーメッセージを表示するためのページデザインとして「標準のスキン」がかならず必要なのです。 +

+ + + + + + + + +

Howto: 「アイテムの追加」フォームの埋込み方法 back to top

+ +

+Nucleus ではblogページに新規投稿フォームを埋め込む機能を設けています。「新規投稿」リンクをページ内のどこかに作り、このリンクをクリックすると新規投稿フォームの表示/非表示の切り替えができます。 このフォームに入力後プレビュー機能が使えますので、どのように記事が表示されるかを瞬時に確認できて便利です。 +

+ +

+方法は、「メインの目次ページ」を編集するだけです。テンプレートの編集は必要ありません。 +

+ +

1. JavaScript コードの呼出し

+

+まず最初に、edit.jsをページ上に呼び出すコードを追加します。<head> と </head> タグの間のどこかに下のコードを追加して下さい。このファイルを呼び出す事によって新規投稿のプレビュー機能とフォームの表示/非表示切替え機能が有効になります。 +

+ +
+<script type="text/javascript"
+        src="nucleus/javascript/edit.js"></script>
+
+ +

2. 新規投稿フォームを埋め込む場所を指定

+ +

+新規投稿フォームを埋め込みたい場所に追加します。"display:none;"は必ず間違えずに記述してください。 +

+ +
+<div id="edit" style="display:none;">
+...
+</div>
+
+ +

3. 入力フォームとプレビューエリアを埋め込むコードを追加

+ +

+次に、このdivブロックの中に入力フォームとプレビューエリアを埋め込むコードを追加します。入力フォームは<%additemform%> と、プレビューエリアは <%preview(テンプレート名)%>と書く事によってそこに展開されます。あとは好きなコードを追加してください。 例えば次のように書きます。 +

+ +
+<h2>Add Item</h2>
+<%additemform%>
+
+<h2>Preview</h2>
+<%preview(mytemplate)%>
+
+ +

4. 新規投稿リンクの追加

+

+最後に、このエリアを表示/非表示させるための切替えリンクをどこか別の場所に追加します。サンプルとして2つのコードを紹介しておきます。

1つめはシンプルなタイプ: +

+ +
+<a href="javascript:showedit();">add item</a>
+
+ +

+2つ目はページ左上隅に切替えリンクを配置するタイプ: +

+ +
+<div style="position: absolute; left: 0px;
+            top: 0px; width: 10px; height: 10px"
+     onclick="javascript:showedit();">
+</div>
+
+ + + + + + +

Howto: 入力フォームのデザインを定義するスタイルシート情報 back to top

+ +

+例えばスキン内に。 <%searchform%> や <%commentform%> と記述することによって、それぞれ検索フォームやコメント投稿フォームに置き換えられてページ内に表示されます。これらの入力フォームやボタンや入力フォーム領域には標準でクラス名が定義されていますので、cssファイル内でクラスの定義をすればスタイルの変更が可能です。 +

+ +

+入力フォーム領域のクラス名は下記のように指定されています。クラス名はフォーム全体を囲ったdivブロックを修飾しています。 +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
フォームの種類記述コードCSS クラス名
新規投稿フォーム<%additemform%>.blogform
コメント投稿フォーム<%commentform%>.commentform
ログインフォーム<%loginform%>.loginform
検索フォーム<%searchform%>.searchform
メンバー間のメール送信フォーム<%membermailform%>.mailform
+ +

+ボタンと入力フォームのクラス名は以下のように指定しています。 +

+ + + + + + + + + + + + + + +
タイプCSS クラス名
単行/複数行のテキスト入力フィールド.formfield
ボタン.formbutton
+ +

+スタイルシート内で実際にこれらを定義するサンプルです: +

+ +
+/* applies to all input fields */
+.formfield {
+  background-color: gray;
+}
+
+/* only applies to buttons for comment forms */
+.commentform .formbutton {
+  border: 1px solid #000;
+  background-color: #ddd;
+  color: #000;
+  font-size: xx-large;
+}
+
+ +

上のサンプルでは、Nucleusが自動生成するテキスト入力フィールドの全部が「 背景色 = 濃灰色 」で、コメント投稿フォーム内のボタンだけが「 文字サイズ = 大 / 四辺 = 黒色の1ピクセルの太さの線 / 文字色 = 黒 / 背景色 = 淡灰色 」とする、と定義しています。

+ + +

Howto: 投票機能を有効にする方法 back to top

+ +

標準添付のスキン/テンプレートでは投票機能を表示させていません(使わない方がよいのかもしれません)。ここでは投票機能が表示されるようにテンプレートを書換える方法を紹介します。

+ +

1. 表示に使用する「メインの目次ページ」タイプで指定したテンプレートの編集画面を開く

+ +

'default' ( v3.0では 'grey/short' ) という名前のテンプレートの編集画面を開きます。(このテンプレート名はあくまでも新規インストール直後の状態で適用されているものです。複製や新規作成などにより変更している場合は読み替えてください。)

+ +

2. アイテムの本体部分の書換え

+ +

アイテムの本体部分の最後の方を以下のように書換えます:

+ +
+<div class="iteminfo">
+  <%time%> -
+  <a href="<%authorlink%>"><%author%></a> -
+  karma: <%karma%>
+    [<a href="<%karmaposlink%>">+</a>/<a href="<%karmaneglink%>">-</a>] -
+  <%edit%>
+  <%comments%>
+</div>
+
+ +

編集後にメインページにアクセスすると記事詳細情報が下のように表示が変更されているのが確認できると思います:

+ +
9:00:39 PM - God - karma: 5 [+/-] - edit
+ +

3. アイテムの個別ページのテンプレート

+ +

上記の編集作業ではメインページでのみ投票スコアが表示される状態です。アイテムの個別ページでも同様に投票を表示したい場合は、スキンの「アイテムの個別ページ」で使用しているテンプレートに同様の修正を行ってください。新規インストール直後の状態では'detailed' ( v3.0では 'grey/full' ) という名前のテンプレートがそれに該当します。

+ + + + + + +

Howto: 「アイテムの編集」リンクの設置 back to top

+ +

Nucleus標準添付のスキンでは記事の編集権限を持つユーザーにだけ表示される「アイテムの編集」リンクを埋め込んでいます。 ここではどこでそのリンクを埋め込んでいるのかを説明します。

+ +

「アイテムを編集するためのリンク」の表示の設定

+ +

テンプレートの編集画面の「アイテムを編集するためのリンク」部分でアイテムの編集リンクの表示を定義しています。 標準添付のテンプレートでは以下のように定義しています:

+
<a href="<%editlink%>" onclick="<%editpopupcode%>">edit</a>
+ +

ポップアップ編集画面ではなく管理エリアの記事編集画面を使いたい場合は次のように修正してください:

+ +
<a href="nucleus/index.php?action=itemedit&amp;itemid=<%itemid%>">edit</a>
+
+ +

「アイテムの編集」リンクを表示する場所の指定

+ +

表示形式を決めたら、次にどこにこれを表示するのかを設定します。通常なら「アイテムの本体」の中に<%edit%>と記述します。この<%edit%>の部分が上で設定した表示形式に置き換えられてコードが自動生成されます。

+ +

「アイテムの本体」の中の記述例は 投票機能を有効にする方法 を参照してください。

+ + + + +

スキン/テンプレートのインポート/エクスポートについて back to top

+ +

バージョンv2.0以降からスキンとテンプレートをインポート/エクスポートする機能が追加されています。ここでは、スキンを作成する手順を追ってその機能をわかりやすく説明したいと思います。

+ +

新規スキンの作成

+ +
    +
  1. +

    まず管理エリアにてスキンを新規作成します。管理エリアに入り、「スキンの編集」画面の一番下にある「新しいスキン」の所に入力します。ここでは例として名前を「vista」とします。

    +
  2. +
  3. +

    スキンの一覧にこの「vista」という名前のスキンが追加されていますので、その行の右横「編集」リンクをクリックして編集画面に入ります。content type は 「text/html」としてください。 これから説明する作業を行うにあたって必要な設定となりますので、よく確認して設定してください。

    +

    さらにその下の Include モード と Include プリフィックス もよく注意して設定してください。スキンを移植したり配布したりする事を考えて、デザインに使用する画像やcssファイルなどは1つのディレクトリの中に格納しておく事とします。

    +

    Include モード と Include プリフィックス が適用される仕組みを簡単に説明しておきましょう。config.phpで定義している「$DIR_SKINS」の値と、管理エリアのグローバル設定の中で設定している「スキンURL」が関連してきます。 + 例えばそれぞれ以下のような値になっているとします:

    +
    /home/user/example/htdocs/skins/
    +http://example.org/skins/
    +

    この設定を準用してデザインに使用する画像やcssファイルなどを格納するディレクトリを次のように設定させます

    +
    /home/user/example/htdocs/skins/vista/
    +http://example.org/skins/vista/
    +

    このように準用適用させる設定がInclude モードです。準用させるためにはInclude モードを「skindirを使う」にしてください。

    +

    さらに Include プリフィックス は 「vista/」と入力してください。

    +

    この画面の設定:

    +
      +
    • 名前: vista
    • +
    • Content Type: text/html
    • +
    • Include モード: skindirを使う
    • +
    • Include プリフィックス: vista/
    • +
    +
  4. +
+ +

スキンの編集

+ +

スキン内に記述するコードのうち、include と phpinclude と parsedincludeで読み込むファイルの場所指定に、この「Include モード」 と 「Include プリフィックス」の設定が適用されます。また、このほかにskinfileという記述コードでもこれらの設定を読み込んでURLの自動生成が行われます。

+ +

例えばスキン内に以下のように記述したとします:

+ +
<%skinfile(myFile.jpg)%>
+ +

これはページ生成時に以下のように自動変換されます:

+ +
http://example.org/skins/vista/myFile.jpg
+ +

仕組みの説明はこのくらいにして、実際にスキンを編集してみましょう。vista/ ディレクトリの中に「pagefoot.inc」 と 「pagehead.inc」 という名前の2つのファイルを作成して、これらのファイルを使い回す事によって作業効率を上げる方法をご紹介します:

+ +

pagehead.inc

+ +
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title>My Site</title>
+	<link rel="stylesheet" type="text/css" href="<%skinfile(layout.css)%>" />
+</head>
+<body>
+
+<div id="contents">
+ +

pagefoot.inc

+ +
</div><!-- contents div end -->
+
+<div id="stuffbar">
+	<h2>Navigation</h2>
+
+	<ul>
+		<li><a href="<%todaylink%>">Today</a></li>
+		<li><a href="<%archivelink%>">Archives</a></li>
+	</ul>
+
+	<h2>About</h2>
+
+	<ul>
+		<li><a href="http://www.nucleuscms.org/">Nucleus</a> Power!</li>
+	</ul>
+</div><!-- stuffbar end -->
+
+</body>
+</html>
+ +

このような共通して使えるコードを書いたファイルを使い回します: (上のサンプルは重要な部分だけを抜粋した物です。実際に使用する際は標準添付のスキンを参考に、もっとたくさんのコードを書き込んだ方が良いでしょう。)

+ +

メインの目次ページ

+
<%parsedinclude(pagehead.inc)%>
+
+<h1>My Blog</h1>
+
+<%blog(vista/main,10)%>
+
+<%parsedinclude(pagefoot.inc)%>
+ +

アイテムの個別ページ

+ +
<%parsedinclude(pagehead.inc)%>
+
+<h1>My Blog</h1>
+
+<h2>Item</h2>
+<%item(vista/detailed)%>
+
+<h2>Comments</h2>
+<%comments(vista/detailed)%>
+
+<h2>Add Comment</h2>
+<%commentform%>
+
+<%parsedinclude(pagefoot.inc)%>
+ +

上のサンプルでは使用するテンプレート名を「vista/main」 、 「vista/detailed」と指定していることに注意してください。テンプレート名はスキン名と揃えて置いた方が後々編集する時にわかりやすくて便利です。単純に標準添付の 「default」 と 「detailed」(v3.0 では「grey/short」 と 「grey/full」) をそれぞれ複製して名前を付け替えただけの物でも構いません。

+ +

アーカイブ一覧ページ

+ +
<%parsedinclude(pagehead.inc)%>
+
+<h1>My Blog</h1>
+
+<%archivelist(vista/main)%>
+
+<%parsedinclude(pagefoot.inc)%>
+ +

アーカイブページ

+ +
<%parsedinclude(pagehead.inc)%>
+
+<h1>My Blog</h1>
+
+<%archive(vista/main)%>
+
+<%parsedinclude(pagefoot.inc)%>
+ +

スキンをエクスポートする

+ +

これでvistaスキンのできあがりです。では、このスキンをエクスポートしてみましょう。管理エリアの「スキンのインポート/エクスポート」画面に入り、以下の作業を行います:

+ +
    +
  1. 書き出すスキン/テンプレートを選択するリストの中から「vista」、「vista/detailed」、「vista/main」の3つを選択してください。
  2. +
  3. その下の「追加情報」欄にこれから書き出すスキン/テンプレートについての説明書きを(必要ならば)入力し、選択されたスキン/テンプレートを書き出し ボタンを押します。 Nucleusにて「skinbackup.xml」の自動作成が行われます。
  4. +
  5. この「skinbackup.xml」ファイルを保存し、vista/ディレクトリの中に他の画像ファイルなどと一緒に格納してください。
  6. +
  7. このvista/ディレクトリごとzipファイルなどに圧縮します。
  8. +
  9. これでスキンパッケージのできあがりです。この圧縮ファイルを配布するだけでデザインの配布ができます。
  10. +
+ +

スキンをインポートする

+ +

スキンをインポートするには、上と逆の手順を踏みます:

+ +
    +
  1. 圧縮ファイルを解凍して生成されたディレクトリ(vista/)をサーバのスキンディレクトリ内に配置します(ひとつのスキンで1つのディレクトリを使用します)。
  2. +
  3. 管理エリアの「スキンのインポート/エクスポート」画面にて、ドロップダウンリストから「vista」を選択し、「読み込み」ボタンを押します。
  4. +
  5. 表示される説明に従います。(すでに同じ名前のスキン/テンプレートが存在する場合はその旨の警告が出ますので、上書きしたい場合は「既に存在するスキンを上書きする (ぶつかるスキン名を参照) 」のチェックを入れてから読み込むボタンを押せば上書きされます。)
  6. +
  7. これでスキンの読込みは完了です。ページ表示に使用したい場合はblog設定でこのスキン名を選択すれば適用されます。
  8. +
+
+ + \ No newline at end of file diff --git a/utf8/nucleus/documentation/styles/background.png b/utf8/nucleus/documentation/styles/background.png new file mode 100644 index 0000000000000000000000000000000000000000..12f211b6a8bfa8f08ca338a17910c70b8cb3b0f4 GIT binary patch literal 348 zcmeAS@N?(olHy`uVBq!ia0vp^d<+asf*fo>R#kYF}=rAVtOsopCRSHu7cCF}k zo<-r`Rgo1JrZPJUupCUiaGa}2fdhumD9t5gTe~DWM4ffNf^w literal 0 HcmV?d00001 diff --git a/utf8/nucleus/documentation/styles/bullet.gif b/utf8/nucleus/documentation/styles/bullet.gif new file mode 100644 index 0000000000000000000000000000000000000000..b43de48a4701e5123846ee5f0357b65065eca04a GIT binary patch literal 50 zcmZ?wbhEHbWM$xGXkcJS?wRxd|9{1wEQ|~cj0`#qKmd|qVB+lQU%C4M|KgUF4AuZl Cg$< + + + + + + + + + + + Nucleus - 便利な使い方ヒントの紹介 + + + + + + +
+ 小 + 中 + 大 +
+
+
+Tips & Suggestions +
+ +

Introduction

+ +

+Nucleusマニュアルに戻る +

+ +

+ここでは便利な使い方ヒントをご紹介します。 +

+ +

目次

+ + + + + + + + + + + + +

Googleなどのサーチエンジンに引っかかりやすくする方法 back to top

+ +
+留意点: これらの方法は、サーバの環境によっては動作しないことがあります。 +
+ +

+Nucleus はアクセスごとにページを生成しています。アクセスするURLは「index.php?archive=2001-09&blogid=1のようになっています。残念ながらURLに「?」やそのほかの余分な文字列がたくさんあるとgoogleなどの検索エンジンに登録されにくくなってしまいます。無駄なロボット巡回を省くための措置だそうです。 +

+ +

この対策を2つ紹介しておきます。しかしながら必ず動作するとは限りませんのでご注意下さい(動作するかどうかはサーバ側の設定によります)。

+ +
    +
  1. Fancy URLモード
  2. +
  3. mod_rewrite
  4. +
  5. Fancy URL2 モード
  6. +
+ + +

Fancy URLモード

+ +

Nucleusではバージョン2.0からグローバル設定において「URLモード」というオプションを設けています。ここを「FancyURLモード」に設定して以下の作業を行うと、URLが「http://example.org/index.php?itemid=1234」から「http://example.org/item/1234」に変わります。このURL形式の方が検索エンジンに登録されやすくなります。

+ +

手順:

+ +
    +
  1. Copy all files from the /extra/fancyurls ディレクトリにあるindex.html以外の全部のファイルをルートディレクトリ(index.php と action.phpがあるディレクトリ)にコピーします。
  2. +
  3. すでにルートディレクトリに.htaccessファイルを設置している方はまず現在の.htaccessファイルをダウンロード後に今回の /extra/fancyurls ディレクトリにある.htaccessファイルの中身を追加してください。(FTPソフトでは標準設定では.htaccessファイルは見えないことが多いので、確認方法を調べた上で存在を確認してください。)
    .htaccessファイルを設置していなかった方は/extra/fancyurls ディレクトリにある.htaccessファイルをそのまま使用してください。
  4. +
  5. 「fancyurls.config.php」という名前のファイルの中の$CONF['Self']の値を自分のトップページのURLとします。
    重要: URLの末尾にスラッシュは絶対に入れないでください。
  6. +
  7. 同様にindex.phpファイルの$CONF['Self']の値を編集(引用符の中を削除)します。これをやらないと、URLがindex.php/item/1234などとおかしくなります。
  8. +
  9. これらの新しくルートディレクトリに追加したファイルをサーバにアップロードします。
  10. +
  11. 最後に、管理エリアのグローバル設定においてURLモードを「FancyURLモード」に変更します。
  12. +
  13. これで完了です。
  14. +
+ +

もしページが正常に表示されない場合(Internal Server Errorなどと表示される場合)は、残念ですがこの対策は使えません。上の作業で追加したファイルを速やかに削除し(.htaccessファイルの削除も忘れずに)、管理エリアのグローバル設定においてURLモードを元に戻してください。

+ + + +

mod_rewrite

+ +

+次に紹介する対策はApacheサーバを使用していて、かつ、「mod_rewrite」の使用が許可されている環境でのみ有効な方法です。アクセスするページがhtmlファイルであるかのようにみせかける方法です。 +

+ +

+ルートディレクトリに「.htaccess」という名前のファイル(ファイル名の先頭はピリオドです)を作成し、以下の内容を書き込みます: +

+ +
+RewriteEngine On
+RewriteRule ^archive-([0-9]+)-([0-9]+)-([0-9]+).html+ index.php?archive=$2-$3&blogid=$1
+RewriteRule ^item-([0-9]+).html+ index.php?itemid=$1
+RewriteRule ^archivelist-([a-z]+).html+ index.php?archivelist=$1
+
+ +

+このファイルを index.php や config.php があるディレクトリにアップロードします。ブラウザで「archive-1-2004-06.html」にアクセスしてみましょう。きちんとページが表示されればこの方法が使える環境です。(このURL例は2004年6月の記事を表示させるURLですから該当月のログがない場合は「記事がありません」となりますが、これは成功していることを意味します。)
もし、アクセスした際に 500 error (internal server error) が表示されていたらそのサーバ環境ではこの方法は使えません。.htaccess ファイルを削除してください。 +

+ +

+成功していたら、次にこのURLにジャンプするようにテンプレートを書き換えます。上のURL例をリンク先とする場合は、アーカイブリスト(アーカイブ一覧ページ)で指定しているテンプレートの「アーカイブ一覧の本体」の部分を以下のように変更します: +

+ +
+<a href="archive-<%blogid%>-<%year%>-<%month%>.html">...</a>
+
+ +

+これで検索エンジン対策の説明はおしまいです。あとは検索ロボットが到来するのを待ってみましょう。 +

+ + +

Fancy URL2モード

+ +

Nucleus CMS version バージョン3.3からは、FancyURLモードを有効にするもう一つの方法が用意されました。たった3行程で完了するやり方です。

+ +
  1. extra/fancyurl-2の中の「.htaccess」ファイルを、Nucleus CMSをインストールしたディレクトリにコピーします。
  2. +
  3. index.phpを編集します。CONF['Self'](デフォルトは'index.php'となっています)を、Nucleus CMSをインストールしたURLに書き換えます
    +例:
    CONF['Self'] = 'http://yourdomain.com/yourNucleusDirectory';
    +最後にスラッシュをつけないように気をつけてください
  4. +
  5. 最後に、管理エリアのグローバル設定においてURLモードを「FancyURLモード」に変更します。
+ +

これだけで完了です

+ +

もしURLをitem/this-is-a-titleの様にしたいのであれば、NucleusサイトのPlugin Wikiで、目的にあったプラグインを見つけることができるでしょう。(たとえば NP_CustomURLとか)

+ +

ファイルとディレクトリのパーミッション変更ガイド back to top

+ +

+Nucleusのいくつかの機能を正常動作させるためにはパーミッションの変更作業が必要となります。ここではFTPソフト(FTPクライアント)を使ってパーミッションを変更する方法を紹介しておきます。 +

+

+まずはパーミッション変更ができるFTPソフト(FTPクライアント)を入手します。英語ガイドでは「CuteFTP」というソフトを例にとって説明されていますが、シェアウェアであり日本ではメジャーではないのでOS別に分けて説明します。

+ +

Windows

+

+Windows版では、「FFFTP」というソフトを例に用いて説明させていただきます。FFFTPはフリーウェアです。『Sota's Product : FFFTP』で入手できます。また、FFFTPのインストールや基本的な使い方につきましては、『初心者マニュアル - FFFTP Support Page.』をご覧下さい。 +

+ +

+まずサーバに接続します。パーミッションを変更したいサーバ側のファイル又はディレクトリをクリックして選択します。(画面右側がサーバに置いてあるディレクトリとファイルのリストとなっています。) +

+ +

+メニューバーの コマンド > 属性変更 を選択します。 +

+ +
+ menu +
+ +

+パーミッションを設定するウィンドウがポップアップします: +

+ +
+ The window that pops up +
+ +

+このポップアップしたウィンドウの下の方に数字を入れる所がありますから、ここに説明書に記載されている数字(例えば777とか666)を入力してOKボタンを押します。これでおしまいです。 +

+

MacOS

+

+MacOS上で動作する日本語が使えるFTPクライアントでは、「Fetch日本語版」が最も人気があるようです。『Fetch日本語版公式ホームページ』よりダウンロードできます。(使い続ける方は有料になります。) +

+

+パーミッションの変更画面では数字を入力する機能がないようですので、どこにチェックを入れたら(はずしたら)よいかがよくわからない方は『TryNext|Fetchによるパーミッション設定』をご覧下さい。代表的なパーミッション設定例と、計算の仕方が説明されています。 +

+

+または、下記の表にチェックを入れてみて指示されているパーミッション値になるようにテストしてみても良いかと思います。 + +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
オーナーグループ全員
読む
書込
検索/実行
+パーミッション値(直接入力はできません)
+ + +
+
+ + + + +

バックアップをリストア(復元)する方法 back to top

+ +

+Nucleus には最高管理者が使うことができるデータベースのバックアップ機能があります。定期的に(週1回など)バックアップを取られることを強くおすすめします。 生成されるバックアップファイルはスタンダードなSQLクエリ文です。バックアップを取った時点のデータベース状態に再構成するコマンドが書かれています。 +

+ +

+バックアップが作成できればリストアも簡単にできるはずですが、何らかの理由によりリストアが成功しないケースも考えられます。そこで、万が一管理エリアからリストアができない場合でも、データを書き戻す方法をいくつか紹介しておきます: +

+ +
+バックアップ作成時にzip圧縮を選択していた方はまず最初に解凍してください(中身はsqlファイルです)。 +
+ + +

方法その1: ブラウザ上にて行う方法

+ +

+PHPMyAdminのようなブラウザでデータベースを操作できる状態の方は、ローカルにあるsqlファイルをデータベースに取り込む機能が付いているはずですので、この機能を使用してみてください。 +

+ +

方法その2: Shellにアクセスして作業する方法

+ +

+Shellにアクセスできる状態の方は、mysqlプログラムを実行して下記のようなコマンドを叩けばリストアできます: +

+ +
+mysql -u username -p -h hostname databasename < backupfile.sql
+
+ + +

新しくweblogを作成する方法 back to top

+ +

1. 新規weblogの作成

+ +

最高管理者としてログインすると「新規weblog作成」メニューが使用できます。ここで画面の指示に従って作成してください。

+ +

2. 作成したweblogにアクセスする

+ +

新しく追加されたweblogにアクセスする方法はいくつかあります。

+ +
    +
  1. URLにてblogidの値を指定する: +
    http://yourhost.com/index.php?blogid=2
    + (作成したweblogのblogidは管理エリアのトップページにあるblog一覧の中の該当blogのリンク先を見ればわかります。) +
  2. +
  3. + アクセス専用のphpファイルを作成する: +
    <?php
    +$CONF['Self'] = 'copy.php';
    +include('./config.php');
    +selectBlog('shortblogname');
    +selector();
    +
    +?>
    + 上のような内容の「copy.php」という名前(この名前は一例です)のファイルをルートディレクトリに作成し、これにアクセスすると新しく追加されたblogが表示されます。 + (作成したweblogの短縮名はは管理エリアのトップページにあるblog一覧の中から該当blogの設定画面に入るとわかります。) +
  4. +
+ +

アクセス専用phpファイルの中で使用できるコマンド

+ +

上記のサンプル内で使用している selectBlog というコマンドは、アクセス専用phpファイルにて使用できるコマンドの一例です。他にも使用できるコマンドがありますので紹介しておきます:

+ + + + + + + + + + + + + + + + + + + + + + +
コマンド意味
selectBlog('shortblogname');「shortblogname」という短縮名のblogを表示させる
+ (* URLにて指定するblogidの方が優先されます。URLにて指定がない場合にこの指定が使われます) +
selectSkin('skinname');「skinname」という名前のスキンを適用してページ表示する
+ (* URLにて指定するskinidの方が優先されます。URLにて指定がない場合にこの指定が使われます) +
selectCategory(1234);IDが「1234」のカテゴリを選択した状態でページ表示する
+ (* URLにて指定するcatidの方が優先されます。URLにて指定がない場合にこの指定が使われます)
+ この指定にはカテゴリ名を指定することもできますが、複数blogが存在している場合は同じカテゴリ名があることが考えられますのでID指定の方が無難でしょう。
selectItem(1234);IDが「1234」の記事を選択した状態でページ表示する
+ (* URLの指定が優先されます。URLにて指定がない場合にこの指定が使われます)
selectLanguage('french');言語を「french」にしてページ表示する + (PHPエラーが出る可能性がありますので注意してください)
selectSpecialSkinType('construction');指定されたスペシャルスキンタイプを使用します (note: 指定されたスペシャルスキンタイプの内容が表示されます). 次のコードはログインしていない時のみスペシャルスキンを表示します:
if (!$member->isLoggedIn()) {
+	selectSpecialSkinType('login');
+}
また次のコードではサイトのトップページの時にスペシャルスキンを表示します:
if (empty($blogid) && empty($catid) && empty($itemid)&& empty($archive) && empty($archivelist)) {
+	selectSpecialSkinType('welcome');
+}
+ +

+アクセス専用phpファイルの中にこれらのコマンドを書く時は、コードの順番に留意してください。これらのコマンドは、include('./config.php')よりも後に書き、かつ、selector();という行よりも前に書かなくては反映されません。 +

+ +

サブディレクトリに新しいblogを配置する場合

+ +

例えば、最初のblogが http://yourhost.com/ で表示されていて、新しく追加するblogは http://yourhost.com/sub/ のようにサブディレクトリに配置したい方は、上記のサンプルと同じアクセス専用phpファイルをそのサブディレクトリに作成します。このサブディレクトリに配置したアクセス専用phpファイルのinclude('./config.php'); という部分を include('../config.php');と書き換えるだけで動作します。

+ + + + + + + + + + + + + + + +

XHTML サポートについて back to top

+ +

+自分のページのソースコードを見た時、<br />のようなタグコードにお気付きかと思います。これは、Nucleusが自動生成するコードがW3Cにて策定されているXHTML 1.0 standard(HTML4継承)に則っているからです。webの将来性を鑑みてこのようにしております。知る限りでは、XHTML形式の記述が古いブラウザとの互換性を損なってはいないようです。 +

+ +

+ですから、スキンとテンプレートの記述でミスを犯していなければ完全なXHTML準拠のソースコードが生成されるはずです。 +

+ + + + + + + + + + + +

スペシャルスキンパーツの作り方back to top

+ +

1. 管理エリアの「スキンの編集」ページ(レイアウト設定 » スキン編集)へ入り、パーツを作成したい(追加したい)スキンの右側のカラムにある「編集」リンクをクリックします

+ +

2. 「スペシャルスキンパーツ」とある下にあるテキストボックスに作成したいスキンパーツの名前を書き込んで、「作成」ボタンをクリックします(例えば「About」など)。すると、スキンパーツ編集フォームが表示されるので、他のスキンパーツと同じように編集することができます(スキン変数も他のパーツと同様に使用できます)。 他のページと同じように見せたいのであれば、「メインの目次ページ」の内容をそっくりコピー&ペーストして、<%blog(...)%>の部分を置き換えれば、静的ページのできあがりです。
+例えばデフォルトスキンを使って、サイトの「About」ページを作るとすると、次の様になるでしょう。

+
<%parsedinclude(head.inc)%>
+
+<!-- page header -->
+<%parsedinclude(header.inc)%>
+
+<!-- page content -->
+<div id="container">
+<div class="content">
+ここはハイキング好きの仲間たちのサイトです。
+私たちは、アメリカ、カナダ、ヨーロッパで、合計4000マイルを越えるハイキングをしてきました。
+このサイトを通じて、皆さんと経験を共有したいと思います。
+私たちはハイキングが、誰もの楽しみの一つであると信じています。
+<br /><br />
+コミュニティに参加したい人は -> をクリック: (...アカウント発行ページへのリンク...)
+<br /><br />
+... ここには写真などを貼り付けるのもいいでしょう ...
+</div>
+</div>
+
+<!-- page menu -->
+<h2 class="hidden">Sidebar</h2>
+<div id="sidebarcontainer">
+<%parsedinclude(sidebar.inc)%>
+</div>
+
+<!-- page footer -->
+<%parsedinclude(footer.inc)%>
+ +

3. これで、次のURLでこのページにアクセスできるようになりました(このURLを他のスキンパーツのどこかにリンクとして書いておくといいでしょう)

+ +
http://www.example.jp/index.php?special=About
+ + +

4. このスキンパーツは他のスキンパーツと同様に編集でき、スキン変数やプラグインなども同様に動きます。

+ +

注意:もし、既に用意してあるAbout.htmlを使いたい時は、ファイルをskins/default/ディレクトリ(デフォルトスキン使用時)に置き、スキンパーツに<%include(About.html)%>と書くだけで、その内容を取り込むことができます。そしてその内容はほぼ無制限です。

+ +

(Tip from ftruscot)

+
+ + diff --git a/utf8/nucleus/forgotpassword.html b/utf8/nucleus/forgotpassword.html new file mode 100755 index 0000000..268b78e --- /dev/null +++ b/utf8/nucleus/forgotpassword.html @@ -0,0 +1,61 @@ + + + + + + + + Nucleus - パスワードの紛失 + + + +
+

Nucleus CMS

+
+ +
+ +

パスワードを忘れましたか?

+ +

以下にユーザー名とメールアドレスを入力してください。新しいパスワードを設定するページへのリンクの入ったメールが送信されます。

+ +
+

+
+
+ +
+
+
+ + + +

+
+ +

もしユーザー名をお忘れなら、あなたのNucleusサイト管理者に連絡してください。

+ +
+ Nucleus CMS © 2002-2010 The Nucleus Group & Nucleus CMS Japanチーム - 寄付について +
+ +
+ + + diff --git a/utf8/nucleus/forms/additemform.template b/utf8/nucleus/forms/additemform.template new file mode 100755 index 0000000..47d65f4 --- /dev/null +++ b/utf8/nucleus/forms/additemform.template @@ -0,0 +1,30 @@ + + +
+
+ <%ticket%> + + + + + +
+ +
+ +
+ [ctrl+shift+A] = Link, [ctrl+shift+B] = Bold, [ctrl+shift+I] = Italic, [ctrl+shift+M] = Insert Media. + <%callback(FormExtra,additemform)%> +
+
diff --git a/utf8/nucleus/forms/commentform-closed.template b/utf8/nucleus/forms/commentform-closed.template new file mode 100755 index 0000000..b9393ec --- /dev/null +++ b/utf8/nucleus/forms/commentform-closed.template @@ -0,0 +1 @@ +
<%text(_ERROR_ITEMCLOSED)%>
diff --git a/utf8/nucleus/forms/commentform-loggedin.template b/utf8/nucleus/forms/commentform-loggedin.template new file mode 100755 index 0000000..61a0950 --- /dev/null +++ b/utf8/nucleus/forms/commentform-loggedin.template @@ -0,0 +1,18 @@ + +
+
+ + + + <%errordiv%> + + + + <%text(_COMMENTFORM_YOUARE)%> <%formdata(membername)%> + (<%text(_LOGOUT)%>) + + + + <%callback(FormExtra,commentform-loggedin)%> +
+
diff --git a/utf8/nucleus/forms/commentform-notloggedin.template b/utf8/nucleus/forms/commentform-notloggedin.template new file mode 100755 index 0000000..f099426 --- /dev/null +++ b/utf8/nucleus/forms/commentform-notloggedin.template @@ -0,0 +1,28 @@ + +
+
+ + + + <%errordiv%> + + + + + + + + + + + + + + <%callback(FormExtra,commentform-notloggedin)%> + + /> + + + +
+
diff --git a/utf8/nucleus/forms/loginform-loggedin.template b/utf8/nucleus/forms/loginform-loggedin.template new file mode 100755 index 0000000..dae2336 --- /dev/null +++ b/utf8/nucleus/forms/loginform-loggedin.template @@ -0,0 +1,4 @@ + +
+ <%text(_LOGINFORM_YOUARE)%> <%formdata(membername)%> ! (<%text(_LOGOUT)%>) +
diff --git a/utf8/nucleus/forms/loginform-notloggedin.template b/utf8/nucleus/forms/loginform-notloggedin.template new file mode 100755 index 0000000..70e91d5 --- /dev/null +++ b/utf8/nucleus/forms/loginform-notloggedin.template @@ -0,0 +1,18 @@ + +
+
+ + <%errordiv%> + + + + + + + + + + + +
+
diff --git a/utf8/nucleus/forms/membermailform-disallowed.template b/utf8/nucleus/forms/membermailform-disallowed.template new file mode 100755 index 0000000..01e37b6 --- /dev/null +++ b/utf8/nucleus/forms/membermailform-disallowed.template @@ -0,0 +1 @@ +
<%text(_ERROR_LOGINNEEDED)%>
\ No newline at end of file diff --git a/utf8/nucleus/forms/membermailform-loggedin.template b/utf8/nucleus/forms/membermailform-loggedin.template new file mode 100755 index 0000000..9f6271c --- /dev/null +++ b/utf8/nucleus/forms/membermailform-loggedin.template @@ -0,0 +1,15 @@ + +
+
+ + + + <%errordiv%> + + + + <%callback(FormExtra,membermailform-loggedin)%> + + +
+
diff --git a/utf8/nucleus/forms/membermailform-notloggedin.template b/utf8/nucleus/forms/membermailform-notloggedin.template new file mode 100755 index 0000000..e499086 --- /dev/null +++ b/utf8/nucleus/forms/membermailform-notloggedin.template @@ -0,0 +1,18 @@ + +
+
+ + + + <%errordiv%> + + + + + + + <%callback(FormExtra,membermailform-notloggedin)%> + + +
+
diff --git a/utf8/nucleus/forms/nucleusbutton.template b/utf8/nucleus/forms/nucleusbutton.template new file mode 100755 index 0000000..64f545f --- /dev/null +++ b/utf8/nucleus/forms/nucleusbutton.template @@ -0,0 +1,3 @@ +
+ Powered by Nucleus CMS +
diff --git a/utf8/nucleus/forms/searchform.template b/utf8/nucleus/forms/searchform.template new file mode 100755 index 0000000..0122457 --- /dev/null +++ b/utf8/nucleus/forms/searchform.template @@ -0,0 +1,8 @@ +
+
+ + + + +
+
diff --git a/utf8/nucleus/images/button-aligncenter.gif b/utf8/nucleus/images/button-aligncenter.gif new file mode 100755 index 0000000000000000000000000000000000000000..2ce38e76d65815bd9e795cecad09690badeda8f1 GIT binary patch literal 85 zcmZ?wbhEHb6krfwn8*ME|3TmxkfHdK1uUQgB0=&DOlm!?D~~bqCv&e_CT2WmdC{EO cX{=d6##N~u%T^_CnybA=%6b3&a0Uiz0Q;93i2wiq literal 0 HcmV?d00001 diff --git a/utf8/nucleus/images/button-alignleft.gif b/utf8/nucleus/images/button-alignleft.gif new file mode 100755 index 0000000000000000000000000000000000000000..53522cbb970864cb9efc9e5bc793feb2250ebaee GIT binary patch literal 68 zcmZ?wbhEHb6krfwXkY+=|NoyU{$v3&bwDIYhJi`Cr$6(++cilwBB!LY4%=j3_YFN! OtI#<^?35HMgEas{@)LCc literal 0 HcmV?d00001 diff --git a/utf8/nucleus/images/button-alignright.gif b/utf8/nucleus/images/button-alignright.gif new file mode 100755 index 0000000000000000000000000000000000000000..a27a9444cad00fed83c06f285e216e3bbe5f6dcf GIT binary patch literal 67 zcmZ?wbhEHb6krfwXkY+=|NoyU{$v3&bwDIYhJi_{r@!;S+ck@-L{9Bqbu`ePk1fig Nk~ebJi!2caYXCJc6C?lt literal 0 HcmV?d00001 diff --git a/utf8/nucleus/images/button-bold.gif b/utf8/nucleus/images/button-bold.gif new file mode 100755 index 0000000000000000000000000000000000000000..207c859956fc8626d6faefee8b06c23d956a0b5e GIT binary patch literal 73 zcmZ?wbhEHb6krfwXkcUjg8%=YDgI;uG8q|kKzxu41Cv5e|H{*A8I*G_UMYP)+fn^x XZA?YV9kvK{rb*|xkADheV6X-Nxfm8i literal 0 HcmV?d00001 diff --git a/utf8/nucleus/images/button-copy.gif b/utf8/nucleus/images/button-copy.gif new file mode 100755 index 0000000000000000000000000000000000000000..4cb12cf4c18122be283c5694d5332dd99649d5db GIT binary patch literal 103 zcmZ?wbhEHb6krfwn8?h)z%cXw|NlVh|Nm!-KUo+V7?>G!fLx%g00RS)#hm`kLu)mf zc;2k_T-n>x#P1ZrkZ}K?>C+IV>7K3&W*fcscwFer*K0Lthse_TZwieS(~Y}7&(vUG Gum%8|Ya|Z< literal 0 HcmV?d00001 diff --git a/utf8/nucleus/images/button-cut.gif b/utf8/nucleus/images/button-cut.gif new file mode 100755 index 0000000000000000000000000000000000000000..d00c0e638271ed8021593eadf52c052cfe4fba92 GIT binary patch literal 89 zcmZ?wbhEHb6krfwn8?V$z%cXw|7So72o!&^00kHsbU+-CJOh(fPyfoIH7}fMHeEb+ nWXVsbw~h}PISxq7IZ(BBRiW0$*>=Uf>g7_mZC`0JFjxZsPJlZBCifr&u}$Og&^0NK)0`d6NQ%ec^3 az=!e4TJv`8g30V%z9NmUPBpPISOWm1aTI0% literal 0 HcmV?d00001 diff --git a/utf8/nucleus/images/button-left.gif b/utf8/nucleus/images/button-left.gif new file mode 100755 index 0000000000000000000000000000000000000000..915841403bec91d21cc193c36cb7beda3fe90c66 GIT binary patch literal 91 zcmZ?wbhEHb6krfwn8?8JYOfsw1H=FS&w!-jPZl7_z@P&nK=KSsI#c>H59;zBW)|@% qb=s=GDKb{V!}H$q*2kM>s-Ik&d9!ju$4&KpX}@oK|M6pGum%8mZXTxq literal 0 HcmV?d00001 diff --git a/utf8/nucleus/images/button-link.gif b/utf8/nucleus/images/button-link.gif new file mode 100755 index 0000000000000000000000000000000000000000..c1a41e2d7db846fb0b37d4d09c86e3f0cd34a3d7 GIT binary patch literal 141 zcmZ?wbhEHb6krfwSj5V3;J|@~h6aWP1_p*7K>YvzGav~Bia%Kx85md@bU+-CS_bBz z2&p^2CU7cn)-b+M*tH?hAj8?R#L*;Z`Guy_2P&U)iZ6Oo`gHDe>*?pOJUXezBAhrg p<=!kQUPZ2ou({`6C3|uBER9>+)ScRO{L1<-K?U1pcCj#60{|x{Gk*X8 literal 0 HcmV?d00001 diff --git a/utf8/nucleus/images/button-media.gif b/utf8/nucleus/images/button-media.gif new file mode 100755 index 0000000000000000000000000000000000000000..ce65641056c6a3ad1a6a302b2a51aa95be793328 GIT binary patch literal 132 zcmZ?wbhEHb6krfwSj52a|Npc9|AFNHGiT0BoH&sI1{8m?FoM`RAOfV8f!UK|*PSSX zQ=DD`=8t8)p2{!^Hl;U)J9gY%p1LX`?7iBm+{Smy*skvMJ;Nk;$xAyl(cl7W@@kdf ZbSbr^zQG|SqQ2Ub3ywI(sW32D0|2W7Em{Bo literal 0 HcmV?d00001 diff --git a/utf8/nucleus/images/button-paste.gif b/utf8/nucleus/images/button-paste.gif new file mode 100755 index 0000000000000000000000000000000000000000..ef0d0eb88c685faf5d246294b1dbc494d1b91ae0 GIT binary patch literal 127 zcmZ?wbhEHb6krfwSj57>z%a9;tM2E|pFr0C|IdIV1StMwVPs%nVbB3_L24P8T|9Q( zu`93;T__NG=>YpTX7P-N8Z6>blVaIQXKS2Z!*jkn`-b!0Ut$*Ua+;&i{^U#B X{$k6kg~1vCKNKq^ literal 0 HcmV?d00001 diff --git a/utf8/nucleus/images/button-preview.gif b/utf8/nucleus/images/button-preview.gif new file mode 100755 index 0000000000000000000000000000000000000000..71d2d923d5f1a4af42808c9fc39ff6c371c46cc8 GIT binary patch literal 90 zcmZ?wbhEHb6krfwn8?Jyz|is^1fBs|ia%Kx85o!tbbxH2tN@U$J*9uJ51xJ9^z`$|>Dn~95?4_Vy|{^P;QU=0ALIv;-k literal 0 HcmV?d00001 diff --git a/utf8/nucleus/images/globe.gif b/utf8/nucleus/images/globe.gif new file mode 100755 index 0000000000000000000000000000000000000000..03f2a470fe0911a7f3146cec927a65456638f63e GIT binary patch literal 124 zcmZ?wbhEHb`rj}u!t#?R@@kLTH cr;!ztj+(Ygqag#Ukn##O9x<0B4+aKn0L-l>EC2ui literal 0 HcmV?d00001 diff --git a/utf8/nucleus/index.php b/utf8/nucleus/index.php new file mode 100755 index 0000000..a496456 --- /dev/null +++ b/utf8/nucleus/index.php @@ -0,0 +1,74 @@ + _ERRORS_INSTALLDIR, + 'upgrades' => _ERRORS_UPGRADESDIR, + 'convert' => _ERRORS_CONVERTDIR + ); + $aFound = array(); + foreach($aFiles as $fileName => $fileDesc) { + if (@file_exists($fileName)) + array_push($aFound, $fileDesc); + } + if (@is_writable('../config.php')) { + array_push($aFound, _ERRORS_CONFIGPHP); + } + if (sizeof($aFound) > 0) { + startUpError( + _ERRORS_STARTUPERROR1. implode($aFound, '
  • ')._ERRORS_STARTUPERROR2, + _ERRORS_STARTUPERROR3 + ); + } + } + + $bNeedsLogin = false; + $bIsActivation = in_array($action, array('activate', 'activatesetpwd')); + + if ($action == 'logout') { + $bNeedsLogin = true; + } + + if (!$member->isLoggedIn() && !$bIsActivation) { + $bNeedsLogin = true; + } + + // show error if member cannot login to admin + if ($member->isLoggedIn() && !$member->canLogin() && !$bIsActivation) { + $error = _ERROR_LOGINDISALLOWED; + $bNeedsLogin = true; + } + + if ($bNeedsLogin) { + setOldAction($action); // see ADMIN::login() (sets old action in POST vars) + $action = 'showlogin'; + } + + sendContentType('text/html', 'admin-' . $action); + + $admin = new ADMIN(); + $admin->action($action); +?> \ No newline at end of file diff --git a/utf8/nucleus/javascript/admin.js b/utf8/nucleus/javascript/admin.js new file mode 100755 index 0000000..7a48040 --- /dev/null +++ b/utf8/nucleus/javascript/admin.js @@ -0,0 +1,60 @@ +/** + * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/) + * Copyright (C) 2002-2010 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) + * + * Some JavaScript code for the admin area + * + * $Id$ + * $NucleusJP: admin.js,v 1.6.2.1 2007/09/05 05:58:56 kimitake Exp $ + */ + +function help(url) { + popup = window.open(url,'helpwindow','status=no,toolbar=no,scrollbars=yes,resizable=yes,width=570,height=530,top=0,left=0'); + if (popup.focus) popup.focus(); + if (popup.GetAttention) popup.GetAttention(); + return false; +} + +var oldCellColor = "#000"; +function focusRow(row) { + var cells = row.cells; + if (!cells) return; + oldCellColor = cells[0].style.backgroundColor; + for (var i=0;i
  • "; + } else { + $types[$i] = '
  • ' . helpHtml('skinpartspecial') . ' ' . htmlspecialchars($friendlyNames[$type]) . "
  • "; + } + } + echo '

    ',_LIST_SKINS_DEFINED,'
      ',implode($types,'') ,'
    '; + } + echo ""; + echo ""._LISTS_EDIT.""; + + $url = $manager->addTicketToUrl('index.php?action=skinclone&skinid=' . intval($current->sdnumber)); + echo ""._LISTS_CLONE.""; + echo ""._LISTS_DELETE.""; + + break; + } +} + +function listplug_table_draftlist($template, $type) { + switch($type) { + case 'HEAD': + echo ""._LISTS_BLOG.""._LISTS_TITLE.""._LISTS_ACTIONS.""; + break; + case 'BODY': + $current = $template['current']; + + echo '', htmlspecialchars($current->bshortname) , ''; + echo '', htmlspecialchars(strip_tags($current->ititle)) , ''; + echo ""._LISTS_EDIT.""; + echo ""._LISTS_DELETE.""; + + break; + } +} + + +function listplug_table_actionlist($template, $type) { + switch($type) { + case 'HEAD': + echo ''._LISTS_TIME.''._LIST_ACTION_MSG.''; + break; + case 'BODY': + $current = $template['current']; + + echo '' , htmlspecialchars($current->timestamp), ''; + echo '' , htmlspecialchars($current->message), ''; + + break; + } +} + +function listplug_table_banlist($template, $type) { + switch($type) { + case 'HEAD': + echo ''._LIST_BAN_IPRANGE.''. _LIST_BAN_REASON.''._LISTS_ACTIONS.''; + break; + case 'BODY': + $current = $template['current']; + + echo '' , htmlspecialchars($current->iprange) , ''; + echo '' , htmlspecialchars($current->reason) , ''; + echo "",_LISTS_DELETE,""; + break; + } +} + +?> diff --git a/utf8/nucleus/libs/skinie.php b/utf8/nucleus/libs/skinie.php new file mode 100755 index 0000000..227c309 --- /dev/null +++ b/utf8/nucleus/libs/skinie.php @@ -0,0 +1,683 @@ +debug = 0; + + $this->reset(); + + } + + function reset() { + if ($this->parser) + xml_parser_free($this->parser); + + // XML file pointer + $this->fp = 0; + + // which data has been read? + $this->metaDataRead = 0; + $this->allRead = 0; + + // to maintain track of where we are inside the XML file + $this->inXml = 0; + $this->inData = 0; + $this->inMeta = 0; + $this->inSkin = 0; + $this->inTemplate = 0; + $this->currentName = ''; + $this->currentPartName = ''; + + // character data pile + $this->cdata = ''; + + // list of skinnames and templatenames (will be array of array) + $this->skins = array(); + $this->templates = array(); + + // extra info included in the XML files (e.g. installation notes) + $this->info = ''; + + // init XML parser + $this->parser = xml_parser_create(); + xml_set_object($this->parser, $this); + xml_set_element_handler($this->parser, 'startElement', 'endElement'); + xml_set_character_data_handler($this->parser, 'characterData'); + xml_parser_set_option($this->parser, XML_OPTION_CASE_FOLDING, 0); + + } + + /** + * Reads an XML file into memory + * + * @param $filename + * Which file to read + * @param $metaOnly + * Set to 1 when only the metadata needs to be read (optional, default 0) + */ + function readFile($filename, $metaOnly = 0) { + // open file + $this->fp = @fopen($filename, 'r'); + if (!$this->fp) { + return _SKINIE_ERROR_FAILEDOPEN_FILEURL; + } + + // here we go! + $this->inXml = 1; + + $tempbuffer = null; + + while (!feof($this->fp)) { + $tempbuffer .= fread($this->fp, 4096); + } + fclose($this->fp); + +/* + [2004-08-04] dekarma - Took this out since it messes up good XML if it has skins/templates + with CDATA sections. need to investigate consequences. + see bug [ 999914 ] Import fails (multiple skins in XML/one of them with CDATA) + + // backwards compatibility with the non-wellformed skinbackup.xml files + // generated by v2/v3 (when CDATA sections were present in skins) + // split up those CDATA sections into multiple ones + $tempbuffer = preg_replace_callback( + "/(metaDataRead))) { + $err = xml_parse( $this->parser, $buffer, feof($temp) ); + if (!$err && $this->debug) { + echo _ERROR . ': ' . xml_error_string(xml_get_error_code($this->parser)) . '
    '; + } + } + + // all done + $this->inXml = 0; + fclose($temp); + } + + /** + * Returns the list of skin names + */ + function getSkinNames() { + return array_keys($this->skins); + } + + /** + * Returns the list of template names + */ + function getTemplateNames() { + return array_keys($this->templates); + } + + /** + * Returns the extra information included in the XML file + */ + function getInfo() { + return $this->info; + } + + /** + * Writes the skins and templates to the database + * + * @param $allowOverwrite + * set to 1 when allowed to overwrite existing skins with the same name + * (default = 0) + */ + function writeToDatabase($allowOverwrite = 0) { + $existingSkins = $this->checkSkinNameClashes(); + $existingTemplates = $this->checkTemplateNameClashes(); + + // if not allowed to overwrite, check if any nameclashes exists + if (!$allowOverwrite) { + if ((sizeof($existingSkins) > 0) || (sizeof($existingTemplates) > 0)) { + return _SKINIE_NAME_CLASHES_DETECTED; + } + } + + foreach ($this->skins as $skinName => $data) { + // 1. if exists: delete all part data, update desc data + // if not exists: create desc + if (in_array($skinName, $existingSkins)) { + $skinObj = SKIN::createFromName($skinName); + + // delete all parts of the skin + $skinObj->deleteAllParts(); + + // update general info + $skinObj->updateGeneralInfo( + $skinName, + $data['description'], + $data['type'], + $data['includeMode'], + $data['includePrefix'] + ); + } else { + $skinid = SKIN::createNew( + $skinName, + $data['description'], + $data['type'], + $data['includeMode'], + $data['includePrefix'] + ); + $skinObj = new SKIN($skinid); + } + + // 2. add parts + foreach ($data['parts'] as $partName => $partContent) { + $skinObj->update($partName, $partContent); + } + } + + foreach ($this->templates as $templateName => $data) { + // 1. if exists: delete all part data, update desc data + // if not exists: create desc + if (in_array($templateName, $existingTemplates)) { + $templateObj = TEMPLATE::createFromName($templateName); + + // delete all parts of the template + $templateObj->deleteAllParts(); + + // update general info + $templateObj->updateGeneralInfo($templateName, $data['description']); + } else { + $templateid = TEMPLATE::createNew($templateName, $data['description']); + $templateObj = new TEMPLATE($templateid); + } + + // 2. add parts + foreach ($data['parts'] as $partName => $partContent) { + $templateObj->update($partName, $partContent); + } + } + + + } + + /** + * returns an array of all the skin nameclashes (empty array when no name clashes) + */ + function checkSkinNameClashes() { + $clashes = array(); + + foreach ($this->skins as $skinName => $data) { + if (SKIN::exists($skinName)) { + array_push($clashes, $skinName); + } + } + + return $clashes; + } + + /** + * returns an array of all the template nameclashes + * (empty array when no name clashes) + */ + function checkTemplateNameClashes() { + $clashes = array(); + + foreach ($this->templates as $templateName => $data) { + if (TEMPLATE::exists($templateName)) { + array_push($clashes, $templateName); + } + } + + return $clashes; + } + + /** + * Called by XML parser for each new start element encountered + */ + function startElement($parser, $name, $attrs) { + foreach($attrs as $key=>$value) { + $attrs[$key] = htmlspecialchars($value, ENT_QUOTES); + } + + if ($this->debug) { + echo 'START: ' . htmlspecialchars($name, ENT_QUOTES) . '
    '; + } + + switch ($name) { + case 'nucleusskin': + $this->inData = 1; + break; + case 'meta': + $this->inMeta = 1; + break; + case 'info': + // no action needed + break; + case 'skin': + if (!$this->inMeta) { + $this->inSkin = 1; + $this->currentName = $attrs['name']; + $this->skins[$this->currentName]['type'] = $attrs['type']; + $this->skins[$this->currentName]['includeMode'] = $attrs['includeMode']; + $this->skins[$this->currentName]['includePrefix'] = $attrs['includePrefix']; + $this->skins[$this->currentName]['parts'] = array(); + } else { + $this->skins[$attrs['name']] = array(); + $this->skins[$attrs['name']]['parts'] = array(); + } + break; + case 'template': + if (!$this->inMeta) { + $this->inTemplate = 1; + $this->currentName = $attrs['name']; + $this->templates[$this->currentName]['parts'] = array(); + } else { + $this->templates[$attrs['name']] = array(); + $this->templates[$attrs['name']]['parts'] = array(); + } + break; + case 'description': + // no action needed + break; + case 'part': + $this->currentPartName = $attrs['name']; + break; + default: + echo _SKINIE_SEELEMENT_UNEXPECTEDTAG . htmlspecialchars($name, ENT_QUOTES) . '
    '; + break; + } + + // character data never contains other tags + $this->clearCharacterData(); + + } + + /** + * Called by the XML parser for each closing tag encountered + */ + function endElement($parser, $name) { + if ($this->debug) { + echo 'END: ' . htmlspecialchars($name, ENT_QUOTES) . '
    '; + } + + switch ($name) { + case 'nucleusskin': + $this->inData = 0; + $this->allRead = 1; + break; + case 'meta': + $this->inMeta = 0; + $this->metaDataRead = 1; + break; + case 'info': + $this->info = $this->getCharacterData(); + case 'skin': + if (!$this->inMeta) { + $this->inSkin = 0; + } + break; + case 'template': + if (!$this->inMeta) { + $this->inTemplate = 0; + } + break; + case 'description': + if ($this->inSkin) { + $this->skins[$this->currentName]['description'] = $this->getCharacterData(); + } else { + $this->templates[$this->currentName]['description'] = $this->getCharacterData(); + } + break; + case 'part': + if ($this->inSkin) { + $this->skins[$this->currentName]['parts'][$this->currentPartName] = $this->getCharacterData(); + } else { + $this->templates[$this->currentName]['parts'][$this->currentPartName] = $this->getCharacterData(); + } + break; + default: + echo _SKINIE_SEELEMENT_UNEXPECTEDTAG . htmlspecialchars($name, ENT_QUOTES) . '
    '; + break; + } + $this->clearCharacterData(); + + } + + /** + * Called by XML parser for data inside elements + */ + function characterData ($parser, $data) { + if ($this->debug) { + echo 'NEW DATA: ' . htmlspecialchars($data, ENT_QUOTES) . '
    '; + } + $this->cdata .= $data; + } + + /** + * Returns the data collected so far + */ + function getCharacterData() { +// echo $this->cdata; + if ( (strtoupper(_CHARSET) == 'UTF-8') + or (strtoupper(_CHARSET) == 'ISO-8859-1') + or (!function_exists('mb_convert_encoding')) ) { + return $this->cdata; + } else { + return mb_convert_encoding($this->cdata, _CHARSET ,'UTF-8'); + } + } + + /** + * Clears the data buffer + */ + function clearCharacterData() { + $this->cdata = ''; + } + + /** + * Static method that looks for importable XML files in subdirs of the given dir + */ + function searchForCandidates($dir) { + $candidates = array(); + + $dirhandle = opendir($dir); + while ($filename = readdir($dirhandle)) { + if (@is_dir($dir . $filename) && ($filename != '.') && ($filename != '..')) { + $xml_file = $dir . $filename . '/skinbackup.xml'; + if (file_exists($xml_file) && is_readable($xml_file)) { + $candidates[$filename] = $filename; //$xml_file; + } + + // backwards compatibility + $xml_file = $dir . $filename . '/skindata.xml'; + if (file_exists($xml_file) && is_readable($xml_file)) { + $candidates[$filename] = $filename; //$xml_file; + } + } + } + closedir($dirhandle); + + return $candidates; + + } + + +} + + +class SKINEXPORT { + + var $templates; + var $skins; + var $info; + + /** + * Constructor initializes data structures + */ + function SKINEXPORT() { + // list of templateIDs to export + $this->templates = array(); + + // list of skinIDs to export + $this->skins = array(); + + // extra info to be in XML file + $this->info = ''; + } + + /** + * Adds a template to be exported + * + * @param id + * template ID + * @result false when no such ID exists + */ + function addTemplate($id) { + if (!TEMPLATE::existsID($id)) { + return 0; + } + + + $this->templates[$id] = TEMPLATE::getNameFromId($id); + + return 1; + } + + /** + * Adds a skin to be exported + * + * @param id + * skin ID + * @result false when no such ID exists + */ + function addSkin($id) { + if (!SKIN::existsID($id)) { + return 0; + } + + $this->skins[$id] = SKIN::getNameFromId($id); + + return 1; + } + + /** + * Sets the extra info to be included in the exported file + */ + function setInfo($info) { + $this->info = $info; + } + + + /** + * Outputs the XML contents of the export file + * + * @param $setHeaders + * set to 0 if you don't want to send out headers + * (optional, default 1) + */ + function export($setHeaders = 1) { + if ($setHeaders) { + // make sure the mimetype is correct, and that the data does not show up + // in the browser, but gets saved into and XML file (popup download window) + header('Content-Type: text/xml'); + header('Content-Disposition: attachment; filename="skinbackup.xml"'); + header('Expires: 0'); + header('Pragma: no-cache'); + } + + echo "\n"; + + // meta + echo "\t\n"; + // skins + foreach ($this->skins as $skinId => $skinName) { + $skinName = htmlspecialchars($skinName, ENT_QUOTES); + if (strtoupper(_CHARSET) != 'UTF-8') { + $skinName = mb_convert_encoding($skinName, 'UTF-8', _CHARSET); + } + echo "\t\t" . '' . "\n"; + } + // templates + foreach ($this->templates as $templateId => $templateName) { + $templateName = htmlspecialchars($templateName, ENT_QUOTES); + if (strtoupper(_CHARSET) != 'UTF-8') { + $templateName = mb_convert_encoding($templateName, 'UTF-8', _CHARSET); + } + echo "\t\t" . '