3

DocPadを使用してデモサイトを作成しています。たとえば、http: //www.example.com/demo/にデプロイしたいのです が、を使用する場合docpad generate --env static、リンクはデモディレクトリではなくサーバーのルートに相対的です。リンクが壊れています。私に何ができる ?どこかに宣言するメタデータはありますか?

編集:この場合、私はTwitter Bootsrapスケルトンを使用しているため、たとえば、デフォルトレイアウトのメインナビゲーションのリンクは次のようになります。

<div class="nav-collapse collapse">
  <ul class="nav">
    <% for document in @getCollection('pages').toJSON(): %>
      <li class="<%= 'active'  if @document.url is document.url %>">
        <a href="<%= document.url %>"><%= document.title %></a>
      </li>
    <% end %>
  </ul>
</div>
4

3 に答える 3

1

私は仕事をする小さなプラグインを書きました、おそらくより良い解決策がありますが、それはうまくいきます:

# Export Plugin
module.exports = (BasePlugin) ->
  # Define Plugin
  class absolutePathPlugin extends BasePlugin
    # Plugin Name
    name: 'absolutepath'
    config:
      url: "/"

    renderAfter: (opts,next) ->
      docpad = @docpad
      if 'static' in docpad.getEnvironments()
        docpad.log 'debug', 'Writing absolute urls'
        href = 'href="' + @config.url
        src = 'src="' + @config.url
        database = docpad.getCollection('html')
        database.forEach (document) ->
          content = document.get('contentRendered')
          if /href="\//.test(content)
            content = content.replace(/href="\//g, href)
          if /src="\//.test(content)
            content = content.replace(/src="\//g, src)
          document.set('contentRendered',content)
        next()?
      else
        next()?

      # Chain
      @

私のdocpad.coffeeファイルでは、URLを構成するだけで、cleanUrlsプラグインを使用する場合は、絶対URLを考慮に入れるようにgetRedirectTemplate関数を調整する必要があります。

plugins:
  absolutepath:
    url: "http://www.example.com/demo/"
  cleanurls:
    getRedirectTemplate: (document) ->
      absolutepath = docpadConfig.plugins.absolutepath.url.slice(0, - 1) 
      """
      <!DOCTYPE html>
      <html>
        <head>
          <meta charset="utf-8">
          <title>#{document.get('title') or 'Redirect'}</title>
          <meta http-equiv="REFRESH" content="0;url=#{absolutepath + document.get('url')}">
        </head>
        <body>
          This page has moved. You will be automatically redirected to its new location. If you aren't forwarded to the new page, <a href="#{absolutepath + document.get('url')}">click here</a>.
        </body>
      </html>
      """
于 2013-01-11T06:25:16.597 に答える
1

もう1つのオプションは、すべての絶対URLを相対URLに変換して、サイトが再構築せずに任意のパスプレフィックス(、、、または)から機能するようにする/こと/path/です/some/other/path/。カスタムドメインでgh-pagesを考えてください。

これは、静的なdocpadの生成後にHTMLとCSSで変換を行うためのうんざりするタスクです。現在、@Dharmaのdocpadプラグインに触発された正規表現の置換に基づいて構築されています。

于 2013-06-18T17:42:36.037 に答える
0

これは、DocPadがステップアップできる領域の1つです。

これまでのところ、人々がこれを回避する最も一般的な方法は、<%- @site.url+@document.url %>どこでも使用することですが、それはもちろん、その厄介な性質のために理想的ではありません。これをより詳細に紹介する要点がここにあります:https ://gist.github.com/3939146

おそらく、DocPadが行う必要があるのは、自動的にabsoluteUrl生成されるファイル/ドキュメントの属性を追加することです。site.urlその後、代わりに行うことができます<%- @document.absoluteUrl %>。ここでこの問題を作成しました:https ://github.com/bevry/docpad/issues/402

于 2013-01-17T15:48:31.107 に答える