Как изменить префиксы, которые EPiServer добавляет к атрибутам src в html

У меня есть фрагмент html, который содержится в свойстве шаблонной страницы EPiServer, в этом html есть тег img, в котором есть относительный URL-адрес.

Когда страница просматривается, я вижу, что атрибут src тега был изменен, чтобы иметь префикс /ProjectName/Templates/Pages/.

Я понимаю, что это делается HtmlRewriteToExternal, чтобы файлы изображений, которые хранятся вместе с шаблоном aspx (который действительно живет в Templates\Pages), располагались правильно, однако изображение, которое должно быть частью html-фрагмента, в моем случае на самом деле хранится под PageFiles/nnn/ (где nnn на самом деле является PageFolderID родительской страницы), и мне нужно каким-то образом отразить это в измененном html.

Я создал класс, наследуемый от FriendlyUrlRewriteProvider, и зарегистрировал свой класс. Я могу отлаживать приложение и наблюдать, как запросы проходят через переопределенные методы, но я по-прежнему не вижу, где добавляется префикс, и не понимаю, как его изменить. Я могу изменить тег src на другой относительный путь в моем классе, но префикс все еще добавляется.

Я прочитал все, что мог найти в переписывании URL-адреса EPiServer, но не могу найти ничего, что намекало бы на то, куда добавляется этот префикс или как это остановить или изменить.

Вещи, которые я прочитал:


Я открыт для совершенно разных решений того, чего я на самом деле пытаюсь достичь, а именно:

У меня есть несколько независимых наборов статических файлов html и связанных файлов изображений/css/js, которые я пытаюсь сохранить/опубликовать с помощью EPiServer. Структура каждого набора выглядит примерно так

  • setfolder/
    • htmlfileA.html
    • htmlфайлB.html
    • css/
      • styles.css
    • images/
      • piccy1.png
      • piccy2.png
    • js/
      • magic.js

Я решил, что должен создать страницу EPiServer для набора, а затем дочерние страницы для каждого html-файла, сохраняя html из файлов в свойстве дочерних страниц. В настоящее время я сохраняю связанные статические файлы в PageFiles соответствующей страницы setfolder, так как это кажется наиболее логически последовательным местом для их размещения.


person Tim Abell    schedule 29.03.2012    source источник
comment
Кто-то с похожей проблемой и без решения world.episerver.com/ Модули/Форум/Страницы/thread.aspx?id=41534   -  person Tim Abell    schedule 30.03.2012
comment
Еще один вопрос без ответа: запретить URLReWrite для определенного типа страницы world.episerver .com/Modules/Forum/Pages/thread.aspx?id=19395   -  person Tim Abell    schedule 30.03.2012
comment
Я разместил аналогичный вопрос на форумах EPiServer. world.episerver.com/Modules/Forum/Pages/Thread. aspx?id=57845   -  person Tim Abell    schedule 30.03.2012


Ответы (2)


Трудно предложить лучшее решение, не видя все это перед собой. Но один простой способ — изменить HTML-код, когда вы печатаете свойство на странице.

Как ‹%= ChangeRelativeLinks(CurrentPage["HtmlCode"] как строка) %>

И в ChangeRelativeLinks(string htmlCode) вы делаете регулярное выражение или подобное, которое изменяет относительные ссылки и изображения на pagedir как абсолютный путь.

person erik_nw    schedule 30.03.2012
comment
Изменив относительные ссылки на абсолютные, переписывание html, которое происходит, когда страница собирается быть отправленной клиенту, теперь игнорирует их. Ура! Вот мой абсолютный префикс пути: ResolveUrl(String.Format("~/PageFiles/{0}/", GetPage(CurrentPage.ParentLink)["PageFolderID"])); - person Tim Abell; 03.04.2012
comment
Больше кода программной части, который я использовал, доступно здесь: gist.github.com/2291964 ( не стесняйтесь копировать и вставлять код в свой ответ) - person Tim Abell; 03.04.2012

Если вы храните изображения в PageFiles, который является поставщиком виртуального пути, вы сможете получить URL-адрес своего файла, просто используя API. В классе PageData (т.е. CurrentPage в вашем шаблоне) у вас есть метод GetPageDirectory(), который получает папку страницы.

Вы можете прочитать больше о концепциях VPP здесь:

http://sdk.episerver.com/library/cms6.1/Developers%20Guide/Core%20Features/File%20System/File%20System%20and%20VPPs.htm

Я думаю, что для этого не нужен провайдер перезаписи URL.

person Andreas    schedule 29.03.2012
comment
Спасибо за Ваш ответ. Я использовал GetPageDirectory(), так что я знаю, что вы имеете в виду, я даже создал расширение для этого gist.github.com/2205546/ У меня проблема в том, что весь фрагмент html будет находиться в свойстве html-страницы, установленном пользователем, поэтому у меня нет возможности напрямую установить атрибут src. Поэтому, хотя я могу узнать путь к изображению программно, я не могу понять, как применить этот путь к атрибуту src или перенаправить запрос браузера. На данный момент я думаю, что лучше всего возиться с переписчиком html. - person Tim Abell; 30.03.2012