0

og:title や og:description など、各ページに固有のメタ タグを挿入できる docpad プラグインを作成しようとしています。グローバル値の populateCollections イベントでこれをグローバルに達成できましたが、ページごとにこれを行うことはできませんでした。

ドキュメントのメタに基づいてメタタグが自動的に挿入されるように、テンプレート関数を必要とせずにこれが機能することを望みます。1 つの方法は、writeBefore イベントで contentRendered 値を取得し、その方法で文字列操作を行うことですが、それはハックに思えます。

何か案は?

4

3 に答える 3

1

これは私が必要としていたものでした。基本的に、イベントを使用してファイルが書き込まれる直前にレンダリングされたコンテンツを取得writeBeforeし、コレクション内のモデルから取得されるメタ タグとその一意の値を追加する非常に単純な文字列置換を実行します。

writeBefore: (opts) ->
        docPad = @docPad
        templateData = docpad.getTemplateData()
        siteUrl = templateData.site.url

        for model in opts.collection.models
            if model.get('outExtension') == 'html'
                url = @getTag('og:url', siteUrl+model.get('url')) 
                title = @getTag('og:title', model.get('title'))
                content = model.get('contentRendered')
                if content
                    content = content.replace(/<\/title>/, '</title>'+url+title+description)
                    model.set('contentRendered', content)
# Helper
getTag: (ogName, data) ->
    return "\n    <meta property=\"#{ogName}\" content=\"#{data}\" />"
于 2013-11-11T19:01:55.330 に答える