流体驱动的 TYPO3 - 命名空间的正确设置

Posted

技术标签:

【中文标题】流体驱动的 TYPO3 - 命名空间的正确设置【英文标题】:fluid powered TYPO3 - the right settings for namespaces 【发布时间】:2014-07-15 06:53:42 【问题描述】:

我正在使用 TYPO3 6.2.3 和 TER 的扩展:(flux 7.0.0,fludipages 3.0.0,fluidcontent 4.0.0,VHS 1.8.5) 命名空间的正确实现是什么?在fluidtypo3的Documentation中是

namespace flux=FluidTYPO3\Flux\ViewHelpers
namespace v=Tx_Vhs_ViewHelpers    
xmlns="http://www.w3.org/1999/xhtml" lang="en"
      xmlns:f="http://typo3.org/ns/fluid/ViewHelpers"
      xmlns:flux="http://typo3.org/ns/flux/ViewHelpers"
      xmlns:v="http://typo3.org/ns/vhs/ViewHelpers">

在其他places 上是:

namespace flux=FluidTYPO3\Flux\ViewHelpers
namespace v=Tx_Vhs_ViewHelpers
<f:layout name="Content" />
<div xmlns="http://www.w3.org/1999/xhtml"
     xmlns:flux="http://typo3.org/ns/flux/ViewHelpers"
     xmlns:v="http://typo3.org/ns/vhs/ViewHelpers"
     xmlns:f="http://typo3.org/ns/fluid/ViewHelpers">

如果&lt;f:layout name="Content" /&gt; 必须在命名空间 div 内部还是外部,我也有点困惑?

【问题讨论】:

【参考方案1】:

有两种方法可以定义命名空间。第一个是流体自定义样式表示法中的命名空间标记:

namespace x=Classname

另一种是命名空间的正式 XML 表示法,因此如果您使用它,它会使您的模板完全符合 XML。

<someTag xmlns:xyz="http://typo3.org/ns/Some/Package/ViewHelpers" />

http://docs.typo3.org/flow/TYPO3FlowDocumentation/TheDefinitiveGuide/PartIII/Templating.html#namespaces

对于TYPO3 CMS,分辨率如下。

    检查settings.namespaces.http://example\.org/url = className,如果匹配,使用这个 检查url是否以http://typo3.org.ns/开头,那么后面的都会被解释为类名 否则忽略它

更多信息,请查看typo3/sysext/fluid/Tests/Unit/Core/Parser/TemplateParserTest.php中的示例

流体检测和解释的 AFAIK 命名空间不会打印到输出中。

【讨论】:

“检查 settings.namespaces.example\.org/url = className”是什么意思? 我的意思是您页面的排版设置。在那里,您可以按照 2 中指出的方式定义命名空间 --> 类名映射。【参考方案2】:

xmlns-defintions 仅用于您的 IDE 来完成代码。将它添加到 div 将在前端呈现它,我认为您不希望这样。

这是我在模板和部分中使用的通用模板。

<?xml version="1.0" encoding="UTF-8" ?>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en"
      xmlns:f="http://typo3.org/ns/fluid/ViewHelpers">

<head>
    <title>Template: Extension Index</title>
    <f:layout name="Default" />
</head>
<body>

namespace flux=FluidTYPO3\Flux\ViewHelpers

<f:section name="main">

    // Content
    <f:render partial="Example/Ex" section="main">

</f:section>

</body>
</html>

【讨论】:

如果您不希望呈现 html,可以将属性 data-namespace-typo3-fluid="true" 添加到 html 标记。此功能在 TYPO3 7.3 docs.typo3.org/c/typo3/cms-core/master/en-us/Changelog/7.3/… 中引入【参考方案3】:

问:命名空间的正确实现方式是什么? A:我自己也不确定。但在 vhs viewhelpers 的情况下,这个命名空间声明部分适用于我(Typo3 6.2.12,vhs 2.3.2)

namespace v=FluidTYPO3\vhs\ViewHelpers

旁注 以下命名空间声明将不起作用,因为它没有使用命名空间表示法(谢谢@kimomat):

namespace v=Tx_Vhs_ViewHelpers

另一方面,对于我自己的视图助手的命名空间,我必须使用上面的符号并且它有效

namespace speciality = Tx_Speciality_ViewHelpers

供参考,这是我完整的部分.html

namespace v=FluidTYPO3\vhs\ViewHelpers

<f:if condition="1">
  <f:then>SUCCESS</f:then>
  <f:else>ERROR</f:else>
</f:if>

【讨论】:

namespace v=Tx_Vhs_ViewHelpers 是旧的书写约定。 namespace v=FluidTYPO3\vhs\ViewHelpers 是新的命名空间约定。

以上是关于流体驱动的 TYPO3 - 命名空间的正确设置的主要内容,如果未能解决你的问题,请参考以下文章

流体动力 TYPO3 部分中的 enableFields -> 对象

从另一个扩展部分渲染 TYPO3 Fluid

TYPO3:重命名通量字段并保留值?

从 BE 注销后,我注册的命名空间停止工作

使用未引用的命名参数时,TYPO3 抛出异常

TYPO3 在流体中裁剪图像