Sitecore 6.5 Повторная публикация перезаписанных элементов мультимедиа, настроенных на автоматическую публикацию
Мы используем Sitecore 6.5, и наш сайт настроен на автоматическую публикацию медиафайлов с помощью этого руководства. Все элементы мультимедиа используют настраиваемый рабочий процесс, для которого по умолчанию установлено состояние "Публикация", что является последним шагом рабочего процесса и для которого настроена автоматическая публикация. Он прекрасно работает, и это действительно уменьшило путаницу наших веб-редакторов.
Проблема: если редактор перезаписывает элемент мультимедиа (например, устаревший файл PDF), новый элемент не публикуется автоматически. Веб-редакторы должны помнить, чтобы опубликовать перезаписанный элемент. У нас более 500 редакторов с разным уровнем опыта, поэтому эта проблема часто возникает. Кто-нибудь знает решение для этого?
3 ответа
Если автоматическая публикация всей библиотеки мультимедиа с помощью запланированной задачи или агента отсутствует, вы можете подключиться к Sitecore. item:saved
событие (подробнее о событиях здесь).
Когда происходит это событие, вы можете определить, является ли сохраняемый элемент медиа-элементом, используя item.Paths.IsMediaItem
и, если это так, программно опубликовать элемент (или) вызвать желаемое состояние рабочего процесса.
Это то, что я придумал, основываясь на ответе Дерека, но так как я новичок в разработке Sitecore, имею ли я это право?
Добавить событие обработки в web.config
<event name="item:saved">
<handler type="SomeNamespace.MediaOverwritePublisher, SomeAssembly" method="OnItemSaved" />
</event>
И тогда в сборке в нашей пользовательской папке я бы добавил:
namespace SomeNamespace
{
public class MediaOverwritePublisher
{
public void OnItemSaved(Object sender, EventArgs args)
{
var item = Event.ExtractParameter(args, 0) as Item;
using (new SecurityDisabler())
{
if (item != null)
{
if (item.Paths.IsMediaItem)
{
var source = Factory.GetDatabase("master");;
var target = Factory.GetDatabase("web");;
var options = new PublishOptions(source, target, PublishMode.SingleItem, item.Language, DateTime.Now)
{
RootItem = item,
Deep = true,
};
var publisher = new Publisher(options);
publisher.PublishAsync();
}
}
}
}
}
}
Это то, что я придумал, основываясь на ответе Дерека.
Я бы посоветовал вам использовать второй предложенный вариант Дерека, чтобы запустить рабочий процесс. Поскольку у вас уже настроен рабочий процесс, вам нужно всего лишь перевести элемент в состояние, в котором есть действие автоматической публикации.
Это должно помочь вам начать: Sitecore: назначить рабочий процесс элементу программно
Если вы все еще хотите опубликовать, я бы посоветовал получить целевую базу данных от sitecore, если у вас больше, чем в "сети" или имя переименовано.
Item itemNotNull = Client.GetItemNotNull("/sitecore/system/publishing targets");
ArrayList arrayList = new ArrayList();
ChildList children = itemNotNull.Children;
foreach (Item item in children)
{
string name = item["Target database"];
Database database = Factory.GetDatabase(name, false);
if (database != null)
…
}