Total.js CMS将所有完整页面导出到文件夹

时间:2017-03-07 11:09:06

标签: javascript node.js content-management-system total.js nosql

我在我的博客中使用Total.js CMS,但我想从数据库中导出完整的HTML文件

我尝试使用此代码将其导出

NOSQL('pages').find().callback(function(err, response) {
      response.forEach(function(page) {
            fs.writeFileSync(__dirname+'/content/index.html', page.body);
      });
});

但它只渲染我使用的小部件,而不是整页。

怎么做得好?感谢

2 个答案:

答案 0 :(得分:0)

首先,您要覆盖index.html但是您需要将每个页面都放到自己的文件中。但是,自page.body呈现为./themes/default/views/cms/default.html模板后,这仍然无法解决您所遇到的问题,该模板会呈现为./themes/default/views/layout.html

Bellow代码可能会满足您的需求:

NOSQL('pages').find().callback(function(err, response) {
      response.forEach(function(page) {
            fs.writeFileSync(__dirname+'/content/' + page.id + '.html', F.view('~/cms/default', {}, { page: { body: page.body }}));
      });
});

答案 1 :(得分:0)

这是更好的解决方案。创建定义文件,例如export并运行您的CMS。所有页面都将存储在/public/render/目录中。

const Fs = require('fs');

function save() {
    NOSQL('pages').find().fields('id').callback(function(err, response) {
        var repository = {};
        var filter = {};
        var directory = F.path.public('/render/');
        try {
            Fs.mkdirSync(directory);
        } catch (e) {}
        response.waitFor(function(item, next) {
            filter.id = item.id;
            GETSCHEMA('Page').operation('render', filter, function(err, response) {
                repository.cms = true;
                repository.render = true;
                repository.page = response;
                Fs.writeFile(directory + response.title.slug() + '.html', F.view('~/cms/' + response.template, EMPTYOBJECT, '~/cms/layout', repository), next);
            });
        }, () => console.log('DONE'));
    });
}

F.on('ready', save);