2012-05-04 72 views
0

目前,我正在尋找在主「內容」部分之外創建頁面層次結構,以便將其與其他部分分開並與所有其他跨網站數據保持一致。我可以分配佈局,子佈局,並以我想要的方式獲取內容。攔截爲Sitecore中的頁面呈現HTML /運行時HTML

但是,我需要將內容作爲XHTML(目前非常簡單的XHTML)推送到iTextSharp & Html Tidy或同等功能。是否有一個管道或事件可以掛鉤,以便我可以獲取大部分頁面或全部頁面響應?

我注意到Sitecore.Layouts命名空間包括ConverterDesignTimeHtmlRuntimeHtml,其中引用了convertToRuntimeHtml管道,這似乎傳遞個的HTMLDocument後者。這些似乎是與所見即所得編輯器有關的管道。

如果沒有這樣的存在,會找到頁面上的所有控件,然後將它們呈現出來接近Sitecore將呈現的內容?

回答

1

我不知道你有你需要一個Sitecore的管道內的低級別的訪問權限來訪問System.Web.UI.Control的渲染HTML輸出,這是最終什麼sublayout歸結爲。我幾乎肯定沒有Sitecore管道會有整個渲染頁面。

從我看到的同時快速查看Reflector中,RenderLayout Sitecore管道將允許您修改該過程,因爲Sublayout Item與其用戶控件對應關聯。 RenderingReference然後被添加到Sitecore.Context.PageContext。然後Sitecore.Web.UI.WebControls.Placeholder負責獲取所有RenderingReferences並調用System.Web.UI.Control.RenderControl()方法。

由於Sitecore在你所有的子佈局中調用了System.Web.UI.Control.RenderControl(),並且基本上將輸出引發到瀏覽器,而沒有通過管道推送呈現的HTML,所以你可能想看看一個非Sitecore解決方案。

你可以覆蓋你的用戶控件上的所有Render(HtmlTextWriter writer)方法,但這是很多重複編碼(除非你有一個基本控件?)。您最好的選擇可能是在生成完整頁面並轉到客戶端後,使用ASP.NET HttpModule進行格式設置。這裏有一個例子 - http://madskristensen.net/post/A-whitespace-removal-HTTP-module-for-ASPNET-20.aspx

+0

仍然只有一年,嚴重的.Net網站開發,所以建議是偉大的!我會對此進行更多的研究。謝謝! – al3xnull

3

您可以在renderLayout管道中添加自定義處理器。我建議你真的只是爲各種管道創建一個處理器,並看看你可以訪問它們。一個簡單的方法是去編譯Sitecore.kernel.dll並查看kernel\Sitecore.Pipelines.{the pipeline name here}\{the pipeline name here}Args.cs中每個管道的管道參數對象。一旦調查了每個管道的參數對象,就可以幫助您瞭解哪些參數對象可以訪問您在C#中需要的內容。從那裏你可以測試該管道內的實現。

+0

偉大的建議馬克。我以前的目標是什麼,但我會繼續尋找能夠與之合作的東西。 – al3xnull

1

我最近做了這個,發現<convertToRuntimeHtml>管道沒有爲我工作。相反,我已將我的處理器添加到<renderField>管線中,該管線至少可用於sc:fld功能(因此也適用於<sc:text>標記)。

這是我的處理器的代碼:

public class ContentVariablesProcessor 
{ 
    public void Process(Sitecore.Pipelines.RenderField.RenderFieldArgs args) 
    { 
     if (args != null) 
     { 
      // Manipulate output 
      args.Result.FirstPart = "my output"; 
     } 
    } 
} 
+0

Ruud,我很抱歉,如果我錯過了某些明顯的東西,而且我明白你已經連接到了這個字段,但是當你通過每個控件/字段時是否傳遞了一個html文檔或者碎片?另外,你是否說你實際上沒有獲取響應html,因此不得不與每個單獨的領域一起工作? – al3xnull

+0

RenderField管道將在字段渲染時調用,所以不是完整的HTML文檔。我認爲馬克已經指出了用於渲染整個文檔的管道。 –