Kompilátory rozloženia obsahu

Kompilátory rozloženia obsahu sa používajú na vygenerovanie výstupu HTML pre rozloženie obsahu, keď je publikovaná obsahová položka konkrétneho typu obsahu.

Počas kompilácie bude príkaz cec compile-content hľadať súbor compile.js v rovnakom umiestnení ako súbor render.js pre komponent:

  • src
    • components
      • <yourComponent>
        • assets
          • render.js
          • compile.js

Ak tento súbor neexistuje, rozloženie sa neskompiluje a vykreslí sa v čase behu.

Ak súbor existuje, je potrebné implementovať rozhranie compile(), ktoré vráti objekt Promise. V nasledujúcom príklade je uvedený kompilátor rozloženia obsahu, za ktorým nasleduje výsledný výstupný súbor layout.html:

var fs = require('fs'),
        path = require('path'),
        mustache = require('mustache');

var ContentLayout = function (params) {
        this.contentClient = params.contentClient;
        this.contentItemData = params.contentItemData || {};
        this.scsData = params.scsData;
};

ContentLayout.prototype = {
        contentVersion: '>=1.0.0 <2.0.0',

        compile: function () {
                var compiledContent = '',
                        content = JSON.parse(JSON.stringify(this.contentItemData)),
                        contentClient = this.contentClient;

                // Store the id
                content.fields.author_id = content.id;

                if (this.scsData) {
                        content.scsData = this.scsData;
                }

                try {
                        // add in style - possibly add to head but inline for simplicity
                        var templateStyle = fs.readFileSync(path.join(__dirname, 'design.css'), 'utf8');
                        content.style = '<style>' + templateStyle + '</style>';

                        var templateHtml = fs.readFileSync(path.join(__dirname, 'layout.html'), 'utf8');
                        compiledContent = mustache.render(templateHtml, content);
                } catch (e) {
                        console.error(e.stack);
                }

                return Promise.resolve({
                        content: compiledContent,
                        hydrate: true
                });
        }
};

module.exports = ContentLayout;

Výsledný súbor layout.html je možné vložiť do webovej aplikácie alebo kdekoľvek inde, kde pre rozloženie obsahu potrebujete statický výstup HTML. Výstupný súbor layout.html sa vygeneruje do rovnakého adresára ako súbor compile.js.

{{{style}}}
{{#fields}}
<div class="author-container">
    <span class="author-name" onclick='{{scsData.contentTriggerFunction}}("starter-blog-post_author eq \"{{author_id}}\"")'>{{starter-blog-author_name}}</span>
{{/fields}}