更好的Hexo标题标签

时间:2016-08-26 08:13:17

标签: ejs hexo

我已在Hexo中设置帖子并为每个帖子分配了标签。但是 标题 标记并没有按照我想要的方式进行大写。

这是呈现的HTML:

<title>Viewing pizza | My site</title>

但我想实现这个目标:

<title>Viewing Pizza | My site</title>

标签:披萨是小写的,并且不确定如何使标签以 标题 标签内的大写字母开头(例如披萨,意大利面,意大利等等)上)。

我的代码:

<%
    function capitalize (str) { return str.charAt(0).toUpperCase() + str.substring(1).toLowerCase() }
    var title = page.title;
    if (is_archive()) {
        title = capitalize(__('Viewing'));
        if (is_month()) {
            title += ': ' + page.year + '/' + page.month;
        } else if (is_year()) {
            title += ': ' + page.year;
        }
    } else if (is_category()) {
        title = capitalize(__('Viewing')) + ': ' + page.category;
    } else if (is_tag()) {
        title = capitalize(__('Viewing')) + ': ' + page.tag;
    }
%>
<title><% if (title) { %><%= title %> | <% } %><%= config.title %></title>

提前致谢!

2 个答案:

答案 0 :(得分:0)

这是一个将句子的每个单词大写的功能:

function capWords(str) {
    // we split string by words in an array
    // and we iterate on each word to capitalize the first letter
    // and we join each element with a space
    return str.split(' ').map(function(str) {
        return str[0].toUpperCase() + str.substr(1).toLowerCase()
    }).join(' ');
}

在您的代码中:

<%
    function capWords(str) {
        // we split string by words in an array
        // and we iterate on each word to capitalize the first letter
        // and we join each element with a space
        return str.split(' ').map(function(str) {
            return str[0].toUpperCase() + str.substr(1).toLowerCase()
        }).join(' ');
    }

    var title = page.title;
    if (is_archive()) {
        title = __('Viewing');
        if (is_month()) {
            title += ': ' + page.year + '/' + page.month;
        } else if (is_year()) {
            title += ': ' + page.year;
        }
    } else if (is_category()) {
        title = __('Viewing') + ': ' + page.category;
    } else if (is_tag()) {
        title = __('Viewing') + ': ' + page.tag;
    }
%>
<title>
    <% if (title) { %>
        <%= capWords(title) + ' | ' %> 
    <% } %>
    <%= config.title %>
</title>

答案 1 :(得分:0)

我不知道这是否是hexo中的新内容,但如果您仍然在寻找,则会titlecase,这是您可以在模板中使用的功能。

这应该随你的hexo安装一起提供。如果您使用ejs作为渲染器,则可以将其用作文档说明:

你可以做<%- titlecase('pizza') %>并获得你想要的东西。

如果您需要编写自己的函数,首选方法是将它们写在/scripts/my_helpers.js文件中(将.js文件命名为您想要的任何内容,但它必须位于scripts中项目目录)。或者,发布前缀为hexo-的模块并将其导入项目(如果您正在执行此操作,请确保它已在package.json中列出)。

然后,您可以在.js文件中使用以下咒语使您的javascript功能可用:

// note, I haven't tested this code.
hexo.extend.helper.register('capitalize', (aString) => {
    return aString.split(" ").map(function(word) {
        return word[0].toUpperCase() + word.substring(1).toLowerCase()}).join(" ")
});

然后您可以使用<%- capitalize("i am a strInG") %>

<title>
<% if (page.title) { %>
    <%= capitalize(page.title) %> | 
<% } %>
<%= config.title %>
</title>

`