Skip to main content

新增系统函数

DISCUZ_PLUGIN()

X5.0 中新增了 DISCUZ_PLUGIN() 函数,代替类似”/source/plugin/xxx”目录的写法,例如:
require_once DISCUZ_PLUGIN('xxx').'/index.php';
提示: 如果您的插件要同时兼容 Discuz! 您必须使用此函数,但是,涉及前端调用的路径写法是 URI 的一部分,而非后台目录文件调用,无需修改。

DISCUZ_TEMPLATE()

X5.0 中新增了 DISCUZ_TEMPLATE() 函数,代替类似”/template/xxx”目录的写法,例如:
$f = DISCUZ_TEMPLATE('xxx').'/data.htm';
提示: 如果您的插件要同时兼容 Discuz! 您必须使用此函数,但是,涉及前端调用的路径写法是 URI 的一部分,而非后台目录文件调用,无需修改。

新增系统常量

DISCUZ_DATA

X5.0 中新增了 DISCUZ_DATA 常量,代替类似”/data”目录的写法,例如:
$lock = DISCUZ_DATA.'cache/data.php';
提示: 如果您的插件要同时兼容 Discuz! 您必须使用此函数。由于 Discuz! 中所有永久性文件都会存入对象存储,因此 DISCUZ_DATA 目录禁止写入永久文件,否则审核员有权将应用打回。

DISCUZ_ROOT_STATIC

对于 Discuz!,由于 /data 目录禁止写入,您可以把永久文件写入到此目录中,它有以下特性:
  • 此目录与 DISCUZ_ROOT 意义相同,但只有存放的静态文件(md、txt、js、css、json、xml、图片等)可对外展示。
  • 如保存的文件和实际产品文件及路径相同,不会产生覆盖效果,也不会对外展示。
  • 此目录占用的空间将计算到 Discuz! 用户的平台存储中。
提示: 此常量只针对 Discuz! 有实际作用,X5.0 开源版此常量与 DISCUZ_ROOT 相等。

多语言

Discuz! 原生支持多语言内核,您只需自定义多语言 key 并设置此 key 对应的语言包文件路径即可。

设置自定义语言

i18n('set', 'mylang', DISCUZ_ROOT.'./i18n/en');
设置多语言 mylang 的语言包文件路径为 DISCUZ_ROOT.'/i18n/en' 目录,支持插件路径。

读取设置的自定义语言列表

i18n('get');
把设置的语言 key 赋值给 $_G['cookie']['i18n'] 即可实时切换语言。

语言包文件

X5.0 的插件文件中可以直接写语言包文件,而不必写在 XML 中。之前写在 XML 中的语言包在更新缓存后会自动写入到语言包文件中。 语言包文件位于 /source/plugin/myplugin/i18n/SC_UTF8/lang_plugin.php
$scriptlang['myplugin'] = [
    'nice' => '不错!',
];

$templatelang['myplugin'] = [
    'nice' => '不错!',
];

$systemlang['myplugin'] = [
    'nice' => '不错!',
];

$installlang['myplugin'] = [
    'name' => '插件名称',
];
XML 中的 namelicensedescriptionintrocopyrightversionvar.titlevar.descriptionvar.extramodules.menu 可以写进 $installlang 中。 同时,语言包也兼容 i18n,可以针对相应的 i18n 语言定制额外语种的语言包。兼容 i18n 的语言包文件位为 /source/plugin/myplugin/i18n/en/lang_plugin.php。我们统一约定用 2 个字母的缩写代表各个语言,例如 en、de、fr 等等。

JS 语言包

JS 语言包为 X5.0 新增的语言包类型,文件名为 lang_js.php,默认语言包位于 /source/plugin/myplugin/i18n/SC_UTF8/ 目录下。 语言包内容参考以下格式:
$lang = [
    'jslang' => 'JS 语言包',
];
所有调用了 common.js 的页面中,在您的 JS 文件中通过 $L('jslang') 方式调用 JS 语言包:
function sample_notice() {
    alert($L('jslang'))
}

自定义后台菜单

这是 Discuz! 中的新增内容,插件无需添加 menu 扩展,即可实现菜单的添加与删除。 您所添加的菜单请务必在卸载插件后清理完毕。

准备工作

如果在非安装、卸载脚本中使用,最好是判断下方法是否存在:
if(!function_exists('set_admin_menu')){
    include_once libfile('function/plugin');
}

添加菜单

完整示例:
if(!function_exists('set_admin_menu')){
    include_once libfile('function/plugin');
}

$menus = array(
    array('侧边菜单1','plugins?id=1'),
    array('侧边菜单2','plugins?id=2'),
);

set_admin_menu('顶部菜单名称', $menus);

删除菜单

完整示例:
if(!function_exists('remove_admin_menu')){
    include_once libfile('function/plugin');
}

remove_admin_menu('顶部菜单名称');  //单独删除
remove_admin_menu(array('顶部菜单名称1','顶部菜单名称2'));  //批量删除