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.jscompile.jsAk 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}}