【问题标题】:form framework in news detail view新闻详细视图中的表单框架
【发布时间】:2022-10-23 19:24:56
【问题描述】:

我试图在新闻详细信息视图中实现一个带有表单框架的表单。这里解释了基本的方法: https://docs.typo3.org/c/typo3/cms-form/10.4/en-us/I/Concepts/FrontendRendering/Index.html#render-within-your-own-extbase-extension

查看助手:

<formvh:render persistenceIdentifier="EXT:myext/Resources/Private/Forms/myforms.form.yaml"/>

表格定义:

renderingOptions:
  controllerAction: detailAction
  addQueryString: true
  submitButtonLabel: Absenden
  fluidAdditionalAttributes:
  class: ''
identifier: myForm
label: 'myLabel'
type: Form
prototypeName: myPrototype

显示表格。当我提交表单时,新闻详细信息视图会再次显示,包括表单,但它是空的。未处理该表单。有些东西不见了,但我在手册中找不到。

谢谢!

【问题讨论】:

    标签: typo3


    【解决方案1】:

    我认为重要的部分写在链接段落下面的注释中:

    通常,您可以在 TypoScript 的帮助下覆盖每个表单定义(请参阅“TypoScript 覆盖”)。当您通过 RenderViewHelper 呈现表单时,不支持此功能。

    幸运的是,有一个解决方案可以解决您的问题:改用“overrideConfiguration”参数。这样,您可以覆盖模板中的表单定义。提供一个相应的数组,如下例所示。

    <formvh:render persistenceIdentifier="EXT:my_site_package/Resources/Private/Forms/MyForm.yaml" overrideConfiguration="{renderables: {0: {renderables: {0: {label: 'My shiny new label'}}}}}"/>
    

    这意味着您可以通过 TypoScript 条件检查后变量并相应地调整 controllerAction(和视图)。 show / detail 操作通常不处理表单,因此必须分配另一个操作是合乎逻辑的。我目前不确定是否显示双重选择加入或确认页面是否重要,这可能取决于表单扩展。

    【讨论】:

    • 我不认为这是这里的问题。我可以直接在表单的 yaml 中定义控制器操作和查询字符串的处理。不需要覆盖配置。问题是:当我使用 detailAction 时,会显示新闻并且未处理表单。如果我使用 perform 我得到一个异常,因为新闻没有这个控制器。我认为不可能像手册中描述的那样在扩展中实现表单。一定是少了点什么……
    【解决方案2】:

    经过几个小时的试验,我能够解决这个问题。这只是缓存的问题......

    Georg 在 news 中实现了一个特殊的缓存引擎,它忽略了 setup 中的 config.no_cache = 1 定义。因此,即使整个安装设置为 config.no_cache = 1,新闻的详细视图也始终被缓存。所以这种组合似乎有效:

    Detail.html 中的 Viewhelper:

    <formvh:render persistenceIdentifier="EXT:myext/Resources/Private/Forms/myforms.form.yaml"/>
    

    并且在表单的 yaml 文件中定义了这个:

    renderingOptions:
      controllerAction: detail
      addQueryString: true
      submitButtonLabel: Absenden
      additionalParams: 
        no_cache: 1
    identifier: myForm
    label: 'myLabel'
    type: Form
    prototypeName: myPrototype
    

    这使得整个页面没有缓存,这不是最佳的。最好只渲染新闻条目而没有缓存。还有一个问题,在许多安装中,参数“disableNoCacheParameter”是在本地配置文件中设置的,它不允许在 urls 中使用 no_cache=1。

    所以我寻找另一种更好的方法来解决这个问题。

    首先在资源文件夹中的任何位置创建一个新的流体模板,使用上面修改过的 viewhelper:

    <formvh:render persistenceIdentifier="{settings.persistenceIdentifier}"/>
    

    然后像这样写一个打字稿:

    lib.embeddedForm = COA_INT
    lib.embeddedForm {
        10 = FLUIDTEMPLATE
        10 {
            file = EXT:myext/Resources/Private/Forms/myForm.html
            settings {
                EXT:myext/Resources/Private/Forms/myforms.form.yaml
            }
            extbase {
                pluginName = Formframework
                controllerExtensionName = Form
                controllerName = FormFrontend
                controllerActionName = perform
            }
        }
    }
    

    最后你可以嵌入表格

    <f:cObject typoscriptObjectPath="lib.embeddedForm" />
    

    作为新闻模板中的 COA_INT。这将禁用表单的缓存。

    也许它有帮助...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-07
      • 1970-01-01
      • 2021-01-09
      • 2022-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多