分页小部件在Typo3中使用Ajax加载时会中断布局

时间:2018-09-06 11:27:12

标签: ajax typo3 fluid typo3-7.6.x typo3-extensions

在使用file-loader的分页小部件时遇到了一个问题。我正在做的是,选择类​​别,然后通过在模板中加载数据并返回opacity:0.0000000001来命中一个ajax请求以获取相应的列表,如下所示:

ajax

在我的html控制器中,我只是在做

<f:if condition="{articles}"> <f:then> <f:widget.paginate objects="{articles}" as="paginatedArticles" configuration="{itemsPerPage: numberOfRecords}"> <f:for each="{paginatedArticles}" as="article"> <h2> <f:link.action action="show" arguments="{article : article}"> {article.title}</f:link.action> </h2> <p> <f:format.html>{article.description}</f:format.html> </p> <hr/> </f:for> </f:widget.paginate> </f:then> <f:else> No Records Found </f:else> ,以便使用我的结果加载模板。

但是现在渲染ajax之后,如果我使用分页,视图就会中断。没有样式,标题或其他任何内容。

当我单击分页小部件的下一个时,它是这样显示的:http://prntscr.com/kr8vg0

为了完整起见,这里是我写的称为ajaxMethod的ajax。

$this->view->assign('articles', $result);

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

用于驱动(应驱动)小部件的XHR请求的typeNum是从Fluid扩展中添加的,不需要您添加特殊的PAGE对象。

即使您以某种方式进行了覆盖调用您的特定控制器操作,也可能无法正确处理。通常,您永远不会引用内容元素实例,而是直接使用Extbase请求进行引导。除其他外,因为渲染内容对象会增加包装器。

因此,您应该删除它,并确保将QueryResult传递给分页小部件。然后根据需要覆盖小部件模板。其余的应该无需配置TS即可工作。

编辑:

在通过XHR呈现的模板中使用的分页小部件本身意味着它会传递用于加载XHR的参数-包括自定义typeNum值。然后,该小部件会创建您单击正常的标准链接-它们将是指向XHR响应的“内部内容”的链接,因为URL包含类型编号。

问题就在这里:添加此typeNum后,您将无法删除它。因此,您将不得不导致单击下一个/上一个等链接,从而导致一个新的XHR请求加载内容(您的操作方式很大程度上取决于您的JS应用程序,因此无法在那里指导您)。 / p>

我对确保QueryResult不相关的评论,除非您的页面没有变化,例如,您始终看到项目1-10。

但是为了解决这个问题,我实际上建议您不要使用分页小部件。主要原因是您已经在XHR上下文中,该上下文使您可以接收控制器动作的参数,并可以在控制器动作中操纵查询的offsetlimit部分。这意味着您不仅可以生成到小部件的链接,还可以生成到控制器动作的链接,例如,将CSS类放在应该触发XHR请求的链接和应该重新加载整个页面的链接上(例如,显示详细视图) 。您可以避免覆盖分页模板,并控制所有链接的所有参数。

实际上,无论是否使用XHR,我都希望使用分页小部件为上述offset提供一个控制器参数。有很多技术上的原因,为什么我不在这里列出,但足以说明这一点,因为必须创建单个参数而交易很多“黑匣子”是一件非常合理且可预测的事情。 >