2

我们可以根据结构组有不同的发布目标,那么如果我们在我的出版物[07全球英语]中有两个结构组如下:

1) My Website
2) My Mobile

因此,每当用户尝试从“我的网站”发布页面/结构组时,他可以看到发布目标“Webiste LIVE”和“网站登台”,但是如果他尝试从“我的手机”结构组发布同一用户,他不会看到上面的发布目标,他会得到“Mobile - LIVE”和“Mobile - Staging”。

请建议上述情况是否可能

谢谢。

此致,

多发性硬化症

4

3 回答 3

3

我强烈建议在默认网站旁边为移动网站创建同级出版物。然后,您无需模仿内容管理器的功能,尤其是开箱即用的标准蓝图。

于 2012-07-19T07:02:56.107 回答
2

我同意 Arjen 的观点,您描述的场景应该通过单独的 Publication 和 BluePrinting 来解决,而不是尝试破解 Publishing Security 模型并将其应用于结构组而不是 Publications(因为它是设计的)。

但在 Rob 关于尝试基于结构组隐藏非相关目标的 UI 扩展的答案旁边,我认为唯一的其他选择是编写一个自定义解析器,该解析器将从发布事务中删除项目。

现在,如果我没记错的话,在 SDL Tridion 2009 中已经可以使用自定义解析器,但出于安全原因,我将仅针对 SDL Tridion 2011 指出此解决方案(我知道该解决方案有效)。

自定义解析器是一个IResolver通过方法实现接口的类Resolve(),删除项目的解析器的一些示例代码如下:

public void Resolve(IdentifiableObject item, ResolveInstruction instruction, PublishContext context, Tridion.Collections.ISet<ResolvedItem> resolvedItems)
{
   List<ResolvedItem> itemsToRemove = new List<ResolvedItem>();
   foreach (ResolvedItem resolvedItem in resolvedItems)
   {
      // check if resolved item belongs here
      if (MyResolvedItemCheck(resolvedItem.Item.Id))
      {
         itemsToRemove.Add(resolvedItem);
      }
   }
   // remove all items that we need to discard
   foreach (ResolvedItem itemToRemove in itemsToRemove)
   {
      resolvedItems.Remove(itemToRemove);
   }
}

请注意,尽管解析器代码可能比 UI 扩展更容易编写且成本更低,但我仍然认为它比使用 Publications 和 BluePrinting 成本更高(即使您当前的 SDL Tridion 许可证包含 Blueprint 限制你已经达到了)。您将不得不在MyResolvedItemCheck()方法中进行一些编码,并且根据发布者选择的目标,您最终可能会以这种方式获得空的发布事务和编辑器的不明确性。

于 2012-07-19T08:35:23.117 回答
1

我相信您只能在出版物上设置出版物目标(比我更有经验的人可能会说其他)。

但是,您可以将所有 4 个目标添加到发布中,并编写一个扩展,根据父结构组的 TCM ID 是否与为移动/网站配置的 ID 匹配来隐藏目标。不过,这将是一个 hack,我不会推荐它。

于 2012-07-19T05:56:47.283 回答