function is_installed() { if (!db()) { return false; } return my_sql("SHOW COLUMNS FROM `user`"); }
function __construct() { // 检测语言 if (isset($_COOKIE['tt2_lang'])) { $GLOBALS['i18n'] = z(t(basename($_COOKIE['tt2_lang']))); } else { $GLOBALS['i18n'] = c('default_language'); } __('TEST'); // force to load langua array before plugin // 安装时不启用插件 if (g('c') != 'install') { // 载入插件 $plugins = c('plugins'); if (my_sql("SHOW COLUMNS FROM `plugin`")) { if ($pinfos = get_data("SELECT * FROM `plugin`")) { foreach ($pinfos as $pinfo) { if (intval($pinfo['on']) == 0) { $plugins = array_remove($pinfo['folder_name'], $plugins); } elseif (!in_array($pinfo['folder_name'], $plugins)) { $plugins[] = $pinfo['folder_name']; } } } } if (is_array($plugins)) { $plugins = array_unique($plugins); } if (isset($plugins) && is_array($plugins)) { foreach ($plugins as $plugin) { $plugin_file = c('plugin_path') . DS . basename($plugin) . DS . 'app.php'; if (file_exists($plugin_file)) { require_once $plugin_file; } } } $GLOBALS['config']['plugins'] = $plugins; } // update config for this time // 载入默认的 parent::__construct(); do_action('CTRL_ALL'); apply_filter('CTRL_' . g('c') . '_' . g('a') . '_INPUT_FILTER'); if (g('c') != 'api') { // set session time session_set_cookie_params(c('session_time')); @session_start(); } do_action('CTRL_SESSION_STARTED'); }
##name_us_en Checklist ##name_zh_tw Checklist ##name_zh_cn Checklist ##folder_name check_list ##author Easy, Xian Li ##email Easychen@qq.com; kagurahun@outlook.com ##reversion 1.1 ##desp Add checklist features to TODO ##desp_us_en Add checklist to TODO ##desp_zh_tw 为TODO添加checklist,用于必要步骤和流程的检查 ##desp_zh_cn 为TODO添加checklist,用于必要步骤和流程的检查 ***/ if (!defined('IN')) { die('bad request'); } if (!my_sql("SHOW COLUMNS FROM `checklist_tpl`")) { $sql = "CREATE TABLE IF NOT EXISTS `checklist` (\n `id` int(11) NOT NULL AUTO_INCREMENT,\n `tid` int(11) NOT NULL,\n `title` varchar(64) NOT NULL,\n `content` varchar(255) NOT NULL,\n `timeline` datetime NOT NULL,\n `uid` int(11) NOT NULL,\n `is_done` tinyint(1) NOT NULL DEFAULT '0',\n `sub_tid` int(11) NOT NULL DEFAULT '0',\n `order` int(11) NOT NULL DEFAULT '0',\n PRIMARY KEY (`id`),\n KEY `tid` (`tid`)\n) ENGINE=MyISAM DEFAULT CHARSET=utf8"; run_sql($sql); $sql = "CREATE TABLE IF NOT EXISTS `checklist_tpl` (\n`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,\n`title` VARCHAR( 255 ) NOT NULL ,\n`content` TEXT NOT NULL ,\n`uid` INT NOT NULL DEFAULT '0',\n`version` INT NOT NULL DEFAULT '1',\nINDEX ( `uid` )\n) ENGINE = MYISAM DEFAULT CHARSET=utf8"; run_sql($sql); } $plugin_lang = array(); $plugin_lang['zh_cn'] = array('PL_CHECK_LIST_EDIT' => '编辑CheckList', 'PL_CHECK_LIST_TEMPLATE' => '模板', 'PL_CHECK_LIST_ADD_ITEM' => '追加检查项', 'PL_CHECK_LIST_TEMPLATE_REMOVE' => '删除', 'PL_CHECK_LIST_TEMPLATE_CREATE' => '创建', 'PL_CHECK_LIST_TEMPLATE_UPDATE' => '保存修改', 'PL_CHECK_LIST_TEMPLATE_APPLY' => '追加到TODO', 'JS_PL_CHECK_LIST_ITEM_REMOVE_CONFIRM' => '检查项移除后将不可恢复,继续?', 'JS_PL_CHECK_LIST_MARK_TODO_READ_CONFIRM' => '你已经完成了TODO的全部CheckList,要将TODO标记为完成么?', 'JS_PL_CHECK_LIST_TEMPLATE_REMOVE_CONFIRM' => '确定要删除CheckList模板【%s(%s)】吗?', 'JS_PL_CHECK_LIST_TEMPLATE' => '编辑CheckList模板', 'JS_PL_CHECK_LIST_TEMPLATE_UPDATED' => '模板内容已保存', 'JS_PL_CHECK_LIST_TEMPLATE_NAME' => '请输入模板名称', 'JS_PL_CHECK_LIST_TEMPLATE_INTRO' => '填写CheckList检查项,每行一条', 'JS_PL_CHECK_LIST_TID_ERROR' => '错误的TID', 'PL_CHECK_LIST_TEST' => ''); $plugin_lang['zh_tw'] = array('PL_CHECK_LIST_EDIT' => '編輯CheckList', 'PL_CHECK_LIST_TEMPLATE' => '模板', 'PL_CHECK_LIST_ADD_ITEM' => '追加檢查項', 'PL_CHECK_LIST_TEMPLATE_REMOVE' => '刪除', 'PL_CHECK_LIST_TEMPLATE_CREATE' => '創建', 'PL_CHECK_LIST_TEMPLATE_UPDATE' => '保存修改', 'PL_CHECK_LIST_TEMPLATE_APPLY' => '追加到TODO', 'JS_PL_CHECK_LIST_ITEM_REMOVE_CONFIRM' => '檢查項移除後將不可恢復,繼續? ', 'JS_PL_CHECK_LIST_MARK_TODO_READ_CONFIRM' => '你已經完成了TODO的全部CheckList,要將TODO標記為完成么? ', 'JS_PL_CHECK_LIST_TEMPLATE_REMOVE_CONFIRM' => '確定要刪除CheckList模板【%s(%s)】嗎? ', 'JS_PL_CHECK_LIST_TEMPLATE' => '編輯CheckList模板', 'JS_PL_CHECK_LIST_TEMPLATE_UPDATED' => '模板內容已保存', 'JS_PL_CHECK_LIST_TEMPLATE_NAME' => '請輸入模板名稱', 'JS_PL_CHECK_LIST_TEMPLATE_INTRO' => '填寫CheckList檢查項,每行一條', 'JS_PL_CHECK_LIST_TID_ERROR' => '錯誤的TID', 'PL_CHECK_LIST_TEST' => ''); $plugin_lang['us_en'] = array('PL_CHECK_LIST_EDIT' => 'Edit CheckList', 'PL_CHECK_LIST_TEMPLATE' => 'Teamplate', 'PL_CHECK_LIST_ADD_ITEM' => 'Append items', 'PL_CHECK_LIST_TEMPLATE_REMOVE' => 'Remove', 'PL_CHECK_LIST_TEMPLATE_CREATE' => 'Create', 'PL_CHECK_LIST_TEMPLATE_UPDATE' => 'Save', 'PL_CHECK_LIST_TEMPLATE_APPLY' => 'Apply to TODO', 'JS_PL_CHECK_LIST_ITEM_REMOVE_CONFIRM' => 'Item will be remove, continue? ', 'JS_PL_CHECK_LIST_MARK_TODO_READ_CONFIRM' => 'All check items finished, mark TODO as done?', 'JS_PL_CHECK_LIST_TEMPLATE_REMOVE_CONFIRM' => 'Remove CheckList template[%s(%s)]?', 'JS_PL_CHECK_LIST_TEMPLATE' => 'Edite Template', 'JS_PL_CHECK_LIST_TEMPLATE_UPDATED' => 'Template updated', 'JS_PL_CHECK_LIST_TEMPLATE_NAME' => 'Input template name', 'JS_PL_CHECK_LIST_TEMPLATE_INTRO' => 'Add check items here,one line each', 'JS_PL_CHECK_LIST_TID_ERROR' => 'Bad TID', 'PL_CHECK_LIST_TEST' => ''); plugin_append_lang($plugin_lang); add_action('UI_TODO_DETAIL_COMMENTBOX_BEFORE', 'check_list_area'); function check_list_area($data) { echo render_html($data, dirname(__FILE__) . DS . 'view' . DS . 'check_list_area.tpl.html'); }
##name_zh_tw 邮件队列 ##name_zh_cn 邮件队列 ##folder_name mail_queue ##author Easy, Xian Li ##email Easychen@qq.com; kagurahun@outlook.com ##reversion 1.1 ##desp Utilize ajax to simulate emails queue, helps to avoid php script freezing while doing mass email, also smtp supported ##desp_us_en Utilize ajax to simulate emails queue, helps to avoid php script freezing while doing mass email, also smtp supported ##desp_zh_tw 通过ajax模拟邮件队列,解决群发邮件时php卡死的问题- 支持smtp ##desp_zh_cn 通过ajax模拟邮件队列,解决群发邮件时php卡死的问题 - 支持smtp ***/ if (!defined('IN')) { die('bad request'); } // 检查并创建数据库 if (!my_sql("SHOW COLUMNS FROM `mail_queue`")) { // table not exists // create it run_sql("CREATE TABLE IF NOT EXISTS `mail_queue` (\n `id` int(11) NOT NULL AUTO_INCREMENT,\n `email` varchar(256) NOT NULL,\n `data` text NOT NULL,\n `timeline` datetime NOT NULL,\n PRIMARY KEY (`id`)\n) ENGINE=MyISAM DEFAULT CHARSET=utf8; "); if ($data = get_data("SELECT `id` FROM `user` ")) { $sql = "REPLACE INTO `keyvalue` ( `key` , `value` ) VALUES "; foreach ($data as $item) { $v[] = "( 'mqueue_usettings_" . intval($item['id']) . "' , 1 )"; } $sql = $sql . join(' , ', $v); run_sql($sql); } kset('mqueue_not_online', 1); } $plugin_lang = array(); $plugin_lang['zh_cn'] = array('PL_MAIL_QUEUE_SETTINGS' => '邮件发送设置', 'PL_MAIL_QUEUE_SETTINGS_CANNOT_EMPTY' => '设置内容不能为空', 'PL_MAIL_QUEUE_SETTINGS_UPDATED' => '设置已保存', 'JS_PL_MAIL_QUEUE_NOTICE_ON' => '你将会收到邮件通知', 'JS_PL_MAIL_QUEUE_NOTICE_OFF' => '你将不再收到邮件通知', 'JS_PL_MAIL_QUEUE_TEST_MAIL_SENT' => '已经向%s发送了邮件,请登入邮箱检查。如果邮件在垃圾箱,请将发件人加入白名单。', 'JS_PL_MAIL_QUEUE_TEST_MAIL_ERROR' => '发送失败,请检查配置项是否填写完整,错误信息%s', 'JS_PL_MAIL_QUEUE_SENDING_MAIL' => '正在发送队列中的邮件-剩余%s封', 'PL_MAIL_QUEUE_TEST_MAIL_TITLE' => '来自TeamToy的测试邮件%s', 'PL_MAIL_QUEUE_TEST_MAIL_CONTENT' => '如果您收到这封邮件说明您在SMTP中的邮件配置是正确的;如果您在垃圾邮箱找到这封邮件,请将发件人加入白名单。', 'PL_MAIL_QUEUE_NOTICE_MAIL_TITLE' => '%s邮件通知 - %s', 'PL_MAIL_QUEUE_NOTICE_MAIL_CONTENT_POSTFIX' => '- <a href="%s">点击这里查看详情</a>', 'PL_MAIL_QUEUE_TITLE_SHORT' => '邮件通知', 'PL_MAIL_QUEUE_SMTP_SERVER' => 'SMTP服务器', 'PL_MAIL_QUEUE_SMTP_PORT' => '端口', 'PL_MAIL_QUEUE_SMTP_USERNAME' => '用户名', 'PL_MAIL_QUEUE_SMTP_PASSWORD' => '密码', 'PL_MAIL_QUEUE_SEND_TO_NOT_ONLINE' => '只给不在线的同学发邮件', 'PL_MAIL_QUEUE_ACTIVE' => '启用', 'PL_MAIL_QUEUE_SEND_TEST_MAIL' => '发送测试邮件', 'PL_MAIL_QUEUE_TEST' => '');
function __construct() { // detect language $ipaddr = get_client_ip(); $browser = new Browser(); $bro = $browser->getBrowser(); $bro_ver = $browser->getVersion(); $platfm = $browser->getPlatform(); $lang = strtolower(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 5)); $lang = str_replace("-", "_", $lang); $sql = "SELECT * FROM ip_br_os_lang WHERE ip = '" . $ipaddr . "' AND browser = '" . $bro . "' AND browser_ver='" . $bro_ver . "' AND platform= '" . $platfm . "'"; if (strcmp($lang, "en_us") == 0) { $lang = 'us_en'; } /* * * old logic for loading language * * if( isset($_COOKIE['tt2_lang']) ) {$GLOBALS['i18n'] = z(t(basename($_COOKIE['tt2_lang'])));} else {$GLOBALS['i18n'] = c('default_language'); } */ // loading language $data = array(); if ($data = get_data($sql)) { $GLOBALS['i18n'] = $data[0]['language']; } else { $sql2 = "INSERT INTO ip_br_os_lang (ip, browser, browser_ver, platform, language) VALUES ('" . $ipaddr . "', '" . $bro . "', '" . $bro_ver . "', '" . $platfm . "', '" . $lang . "')"; run_sql($sql2); $GLOBALS['i18n'] = $lang; } __('TEST'); // force to load language array before plugin // echo "-i18n: " . $GLOBALS['i18n']."-"; // echo "-lang: " . $lang."-"; $GLOBALS['sys']['browser'] = $bro; $GLOBALS['sys']['browser_version'] = $bro_ver; $GLOBALS['sys']['platform'] = $platfm; if (isset($data[0]['language'])) { $GLOBALS['sys']['language'] = $data[0]['language']; } else { $GLOBALS['sys']['language'] = $lang; } $GLOBALS['sys']['ip'] = $ipaddr; // do not activate plugin while installing if (g('c') != 'install') { // loading plugins $plugins = c('plugins'); if (my_sql("SHOW COLUMNS FROM `plugin`")) { if ($pinfos = get_data("SELECT * FROM `plugin`")) { foreach ($pinfos as $pinfo) { if (intval($pinfo['on']) == 0) { $plugins = array_remove($pinfo['folder_name'], $plugins); } elseif (!in_array($pinfo['folder_name'], $plugins)) { $plugins[] = $pinfo['folder_name']; } } } } if (is_array($plugins)) { $plugins = array_unique($plugins); } if (isset($plugins) && is_array($plugins)) { foreach ($plugins as $plugin) { $plugin_file = c('plugin_path') . DS . basename($plugin) . DS . 'app.php'; if (file_exists($plugin_file)) { require_once $plugin_file; } } } $GLOBALS['config']['plugins'] = $plugins; } // update config for this time // loading defaults parent::__construct(); do_action('CTRL_ALL'); apply_filter('CTRL_' . g('c') . '_' . g('a') . '_INPUT_FILTER'); if (g('c') != 'api') { // set session time session_set_cookie_params(c('session_time')); @session_start(); //$sql = "SELECT language FROM `user` WHERE `id` = '" . intval(uid()) . "' LIMIT 1"; //echo $lang; // echo $GLOBALS['sys']['language']; $sql3 = "UPDATE ip_br_os_lang SET uid='" . intval(uid()) . "' WHERE ip = '" . $GLOBALS['sys']['ip'] . "' AND browser = '" . $GLOBALS['sys']['browser'] . "' AND browser_ver='" . $GLOBALS['sys']['browser_version'] . "' AND platform= '" . $GLOBALS['sys']['platform'] . "'"; run_sql($sql3); // if (isset($data[0]['language'])) // { // $sql4 ="UPDATE user SET language='".$data[0]['language']."' WHERE id='". intval(uid())."'"; // } // else // { $sql4 = "UPDATE user SET language='" . $GLOBALS['sys']['language'] . "' WHERE id='" . intval(uid()) . "'"; // } run_sql($sql4); } do_action('CTRL_SESSION_STARTED'); //echo $GLOBALS['i18n']; }
##name_zh_cn SimpleToken ##folder_name simple_token ##author Easy, Xian Li ##email Easychen@qq.com; kagurahun@outlook.com ##reversion 1.1 ##desp Allows to create a NEVER EXPERIED Token to be used in access API, supporting json and jsonp as ouput format ##desp_us_en Allows to create a NEVER EXPERIED Token to be used in access API, supporting json and jsonp as ouput format ##desp_zh_tw SimpleToken让用户可以创建一个当前账户的永不过期的Token,并在调用API的时候使用。SimpleToekn支持json和jsonp两种输出 ##desp_zh_cn SimpleToken让用户可以创建一个当前账户的永不过期的Token,并在调用API的时候使用。SimpleToekn支持json和jsonp两种输出 ***/ if (!defined('IN')) { die('bad request'); } // 创建方便外部引用的长期Token,可手工关闭和重置 // 检查并创建数据库 if (!my_sql("SHOW COLUMNS FROM `stoken`")) { // table not exists // create it run_sql("CREATE TABLE IF NOT EXISTS `stoken` (\n `uid` int(11) NOT NULL,\n `token` varchar(32) NOT NULL,\n `on` tinyint(1) NOT NULL DEFAULT '1',\n PRIMARY KEY (`uid`)\n) ENGINE=MyISAM DEFAULT CHARSET=utf8"); } $plugin_lang = array(); $plugin_lang['zh_cn'] = array('PL_SIMPLE_TOKEN_MENU' => 'Simple Token API', 'PL_SIMPLE_TOKEN_TITLE' => 'Simple Token', 'PL_SIMPLE_TOKEN_EXPLAIN' => '<p>SimpleToken是一个永不过期的Token,通过它你可以直接用URL访问TeamToy数据。</p> <p>为保证安全,请在不使用时关闭此功能。</p>', 'PL_SIMPLE_TOKEN_TO_ACTIVE' => '启用Token', 'PL_SIMPLE_TOKEN_STOPPED' => 'Token %s (已停用)', 'PL_SIMPLE_TOKEN_ACTIVE' => 'Token %s ', 'PL_SIMPLE_TOKEN_RESET' => '重置Token', 'PL_SIMPLE_TOKEN_STOP' => '停用Token', 'PL_SIMPLE_TOKEN_DOC_TODOLIST' => '<a href="?c=api&a=todo_list&stoken=%s" target="new">获取我的TODO List</a>', 'PL_SIMPLE_TOKEN_DOC_UNREAD_MESSAGE' => '<a href="?c=api&a=user_unread&stoken=%s" target="new">获取我的未读消息</a>', 'PL_SIMPLE_TOKEN_DOC_MEMBERS' => '<a href="?c=api&a=team_members&stoken=%s" target="new">获取成员联系信息</a>', 'PL_SIMPLE_TOKEN_DOC_FEED' => '<a href="?c=api&a=feed_list&stoken=%s" target="new">获取最新团队动态</a>', 'PL_SIMPLE_TOKEN_DOC_MORE' => '<a href="%s/apidoc.html" target="_blank">查看更多API</a><br/>↑将文档中的\'token\'变量改为\'stoken\'即可', 'PL_SIMPLE_TOKEN_CREATE_ERROR' => '创建失败,请稍后再试', 'PL_SIMPLE_TOKEN_RESET_CONFIRM' => '确定要重置Token么?之前使用了接口的程序可能因此失效。', 'PL_SIMPLE_TOKEN_TEST' => ''); $plugin_lang['zh_tw'] = array('PL_SIMPLE_TOKEN_MENU' => 'Simple Token API', 'PL_SIMPLE_TOKEN_TITLE' => 'Simple Token', 'PL_SIMPLE_TOKEN_EXPLAIN' => '<p>SimpleToken是一個永不過期的Token,通過它你可以直接用URL訪問TeamToy數據。 </p> <p>為保證安全,請在不使用時關閉此功能。 </p>', 'PL_SIMPLE_TOKEN_TO_ACTIVE' => '啟用Token', 'PL_SIMPLE_TOKEN_STOPPED' => 'Token %s (已停用)', 'PL_SIMPLE_TOKEN_ACTIVE' => 'Token %s ', 'PL_SIMPLE_TOKEN_RESET' => '重置Token', 'PL_SIMPLE_TOKEN_STOP' => '停用Token', 'PL_SIMPLE_TOKEN_DOC_TODOLIST' => '<a href="?c=api&a=todo_list&stoken=%s" target="new">獲取我的TODO List</a>', 'PL_SIMPLE_TOKEN_DOC_UNREAD_MESSAGE' => '<a href="?c=api&a=user_unread&stoken=%s" target="new">獲取我的未讀消息</a>', 'PL_SIMPLE_TOKEN_DOC_MEMBERS' => '<a href="?c=api&a=team_members&stoken=%s" target="new">獲取成員聯繫信息</a>', 'PL_SIMPLE_TOKEN_DOC_FEED' => '<a href="?c=api&a=feed_list&stoken=%s" target="new">獲取最新團隊動態</a>', 'PL_SIMPLE_TOKEN_DOC_MORE' => '<a href="%s/apidoc.html" target="_blank">查看更多API</a><br/>↑將文檔中的\'token\'變量改為\'stoken\'即可', 'PL_SIMPLE_TOKEN_CREATE_ERROR' => '創建失敗,請稍後再試', 'PL_SIMPLE_TOKEN_RESET_CONFIRM' => '確定要重置Token麼?之前使用了接口的程序可能因此失效。 ', 'PL_SIMPLE_TOKEN_TEST' => ''); $plugin_lang['us_en'] = array('PL_SIMPLE_TOKEN_MENU' => 'Simple Token API', 'PL_SIMPLE_TOKEN_TITLE' => 'Simple Token', 'PL_SIMPLE_TOKEN_EXPLAIN' => '<p> SimpleToken is a token never expires, through which you can directly access TeamToy data via URL </ p> <p>Please turn this feature off when not in use to ensure safety</ p> ', 'PL_SIMPLE_TOKEN_TO_ACTIVE' => 'Enable Token', 'PL_SIMPLE_TOKEN_STOPPED' => 'Token %s (disabled)', 'PL_SIMPLE_TOKEN_ACTIVE' => 'Token %s', 'PL_SIMPLE_TOKEN_RESET' => 'Reset Token', 'PL_SIMPLE_TOKEN_STOP' => 'Disable Token', 'PL_SIMPLE_TOKEN_DOC_TODOLIST' => '<a href="?c=api&a=todo_list&stoken=%s" target="new">Get my TODO List </ a>', 'PL_SIMPLE_TOKEN_DOC_UNREAD_MESSAGE' => '<a href="?c=api&a=user_unread&stoken=%s" target="new"> Get my unread messages </ a>', 'PL_SIMPLE_TOKEN_DOC_MEMBERS' => '<a href="?c=api&a=team_members&stoken=%s" target="new"> Get members\' contact information </ a>', 'PL_SIMPLE_TOKEN_DOC_FEED' => '<a href="?c=api&a=feed_list&stoken=%s" target="new"> Get team feeds</ a>', 'PL_SIMPLE_TOKEN_DOC_MORE' => '<a href="%s/apidoc.html" target="_blank">More API </ a> ↑ change the \' token \'variable to \'stoken \' in document ', 'PL_SIMPLE_TOKEN_CREATE_ERROR' => 'Create failed, please try again later', 'PL_SIMPLE_TOKEN_RESET_CONFIRM' => 'Reset Token now? Old code using this token may not available ', 'PL_SIMPLE_TOKEN_TEST' => ''); plugin_append_lang($plugin_lang); // 添加顶部导航按钮 add_action('UI_USERMENU_BOTTOM', 'stoken_user_menu'); function stoken_user_menu()
##name_zh_tw CSS自定义工具 ##name_zh_cn CSS自定义工具 ##folder_name css_modifier ##author Easy, Xian Li ##email Easychen@qq.com; kagurahun@outlook.com ##reversion 1 ##desp Allow user to add customized CSS ##desp_us_en Allow user to add customized CSS ##desp_zh_tw 允许用户追加自定义的CSS ##desp_zh_cn 允许用户追加自定义的CSS ***/ if (!defined('IN')) { die('bad request'); } // 检查并创建数据库 if (!my_sql("SHOW COLUMNS FROM `css`")) { // table not exists // create it run_sql("CREATE TABLE IF NOT EXISTS `css` (\n `uid` int(11) NOT NULL,\n `css` text NULL,\n PRIMARY KEY (`uid`)\n) ENGINE=MyISAM DEFAULT CHARSET=utf8 "); } $plugin_lang = array(); $plugin_lang['zh_cn'] = array('PL_CSS_MODIFIER_MENU_TITLE' => '自定义CSS', 'PL_CSS_MODIFIER_DATE_UPDATE_ERROR' => '数据保存失败,请稍后重试。<a href="%s">点击返回</a>', 'PL_CSS_MODIFIER_TEST' => ''); $plugin_lang['zh_tw'] = array('PL_CSS_MODIFIER_MENU_TITLE' => '客制化CSS', 'PL_CSS_MODIFIER_DATE_UPDATE_ERROR' => '數據保存失敗,請稍後重試。 <a href="%s">點擊返回</a>', 'PL_CSS_MODIFIER_TEST' => ''); $plugin_lang['us_en'] = array('PL_CSS_MODIFIER_MENU_TITLE' => 'Custom CSS', 'PL_CSS_MODIFIER_DATE_UPDATE_ERROR' => 'Date update error, <a href="%s">go back</a>', 'PL_CSS_MODIFIER_TEST' => ''); plugin_append_lang($plugin_lang); // 添加顶部导航按钮 add_action('UI_USERMENU_BOTTOM', 'mycss_menu_list'); function mycss_menu_list() { ?> <li><a href="?c=plugin&a=mycss"><?php