среда, 15 августа 2012 г.

Чего ожидать разработчикам от версии 4.0 Composite C1 CMS

(Вольный перевод сообщения из официального блога Composite C1 CMS.)

Если вы используете такие технологии ASP.NET как эталонные страницы (Master Pages) и Razor, возможно, вы заметили, что они не были частью ядра продукта. Их можно было добавить, используя проект CompositeC1Contrib от @burningice.

Как оказалось, эти технологии довольно популярны у разработчиков, несмотря на то, что полной интеграции с Composite C1 CMS не было, да  и их поддержка в интерфейсе пользователя практически отсутствовала. То есть, если бы вы хотели воспользоваться Razor или эталонными страницами, вашим спасением был бы проект CompositeC1Contrib.

Благодаря этой популярности, а также тому факту, что мы собираемся в будущем перевести наши пакеты расширения на технологию Razor, логично было добавить эти технологии в ядро Composite C1. Именно над этим мы работаем последние пару месяцев.

Вот новые функции, которые вы сможете увидеть в следующей версии Composite C1.


Подключаемые шаблоны страниц

Вплоть до версии 3.2, единственным вариантом создания макета страницы было использование XML-файла, содержащего XHTML, а также специфические элементы разметки Composite C1 CMS. Это работающее решение, но из-за невозможности наследовать один шаблон от другого, повторно использовать код шаблона было не так-то просто.

Но теперь, отделение (decoupling) этой части системы позволило нам добавить поддержку для других технологий -  эталонных страниц (Master Pages) и Razor-страниц.

<Composite.Core.PageTemplates.Plugins.PageTemplateProviderConfiguration>
  <PageTemplateProviders>
    <add name="default" type="Composite.Plugins.PageTemplates.XmlPageTemplates.XmlPageTemplateProvider, Composite" />
      <add name="MasterPages" type="Composite.Plugins.PageTemplates.MasterPages.MasterPagePageTemplateProvider, Composite" directory="~/App_Data/PageTemplates" />
      <add name="Razor" type="Composite.Plugins.PageTemplates.Razor.RazorPageTemplateProvider, Composite" directory="~/App_Data/PageTemplates" />
  </PageTemplateProviders&gt </Composite.Core.PageTemplates.Plugins.PageTemplateProviderConfiguration>

Поддержка эталонных страниц

Вот пример того, как типичный шаблон на основе эталонных страниц будет выглядеть:

<%@ Master Language="C#" AutoEventWireup="true" CodeFile="Simple.master.cs" Inherits="Simple" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title><c1:Title id="title" runat="server"/></title>
</head>

<body>
<div id="content">
   <c1:Placeholder  Content="<%# Content %>" runat="server" />
</div>
<div id="bottom">
        <c1:Placeholder Content="<%# Bottom %>" runat="server" />
</div>
</body>
</html>

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Composite.Plugins.PageTemplates.MasterPages;
using Composite.Core.Xml;
using Composite.Core.PageTemplates;

public partial class Simple : MasterPagePageTemplate
{
    public override Guid TemplateId
    {
        get { return new  Guid("54d5a744-c31e-422d-8885-acd96721a351"); }
    }

    [Placeholder(Title="Main Content" , IsDefault=true)]
    public XhtmlDocument Content { get; set; }

    [Placeholder(Title = "Bottom")]
    public XhtmlDocument Bottom { get; set; }

    protected void  Page_Load(object sender, EventArgs e)
    {
    }
}

В отличие от шаблонов страниц на основе XML, которые использовались раньше, идентификатор шаблона (TemplateId) определяется внутри самого шаблона. Таким образом, данные, связанные с шаблоном теперь не хранятся в системе данных Composite C1 CMS.

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

Шаблон страниц на основе эталонных страниц теперь можно редактировать в "админке" Composite C1, причем, при сохранении такого шаблона будет происходить проверка на ошибки компиляции. Благодаря этому, быстро сохранить изменения, даже если под рукой нет Visual Studio, будет безопасно. 

Шаблон страниц на основе эталонных страниц (Master Pages)


Шаблоны страниц на основе Razor-страниц

Имея преимущества, подрбные использованию эталонных старниц, отдельный Razor-файл () тоже может использоваться для определения шаблона страницы.

@inherits RazorPageTemplate
         
@functions {
    override public Guid TemplateId
    {
        get { return new Guid("54b36b99-91c8-4680-99ae-c0f45ccde11b"); }
    }
    override public string TemplateTitle
    {
        get { return "Example Razor template"; }
    }
    [Placeholder(Title="Content", IsDefault=true)]
    public XhtmlDocument Content { get; set; }
    [Placeholder(Title="Bottom")]
    public XhtmlDocument Bottom { get; set; }  
}

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://www.composite.net/ns/function/1.0" xmlns:lang="http://www.composite.net/ns/localization/1.0" xmlns:rendering="http://www.composite.net/ns/rendering/1.0" xmlns:asp="http://www.composite.net/ns/asp.net/controls">

    <f:function name="Composite.Web.Html.Template.LangAttribute" />

    <head></head>

    <body>
        <h1> Razor template </h1>
        <h2>Content Placeholder</h2>
        <div>
            @Placeholder(Content)
        </div>
        <h2>Bottom Placeholder</h2>
        <div>
            @Placeholder(Bottom)
        </div>
    </body>
</html>

Razor-функции

Полюбившиеся многим участникам сообщества Composite C1 CMS и унаследованные из проекта CompositeC1Contrib  Razor-функции заняли свое место в разделе "Функции".


Razor-функции


Функции на основе элементов управления ASP.NET

Этот давно запрашиваемый функционал дает вам возможность быстро превратить ваши существующие элементы управления ASCX  в стандартные C1-функции. Это достигается благодаря наследованию от  Composite.AspNet.UserControl и размещению этих  элементов в папке  /App_Data/UserControls.

Функции на основе пользовательских элементов управления ASP.NET (User Controls)


Свои отзывы и предложения можно оставить на нашем форуме.

Испытать новый функицонал можно, либо загрузив исходники бета-версии Composite C1 4.0, либо установив последнюю сборку через  Web Platform Installer

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

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