8

Orchard CMS のテーマを作成しようとしています。私が持っているテンプレートはそれ用に作成されていないため、Layout.cshtml から画像を表示する際に問題が発生します。

これは、私の Web サーバーの現在のフォルダー構造です (テーマのフォルダー構造のみ)。

テーマ/コンテンツ/画像/Image.jpg テーマ/ビュー/Layout.cshtml テーマ/スタイル/Site.css

次の行は画像を表示しません (Layout.cshtml にあります)。

<img src="../Content/Images/bgBig.jpg" alt="Big background image" />

ただし、この行には画像が表示されます (Site.css にあります)。

background-image:url('../Content/Images/bgLines.png');

問題は、Layout.cshtml が Theme/Views/Layout.cshtml からの画像を表示するのではなく、他の場所から画像を表示することだと思います。誰かがその場所が何であるか、またはそれを上書きする方法を知っていれば、私は感謝します.

4

5 に答える 5

25

少し遅れるかもしれませんが、これは他の人の助けになるかもしれません。

現在のテーマを取得し、(絶対パスではなく) 動的パスを作成するには、次を使用します。

WorkContext.CurrentTheme: 現在作業中のテーマ ExtensionDescriptor を取得します。

次に、それを Html.ThemePath URL ビルダーに渡します。

Html.ThemePath(WorkContext.CurrentTheme, "/Content/Images/SomeImage.png")

楽しむ!

よろしく、ティアゴ。

于 2012-03-20T17:44:02.957 に答える
11

Layout.cshtml に画像を追加するときは、テーマへのフル パスを使用する必要があります (例: /Themes/My.Theme/Content/Images/MyImage.jpg )。[img] タグで指定するパスは、サーバー上のパスではなく、browser の URL に対して相対的であることに注意してください。MVC では、それらが等しくなることはほとんどありません。

Layout.cshtml ビュー ファイルはすべての要求の一部として読み込まれるため、内部に配置された相対パスはほとんどの場合壊れます。

2 つの Orchard ページがあるとします: site.com/mypagesite.com/something/mypageです。Layout.cshtml は両方でレンダリングされます。最初の相対 URL は、2 番目の URL にアクセスすると確実に壊れます。

CSS スタイルシートは、/Themes/YourTheme/Styles フォルダー (デフォルト) 内の物理ファイルへの絶対パスを指定することで直接読み込まれるため、この場合は相対 URL が機能します。

HTH

于 2011-03-29T13:05:56.700 に答える
6

あなたのソリューションのためのThx Tiago。オーチャード サイトがドメインのルートにある必要があると思われるフル パスをリンクするのとは対照的に、これは実際には正しい解決策だと思います。

元の質問の完全な画像参照は次のようになります。

<img src="@Url.Content(Html.ThemePath(WorkContext.CurrentTheme, "/Content/Images/bgBig.jpg"))" alt="Big background image" />
于 2012-12-05T17:40:52.283 に答える
4

web.config画像/スクリプト/スタイルが存在するフォルダーに次のものが必要であると誰も言及していないことに驚いています(オーチャードのドキュメントを参照

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.web>
    <httpHandlers>
      <!-- iis6 - for any request in this location,
           return via managed static file handler -->
      <add path="*" verb="*" type="System.Web.StaticFileHandler" />
    </httpHandlers>
  </system.web>
  <system.webServer>
    <handlers accessPolicy="Script,Read">
      <!-- iis7 - for any request to a file exists on disk,
           return it via native http module.
           accessPolicy 'Script' is to allow for a managed 404 page. -->
      <add name="StaticFile" path="*" verb="*" modules="StaticFileModule"
           preCondition="integratedMode" resourceType="File"
           requireAccess="Read" />
    </handlers>
  </system.webServer>
</configuration>

さらに、他の人が指摘しているように、これは画像を見つける最も信頼できる方法です。

<img src="@Url.Content(Html.ThemePath(WorkContext.CurrentTheme, "/Content/Header.png"))" />
于 2013-02-05T20:54:03.273 に答える
0

ソースを調べると、その画像を見つけようとして失敗した場所が表示されるはずです。問題が発生している相対パスである可能性が最も高いため、css で絶対パスを試して、それが問題であるかどうかを確認してください。実際のサイトがなければ、確かなことはわかりません。

于 2011-03-28T23:20:41.203 に答える