8 Stimmen

Bilder werden nicht im Layout des Themas angezeigt (Orchard CMS)

Ich versuche, ein Thema für Orchard CMS zu erstellen. Die Vorlage, die ich habe, wurde nicht dafür gemacht, also habe ich einige Probleme mit der Anzeige von Bildern aus Layout.cshtml.

Dies ist die aktuelle Ordnerstruktur auf meinem Webserver (nur die Ordnerstruktur des Themas):

Thema/Content/Bilder/Bild.jpg Thema/Ansichten/Layout.cshtml Thema/Styles/Site.css

Die folgende Zeile zeigt das Bild nicht an (befindet sich in Layout.cshtml):

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

In dieser Zeile wird jedoch das Bild angezeigt (in Site.css):

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

Ich glaube, das Problem ist, dass Layout.cshtml nicht das Bild von Theme/Views/Layout.cshtml anzeigt, sondern von einem anderen Ort. Wenn jemand weiß, was wäre, dass der Ort oder wie man es überschreiben würde ich dankbar sein.

24voto

Tiago Punkte 341

Ich bin vielleicht ein bisschen spät dran, aber vielleicht hilft das ja anderen.

Um das aktuelle Thema zu erhalten und dann einen dynamischen Pfad (im Gegensatz zu einem absoluten Pfad) zu erstellen, verwenden Sie Folgendes:

WorkContext.CurrentTheme : Ruft das aktuelle Arbeitsthema ExtensionDescriptor ab.

Dann geben Sie es an den Html.ThemePath URL-Builder: Bsp.

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

Viel Spaß!

Mit freundlichen Grüßen, Tiago.

11voto

Piotr Szmyd Punkte 13351

Wenn Sie Bilder in Layout.cshtml hinzufügen, sollten Sie den vollständigen Pfad zu Ihrem Thema verwenden (z. B. /Themen/Mein.Theme/Content/Bilder/MeinBild.jpg ). Denken Sie daran, dass die Pfade, die Sie im [img]-Tag angeben, folgende sind relativ zur URL im Browser und nicht den Pfad auf dem Server. In MVC sind diese fast nie gleich.

Layout.cshtml-Ansichtsdatei wird als Teil jeder einzelnen Anforderung geladen, so dass relative Pfade, die darin platziert werden, fast immer abbrechen.

Stellen Sie sich vor, Sie haben zwei Orchard-Seiten: site.com/mypage y site.com/irgendwas/mypage . Layout.cshtml wird in beiden von ihnen gerendert. Relative URLs, die für die erste funktionieren, werden sicherlich brechen, wenn Sie auf die zweite zugreifen.

CSS-Stylesheets werden direkt durch Angabe des absoluten Pfads zur physisch Dateien im Ordner /Themes/YourTheme/Styles (Standard), so dass in diesem Fall relative URLs funktionieren werden.

HTH

6voto

Vielen Dank, Tiago, für deine Lösung. Ich denke, dass dies tatsächlich die richtige Lösung ist, im Gegensatz zur Verknüpfung des vollständigen Pfads, die meiner Meinung nach erfordern würde, dass die Orchard-Site auf dem Stamm der Domain liegt.

Die vollständige Bildreferenz der ursprünglichen Frage würde wie folgt aussehen:

<img src="@Url.Content(Html.ThemePath(WorkContext.CurrentTheme, "/Content/Images/bgBig.jpg"))" alt="Big background image" />

4voto

Mohammad Sepahvand Punkte 17097

Ich bin überrascht, dass noch niemand erwähnt hat, dass Sie Folgendes benötigen web.config in dem Ordner, in dem sich Ihre Bilder/Skripte/Stile befinden ( siehe die Orchard-Dokumente )

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

Außerdem ist dies, wie bereits von anderen erwähnt, die zuverlässigste Methode, ein Bild zu finden:

<img src="@Url.Content(Html.ThemePath(WorkContext.CurrentTheme, "/Content/Header.png"))" />

0voto

Sam Punkte 1223

Wenn Sie den Quellcode untersuchen, sollten Sie sehen, wo das Bild gesucht wird und wo es nicht gefunden wird. Es ist höchstwahrscheinlich der relative Pfad, mit dem es Probleme gibt. Versuchen Sie einen absoluten Pfad in der CSS, um zu sehen, ob das das Problem ist. ohne die eigentliche Website kann ich es nicht genau wissen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X