如何在Keystone JS中为我的非帖子页面设置标题标签和元描述?

时间:2016-11-19 17:16:52

标签: keystonejs

我知道如何为我的帖子和类别页面设置标题标签和元描述,因为它们来自数据库,但我在KeystoneJS中找不到在哪里更新其他页面的内容 - 主页,博客等。

以下是我用于元数据的把手代码。每个页面都不是" Post"正在使用底部的最终Else选项。

{{#if data.post}}
    {{#if data.post.meta.title}}
        <title>{{data.post.meta.title}}</title>
        <meta property="og:title" content="{{data.post.meta.title}}">
        <meta name="twitter:title" content="{{data.post.meta.title}}">
    {{else}}
        <title>{{data.post.title}}</title>
        <meta property="og:title" content="{{data.post.title}}">
        <meta name="twitter:title" content="{{data.post.title}}">
    {{/if}}
    {{#if data.post.meta.description}}
        <meta name="description" content="{{data.post.meta.description}}">
        <meta property="og:description" content="{{data.post.meta.description}}">
        <meta name="twitter:description" content="{{data.post.meta.description}}">
    {{else}}
        <meta name="description" content="{{data.post.content.brief}}">
        <meta property="og:description" content="{{data.post.content.brief}}">
        <meta name="twitter:description" content="{{data.post.content.brief}}">
    {{/if}}
        <meta property="og:type" content="article">
        <meta name="twitter:card" content="summary_large_image">
        <meta property="og:image" content="{{data.post.image.url}}">
        <meta name="twitter:image:src" content="{{data.post.image.url}}">
        <meta property="og:url" content="{{data.post.fullPostUrl}}">
        <meta name="twitter:url" content="{{data.post.fullPostUrl}}">
        <meta property="article:published_time" content="{{data.post.publishedDate}}">
    {{# each data.post.categories}}
        <meta property="article:tag" content="{{name}}">
    {{/each}} 
{{else}}
    <title>GENERAL TITLE</title>
    <meta propery="description" content="GENERAL DESCRIPTION">
    <meta property="og:image" content="{{baseUrl}}/images/logo.png">
    <meta name="twitter:image:src" content="{{baseUrl}}/images/logo.png">
{{/if}}

我可以默认使用keystone为所有页面使用相同的值。

http://demo.keystonejs.com/

谢谢!

2 个答案:

答案 0 :(得分:2)

如果有人好奇,我可以通过直接从路线加载来实现这一目标。例如:

// Render the view
view.render('blog', { 
    title: 'Blog',
    description: 'This is my blog meta description'
    });

答案 1 :(得分:0)

@tkwitten正确。以上方法有效。

    // Render the view
view.render('blog', { 
    title: 'Blog',
    description: 'This is my blog meta description'
    });

最初实际上并没有工作,然后我意识到必须将以下内容应用于默认的(hbs)模板。

<title>{{title}}</title>
<meta name="description" content="{{description}}" />

您可以基于此输入条件语句