2012-10-29 3 views
4

[Modifier] J'ai effectivement été autorisé à utiliser les noms de doc, ce qui le rend beaucoup plus facile mais je pense toujours qu'il serait intéressant de savoir si c'est possible.Dupliquer le contenu d'enregistrer pour un site parapluie multilingue

Je dois définir un déclencheur pour dupliquer le contenu vers différentes branches de l'arborescence de contenu car le site sera en plusieurs langues. On m'a dit que je ne peux pas accéder aux documents par nom (car ils peuvent changer) et je ne devrais pas utiliser les identifiants de nœud non plus (pas que je saurais comment, après un certain temps, il deviendrait difficile de suivre la structure).

Comment puis-je parcourir l'arborescence pour insérer le nouveau document dans les sous-branches pertinentes dans les autres langues? Y a-t-il un moyen?

Répondre

3

Vous pouvez utiliser l'événement Document.AfterPublish pour capturer l'objet de document spécifique après sa publication. J'utiliserais ce gestionnaire d'événements pour vérifier que l'alias de type de nœud est celui que vous voulez copier, alors vous pouvez appeler Document.MakeNew et passer l'ID de nœud du nouvel emplacement. Cela signifie que vous n'avez pas besoin d'utiliser un ID de noeud ou un nom de document spécifique pour intercepter un événement.

Exemple:

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

Merci beaucoup. Je l'ai fait trier en utilisant Document.New, car il n'était pas nécessaire de publier à la fois. En disant cela, le tien est beaucoup plus succinct. –

+0

Et en fait va aider avec une autre partie, donc double merci compagnon. –