9

我们使用的是 SDL Tridion 2009 SP1。我们已经实现了一项新功能,即 CMS 中的一个扩展,它允许我们锁定页面。如果页面被锁定,则无法再发布(锁定页面的信息保存在为此扩展创建的数据库中)。

我们想添加一个新图标,它将通知用户页面的新状态。

现在有 4 个图标组合(无操作、已检查、已发布、已检查和已发布)

由于我没有长期使用 CMS 界面的经验,因此我需要一些帮助来找到对性能没有影响的解决方案,并且在不进行大量修改的情况下易于实施。

以下是我对此的调查:

我注意到在 cms 中呈现图标的方式并不是一个可以轻松更新的简单机制。每次我们单击 CMS 左侧的项目时,为了从右侧呈现列表,都会对 WebGUIResponder.aspx 进行 ajax 调用(带有 xml 请求)。页。

我们将得到的响应是一个包含属性字段 Icon 的 xml

<tcm:ListItems xmlns:tcm="http://www.tridion.com/ContentManager/5.0" 
    ID="tcm:yyy-zzzz-4" Managed="68" ItemType="4">
    <tcm:Item ID="tcm:yyy-zzzzz-64" Type="64" Title="NotificationTest" 
        Modified="2011-05-09T09:42:27" FromPub="400 YYYY Website Master (EN-GB)" 
        IsNew="false" Icon="T64L0P1"/>
</tcm:ListItems>

基于此字段图标属性 (Icon="T64L0P1) 开始处理图像名称。

  • T64 = 表示它是一个页面
  • L0 = 未检查
  • P1 = 已经发布

对于此类字段,图像名称结果将为 = T64.16x16.List.Published.gif

我找不到通过页面 xml 更新此字段的方法,不是保存在 xml 中的信息,而是在 xml 请求时在 dll 中构建的。(在某处基于其他字段,例如已发布以及此图标字段的其他内容。)

因此,如果无法修改此字段,我们可能有的选项是:为了在不修改其 .dll 的情况下将我们的更改集成到 CMS 中(为了与新版本的 SDL Trdion 兼容,在dll),并且没有改变我对这种方法的考虑太多的逻辑。

我们可以对新页面 WebGUICheckPageLocked.aspx 进行新的 Ajax 调用(需要测试对性能有什么影响)。在这个页面后面的代码中,我们可以确定页面是否被锁定(使用我们的内部函数来确定页面是否被锁定,这个功能已经完成)。在页面中,我们将图标字段更改为 T64L0P1E01(添加一些额外的信息,使我们能够确定页面的新状态)。我们还将修改在 GetPNGIconName javascript 函数中,然后我们可以根据新信息 E01 进行额外检查 ...)

请如果有人对此有更好的想法,也许这很容易做到,也许这是我们可以更新图标字段的一种方式。

亲切的问候,克里斯蒂娜

4

1 回答 1

5

我将在此处粘贴论坛中的答案,以便每个人都可以看到(并且可能会提出如何以不同方式进行操作的想法?)...

在 2011 年,我会使用 Data Extender 来更改图标。

由于这是 2009 年,您将需要使用不太优雅的前身:GUI Responder Extension。本质上,您需要操作为相关请求返回的 XML(例如文件夹上的 GetList)。

我无法立即找到任何关于此的文档 - 这并不奇怪,因为它是旧版本。但归结为:

  1. 创建一个 .NET 程序集,其中包含具有以下方法签名和属性的类:
    [ResponseMessageHandler]
    public XmlDocument HandleMessage(XmlDocument messageXml, string userName, HttpContext httpContext, object tcmSession)
  1. 在该方法中,您可以根据自己的逻辑更改 XML 中的图标集。
  2. 在扩展配置文件中,添加一个部分以挂钩到您关心的列表的响应(用您添加的程序集的名称替换“YourResponderExtension.dll”):
<ProcessResponse>
    <!-- GetList -->
    <ExecuteWhen>/tcmapi:Message/tcmapi:Response/tcmapi:Request/tcmapi:GetList</ExecuteWhen>                                                                                    

    <!-- Handler for all of the above -->
    <Execute>/bin/YourResponderExtension.dll</Execute>
</ProcessResponse>
  1. 在适用的情况下添加更多元素 - 并使 XPath 查询尽可能具体,以避免不必要地调用您的扩展。您可能还需要检查 .NET 代码中无法使用 XPath 查询执行的更多情况。
  2. 压缩您的扩展并使用 TcmExtensionInstaller.exe 部署它。

从您的文字中,我假设您已经在 2009 年研究了如何创建和打包扩展。我希望这些小步骤可以帮助您入门。

如果您有任何问题或后续问题,请告诉我,我会看看是否可以回答。

于 2012-05-03T08:24:43.883 回答