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