2012-10-29 4 views
4

[Изменить] Мне действительно разрешили использовать имена документов, что делает его намного проще, но я все же думаю, что было бы интересно узнать, возможно ли это.Дублирование контента для сохранения многоязычного сайта umbraco

Я должен установить триггер для дублирования контента для разных ветвей в дереве контента, поскольку сайт будет на нескольких языках. Мне сказали, что я не могу получить доступ к документам по имени (поскольку они могут меняться), и я не должен использовать идентификаторы узлов (не то, что я знаю, как это сделать, через какое-то время будет сложно следовать структуре).

Как я могу пройти дерево, чтобы вставить новый документ в соответствующие ветви на других языках? Есть ли способ?

ответ

3

Вы можете использовать событие Document.AfterPublish, чтобы поймать конкретный объект документа после его публикации. Я бы использовал этот обработчик событий для проверки псевдонима типа узла, который вы хотите скопировать, затем вы можете вызвать Document.MakeNew и передать идентификатор узла нового местоположения. Это означает, что вам не нужно использовать определенный идентификатор узла или имя документа для захвата события.

Пример:

using umbraco.cms.businesslogic.web; 
using umbraco.cms.businesslogic; 
using umbraco.BusinessLogic; 

namespace MyWebsite { 
    public class MyApp : ApplicationBase { 
     public MyApp() 
      : base() { 
      Document.AfterPublish += new Document.PublishEventHandler(Document_AfterPublish); 
     } 

     void Document_AfterPublish(Document sender, PublishEventArgs e) { 
      if (sender.ContentType.Alias == "DoctypeAliasOfDocumentYouWantToCopy") { 
       int parentId = 0; // Change to the ID of where you want to create this document as a child. 
       Document d = Document.MakeNew("Name of new document", DocumentType.GetByAlias(sender.ContentType.Alias), User.GetUser(1), parentId) 
       foreach (var prop in sender.GenericProperties) { 
        d.getProperty(prop.PropertyType.Alias).Value = sender.getProperty(prop.PropertyType.Alias).Value; 
       } 
       d.Save(); 
       d.Publish(User.GetUser(1)); 
      } 
     } 
    } 
} 
+0

Большое спасибо. Я действительно отсортировал его с помощью Document.New, так как не нужно было публиковать сразу. Говоря это, ваш гораздо более краткий. –

+0

И на самом деле поможет с другой частью, так что спасибо за двойную благодарность. –

Смежные вопросы