我们可以根据结构组有不同的发布目标,那么如果我们在我的出版物[07全球英语]中有两个结构组如下:
1) My Website
2) My Mobile
因此,每当用户尝试从“我的网站”发布页面/结构组时,他可以看到发布目标“Webiste LIVE”和“网站登台”,但是如果他尝试从“我的手机”结构组发布同一用户,他不会看到上面的发布目标,他会得到“Mobile - LIVE”和“Mobile - Staging”。
请建议上述情况是否可能
谢谢。
此致,
多发性硬化症
我们可以根据结构组有不同的发布目标,那么如果我们在我的出版物[07全球英语]中有两个结构组如下:
1) My Website
2) My Mobile
因此,每当用户尝试从“我的网站”发布页面/结构组时,他可以看到发布目标“Webiste LIVE”和“网站登台”,但是如果他尝试从“我的手机”结构组发布同一用户,他不会看到上面的发布目标,他会得到“Mobile - LIVE”和“Mobile - Staging”。
请建议上述情况是否可能
谢谢。
此致,
多发性硬化症
我强烈建议在默认网站旁边为移动网站创建同级出版物。然后,您无需模仿内容管理器的功能,尤其是开箱即用的标准蓝图。
我同意 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()
方法中进行一些编码,并且根据发布者选择的目标,您最终可能会以这种方式获得空的发布事务和编辑器的不明确性。
我相信您只能在出版物上设置出版物目标(比我更有经验的人可能会说其他)。
但是,您可以将所有 4 个目标添加到发布中,并编写一个扩展,根据父结构组的 TCM ID 是否与为移动/网站配置的 ID 匹配来隐藏目标。不过,这将是一个 hack,我不会推荐它。