Улучшенный тег заголовка Hexo

Я настроил свои сообщения в Hexo и присвоил теги каждому сообщению. Однако тег title пишется не так, как хотелось бы.

Это визуализированный HTML:

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

Но я хотел бы добиться этого:

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

Тег: пицца написан в нижнем регистре, и я не знаю, как сделать так, чтобы тег начинался с заглавной буквы в теге 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>

Заранее спасибо!


person user5898548    schedule 26.08.2016    source источник


Ответы (2)


Вот функция для заглавных букв каждого слова предложения:

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>
person Louis Barranqueiro    schedule 26.08.2016
comment
извините, я не смог заставить это работать, я попытался заменить свою функцию выше, но тогда заголовок get не определен - person user5898548; 26.08.2016

Я не знаю, является ли это новым в hexo, но если вы все еще ищете, есть titlecase — функция, которую вы можете использовать в своих шаблонах.

Теперь это должно прийти с вашей установкой hexo. Если вы используете ejs в качестве средства визуализации, вы можете использовать его, как указано в документации:

Вы можете сделать <%- titlecase('pizza') %> и получить то, что хотите.

Если вам нужно написать свои собственные функции, предпочтительнее записать их в файл /scripts/my_helpers.js (назовите файл .js как угодно, но он должен находиться в scripts в каталоге вашего проекта). Кроме того, опубликуйте свой модуль с префиксом hexo- и импортируйте его в свой проект (убедитесь, что он указан в package.json, если вы это делаете).

Затем вы можете сделать свою функцию javascript доступной с помощью следующего заклинания в вашем файле .js:

// 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>

`

person 8nnequqnqnqnqnqnq    schedule 11.12.2017