Compilatori di layout di contenuto

I compilatori di layout di contenuto vengono utilizzati per creare l'HTML di un layout di contenuto quando viene pubblicato un elemento di contenuto di un tipo di contenuto specificato.

Durante la compilazione, il comando cec compile-content cerca il file compile.js nella stessa posizione del file render.js per il componente:

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

Se questo file non esiste, il layout non viene compilato e ne verrà eseguito il rendering in runtime.

Se esiste, il file deve implementare un'interfaccia compile(), che restituisce una promessa. Ad esempio, di seguito è riportato un compilatore di layout di contenuto, seguito dal file di output layout.html risultante.

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;

Il file layout.html risultante può essere inserito in un'applicazione Web o in qualsiasi altra posizione in cui sia necessario un output HTML statico del layout di contenuto. Il file layout.html viene creato nella stessa directory del file 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}}