我们是否可以在Tridion 2009中根据结构组定义发布目标

时间:2012-07-19 05:51:28

标签: tridion tridion2009

我们可以在结构组的基础上有不同的发布目标,所以如果我的出版物[07 Global English]中有两个结构组,如下所示:

1) My Website
2) My Mobile

因此,每当用户尝试从“我的网站”发布页面/结构组时,他可以看到发布目标“Webiste LIVE”和“Website Staging”,但是如果他尝试从“我的移动”结构组发布,则可以看到相同的用户他不会看到上述出版物的目标,而是会得到“移动 - 现场”和“移动 - 舞台”。

请提出以上情况是否可行

感谢。

最诚挚的问候,

MS

3 个答案:

答案 0 :(得分:3)

我强烈建议在默认网站旁边为移动网站创建一个兄弟出版物。然后,您无需模仿内容管理器中的功能,特别是开箱即用的蓝图。

答案 1 :(得分:2)

我同意Arjen的观点,您描述的场景应该通过单独的Publication和BluePrinting解决,而不是试图破解Publishing Security模型并使其适用于Structure组而不是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许可包含您已达到的蓝图限制)。您将不得不在MyResolvedItemCheck()方法中进行相当多的编码,并且根据发布者选择的目标,您最终可能会以这种方式为编辑器发布空白的发布事务和不清晰。

答案 2 :(得分:1)

我相信你只能在出版物上设定出版物目标(比我更有经验的人可能会这样说)。

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