Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用grunt js,如何动态添加<;标题>;静态html文件?_Html_Json_Build Process_Concatenation_Gruntjs - Fatal编程技术网

使用grunt js,如何动态添加<;标题>;静态html文件?

使用grunt js,如何动态添加<;标题>;静态html文件?,html,json,build-process,concatenation,gruntjs,Html,Json,Build Process,Concatenation,Gruntjs,更具体地说,我想通过引用外部JSON文件来添加标题,我们称之为titles.JSON 我使用grunt的目的之一是构建静态HTML文件,用于设计和调试。这将在开发过程中非常有用,不仅对标题,而且可能还有其他数据,例如设置活动导航链接 我目前正在使用此处接受的答案描述的过程连接HTML文件: 编辑:我现在用于此,创建它是为了使使用模板和外部数据非常容易 以下是我对此的看法。使用grunt的标准模板机制,页面元数据在对象中定义,在实际页面文件之外,正如您所建议的(我不能说我喜欢这个) gruntf

更具体地说,我想通过引用外部JSON文件来添加标题,我们称之为titles.JSON

我使用grunt的目的之一是构建静态HTML文件,用于设计和调试。这将在开发过程中非常有用,不仅对标题,而且可能还有其他数据,例如设置活动导航链接

我目前正在使用此处接受的答案描述的过程连接HTML文件:


编辑:我现在用于此,创建它是为了使使用模板和外部数据非常容易

以下是我对此的看法。使用grunt的标准模板机制,页面元数据在对象中定义,在实际页面文件之外,正如您所建议的(我不能说我喜欢这个)

gruntfile(包括来自的
wrap
任务):

/*全局模块:false*/
module.exports=函数(grunt){
//项目配置。
grunt.initConfig({
元:{
版本:“0.1.0”,
横幅:'/*!项目名称-v-'+
“\n”+
'* http://PROJECT_WEBSITE/\不+
"版权(三)"+
“您的名字;许可MIT*/”
},
//路径
项目:{
分部:'资产/分部',//不放尾部斜杠
页面:'资产/页面',//不要放尾部斜杠
减:“资产/减”,
css:“资产/css”,
img:“资产/img”,
js:“资产/js”
},
//用于页面标题和导航生成。
//这是一个确保导航正确顺序的阵列
页码:[{
文件:“index.html”,
标题:“我的主页”
/*此格式可以扩展为以下格式:
* {
*标题:“我的主页”,
*标题:“欢迎访问我的网站”,
*导航标题:“家”
* }
*尽管我认为最好让页面元数据尽可能接近内容,
*例如,页面文件的内部(想想Jekyll页面中的YAML标题)
*/
}, {
文件:“about.html”,
标题:“关于我”
}, {
文件:“contact.html”,
标题:“联系人”
}],
//用页眉和页脚包装文件
包裹:{
html:{
标题:'/head.tmpl',,
页脚:'/footer.tmpl',
src:[
“/index.html”,
“/about.html”,
“/contact.html”
],
dest:'.//destination*directory*,可能比两次指定相同的文件名要好
}
},
//处理页面文件中的模板
构建页面:{
页面:“”,//页面文件元数据
目录:'.'//页面文件位置目录
}
});
//默认任务。
registerTask('default','wrappbuildpages');
registerMultiTask('wrap','wrapp使用指定的页眉和页脚包装源文件',function(){
var data=此.data,
path=require('path'),
dest=grunt.template.process(data.dest),
files=grunt.file.expandFiles(this.file.src),
header=grunt.file.read(grunt.template.process(data.header)),
footer=grunt.file.read(grunt.template.process(data.footer)),
sep=grunt.utils.linefeed;
files.forEach(函数(f){
var p=dest+'/'+path.basename(f),
contents=grunt.file.read(f);
grunt.file.write(p,页眉+sep+内容+sep+页脚);
grunt.log.writeln('File'+p+''created');
});
});
registerTask('buildPages','processs templates in page files',function()){
//注意:当前实现将替换文件
var data=grunt.config('buildPages'),
pages=data.pages,
dir=data.dir,
目录
curPath;
pages.forEach(函数(第页){
curPath=dir+'/'+page.file;
contents=grunt.file.read(curPath);
//将整个页面数组和当前条目馈送到模板
grunt.file.write(curPath,grunt.template.process(contents{
页数:页数,
第页:第页
}));
grunt.log.writeln('Page at'+curPath+'“builded.”);
});
});
};
head.tmpl:

<!DOCTYPE html>
<html>
    <head>
        <title><%= curPage.title %></title>
    </head>
    <body>
        <!-- NAV -->
        <ul class="nav">
            <%
                pages.forEach(function(p) {
                    print(
                        '<li class="' + ((curPage === p) ? 'active' : '') + '">' +
                            ((curPage === p) ? p.title : ('<a href="' + p.file + '">' + p.title + '</a>')) + 
                        '</li>\n'
                    );
                });
            %>
        </ul>
        <!-- /NAV -->

        <!-- MAIN CONTENT -->
        <div class="main">
        </div>
        <!-- /MAIN CONTENT -->
    </body>
</html>

footer.tmpl:

<!DOCTYPE html>
<html>
    <head>
        <title><%= curPage.title %></title>
    </head>
    <body>
        <!-- NAV -->
        <ul class="nav">
            <%
                pages.forEach(function(p) {
                    print(
                        '<li class="' + ((curPage === p) ? 'active' : '') + '">' +
                            ((curPage === p) ? p.title : ('<a href="' + p.file + '">' + p.title + '</a>')) + 
                        '</li>\n'
                    );
                });
            %>
        </ul>
        <!-- /NAV -->

        <!-- MAIN CONTENT -->
        <div class="main">
        </div>
        <!-- /MAIN CONTENT -->
    </body>
</html>


您实际上希望如何将标题链接到html页面?您是否引用titles.json中的html文件?链接呢?如果你提供了一个你希望能够使用的JSON定义,如果你有这么长的计划,你可能想考虑静态网站生成器。它们应该已经具备了您描述的所有通用功能。好问题。再次感谢你帮我回答最后一个问题——这对我的时间产生了很大的影响。我将在我的项目中保持这个简单,因此可能有两个json文件:titles.json和links.json。使用html文件的名称来匹配数据似乎是有意义的。由于我在许多小项目中工作,其中文件名几乎总是相同的:index.html、about.html、contact.html等。因此我认为,当index.html编译时,脚本将在nav上为该文件设置活动类。我将在一分钟内链接一个JSFIDLE,以确切说明我的意思实际上,我不认为我需要一个外部json文件来完成这项工作。似乎在gruntfile中这样做更有意义。以下是导航的JSFIDLE:关于杰基尔,我很欣赏你的观点。我对杰基尔很熟悉,但我正朝着一个不同的目标前进。我很乐意提供更多关于“大局”的细节,但最好用不同的格式来解释,这样就可以了