İçerik yerleşimi derleyicileri, belirli bir içerik tipinde içerik öğesi yayımlandığında içerik yerleşimi için HTML oluşturmak üzere kullanılır.
Derleme sırasında cec compile-content
komutu, bileşene yönelik render.js
dosyasıyla aynı konumda bir compile.js
dosyası arar:
src
components
<yourComponent>
assets
render.js
compile.js
Dosya mevcut değilse yerleşim derlenmez ve çalıştırma zamanında görüntülenir.
Dosya mevcut değilse bir compile()
arayüzü uygulaması gerekir ve bu bir taahhüt döndürür. Örneğin şu, ortaya çıkan layout.html çıktısının takip ettiği bir içerik yerleşim derleyicisidir.
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;
Ortaya çıkan layout.html, bir web uygulamasına veya içerik yerleşiminin statik HTML çıktısına ihtiyaç duyduğunuz yerlere eklenebilir. layout.html, compile.js dosyası ile aynı dizin için çıktıdır.
{{{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}}