【问题标题】:Is it possible to render raw fluid markup without evaluating it?是否可以在不评估的情况下渲染原始流体标记?
【发布时间】:2021-10-14 20:58:24
【问题描述】:

我尝试编写一个视图助手,以原始格式输出流畅的标记(用于开发人员的展示目的)。

我想做这样的事情:

<f:showcase>
<p>
  <f:link.page pageUid="1">Link</f:link.page>
</p>
</f:showcase>

应该输出渲染版本和原始输入

所需的 viewhelper 输出:

Raw:
<pre class="showcase">
&lt;p&gt;
  &lt;f:link.page pageUid="1"&gt;Link&lt;/f:link.page&gt;
&lt;/p&gt;
&lt;/pre&gt;
</pre>

Output:
<p>
  <a href="/site">Link</a>
</p>

似乎不可能避免某些节点的子标记被流体渲染。以前有人这样做过还是我只是错过了一些非常明显的选择来实现这一点?

我找到了一些关于“passthrough”/{parsing off} 的资源,但是以纯基于文件的方法解决这个问题并将所有代码示例/sn-ps 移动到单独的部分不是我的选择。

viewhelpers 中是否有一些 API 可以访问传递给它的实际源内容?我找不到任何...

另外,理论上我可以传入非流体标记并在 viewhelper 内生成流体 sn-p,但这将是一个非常肮脏的解决方法......类似于以下内容:

<f:showcase>
<p>
  <f::link.page pageUid="1">Link</f::link.page>
</p>
</f:showcase>

更新:由于流体的基于文件的模板处理,这似乎是不可能的。在已编译的模板中没有可用的实际 src 引用,唯一的解决方案是将每个 sn-p 移动到单独的部分并完全禁用该部分的流体解析。

所以我在typo3fluid 项目中打开了一个问题: https://github.com/TYPO3/Fluid/issues/557

我希望它得到一些关注,所以这可能在未来的某个时候成为可能。

【问题讨论】:

  • 不确定这是否有帮助,但您是否尝试过 ViewHelper?
  • 是的,它仍然解析节点内容。不过还是谢谢你

标签: typo3 fluid


【解决方案1】:

您以前可以使用 &lt;[!CDATA ... ]]&gt; 来实现这一点,但现在已经不行了。我认为这样做的唯一方法是将部分代码放在&lt;f:format.raw value="..."/&gt;中,例如:

<f:showcase>
<p>
  <f:format.raw value="<"/>f:link.page pageUid="1">Link</f:link.page>
</p>
</f:showcase>

【讨论】:

    【解决方案2】:

    我猜最好的方法是在 styleguide 扩展中这样做

        <div class="example code"><pre><code class="language-html">&lt;f:be.infobox title="Message title" state="-2"&gt;Your infobox content&lt;/f:be.infobox&gt;</code></pre></div>
    

    https://github.com/TYPO3/styleguide/blob/master/Resources/Private/Templates/Backend/Infobox.html

    【讨论】:

      【解决方案3】:

      Fluid 3.0 支持此用例,例如参见 https://github.com/NamelessCoder/fluid-3-demo

      Fluid 2.x 及更早版本不支持此用例。

      这两个版本都没有为 ViewHelper 提供访问原始源的方法。然而,Fluid 3.0 确实为 ViewHelper 提供了一种方法来接管子内容的排序(模板字节的迭代),让您逐字节收集嵌套的源代码(这是允许 ViewHelper 传递的机制,如图所示在上面的链接中)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-16
        • 2014-04-02
        • 1970-01-01
        • 2021-09-16
        • 2021-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多