sitecore-- как получить все элементы публикации по коду при публикации каталога - PullRequest
1 голос
/ 16 февраля 2011

Как получить все элементы публикации по коду при публикации каталога и к какому событию я должен добавить свой обработчик, publish:begin или publish:itemProcessing?

Ответы [ 2 ]

2 голосов
/ 02 июня 2011

Если вы хотите настроить собственный обработчик событий, начните со ссылки web.config.

<event name="publish:begin">
    <handler type="YourNamespace.YourClass, YourLibrary" method="YourHandlerMethod" />
</event>

Затем создайте класс, который будет поддерживать эту ссылку.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using Sitecore.Diagnostics;
using Sitecore.Sites;
using Sitecore.Configuration;
using Sitecore.Caching;
using Sitecore.Events;
using Sitecore.Publishing;
using Sitecore.Data.Events;
using Sitecore.Data;
using Sitecore.Data.Items;

namespace YourNamespace {
public class YourClass {
        public void YourHandlerMethod(object sender, EventArgs args) {
            Assert.ArgumentNotNull(sender, "sender");
            Assert.ArgumentNotNull(args, "args");

            //try to get the sitecore event args
            if (args.GetType().ToString().Equals("Sitecore.Events.SitecoreEventArgs")) {
                SitecoreEventArgs sargs = (SitecoreEventArgs)args;
                foreach (object o in sargs.Parameters) {
                    //try to get the publisher object
                    if (o.GetType().ToString().Equals("Sitecore.Publishing.Publisher")) {
                        Publisher p = (Publisher)o;
                        if (p != null) {
                            Item root = p.Options.RootItem;
                            bool b = p.Options.RepublishAll;
                            if(p.Options.Mode.Equals(PublishMode.SingleItem)){
                                //only one item published
                            }
                        }
                    }
                }
            }
        }
    }
}

Из этого класса вы можете попытаться получить доступ к объекту издателя, который предоставит вам опубликованный корневой элемент и опцию публикации.Параметры публикации сообщат вам, был ли опубликован какой-либо один элемент или были ли опубликованы все версии языков.

1 голос
/ 17 февраля 2011

В зависимости от ваших реальных потребностей, возможно, имеет смысл внедрить пользовательский процессор в конвейер publishItem, а не использовать событие publish:itemProcessing. Если вы внимательно посмотрите на этот конвейер (поиск "<publishItem") в web.config, вы увидите, что эти события (publish:itemProcessing и publish:itemProcessed) генерируются соответствующими процессорами конвейера.

ПРИМЕЧАНИЕ: процесс публикации довольно сложен, и я бы не рекомендовал делать с опубликованным элементом что-либо, что могло бы повлиять на процесс в целом. Я не могу привести вам пример - только ваша фантазия устанавливает пределы ...

Обратите внимание, что с этими событиями, а также с конвейером, который я упомянул, вы работаете с 1 элементом за раз - он будет вызываться для каждого публикуемого элемента. Это может стать критичным для производительности ...

ОБНОВЛЕНИЕ : Подробнее о конвейере можно прочитать в этом сообщении в блоге . Помимо того, что он сам по себе полезен, он содержит больше полезных ссылок на эту тему.

...