2012-05-04 47 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文档。我认为马克已经指出了用于渲染整个文档的管道。 –