我可以使用Tridion XM / New UI / 2012 UI进行灵活/捕获区域

时间:2012-10-16 15:11:52

标签: tridion tridion-2011

我正在为一个网站整理功能设计,目的是使用Tridion 2012 UI / XM来管理网页。页面上有2个区域,左侧是主要内容区域,右侧是侧栏。理想情况下,用户应该能够将内容拖放到这些区域内和内部。在一个理想的世界里,我想按照

的方式定义区域
  • 侧栏:CT中的文字“正确”的任何CP。
  • 主要:所有其他CP

查看documentation,您似乎需要明确使用CT /模式ID对来定义区域。有没有可能以任何其他方式做到这一点?

至少我希望能够定义侧栏允许一组固定的CT /模式ID对,但是将主区域作为一个捕获桶。这可能吗?

侧栏也可能分为广告上方和下方的2个区域。两个地区应该允许相同类型的CP - 据我所知这是不可能的 - 这是正确的吗?有没有解决方法的想法?

2 个答案:

答案 0 :(得分:5)

要配置采用所有内容类型的区域,您需要获取Publication AppData并循环遍历内容类型并构建您的json标记以启用此功能。您可以编写C#TBB,其中包含每个页面模板并执行此逻辑,您可以在CT级别定义一些元数据,确定它将进入哪个区域并构建Region JSON标记。

以下是要在一个区域中添加所有组件类型的代码段。您可以通过检查模板名称来更改逻辑以使其正确。

 // get the publication from the engine -- using TemplateBase Util..

    Publication thisPub = GetPublication();

    XmlElement seAppdata = thisPub.LoadApplicationData("SiteEdit").GetAs<XmlElement>();

    XmlNamespaceManager seNsMgr = new XmlNamespaceManager(new NameTable());
    seNsMgr.AddNamespace("se", "http://www.sdltridion.com/2011/SiteEdit");
    seNsMgr.AddNamespace("xlink", "http://www.w3.org/1999/xlink");

    XmlNodeList contentTypes = (XmlNodeList)seAppdata.SelectNodes("//se:ContentTypes/se:ContentType", seNsMgr); 

    List<String> contentTypeJson = new List<String>();
    foreach (XmlNode contentType in contentTypes)
    {
        string templateId = contentType.SelectSingleNode("se:ComponentTemplate/@xlink:href", seNsMgr).Value;
        string componentId = contentType.SelectSingleNode("se:Component/@xlink:href", seNsMgr).Value;

        Component thisSchema = (Component)engine.GetObject(componentId);
        string schemaId = thisSchema.Schema.Id;

        // Add json formated string for Content Types
        contentTypeJson.Add(string.Format("{{schema: \"{0}\", template: \"{1}\"}}", schemaId, templateId));
    }

    // Final Markup - JSON
     String allRegionSeText = string.Format("<!-- Start Region: {{title: \"All Region\",  allowedComponentTypes: [{0}],  minOccurs: 1,  maxOccurs: 5 }} -->", string.Join(",", contentTypeJson.ToArray()));

     // Push to the package to use in DWT..
     package.PushItem("ALL_REGION", package.CreateStringItem(ContentType.Text, allRegionSeText));

希望这有帮助。

答案 1 :(得分:1)

您是否尝试过创建区域而未指定CT / Schema对?我记得在早期的实现中看到你可以在任何地方删除内容类型,因为区域没有正确配置(或者可能根本没有)。