Разработка темы: добавление пользовательских помощников ручки

Для техно темы я хотел сделать пользовательские помощники и конфигурацию hb доступными для пользователей. Для этого я применил переопределение к [ghost root]/index.js.

Код ниже ищет файл index.js в текущей папке темы и запускает его.

var ghost = require('./core'),
    errors = require('./core/server/errorHandling');

ghost()
.then(function (param) {

    var settings = require('./core/server/api').settings;

    settings
        .read({key: 'activeTheme', context: {internal: true}})
        .then(function (result) {

            try {
                require('./content/themes/' + result.value + '/index')();
            }
            catch (e) {
                //No custom index found, or it wasn't a proper module.
            }

        });
})
.otherwise(function (err) {
    errors.logErrorAndExit(err, err.context, err.help);
});

Уровень темы index.js внедряет пользовательские переменные блога (из файла конфигурации) и помощники hb.

var hbs = require('express-hbs'),
    _ = require('lodash'),
    downsize = require('downsize'),
    blogVariable = require('../../../core/server/config/theme');

module.exports = function() {

    //This block allows configuration to be available in the hb templates.
    var blogConfig = blogVariable();
    var config = require('./config') || {};
    blogConfig.theme = config;
    //console.log(JSON.stringify(blogConfig));

    ////Custom hb helpers////

    hbs.registerHelper('excerpt', function (options) {

        ...

        return new hbs.handlebars.SafeString(excerpt);
    });

    ...

};

Пример использования пользовательских переменных блога приведен ниже.

<ul class="list-inline">
    <li><a href="{{@blog.theme.author.github}}" class="btn-social btn-outline" data-toggle="tooltip" data-placement="top" title="Github"><i class="fa fa-fw fa-github"></i></a>
    </li>
...

Есть ли лучший способ сделать это в Ghost 0.4.2? Мне не нравится, когда пользователи переопределяют файл ghost core index.js.

2 ответа

Решение

Существует сообщение в блоге, объясняющее, как это сделать, только изменив config.js файл и добавление файла в корневой каталог. Я согласен с автором, что это скорее всего будет обновлением. http://zackehh.com/safely-creating-custom-handlebars-helpers/

Добавлять:

require('./helpers')();

К вершине config.js

И добавьте помощников в свой helpers.js файл вроде так:

var hbs = require('express-hbs');

module.exports = function(){  
    hbs.registerHelper('json', function(context) {
      return JSON.stringify(context);
    });
};

К сожалению нет, недавно на форумах был пост об этом, однако вы можете добавить свой собственный файл helpers.js, например, в папку core...

var hbs = require('express-hbs')

// quick function for an example
registerHelper = function(){

    hbs.registerHelper('ifNthItem', function(nthItem, currentCount, offset, options) {
        if((currentCount+ offset)%(nthItem) == 0) {
            return options.fn(this);
        } else {
            return options.inverse(this);
        }
    });
};

module.exports = registerHelper;

Тогда просто свяжите это с index.js

var when      = require('when'),
    bootstrap = require('./bootstrap'),
    scopa = require('./helpers');

    scopa();

По крайней мере, так вы не изменяете ядро ​​index.js, а вместо этого helpers.js.

Другие вопросы по тегам