自己瞎写的...凑合看吧...核心就是用正则 表达式 或者 字符串 str_replace 进行 替换.......

  /**
* 批量包含---,不能递归包含!!! 请不要在目标目录 包含 文件夹,因为没有做处理----
* @author ******
* @param string $srPath 例如 "file="adc/*""
* @param string $oldStr 旧的字符串
* @param string $oldContent 旧的内容
* @return string
*/
private function parseMulti($srPath, $oldStr, $oldContent): string
{
$content = '';
$filePath = str_replace('/*', '', str_replace('"', '', explode('file=', $srPath)[1]));
//内部可递归方法..将子文件夹里的文件也包含到文件中去...
$fileArr = [];
$list_file = function ($dir, $pDir = '') use (&$list_file, &$fileArr) {
$list = scandir($dir); // 得到该文件下的所有文件和文件夹
foreach ($list as $file) {//遍历
$file_location = $dir . "/" . $file;//生成路径
if ($file != "." && $file != "..") {
if (is_dir($file_location)) { //判断是不是文件夹
$list_file($file_location, $file); //继续遍历
} else {
if ($pDir != '') {
$file = $pDir . '/' . $file;
}
array_push($fileArr, $file);
}
}
}
};
$list_file(MODULE_PATH . 'View/' . $filePath);
foreach ($fileArr as $filename) {
if ($filename !== '.' && $filename !== '..') {
$newPath = str_replace('*', explode('.', $filename)[0], $srPath);
$array = $this->parseXmlAttrs($newPath);
$file = $array['file'];
$content .= $this->parseIncludeItem($file, $array, true);
}
} //压缩 html....
$page_html = str_replace("\r\n", '', $content); //清除换行符
$page_html = str_replace("\n", '', $page_html); //清除换行符
$page_html = str_replace("\t", '', $page_html); //清除制表符
$pattern = array(
"/> *([^ ]*) *</", //去掉注释标记
"/[\s]+/",
"/<!--[^!]*-->/",
"/\" /",
"/ \"/",
"'/\*[^*]*\*/'",
"'/\*{1,2}[\s\S]*?\*/'", );
$replace = array(">\\1<", " ", "", "\"", "\"", "", "");
$content = preg_replace($pattern, $replace, $page_html); $content = str_replace($oldStr, $content, $oldContent); return $content;
}

在 Template.class.php 中 加入方法--

// 解析模板中的include标签
protected function parseInclude($content, $extend = true)
{
// 解析继承
if ($extend)
$content = $this->parseExtend($content);
// 解析布局
$content = $this->parseLayout($content);
// 读取模板中的include标签
$find = preg_match_all('/' . $this->config['taglib_begin'] . 'include\s(.+?)\s*?\/' . $this->config['taglib_end'] . '/is', $content, $matches); //有 * 号.代表包含目录下所有!!! 修改tp,包含所有时,不要带 / if ($find) {
for ($i = 0; $i < $find; $i++) {
$include = $matches[1][$i];
$array = $this->parseXmlAttrs($include);
$file = $array['file'];
unset($array['file']);
if ($include[strlen($include) - 2] === '*') { //加一个判断...如果是以* 结尾...则 进行 批量操作 例如 <include flie="abc/*"/>
$content = $this->parseMulti($include, $matches[0][$i], $content);
} else {
$content = str_replace($matches[0][$i], $this->parseIncludeItem($file, $array, $extend), $content);
}
} }
return $content;
}

