2012-05-04 67 views
2

首先,總體說明:Tridion 2009 - 從組件模板發佈另一個組件

有兩個組件模板,NewsArticle和NewsList。 NewsArticle是Dreamweaver模板,用於顯示新聞文章的內容。 NewsList是一個xml文件,其中包含有關所有新聞文章的彙總信息。

目前,內容作者必須發佈新聞文章,然後重新發布新聞列表以重新生成xml。

問題:

我一直負責爲新聞文章的發佈也重新生成和發佈的新聞列表。通過C#,我能夠檢索newslist組件的內容,從新聞文章中生成更新的xml,並將它合併到新聞列表中的xml中。我遇到麻煩讓新聞列表發佈。

我不得不文檔的機會有限,但是從我有,我相信使用靜態PublishEngine.Publish方法可以讓我做什麼,我需要。我相信第一個參數(項目)只是包含我更新的新聞列表的列表,而第二個參數是將RenderInstruction.RenderMode設置爲發佈的新PublishInstruction。我對發佈目標應該是什麼有點失落。

我在正確的軌道上嗎?如果是這樣,任何有關Publish方法調用的幫助都會被讚賞,如果沒有,有什麼建議嗎?

回答

5

你在正確的軌道在這裏與engine.Publish()方法:

PublishEngine.Publish(
    new IdentifiableObject[] { linkedComponent }, 
    engine.PublishingContext.PublishInstruction, 
    new List() { engine.PublishingContext.PublicationTarget }); 

你可以只重用模板的當前環境中PublishInstruction和目標。此示例顯示一個組件,但它也應該在頁面中工作。

有一點要記住的是,這是不可能的支持SDL Tridion 2011 SP1,因爲發佈操作是不允許開箱由於安全限制。我對這個位置http://www.tridiondeveloper.com/the-story-of-sdl-tridion-2011-custom-resolver-and-the-allowwriteoperationsintemplates-attribute

+0

完美,謝謝!我相信你會在Tridion網站上看到很多我。 –

+3

我會小心這種邏輯。說你的newslist.xml包含10篇文章。如果一次發佈全部10個,新聞列表頁面將被放入隊列10次。 這是什麼xml無論如何?如果只是創建所有新聞報道的列表,爲什麼不使用經紀人查詢?該列表將始終保持最新狀態,無需重新發布。 – Quirijn

6

像Quirijn建議的文章,經紀人查詢是最乾淨的方法。

在代理不可用的情況下(即僅用於靜態發佈模型),我通常從TBB生成新聞列表XML,將XML添加爲二進制文件,而不是開始發佈其他組件或頁面。你可以在你的C#TBB調用此方法做到這一點:

engine.PublishingContext.RenderedItem.AddBinary(
    Stream yourXmlContentConvertedToMemoryStream, 
    string filename, 
    StructureGroup location, 
    string variantId, 
    string mimeType) 

讓每所創建的新聞列表XML文件variantId唯一的,這樣不同的組件可以覆蓋/更新相同的文件。

更重要的是,讓每個頁面生成新聞列表一次,而不是每個組件(如果你有每頁多篇文章)的頁面模板,而不是組件模板做到這一點。

相關問題