{"id":36387427,"url":"https://github.com/moonwalkercui/jk-build-html","last_synced_at":"2026-01-11T15:04:03.260Z","repository":{"id":56999633,"uuid":"178993604","full_name":"moonwalkercui/jk-build-html","owner":"moonwalkercui","description":"TP生成静态站点类,build static site, thinkphp class, build html page","archived":false,"fork":false,"pushed_at":"2019-08-06T08:58:52.000Z","size":43,"stargazers_count":27,"open_issues_count":0,"forks_count":4,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-10-05T11:50:52.582Z","etag":null,"topics":["static-html","static-site","thinkphp"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/moonwalkercui.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-04-02T03:41:09.000Z","updated_at":"2022-06-24T07:23:05.000Z","dependencies_parsed_at":"2022-08-21T13:50:53.482Z","dependency_job_id":null,"html_url":"https://github.com/moonwalkercui/jk-build-html","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/moonwalkercui/jk-build-html","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moonwalkercui%2Fjk-build-html","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moonwalkercui%2Fjk-build-html/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moonwalkercui%2Fjk-build-html/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moonwalkercui%2Fjk-build-html/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/moonwalkercui","download_url":"https://codeload.github.com/moonwalkercui/jk-build-html/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moonwalkercui%2Fjk-build-html/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28309752,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-11T14:58:17.114Z","status":"ssl_error","status_checked_at":"2026-01-11T14:55:53.580Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["static-html","static-site","thinkphp"],"created_at":"2026-01-11T15:04:02.514Z","updated_at":"2026-01-11T15:04:03.239Z","avatar_url":"https://github.com/moonwalkercui.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# JKBuildHtml 基于ThinkPHP的静态站点生成器\n\n#### 介绍\n完美嫁接[THINKPHP 5.0/5.1](http://www.thinkphp.cn)的静态站点生成器，可自定义生成规则，支持动态参数，支持参数的范围设置。 是一个在原来开发过程没有变化的情况下搭建静态站的解决方案。 性能方面测试有时间搞一下。 使用中有其他问题的欢迎留言。\nbuild static site, build html file for THINKPHP framework\n\n## 适用于TP5.0和5.1的静态站点生成器\n\n本类适用于TP5.0和5.1双版本，因为TP5.1较5.0变动比较多，所以本项目进行了版本的适配，请放心使用。\n\n## 特点\n\n* 纯静态：生成的网站是静态htm页面，拷贝文件就是部署站点。\n* 方便改造：原来TP开发代码不用变动，原来TP的view文件照常写，以前怎么写模板还怎么写。\n* 边开发边生成html：建议封装控制器的fetch方法，边查看静态效果边开发，避免后期重新搭建后页面显示有问题，你可以盯着`public/dist`目录下的静态页面按F5刷新静态页面效果，也可以用原来的tp路径或路由查看模板效果。\n\n## 安装\n\n```\ncomposer require jkbuildhtml/jkbuildhtml\n```\n## 配置步骤需要三步\n\n 1) 新建静态规则文件`dist_rules.php`文件到application目录，静态规则见后文。\n 2) 添加配置参数（配置文件名 tp5是config.php tp5.1是app.php）中添加以下配置（注意斜杠不能少）\n ```\n    // 静态站放置路径：\n    'dist_path' =\u003e  'public/', \n    // 静态页存放文件夹名 一般放置在public下；静态站点直接指向这个目录即可：\n    'dist_dir_name' =\u003e 'dist', \n    // 生成的静态页子页的存放目录，即匹配规则中没有@符号的页面的存放目录，注意例中路径中的'dist/site-pages'会进行目录匹配作为替换./或../的依据，所以这个名称在项目文件夹名中最好唯一：\n    'dist_sub_dir' =\u003e 'site-pages', \n    // 要生成静态页的模块名：\n    'dist_module_name' =\u003e 'index', \n    // 静态页文件名字中的参数分隔符：\n    'dist_file_dot' =\u003e '_', \n    // 静态资源路径替换 静态站点根目录下会替换成 `./` 其他会替换成 `../`\n    'dist_src_match' =\u003e '/public/static/',\n        \n ```\n 3) 有需要在原生tp预览模板并生成静态需求的，可以封装控制器的 fetch 方法\n\n## 用法\n\n#### 实例化\n```\n$builder = new \\JKBuildHtml\\Builder()\n```\n#### 批量生成静态页\n在任意控制器里放置一下语句即可批量生成全部静态页，你需要做的是把它放到后台的某个地方了。\n页面显示是flush逐行显示的，如果想用ajax自行搞一下代码当然也行。\n```\n$builder-\u003ebuildAll();\n```\n\n#### 生成单个静态页\n\n也可以单个页面生成，一般在列表页的每行数据后面加一个 `生一个页面` 按钮：\n```\n$builder-\u003ebuildOne($path, ['id' =\u003e 5]);\n```\n需要注意的是单个页面生成的path 一般为控制器和方法名，必须在静态生成规则中声明，否则会提示错误。\n\n也可以封装tp controller 的 fetch方法，这样可以边开发边生成。\n```\nprotected function fetchHtml()\n{\n    $builder = new \\JKBuildHtml\\Builder();\n    $builder-\u003ebuildFromFetch( $html = $this-\u003efetch(), input('get.') );\n    return $html;\n}\n\n```\n\n## 注意事项\n* 所有静态资源js，css，上传文件等，必须放置在 `dist_dir_name` 配置文件夹下，静态页面会访问这些资源，如果放到这个文件夹外面，除非站点目录不是这个目录，否则访问不到。\n* 所有静态规则\u003c键\u003e全用小写\n* 静态规则中的\u003c值\u003e的路径原则是，只要能请求到的地址就可以，建议不要使用的TP路由动态参数。\n* 请求路径只支持GET请求\n\n\n## 关于静态资源路径\n本来tp的资源是放在public下任何位置的，但是有了静态生成类，那么就得按规则来\n以下是建议：\n* 首先在public下建一个dist目录（dist的由来是写js项目的时候build的目录名，此处借用；也可改配置）\n* 然后把所有前端扔给你的所有静态资源文件 js，css,images放到这个文件夹下。\n* 把上传的文件也放dist目录里\n* 生成完毕后这个目录下就会生成相关的html页面\n\n## 静态页生成规则\n\n#### 规则文件`dist_rules.php`说明：\n\n * 注：这个文件不是路由文件，和tp路由不是一回事。\n  \n键值对说明：\n * \u003c键\u003e 为生成静态页文件名：@代表dist的根目录，@index 代表首页，其他不带@的会生成在dist/site-pages;全用小写\n * \u003c值\u003e 为静态页生成模块的路径（即控制器、方法、参数），生成过程中，会直接请求这个路径。\n\n原TP模板文件a链接路径：\n * 在模板里写a链接路径的时候需要按照键的规则，路径里不需要@符号\n \n```\n\u003c?php\n// +----------------------------------------------------------------------\n// | 生成静态页的规则文件\n// +----------------------------------------------------------------------\nreturn [\n     // 这个是首页 带@的会生成在dist目录下,否则生成在子文件夹里；生成的html文件不带@\n    '@index'        =\u003e 'index/index', \n    '@news'         =\u003e 'news/index',\n    \n    // 这个是带db的，表示要查询article表的id列，循环生成静态页\n    'news_:id'      =\u003e ['news/find', 'article'],  \n    \n    // 这个是带自定义方法的，表示要执行getjobis方法返回id为键的二维数组，循环生成静态页\n    'job_:id'       =\u003e ['jobs/find', 'func:getjobids'],  \n    \n    // 这个是请求tp的模块/控制器/方法，返回一个二维数组\n    'job_:id_:code' =\u003e ['index/index', 'func:dist/index/test'], \n];\n```\n#### \u003c键\u003e\n* 键中带:号的是有动态参数的 会生成在`dist/site-pages`目录下\n* 参数命名必须和db里的字段名称一致\n* 为防止生成错误不同参数之间需用_分开(可以修改配置)\n\n#### \u003c值\u003e\n* 值可以是一个“请求路径”，用`控制器/方法`的形式即可，请求时会自动加上自定义模块名, 如果定义了路由则写路由\n\n* 值也可以是一个数组，第一个是请求路径，会传参请求；第二个是db的名字，即参数字段所在列的所有值，系统会根据参数批量生成页面：比如'news_:id' =\u003e ['news/find', 'article'], 是查询article表里的id列，\n\n* 如果想加入db查询条件，那么就放第三个值里 比如 `id \u003c 100`,这个会传入到db的where条件中需要符合tp查询语法, 就成了`'news_:id' =\u003e ['news/find', 'article', ['id' =\u003e  ['\u003c',100]]],` 或  `...\"id \u003c 100\"]`\n\n* 如果想自定义生成id的函数，可以把第二个参数设置成一个全局的方法，可以放common.php里（函数名不用带`func:`）,或任意一个控制器里 写法：`'func:admin/index/getJobIds'` 或 `'func:getjobids'`\n\n* 若采用func类型的，返回值必须是以参数为键相符的二维数组。如：`['id' =\u003e [2,3,4,5]]`\n\n* func类型可以有第三个值，作为func的参数传入\n\n#### 请求路径出现异常怎么办\n\n静态生成控制器会直接把异常页面也生成到html文件中，不会停止生成\n\n## 作者\n冷风崔 \u003c541720500@qq.com\u003e\n\n## LICENSE\n完全遵循 996ICU 协议 完美开源\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmoonwalkercui%2Fjk-build-html","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmoonwalkercui%2Fjk-build-html","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmoonwalkercui%2Fjk-build-html/lists"}