İçerik Yerleşimi Derleyicileri

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