6

[編集] 私は実際にドキュメント名を使用することを許可されています。

サイトが複数の言語で表示されるため、コンテンツ ツリーの別のブランチにコンテンツを複製するトリガーを設定する必要があります。名前でドキュメントにアクセスすることはできず (変更される可能性があるため)、ノード ID も使用しないように言われました (方法を知っているわけではありませんが、しばらくすると構造をたどるのが難しくなります)。

ツリーをたどって、他の言語の関連するサブブランチに新しいドキュメントを挿入するにはどうすればよいですか? 方法はありますか?

4

1 に答える 1

4

Document.AfterPublish イベントを使用して、発行後に特定のドキュメント オブジェクトをキャッチできます。このイベント ハンドラーを使用して、ノード タイプのエイリアスがコピー対象であることを確認します。その後、Document.MakeNew を呼び出して、新しい場所のノード ID を渡すことができます。これは、イベントをトラップするために特定のノード ID またはドキュメント名を使用する必要がないことを意味します。

例:

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));
            }
        }
    }
}
于 2012-11-09T15:35:33.460 に答える