gpt4 book ai didi

tridion - 如何在 Experience Manager 中限制给定页面类型的内容类型

转载 作者:行者123 更新时间:2023-12-04 15:24:27 27 4
gpt4 key购买 nike

Experience Manager (XPM)(SDL Tridion 2011 SP1 的用户界面更新)允许管理员创建页面类型,其具有与页面一样的组件演示,但还可以添加有关如何创建和允许其他内容类型的规则。

对于给定的页面类型,我想通过限制内容类型选择来简化作者的选项。

我明白我们可以:

  • 限制内容类型 ,这样对于给定的页面类型作者只能创建某些 predefined content types
  • 在仪表板中,将上述内容完全限制为仅预定义的内容类型 , 通过取消选择 Content Types Already Used on the Page
  • 使用 regions指定模式和模板的组合 以及数量限制。作者只能向这些区域添加(拖放)某些类型和数量的组件。例如,我们可以在 Staging 上输出以下内容创建区域:

  • <div>
    <!-- Start Region: {
    title: "Promos",
    allowedComponentTypes: [
    {
    schema: "tcm:2-42-8",
    template: "tcm:2-43-32"
    },
    ],
    minOccurs: 1,
    maxOccurs: 3
    } -->
    <!-- place the matching CPs here with template logic (e.g. TemplateBeginRepeat/ TemplateBeginIf with DWT) -->
    </div>
  • 作者可能仍会看到他们可能想要插入的组件(下图),但如果区域控制允许的内容,则无法添加它们
  • 但是,文件夹权限会减少作者在插入内容库中可以看到/使用的组件

  • Insert Content

    我都收到了吗? XPM 功能或可能的扩展中的任何其他方式来考虑如何限制给定页面类型的允许内容?

    最佳答案

    阿尔文,您几乎提供了问题中的大部分选项。另一种选择是,如果需要自定义错误消息或更精细的控制级别,则使用事件系统。订阅页面的保存事件启动阶段并编写一些验证代码,如果页面上有不需要的组件呈现,则抛出异常。

    由于页面类型实际上是页面模板、页面上的任何元数据和页面上组件表示类型的组合,我们需要检查我们是否正在处理所需的页面类型,如果遇到不匹配我们想要的,我们可以简单地抛出异常。这是一些快速代码:

    [TcmExtension("Page Save Events")]
    public class PageSaveEvents : TcmExtension
    {
    public PageSaveEvents()
    {
    EventSystem.Subscribe<Page, SaveEventArgs>(ValidateAllowedContentTypes, EventPhases.Initiated);
    }

    public void ValidateAllowedContentTypes(Page p, SaveEventArgs args, EventPhases phases)
    {
    if (p.PageTemplate.Title != "My allowed page template" && p.MetadataSchema.Title != "My allowed page metadata schema")
    {
    if (!ValidateAllowedContentTypes(p))
    {
    throw new Exception("Content Type not allowed on a page of this type.");
    }
    }
    }

    private bool ValidateAllowedContentTypes(Page p)
    {
    string ALLOWED_SCHEMAS = "My Allowed Schema A; My Allowed Schema B; My Allowed Schema C; etc"; //to-do put these in a parameter schema on the page template
    string ALLOWED_COMPONENT_TEMPLATES = "My Allowed Template 1; My Allowed Template 2; My Allowed Template 3; etc"; //to-do put these in a parameter schema on the page template

    bool ok = true;
    foreach (ComponentPresentation cp in p.ComponentPresentations)
    {
    if (!(ALLOWED_SCHEMAS.Contains(cp.Component.Schema.Title) && ALLOWED_COMPONENT_TEMPLATES.Contains(cp.ComponentTemplate.Title)))
    {
    ok = false;
    break;
    }
    }

    return ok;
    }
    }

    关于tridion - 如何在 Experience Manager 中限制给定页面类型的内容类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14493827/

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