ページ・レイアウト・コンパイラはNodeJS (CommonJS) JavaScriptモジュールであり、対応するページ・レイアウトをコンパイルします。
特定のページ・レイアウトのページ・レイアウト・コンパイラは、-compile.js
拡張機能との名前の関連付けによって定義されます。
src
themes
<yourTheme>
layouts
<yourPageLayout>.html
<yourPageLayout>-compile.js
-compile.js
がページ・レイアウトに対して存在しない場合、カスタム・コンパイルが適用されません。
ページ・レイアウト・コンパイラはcompile()
インタフェースを実装する必要があり、これは、about-compile.js
など約束を返します。
var mustache = require('mustache'); var PageCompiler = function () {}; PageCompiler.prototype.compile = function (args) { var self = this, layoutMarkup = args.layoutMarkup; self.SCSCompileAPI = args.SCSCompileAPI; return new Promise function (resolve, reject) { var compiledPage = layoutMarkup, id = self.SCSCompileAPI.navigationRoot; // page is compiled so there is no FOUC, can remove the opacity workaround compiledPage = compiledPage.replace('opacity: 0;', 'opacity: 1;'); // remove the dynamic menu creation, we'll be compiling it here compiledPage = compiledPage.replace('<script src="_scs_theme_root_/assets/js/topnav.js"></script>', ''); // add link to Home page. . . var homePageURL = (self.SCSCompileAPI.getPageLinkData(id) || {}).href; if (homePageURL) { compiledPage = compiledPage.replace('class="navbar-brand" href="#"', 'class="navbar-brand" href="' + homePageURL + '"'); } // build the menu and add it to the page var navMenu = self.createNavMenu(); compiledPage = compiledPage.replace('<!-- navigation menu goes in here -->', navMenu); // return the compiled page resolve(compiledPage); }); }; // Create the navigation menu that was previously dynamically generated on each page PageCompiler.prototype.createNavMenu = function () { . . . } module.exports = new PageCompiler();