我的網站有這樣的結構:如何從層次結構轉型訪問文檔附件
Products
category 1
item 1
item 1 attachments
category 2
item 2
item 2 attachments
我已經成功地寫了一個層次轉變,顯示在頂層頁面上的數據。我不能爲我的生活弄清楚如何訪問每個文檔的附件。
任何人有什麼想法?
我的網站有這樣的結構:如何從層次結構轉型訪問文檔附件
Products
category 1
item 1
item 1 attachments
category 2
item 2
item 2 attachments
我已經成功地寫了一個層次轉變,顯示在頂層頁面上的數據。我不能爲我的生活弄清楚如何訪問每個文檔的附件。
任何人有什麼想法?
我想你是指你在屬性 - >附件部分添加的未分類的附件。在這種情況下宥可以按照你的轉換控制寄存器:
<%@ Register Src="~/CMSInlineControls/DocumentAttachments.ascx" TagName="DocumentAttachments" TagPrefix="cms" %>
而且使用這樣的:
<cms:DocumentAttachments ID="ucDocAttachments" runat="server" TransformationName="cms.root.attachment" Path='<%# Eval("NodeAliasPath") %>' />
如果你在談論集團的附件(這是當你在你的頁面有一個場鍵入使用附件數據類型),然後爲了訪問轉換中的附件,您需要編寫custom macro(使用文本/ XML轉換時)或custom transformation方法。兩者都可以很容易地完成。得到您的附件的代碼本身可以是這樣的:
public ObjectQuery<AttachmentInfo> GetAttachmentsFromField(string className, int documentID, string attachmentColumnName)
{
// get class info
var classInfo = new FormInfo(DataClassInfoProvider.GetDataClassInfo(className).ClassFormDefinition);
if (classInfo != null)
{
// get attachment field definition
var attachmentsField = classInfo.GetFormField(attachmentColumnName);
if (attachmentsField != null)
{
// get attachments strored in the field by GUID
var attachments = AttachmentInfoProvider.GetAttachments()
.WhereEquals("3CCC6E6C-56F3-42EB-8385-979973D99C55", attachmentsField.Guid)
.And()
.WhereEquals("AttachmentDocumentID", documentID);
return attachments;
}
}
return null;
}
有了這個是非常重要的考慮,該代碼引入了對數據庫的其他幾個SQL查詢,因此應當適當地利用緩存來優化。
我在這段時間寫了一個pretty detailed blog post。它描述了與Enn的答案非常相似的屬性,但詳細說明了爲什麼要做特定的事情。