вторник, 5 июля 2011 г.

Правила форматирования URLов в C1

В версии 2.1.3 (бета, которой доступна для тестирования и экспериментов), появится еще одна возможность - создавать правила для форматирования "названий для URLов" (URL title) страницы при их автоматической генерации. "Название для URL" - это отдельное поле в настройках страницы и может отличаться и от названия страницы, и от названия пункта меню на сайте.




Упрощенно, путь к странице формируется добавлением "названий для URL" страницы и ее "предков" к имени узла.

Версия 2.1.1: http[s]://<имя узла>[/<код языка>]/<путь к странице>.aspx
Версия 2.1.3: http[s]://<имя узла>[/<код языка>]/<путь к странице>

Напр:
http://www.contoso.ru/Products/Product-A/Features

Когда вы создаете страницу, то "названия для URLа" генерируется автоматически. Обычно берется название страницы (Page title), пробелы заменяются дефисами, а некодированные символы (напр., &) убираются.

Правила форматирования URLов, которые я упомянул в начале сообщения, позволяют:
  • контролировать, как именно формируется такое URL-название при создании страницы
  • и валидировать его при редактировании страницы.
С их помощью можно настроить замену одних символов другими, например, пробел можно заменять на дефис или подчеркивание.

Правила могут быть обязательными и необязательными. И те и другие срабатывают при создании страницы, а вот при редактировании и сохранении уже существующей страницы, срабатывать будут только обязательные -  в качестве валидаторов в поле "Названия для URL" (URL title).

Правила задаются в конфигурационном файле C1: /App_Data/Composite/Composite.config:

<configuration>
  ...
  <Composite.Core.Urls defaultPageUrlProviderName="Default">
    <PageUrlProviders>
      <add name="Default" type="Composite.Plugins.Routing.Pages.DefaultPageUrlProvider, Composite" />
    </PageUrlProviders>
    <UrlFormatters>
      <add name="StringReplace" type="Composite.Plugins.Routing.UrlFormatters.StringReplaceUrlFormatter" mandatory="true">
        <ReplacementRules>
          <add oldValue=" " newValue="-" />
          <add oldValue="?" newValue="" />
          <add oldValue="#" newValue="" />
        </ReplacementRules>
      </add>
<!--add name="LowerCase" type="Composite.Plugins.Routing.UrlFormatters.ToLowerCaseUrlFormatter" mandatory="false" /-->
      <add name="Aplhabets" type="Composite.Plugins.Routing.UrlFormatters.StringReplaceUrlFormatter" mandatory="true" rulesFile="~/App_Data/Composite/Configuration/UrlFormatting.xml" />
    </UrlFormatters>
  </Composite.Core.Urls>
</configuration>

Правила (точнее наборы из правил) добавляются в разделе <UrlFormatters>. Для каждого набора правил должны быть заданы значения таких атрибутов в элементе <add/>:
  • name: Название набора правил форматирования URLа.
  • type: Тип используемый для форматирования. Тип можно использовать для разных наборов - например, StringReplaceUrlFormatter для замены определенных символов.
  • mandatory: значение "true" здесь - значит набор правил обязательный; иначе ("false") - нет.
Если самих правил в наборе очень много, имеет смысл вынести их в отдельный файл специального формата  - в папке /App_Data/Composite/Configuration, а в атрибуте rulesFile элемента набора правил нужно будет указать путь к этому файлу (в примере выше, "Alphabets"). Корневым элементом такого внешнего файла должен быть <ReplacementRules/>.

В версии 2.1.3 используются минимум два встроенных типа для форматирования:
  • StringReplaceUrlFormatter
  • ToLowerCaseUrlFormatter
StringReplaceUrlFormatter

StringReplaceUrlFormatter заменяет один символ другим. Его можно использовать для создания нескольких наборов правил. Сами правила добавляются при помощи элемента  <add/> в элементе <ReplacementRules/> с такими атрибутами:
  • oldValue: символ(ы), которые нужно заменить
  • newValue: символ(ы), которыми заменяют
По умолчанию в версии 2.1.3 добавлены два набора правил на основе типа StringReplaceUrlFormatter.
  • "Special Characters"
  • "Alphabets"
"Special Characters" заменяет пробелы (' ') на дефисы ('-'), а также удаляет символы '?' and '#'.

"Alphabets" заменяет символы не в ANSI-кодировке ('extended Latin', 'Cyrillic') назначенными соответствиями из ANSI, напр., "Продукты" > "Produkty". Сами правила замены определены во внешнем файле /App_Data/Composite/Configuration/UrlFormatting.xml. 

ToLowerCaseUrlFormatter

ToLowerCaseUrlFormatter переводит буквы из верхнего регистра в нижний, напр. "Produkty" > "produkty". Набор правил на его основе не требует списка отдельных правил. В Composite.config этот набор правил закомментирован, т.е. по умолчанию, не используется.

Комментариев нет:

Отправить комментарий