Изображения не отображаются из макета темы (Orchard CMS) - PullRequest
8 голосов
/ 29 марта 2011

Я пытаюсь создать тему для Orchard CMS.Шаблон, который я не сделал для этого, поэтому у меня есть некоторые проблемы с отображением изображений из Layout.cshtml.

Это текущая структура папок на моем веб-сервере (только структура папок темы):

Theme / Content / Images / Image.jpg Theme / Views / Layout.cshtml Theme / Styles / 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, но из другого места.Если кто-то знает, что это за местоположение или как его переопределить, я был бы благодарен.

Ответы [ 5 ]

25 голосов
/ 20 марта 2012

Я могу немного опоздать, но это может помочь другим.

Чтобы получить текущую тему и затем построить динамический путь (в отличие от абсолютного пути), используйте это:

WorkContext.CurrentTheme: получает текущую рабочую тему ExtensionDescriptor.

Затем передайте его разработчику URL Html.ThemePath: Ex.

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

Веселись!

С наилучшими пожеланиями, Tiago.

11 голосов
/ 29 марта 2011

При добавлении изображений в Layout.cshtml вы должны использовать полный путь к вашей теме (например, / Themes / My.Theme / Content / Images / MyImage.jpg ).Помните, что пути, указанные вами в теге [img], относятся к URL-адресу в браузере , а не к пути на сервере.В MVC они почти никогда не равны.

Файл представления Layout.cshtml загружается как часть каждого отдельного запроса, поэтому относительные пути, размещенные внутри, почти всегда ломаются.

Представьте, что у вас есть две страницы Orchard: site.com / mypage и site.com / что-то / mypage .Layout.cshtml визуализируется в обоих из них.Относительные URL-адреса, работающие для первого, обязательно сломаются при доступе ко второму.

Таблицы стилей CSS загружаются напрямую, указывая абсолютный путь к физическим файлам в / Themes / YourTheme / Stylesпапка (по умолчанию), поэтому в этом случае будут работать относительные URL.

HTH

6 голосов
/ 05 декабря 2012

Thx Tiago для вашего решения. Я думаю, что это на самом деле правильное решение, в отличие от ссылки на полный путь, который, я думаю, потребовал бы, чтобы сайт Orchard находился в корне домена.

Полная ссылка на изображение исходного вопроса будет выглядеть так:

<img src="@Url.Content(Html.ThemePath(WorkContext.CurrentTheme, "/Content/Images/bgBig.jpg"))" alt="Big background image" />
4 голосов
/ 06 февраля 2013

Я удивлен, что никто не упомянул, что вам нужно следующее 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"))" />
0 голосов
/ 29 марта 2011

если вы изучите источник, он должен показать вам, где он пытается найти это изображение и терпит неудачу. Скорее всего это относительный путь, с которым он имеет проблемы, попробуйте абсолютный путь в CSS, чтобы увидеть, если это проблема. без реального сайта точно не знаю.

...