上节讲到了模板调用函数,其中调用了模板编译函数。该函数在template.caches.class.php类中定义的。下面讲解一下模板编译函数
/** * 编译模板 * * @param $module 模块名称 * @param $template 模板文件名 * @param $istag 是否为标签模板 * @return unknown */ public function template_compile($module, $template, $style = 'default') { if(strpos($module, '/')=== false) { $tplfile = $_tpl = PC_PATH.'templates'.DIRECTORY_SEPARATOR.$style.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.$template.'.html'; } elseif (strpos($module, 'yp/') !== false) { //黄页模块 $module = str_replace('/', DIRECTORY_SEPARATOR, $module); $tplfile = $_tpl = PC_PATH.'templates'.DIRECTORY_SEPARATOR.$style.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.$template.'.html'; } else { $plugin = str_replace('plugin/', '', $module); //插件模板 $module = str_replace('/', DIRECTORY_SEPARATOR, $module); $tplfile = $_tpl = PC_PATH.'plugin'.DIRECTORY_SEPARATOR.$plugin.DIRECTORY_SEPARATOR.'templates'.DIRECTORY_SEPARATOR.$template.'.html'; } if ($style != 'default' && !file_exists ( $tplfile )) { //模板风格不是default,模板文件未指定 //则设置风格为default ,并制定模板文件 $style = 'default'; $tplfile = PC_PATH.'templates'.DIRECTORY_SEPARATOR.'default'.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.$template.'.html'; } //模板文件不存在 if (! file_exists ( $tplfile )) { showmessage ( "templates".DIRECTORY_SEPARATOR.$style.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.$template.".html is not exists!" ); } //将模板文件读入到字符串$content中 $content = @file_get_contents ( $tplfile ); //新建缓存文件路径 /* * 缓存文件路径 * /caches/caches_template/default/$module/ * */ $filepath = CACHE_PATH.'caches_template'.DIRECTORY_SEPARATOR.$style.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR; //新建文件目录 if(!is_dir($filepath)) { mkdir($filepath, 0777, true); } $compiledtplfile = $filepath.$template.'.php'; //编译的缓存文件 //调用模板解析函数 $content = $this->template_parse($content); //将字符串$content中的数据写入到文件$compiledtplfile $strlen = file_put_contents ( $compiledtplfile, $content ); //将获取的内容写到缓存文件 chmod ( $compiledtplfile, 0777 ); //改变文件权限 return $strlen; }
上面调用到了模板解析函数template_parse(str)
/** * 解析模板 * * @param $str 模板内容 * @return ture */ public function template_parse($str) { $str = preg_replace ( "/\{template\s+(.+)\}/", "<?php include template(\\1); ?>", $str ); $str = preg_replace ( "/\{include\s+(.+)\}/", "<?php include \\1; ?>", $str ); $str = preg_replace ( "/\{php\s+(.+)\}/", "<?php \\1?>", $str ); $str = preg_replace ( "/\{if\s+(.+?)\}/", "<?php if(\\1) { ?>", $str ); $str = preg_replace ( "/\{else\}/", "<?php } else { ?>", $str ); $str = preg_replace ( "/\{elseif\s+(.+?)\}/", "<?php } elseif (\\1) { ?>", $str ); $str = preg_replace ( "/\{\/if\}/", "<?php } ?>", $str ); //for 循环 $str = preg_replace("/\{for\s+(.+?)\}/","<?php for(\\1) { ?>",$str); $str = preg_replace("/\{\/for\}/","<?php } ?>",$str); //++ -- $str = preg_replace("/\{\+\+(.+?)\}/","<?php ++\\1; ?>",$str); $str = preg_replace("/\{\-\-(.+?)\}/","<?php ++\\1; ?>",$str); $str = preg_replace("/\{(.+?)\+\+\}/","<?php \\1++; ?>",$str); $str = preg_replace("/\{(.+?)\-\-\}/","<?php \\1--; ?>",$str); $str = preg_replace ( "/\{loop\s+(\S+)\s+(\S+)\}/", "<?php \$n=1;if(is_array(\\1)) foreach(\\1 AS \\2) { ?>", $str ); $str = preg_replace ( "/\{loop\s+(\S+)\s+(\S+)\s+(\S+)\}/", "<?php \$n=1; if(is_array(\\1)) foreach(\\1 AS \\2 => \\3) { ?>", $str ); $str = preg_replace ( "/\{\/loop\}/", "<?php \$n++;}unset(\$n); ?>", $str ); $str = preg_replace ( "/\{([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff:]*\(([^{}]*)\))\}/", "<?php echo \\1;?>", $str ); $str = preg_replace ( "/\{\\$([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff:]*\(([^{}]*)\))\}/", "<?php echo \\1;?>", $str ); $str = preg_replace ( "/\{(\\$[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)\}/", "<?php echo \\1;?>", $str ); $str = preg_replace("/\{(\\$[a-zA-Z0-9_\[\]\'\"\$\x7f-\xff]+)\}/es", "\$this->addquote('<?php echo \\1;?>')",$str); $str = preg_replace ( "/\{([A-Z_\x7f-\xff][A-Z0-9_\x7f-\xff]*)\}/s", "<?php echo \\1;?>", $str ); $str = preg_replace("/\{pc:(\w+)\s+([^}]+)\}/ie", "self::pc_tag('$1','$2', '$0')", $str); $str = preg_replace("/\{\/pc\}/ie", "self::end_pc_tag()", $str); $str = "<?php defined('IN_PHPCMS') or exit('No permission resources.'); ?>" . $str; return $str; }
另外在附上模板缓存更新函数
/** * 更新模板缓存 * * @param $tplfile 模板原文件路径 * @param $compiledtplfile 编译完成后,写入文件名 * @return $strlen 长度 */ public function template_refresh($tplfile, $compiledtplfile) { $str = @file_get_contents ($tplfile); $str = $this->template_parse ($str); $strlen = file_put_contents ($compiledtplfile, $str ); chmod ($compiledtplfile, 0777); return $strlen; }
改函数使用了大量的正则表达式,主要是用来处理模板文件中使用到的标签,将之转换为php代码。
相关推荐
PHPCMS美化后台样式,方便操作,...说“PHPCMS后台模板,用于美化PHPCMS原始后台,直接把文件压根上传网站根目录,可替换原来后台模板。”不要下。 下我的对了,可惜不能上传截图,不然让需要的朋友看下,整体不错。
【phpcms源码分析】 在深入探讨phpcms源码之前,我们先理解一下标题和描述中的关键信息。`$mtime = explode(' ', microtime()); $phpcms_starttime = $mtime[1] + $mtime[0];` 这段代码用于计算脚本开始运行的时间...
【phpcmsV9手机模板源码详解】 phpCMS V9是一款广泛应用的内容管理系统,专为构建高效、便捷的网站而设计。这款系统以其强大的功能、灵活的扩展性和易于使用的后台管理界面,深受开发者喜爱。此次分享的"最新phpcms...
4. **安装模板**:上传成功后,系统会自动解析模板文件,并提供一个安装选项。点击“安装”,按照提示完成模板的安装过程。 5. **设置默认模板**:安装完成后,你可以设置新模板为默认模板。这将在网站的全局范围内...
《仿猫扑PHPCMS模板解析与学习指南》 在互联网内容管理系统的广泛应用中,PHPCMS是一款备受青睐的开源CMS(Content Management System)平台,以其强大的功能和易用性深受开发者喜爱。本文将深入探讨“仿猫扑PHPCMS...
【phpcms模板下载】是一个提供phpcms系统模板资源的压缩包,其中包含了使用说明、数据库文件以及源码,旨在帮助用户学习和理解如何在phpcms上构建企业官方网站。phpcms是一款基于PHP语言和MySQL数据库的开源内容管理...
6. **自定义功能**:PHPcmsV9的模板还支持自定义标签和函数,开发者可以通过这些自定义元素增强模板的功能,实现如文章列表、图片轮播、评论系统等常见功能。 7. **后台管理**:模板与PHPcms的后台管理无缝集成,...
而"PHPCMS后台模板 美化PHPCMS后台"是针对该系统进行的界面美化工作,主要目标是提升管理员在后台操作时的视觉体验和交互效果。 首先,我们来看"PHPCMS后台模板"这个概念。PHPCMS的后台模板主要包含HTML、CSS、...
1. **网站框架**:PHPCMS作为一个开源CMS框架,它的核心组件包括模板引擎、会员系统、广告管理、内容发布、分类管理、表单自定义、评论系统等,这些功能为网站的日常运营提供了坚实的基础。 2. **源码管理**:对于...
【phpcms企业网站模板】 PHP CMS(全称:PHP Content Management System)是一种基于PHP语言开发的开源内容管理系统,被广泛应用于构建企业网站。这个“phpcms企业网站模板”是为那些希望快速搭建功能完善、界面...
【PHPcms完整网站模板】 PHPcms是一款基于PHP和MySQL数据库的开源内容管理系统,它为开发者提供了强大的网站建设和管理工具。这个“PHPcms完整网站模板”是PHPcms系统的一部分,主要包含了一系列预先设计好的页面...
《phpcms黑色模板后台-v9后端模板-phpcms模板.zip》是一个专为phpcms V9系统设计的定制化后台界面,旨在提供一个更加美观、用户体验更佳的管理平台。相较于官方默认的后台模板,这款黑色模板针对用户界面进行了深度...
PHPCMS的模板系统是其核心优势之一,它允许开发者根据需要定制各种风格的网站界面。当客网模板就是这样的一个实例,它将当客网的布局、色彩搭配、图标设计等元素融入到PHPCMS中,提供了一种专业且具有商业气息的...
PHPCMS M0001模板是一款专为网站开发设计的网页模板,它基于PHPCMS内容管理系统构建,提供了一套完整的网站布局和设计。PHPCMS是一款流行的开源CMS(内容管理系统),它允许用户通过简单的界面创建、管理和发布网站...
首先,从标题和描述我们可以知道,这个压缩包包含的是PHPCMS的资源网站源码,主要用于创建一个可以供用户下载软件源码的平台。PHPCMS以其模块化设计、易用性和强大的功能著称,使得网站的搭建、管理和维护变得简单...
phpcms模板标签是其强大之处,例如: - `{phpcms:info}`:用于获取文章的基本信息,如标题、作者、发布时间等。 - `{phpcms:category}`:显示分类列表。 - `{phpcms:list}`:用于显示指定分类下的文章列表。 - `{...
本压缩包提供的"PHPCMS V9后台模板"是针对该系统的后台管理界面进行美化和优化的设计方案,旨在提供更美观、易用的操作界面。 PHPCMS V9后台模板的修改通常涉及以下几个方面: 1. **布局调整**:优化后台界面的...
PHPCMS V9后台模板MunSkin v1.2 by 蒙奇时光
PhpCms V9 函数手册 内容为V9官方代码编译 变量及函数功能引索