thinkphp3.2.3 批量包含文件的更多相关文章

  1. gulp批量打包文件并提取公共文件

    gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器. browseriyf是模块化打包工具. 一般情况下,Browserify 会把所有的模块打包成单个文件.单个文件在大多数情况下是 ...

  2. 用C#Winform写个简单的批量清空文件内容和删除文件的小工具

    用C#Winform写个简单的批量清空文件内容和删除文件的小工具 本文介绍这个简单得不能再简单的小项目.做这个项目,有以下目的. 1 当然是做个能用的工具 2 学习使用Github 关于用VS2013 ...

  3. 用SSH指令批量修改文件夹 文件权限和拥有者

    在linux系统下或登录ssh可以批量修改文件权限 wwwroot目录下的所有目录的权限递归设置为755 cd wwwrootfind -type d -exec chmod 755 {} \;或者是 ...

  4. Spring-boot+Spring-batch+hibernate+Quartz简单批量读文件写数据用例

    本文程序集成了Spring-boot.Spring-batch.Spring-data-jpa.hibernate.Quartz.H2等.完整代码在Github上共享,地址https://github ...

  5. python批量拷贝文件

    普通批量拷贝文件 import os import shutil import logging from logging import handlers from colorama import Fo ...

  6. R8—批量生成文件夹,批量读取文件夹名称+R文件管理系统操作函数

    一. 批量生成文件夹,批量读取文件夹名称 今日,工作中遇到这样一个问题:boss给我们提供了200多家公司的ID代码(如6007.7920等),需要根据这些ID号去搜索下载新闻,从而将下载到的新闻存到 ...

  7. 关于windows下自带的forfile批量删除文件bat命令

    最近在开发的过程中,为了节省资源,需要用到windows下批量删除文件的批处理命令,也就是bat 主要内容: forfiles /p "E:\pictures" /m * /d - ...

  8. 【Python】简单的脚本,轻松批量修改文件名称

    使用python脚本,批量修改文件夹名称 先创建一些没用的案例文件 import os #创建新文件夹 dir = os.makedirs('D:\\SomeThing\\testfile') #将文 ...

  9. python批量进行文件修改操作

    python批量修改文件扩展名 在网上下载了一些文件,因为某种原因,扩展名多了一个后缀'.xxx',手动修改的话因为文件太多,改起来费时费力,于是决定写个小脚本进行修改. 1.要点: import r ...

随机推荐

  1. MySQL日期数据类型总结

    MySQL:MySQL日期数据类型.MySQL时间类型使用总结 MySQL 日期类型:日期格式.所占存储空间.日期范围 比较. 日期类型        存储空间      日期格式           ...

  2. 【总结整理】KANO 模型

    c 基本(必备)型需求——Must-beQuality/ Basic Quality. 期望(意愿)型需求——One-dimensional Quality/ Performance Quality. ...

  3. Suse系统磁盘文件损坏恢复

    进入救援(failSafe)模式检测问题,发现是因为/dev/sda4分区出现文件系统损坏.   /dev/sda4: UNEXPECTED INCONSISTENCY: run fsck manua ...

  4. EXE DLL等可执行程序添加版本号版权等信息

    在使用Microsoft Visual Studio开发工具等编写的exe或者dll等可执行文件时,我们往往需要对这些可执行文件添加版本号,公司,版权等信息. 1. 在我们需要添加各种信息的项目工程中 ...

  5. JavaScript -- Array中的push()方法和concat()方法介绍

    Array => push()方法向数组的末尾添加一个或者多个元素,也就是说它会改变数组本身 concat() => concat()方法用于连接2个或者多个数组,但它的特殊之处在于,它会 ...

  6. 现代C++学习笔记之一资料篇(C++ 11)

    最近看网上一些开源的源代码,发现尽多不认识的符号,好吧.开始学习新的C++. C++经典书籍 C++ Primer,第五版开始有了对C++ 11的讲解 C++ Primer Plus,第六版有对C++ ...

  7. 软件工程:Java实现WC.exe基本功能

    项目相关要求 GitHub地址:https://github.com/3216004716/WC 实现一个统计程序,它能正确统计程序文件中的字符数.单词数.行数,以及还具备其他扩展功能,并能够快速地处 ...

  8. tomcat的内存配置,关于-Xms -Xmx -XX:PermSize -XX:MaxPermSize的理解和区别

    JVM按照其存储数据的内容将所需内存分配为堆区与非堆区两个部分:所谓堆区即为通过new的方式创建的对象(类实例)所占用的内存空间:非堆区即为代码.常量.外部访问(如文件访问流所占资源)等.然而虽然ja ...

  9. small cell 在安防领域的应用探讨

    在安防领域,最核心的问题是:如何有效区分“内部人员”与“外部人员”.所谓“有效”包含两点意思,一是安全,尽可能地过滤出“外部人员”.二是效率,即尽可能无干扰地或较小干扰地使“内部人员”通过.所有的安全 ...

  10. asp.net get图

    前段 <html xmlns="http://www.w3.org/1999/xhtml"> <head id="Head1" runat=& ...