gpt4 book ai didi

tridion - 我可以使用 Tridion XM/New UI/2012 UI 拥有灵活/catchall 区域吗

转载 作者:行者123 更新时间:2023-12-04 12:10:51 26 4
gpt4 key购买 nike

我正在整理一个网站的功能设计,旨在使用 Tridion 2012 UI/XM 来管理页面。页面上有 2 个区域,左侧是主要内容区域,右侧是侧边栏。理想情况下,用户应该能够将内容拖放到这些区域内。在理想的世界中,我想沿着以下路线定义区域

  • 侧边栏:CT 中包含文本“正确”的任何 CP。
  • 主要:所有其他 CP

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

    至少我希望能够定义侧边栏允许一组固定的 CT/Schema ID 对,但将主要区域作为一个笼子。这可能吗?

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

    最佳答案

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

    希望这可以帮助。

    关于tridion - 我可以使用 Tridion XM/New UI/2012 UI 拥有灵活/catchall 区域吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12917860/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com