Les compilateurs de présentation de contenu permettent de générer un fichier HTML pour une présentation de contenu lorsqu'un élément de contenu d'un type spécifique est publié.
Pendant le processus de compilation, la commande cec compile-content
recherche un fichier compile.js
au même emplacement que le fichier render.js
pour le composant :
src
components
<yourComponent>
assets
render.js
compile.js
Si ce fichier n'existe pas, la présentation n'est pas compilée et est affichée lors de l'exécution.
Si le fichier existe, il doit implémenter une interface compile()
qui renvoie une promesse. Par exemple, voici un compilateur de présentation de contenu, suivi du fichier de sortie layout.html obtenu :
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;
Vous pouvez insérer le fichier layout.html obtenu dans une application Web ou à l'emplacement où vous avez besoin d'une sortie HTML statique de présentation de contenu. Le fichier layout.html est généré dans le même répertoire que le fichier 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}}