В реализации, над которой я сейчас работаю, мы используем что-то вроде второго решения. Я добавил основную публикацию веб-сайта (в которой мы создаем все страницы) к цели публикации, которую мы используем для всех веб-сайтов, чтобы мы могли использовать публикацию для всех дочерних публикаций оттуда. Если он подходит к вашей модели, я бы предпочел этот вариант, так как он по-прежнему дает вам контроль над элементами путем локализации в дочерних публикациях.
Поскольку нам не хотелось, чтобы контент отображался в основной публикации веб-сайта (поскольку это никуда не денется и будет пустой тратой времени моего издателя на процессинг, а также тратой хранилища брокера при его развертывании ), мы создали ChildOnlyPublicationResolver (SDL Tridion 2011). В этом преобразователе мы перебираем все разрешенные элементы, и если элемент поступает из основной публикации веб-сайта, мы удаляем его из списка.
В результате вы увидите, что основная публикация веб-сайта появится в очереди публикации, но она будет установлена почти мгновенно, так как в ней нечего визуализировать. Поэтому он не требует от издателя никакой производительности и не развертывается, но вы сохраняете преимущества своих дочерних публикаций и имеете простой способ их публикации за один раз.
Если интересно, вот пример для кода решателя:
using System.Collections.Generic;
using Tridion.ContentManager;
using Tridion.ContentManager.Publishing;
using Tridion.ContentManager.Publishing.Resolving;
namespace SDL.Example.Resolvers
{
public class ChildOnlyPublicationResolver : IResolver
{
/// <summary>
/// Master Publication TCMURI
/// </summary>
private const string MasterPublicationTcmUri = "tcm:0-2-1";
/// <summary>
/// For publish and unpublish, remove all items from the master publication from the list.
/// </summary>
/// <param name="item">Item to be resolved (e.g. a page, structure group, template)</param>
/// <param name="instruction">Resolve instruction</param>
/// <param name="context">Publish context</param>
/// <param name="resolvedItems">List of items that are currently to be rendered and published (added by previous resolvers in the chain)</param>
public void Resolve(IdentifiableObject item, ResolveInstruction instruction, PublishContext context, Tridion.Collections.ISet<ResolvedItem> resolvedItems)
{
List<ResolvedItem> itemsToRemove = new List<ResolvedItem>();
TcmUri masterPublicationUri = new TcmUri(MasterPublicationTcmUri);
// check for items from master publication (these do not need to be published or unpublished)
foreach (ResolvedItem resolvedItem in resolvedItems)
{
// mark all items from website structure publication for removal
if (resolvedItem.Item.Id.PublicationId == masterPublicationUri.ItemId)
{
itemsToRemove.Add(resolvedItem);
}
}
// remove all items that we need to discard
foreach (ResolvedItem itemToRemove in itemsToRemove)
{
resolvedItems.Remove(itemToRemove);
}
}
}
}