// var/script.js
const abc = "#abc#";
挂编译接口或者配置项保存时生成:
// bin/script.js
const abc = "实际的值";
-----
// 接口挂载
function ActivePlugin_diySth()
{
Add_Filter_Plugin('Filter_Plugin_Zbp_BuildTemplate', 'diySth_BuildTemp')
}
// 模板编译调用
function diySth_BuildTemp(&$templates)
{
$templates['header'] = str_replace('{$header}', '{$header} <link rel="stylesheet" href="' . diySth_Path("b-css", "host") . '?v=2022080610" media="screen" />', $templates['header']);
$templates['footer'] = str_replace('{$footer}', '{$footer}<script src="' . diySth_Path("b-js", "host") . '?v=2022080610"></script>', $templates['footer']);
}
// 使用 var/script.js 生成 bin/script.js
function diySth_GenBinJS($data)
{
$src = diySth_Path("var/script.js");
$dst = diySth_Path("bin/script.js");
$js = file_get_contents($src);
// $data = array("abc"=>"123", "def"=>"456");
// 三种替换方式
$js = str_replace("const diySth_Data = {};", "const diySth_Data = " . json_encode($data) . ";", $js);
// 有个 strtr() ,需要按如下格式传入数组
$js = strtr($js, array("#abc#" => "123", "#def#" => "456"));
// 正则回调替换 "#abc#" 形式的字符串
$js = preg_replace_callback("/#([^#]+)#/", function ($matches) use ($data) {
return $data[$matches[1]];
}, $js);
file_put_contents($dst, $js);
}
个人习惯:
var/ 插件自带但一般并不直接使用的文件,预置图片之类的;
usr/ 用户自行上传指定的文件,一般和 var/ 内同名文件对应,首次安装时可从 var/ 复制一份;
bin/ 以 var/ 或 /usr 内文件为输入源进一步修改生成,或者其他需要先生成再直接使用的文件;
上边三个算是同一体系,usr/ 和 /bin 视情况也可能只用一个;
其他有 db/ cfg/ 之类可以放文件形式的数据,当然也可以都放在 usr/ 里。。
以上全部文件夹,除 var/ 外都在打包时排除。。
「QQ群:我的咸鱼心」「「水坑」系列教程索引」
我大概率能够解决你实际面临的问题(收费),只是”你提出的问题“要如何回答则可能是另一个问题。