本发明涉及互联网网站开发技术领域,尤其涉及一种网页模板生成方法及装置。
背景技术:
在现有技术中,为快速、大量的生成网页,一般会利用网页模板来生成网页。html(hypertextmarkuplanguage,超文本标记语言)是一种为网页创建和其他可在网页浏览器中看到的信息而设计的标记语言。html描述了网站的结构语义随着线索的呈现,使之成为一种标记语言而非编程语言。现有的网页模板一般都是基于html编写的,网页浏览器可以读取html文件,并将其渲染成可视化网页。目前网页模板引擎众多,但大多数模板引擎功能设计的重点是把模板分为几个部分,每个部分都有重复相同的代码,这样代码开发工作量大,开发效率低,且占用了系统大量容量。
php(hypertextpreprocessor,超文本预处理器)是一种通用开源脚本语言,尤其适用于网络开发并嵌入html中使用。php语法吸收了c语言、java和perl的特点,利于学习,使用广泛,主要适用于web开发领域。用php做出的动态页面与其他的编程语言相比,php是将程序嵌入到html(标准通用标记语言下的一个应用)文档中去执行,执行效率比完全生成html标记的cgi要高许多;php还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。
发明专利申请cn103605770a公开了一种网页模板生成方法和服务器,其具体公开了:采集网页的网页数据,根据网页数据生成网页的网页模板。该网页模板生成方法对多个网站的网页数据进行处理,解决了现有网页模板生成方法对目标网站依赖性比较强的问题。该发明提供了一个多网页开发量降低的改善方案,但未对单个网页的模板开发量降低进行改善。
发明专利申请cn102129436a公开了一种网页模板的构建方法、系统及装置,其具体公开了:针对网页模板中每块区域预呈现的区块元素,终端接收用户输入的区块元素请求信息,确定所述区块元素的标识信息对应的区块元素的代码信息,终端根据用户输入的区块元素位置信息,将区块元素的代码信息在该网页区域的对应位置呈现,终端接收用户输入内容信息,将内容信息在该区块元素中进行显示。该发明将每个网页划分为至少两个区块元素,每个区块元素可重复使用,来提高网页模板的构建效率;但是,每个区块元素也存在相同的代码信息,仍有开发量大的问题。
上述发明专利申请均未对网页进行分层处理,未对同一模板内的存在相同代码的问题进行优化开发,为此,急需一种分层形式的网页模板生成方法及装置。
技术实现要素:
本发明针对现有技术存在的问题,提出了一种大大减少页面代码的开发量的网页模板生成方法及装置。
本发明首先定一个模板为基础层,其他子模板需要继承这个基础层模板。基础层里面有与每个基础层模板页面代码相同的部分,以及每个基础层模板各自的不同的组件变量。其次对每个子模板的组件变量进行填充,这样大大减少了重复代码的书写,减少重复代码开发量,提高了开发效率。
本发明是通过以下技术方案实现的:
一种网页模板生成方法,包括以下步骤:
步骤s1,创建定义为基础层的模板;其中,所述基础层包含页面代码相同的部分和组件符号标识的不同部分;
步骤s2,创建继承所述基础层的子模板,写入组件内容。
作为优选,所述步骤s2具体包括:
步骤s21,定义子模板为继承层;
步骤s22,在组件符号标识的部分写入组件内容。
作为优选,基础层模板文件和/或子模板文件为超文本标记语言文件。
作为优选,所述步骤s22具体包括:在组件符号标识的部分写入组件内容,若查看模板文件不是通用开源脚本语言文件,则,读取模板文件并解析成通用开源脚本语言文件。
作为优选,所述步骤s22中解析模板文件为开源脚本语言文件的步骤具体包括:
步骤s221,解析基础层模板文件;
步骤s222,解析子模板文件;
步骤s223,替换继承层变量。
一种网页模板生成装置,其特征在于,包括:
父模块,用以定义一模板为基础层;其中,所述基础层包含页面代码相同的部分和组件符号标识的不同部分;
子模块,用以定义子模板为继承上述基础层的继承层,并在子模板中组件符号标识的部分写入组件内容。
作为优选,所述子模块包括继承层定义单元,以及用于写入组件内容的变量写入单元。
作为优选,所述变量写入单元包括:代码读取子单元,以及代码解析子单元;当所述代码读取子单元未读取到具有运行代码的模板文件时,则所述代码解析子单元解析成具有运行代码的模板文件。
作为优选,还包括下级子模块,用以定义下级子模板能使用所述子模块中子模板的相同代码,并在下级子模板中组件符号标识的部分写入组件内容。
作为优选,所述下级子模块包括下级子模块定义单元,以及用于写入组件内容的下级变量写入单元。
本发明具有以下有益效果:
本发明网页模板生成方法及装置,利用继承、分层的方式减少了子模块间重复代码的开发量,并对子模块的组件变量以填充方式完成书写,大大提高了开发效率。
附图说明
图1为本发明一种网页模板生成方法的总流程图;
图2为图1中步骤s2的流程图;
图3为图2步骤s22中解析模板文件的流程图;
图4为本发明一种网页模板生成装置的一实施例的原理框图;
图5为本发明一种网页模板生成装置的另一实施例的原理框图。
具体实施方式
以下是本发明的具体实施例并结合附图,对本发明的技术方案作进一步的描述,但本发明并不限于这些实施例。
实施例一
如图1,本发明一种网页模板生成方法包括以下步骤:
步骤s1,创建定义为基础层的模板;其中,所述基础层包含页面代码相同的部分和组件符号标识的不同部分。
首先做一个页面定义为基础层文件,文件名为“layouts.html”。在此基础层内,写入其他子模板相同的页面代码和子模板各自不同的部分。利用组件符号标识子模板各自不同的部分。因页面有很多部分,分为左侧部分、右侧部分、内容部分等,我们将页面不同部分以多个组件符号标识的方式进行区分,如,可对左侧部分标识为#show('left'),对右侧部分标识为#show('right'),对内容部分标识为#show('content')。初始阶段,由组件符号标识的不同部分在基础层文件内可设置为缺省形式,或默认形式,在子模板内写入的组件内容最后会返回到此基础层文件。
步骤s2,创建继承所述基础层的子模板,写入组件内容。每个需要继承上述基础层模板的子模板均按下述步骤实现,如图2,具体为:
步骤s21,定义子模板为继承层。
在页面的最下面一行写入继承层的代码,标识子模板继承基础层模板,如#extends('layouts.html')。也就是说,该子模板继承了基础层模板内的相同的页面代码,此子模板所在层为继承层。
步骤s22,在组件符号标识的部分写入组件内容。
在页面其他地方写入继承层里面的组件内容,然后用符号标签包裹。
例如,左侧部分组件:
#startsection('left')
xxx//在此处用html写入左侧部分组件的代码
#endsection
#startsection('left')
其中,#startsection('left')标示组件代码开始,#endsection标示组件代码结束。
例如,内容组件:
#startsection('content')
xxx//在此处用html写入内容组件的代码
#endsection
#startsection('content')
上述子模板可最大限度的重用代码,且通过html写入组件变量的代码,以填充形式轻松完成不同部分内容的写入。进一步提高代码编译简便性及运行快速,引入php。本发明分层模板的实现不限于使用php,在此作为优先方案进行示例说明。
为将子模板文件中的动态内容,如用户交互等部分,快速编写入组件,在用户访问页面时,对模板在php文件下进行变量替换操作。首先需查看模板是否为php可运行模板,若是直接将组件变量替换为动态内容,返回基础层模板后,输出需要的页面;若不是,则需读取原模板内容并解析为php可运行的模板。
如图3,解析步骤如下:
步骤s221,解析基础层模板文件。
查看基础层模板是否被解析成php可运行模板,若是直接进入步骤s222;否则,进行基础层模板解析。
将基础层模板的组件字符提花替换成php变量,如:
$value=file_get_contents('layouts.php');
$value=preg_replace("/(?<!\w)(\s*)#show\((\s*\(.*\))\)/",'$1<?phpecho$2;?>',$value);
步骤s222,解析子模板文件。
每个子模板文件均按下述步骤进行解析:
首先,把子模板内容读取到一个变量里面,即利用下述代码将xxx命名的子模板文件赋值给变量:$value=file_get_contents('xxx')。
然后,替换组件字符,包括依次替换组件开头字符串startsection和组件结尾字符串endsection,即按照基础层模板替换方式实现,将组件字符提花替换成php变量。
其中,组件开头字符串startsection的startsection()函数和组件结尾字符串endsection的endsection()函数的功能是将两者起始-终止间的内容赋给一个变量,也就是子模板的动态内容填充入已命名的组件变量内。
步骤s223,替换继承层变量。
将子模板继承基础层模板的的继承代码进行解析,即按照基础层模板替换方式实现,将组件字符提花替换成php变量。
经过上面代码处理后,每一个组件的内容都复制给以组件名命名的变量,最后传入基础层模板里面。
实施例二
在实施例一的基础上,进一步对步骤s2进行优化。对于子模板内,也存在有相同代码部分,对每个子模板进行下级子模板划分。每个下级子模板的组件部分进一步归为相同组件部分和不同组件部分,使得下级子模板能使用基础层模板的相同代码部分,也能使用下级子模板相同组件部分,对于下级子模板不同组件部分也已填充方式实现,以多层页面的形式减少代码开发量。
例如,可在下级子模板的组件填充部分内写入包含/嵌套形式的下级子模板代码。
又如,同样以继承方式实现,采用parseextend和replaceblock函数分别替换,extend标签和block标签来实现。因parseextend函数无法支持多层继承,则需要加入递归解析实现。
实施例三
如图4,一种网页模板生成装置包括父模块和子模块。当所述子模块有多个时,多个子模块分别继承一个父模块。
所述父模块,用以定义一模板为基础层。其中,所述基础层包含页面代码相同的部分和组件符号标识的不同部分。在所述父模块内,首先做一个页面定义为基础层文件,文件名为“layouts.html”。在此基础层内,写入其他子模板相同的页面代码和子模板各自不同的部分。利用组件符号标识子模板各自不同的部分。因页面有很多部分,分为左侧部分、右侧部分、内容部分等,我们将页面不同部分以多个组件符号标识的方式进行区分,如,可对左侧部分标识为#show('left'),对右侧部分标识为#show('right'),对内容部分标识为#show('content')。初始阶段,由组件符号标识的不同部分在基础层文件内可设置为缺省形式,或默认形式,在子模板内写入的组件内容最后会返回到此基础层文件。
所述子模块,用以定义子模板为继承上述基础层的继承层,并在子模板中组件符号标识的部分写入组件内容。所述子模块包括继承层定义单元,以及用于写入组件内容的变量写入单元。
所述继承层定义单元,在页面的最下面一行写入继承层的代码,标识子模板继承基础层模板,如#extends('layouts.html')。也就是说,该子模板继承了基础层模板内的相同的页面代码,此子模板所在层为继承层。
所述变量写入单元,包括代码读取子单元,以及代码解析子单元。当所述代码读取子单元未读取到具有运行代码的模板文件时,则所述代码解析子单元解析成具有运行代码的模板文件。具有运行代码的模板文件,根据需要设定为html或php或java等其他代码语言。下述以php为优选示例进行描述。
在页面其他地方写入继承层里面的组件内容,然后用符号标签包裹。
为将子模板文件中的动态内容,如用户交互等部分,快速编写入组件,在用户访问页面时,对模板在php文件下进行变量替换操作。首先需查看模板是否为php可运行模板,若是直接将组件变量替换为动态内容,返回基础层模板后,输出需要的页面;若不是,则需读取原模板内容并解析为php可运行的模板。
其中,解析如下:
首先,查看基础层模板是否被解析成php可运行模板,若是则考虑是否对子模板文件进行解析;否则,进行基础层模板解析,将基础层模板的组件字符提花替换成php变量。
其次,查看子模板文件是否被解析成php可运行模板,若是则考虑是否对继承层变量进行替换,否则进行子模板解析,把子模板内容读取到一个变量里面,即利用下述代码将xxx命名的子模板文件赋值给变量。之后,依次替换组件开头字符串startsection和组件结尾字符串endsection,将组件字符提花替换成php变量。
最后,替换继承层变量。将子模板继承基础层模板的的继承代码进行解析,将组件字符提花替换成php变量。
经过上面代码处理后,每一个组件的内容都复制给以组件名命名的变量,最后传入基础层模板里面。
实施例四
如图5,基于实施例三的网页模板生成装置,实施例四网页模板生成装置还包括下级子模块。
所述下级子模块,用以定义下级子模板能使用所述子模块中子模板的相同代码,并在下级子模板中组件符号标识的部分写入组件内容。每个下级子模板的组件部分进一步归为相同组件部分和不同组件部分,使得下级子模板能使用基础层模板的相同代码部分,也能使用下级子模板相同组件部分,对于下级子模板不同组件部分也已填充方式实现,以多层页面的形式减少代码开发量。
所述下级子模块包括下级子模块定义单元,以及用于写入组件内容的下级变量写入单元。
例如,可在下级子模板的组件填充部分内写入包含/嵌套形式的下级子模板代码。
又如,同样以继承方式实现,可参照子模块定义单元,变量写入单元的执行方式实现,不同之处是采用parseextend和replaceblock函数分别替换,extend标签和block标签来实现。因parseextend函数无法支持多层继承,则需要加入递归解析实现。
本文中所描述的具体实施例仅仅是对本发明精神作举例说明。本发明所属技术领域的技术人员可以对所描述的具体实施例做各种各样的修改或补充或采用类似的方式替代,但并不会偏离本发明的精神或者超越所附权利要求书所定义的范围。