我们可以在结构组的基础上有不同的发布目标,所以如果我的出版物[07 Global English]中有两个结构组,如下所示:
1) My Website
2) My Mobile
因此,每当用户尝试从“我的网站”发布页面/结构组时,他可以看到发布目标“Webiste LIVE”和“Website Staging”,但是如果他尝试从“我的移动”结构组发布,则可以看到相同的用户他不会看到上述出版物的目标,而是会得到“移动 - 现场”和“移动 - 舞台”。
请提出以上情况是否可行
感谢。
最诚挚的问候,
MS
答案 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匹配来编写隐藏目标的扩展。这将是一个黑客,我不会推荐它。