пятница, 1 апреля 2011 г.

Эталонные страницы в C1

Вы наверное уже обратили внимание, что в C1 нет эталонных страниц (master pages), а в качестве шаблонов используются XSLT шаблоны.

На самом деле это не совсем так.  В C1 есть эталонные страницы - благодаря проекту сообщества под названием Composite C1 Contrib.

Итак, если вы большой фанат эталонных страниц, вы можете добавить их поддержку в свой C1.

Для начала вам нужно:
  1. Установить последнюю версию C1 (на данный момент это 2.1.4087.22991).
  2. Загрузить проект Composite C1 Contrib, распаковать его и собрать его в Visual Studio.
Вероятнее всего, вам нужно будет исправить ссылку на правильную версию Composite.dll на вашем сайте.

В результате вы получите CompositeC1Contrib.dll.

Теперь собственно добавляем поддержку эталонных страниц:
  1. Копируем CompositeC1Contrib.dll в папку /bin вашего сайта.
  2. Открываем web.config сайта и добавляем следующую конфигурацию:
  3. в зависимости от версии IIS либо в <system.web/httpHandlers>:

    <httpHandlers>
      <add verb="*" path="/Renderers/Page.aspx" type="CompositeC1Contrib.Web.UI.CompositeC1Page, CompositeC1Contrib" />        </httpHandlers>

  4. либо в <system.webServer/handlers>:

    <handlers>
      <add name="CompositePage" verb="*" path="/Renderers/Page.aspx" type="CompositeC1Contrib.Web.UI.CompositeC1Page, CompositeC1Contrib" />
    </handlers>

  5. В том же web.config регистрируем префикс rendering для нужных нам элементов управления - в <system.web/pages/controls>:

    <controls>
      <add tagPrefix="rendering" namespace="CompositeC1Contrib.Web.UI.Rendering" assembly="CompositeC1Contrib" />
    </controls>
Все. Поддержку добавили. Теперь можно создавать и использовать эталонные страницы в C1.

Здесь есть свои особенности, которые вам нужно обязательно учесть.

(а) При наличии, эталонные страницы используются вместо существующих XSLT шаблонов. Поэтому:
  • Все эталонные страницы для C1 нужно создавать в папке, где расположены XSLT шаблоны, т.е. в /App_Data/PageTemplates/.
  • Название эталонной страницы должно совпадать с названием XSLT шаблона. То есть, если у вас есть шаблон /App_Data/PageTemplates/FrontPage.xml, то нужно создать эталонную страницу /App_Data/PageTemplates/FrontPage.master. В результате, эталонная страница будет использоваться вместо соответствующего XSLT шаблона. (А при отсутствии эталонной страницы будет использоваться XSLT шаблон.)
(б) Кроме того, чтобы иметь возможность вставлять контент в визуальном редакторе, в эталонной странице, как и в XSLT шаблоне необходимо использовать заполнители для контента (placeholder). Элемент заполнителя для эталонной страницы имеет такую же структуры, как и такой же элемент в XSLT шаблонах (только необходимо указать атрибут runat="server"):

<rendering:placeholder id="contentplaceholder" title="Content" default="true" runat="server" />.

Вызов C1 функций в эталонных страницах

В последней версии проекта, его автор burningice добавил также поддержку вызовов С1 функций  прямо в эталонных страницах. Все, что вам нужно сделать, так это заключить код разметки функции (<f:function />) в элемент <rendering:function runat="server" />.

<rendering:function runat="server">
   <f:function name="Composite.Navigation.Path" xmlns:f="http://www.composite.net/ns/function/1.0">
     <f:param name="Level" value="0" />
   </f:function>
</rendering>

Написано по мотивам:

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

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