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

Total.js CMS export all complete pages to folder

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

我试过用这段代码导出它

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

但它只呈现我正在使用的小部件,而不是整个页面。

如何正确操作?谢谢

首先您要覆盖 index.html 但您需要将每个页面放入其自己的文件中。但这仍然不能解决您遇到的问题,因为 page.body 被渲染为 ./themes/default/views/cms/default.html 模板,而模板被渲染为 ./themes/default/views/layout.html

下面的代码可能会满足您的需要:

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 }}));
      });
});

这是更好的解决方案。创建一个定义文件,例如export 和 运行 您的内容管理系统。所有页面将存储在 /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);