这是我第一次使用液体。
挑战:
在一种形式中,我试图标记那些强制性的字段(突出显示或指示符)。
必填字段以字符串形式提供(在数组{settings.registration.requiredFields}
)
方法 我认为可以创建一个部分,我传递当前的字段名称,并将此字段名称与requiredFields列表进行比较。
问题
1)我发现无法比较部分字符串。
2)所以我想将带有v:interator.explode
的字符串分解为一个数组,该数组可以与f:for
进行比较并在那里完成标记,如here所述
经过几个小时的谷歌搜索后,我发现我需要添加vhs
和flux
扩展名。没有成功。
在输出中显示语句而不是结果。
<v:iterator.explode content="Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam" glue=" " as="bar">
<div class="event-registration-value event-title">
</div>
</v:iterator.explode>
来自(测试)输入
<v:iterator.explode content="Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam" glue=" " as="bar">
<div class="event-registration-value event-title">
{bar}
</div>
</v:iterator.explode>
我需要做些什么才能让它运行?
PS:我使用的是typo3 7.6.2
答案 0 :(得分:0)
由于您没有提及我假设的表单的任何扩展名,您只是创建自己的表单,在这种情况下,您可以轻松添加自己的ViewHelper,它将完全满足您的需要,即:
TypoScript中的某个地方:
plugin.tx_myext.settings.registration.requiredFields = foo bar baz
<强> typo3conf / EXT / myext /类别/ ViewHelpers / IsFieldRequiredViewHelper.php 强>:
<?php
namespace Vendor\Myext\ViewHelpers;
use TYPO3\CMS\Core\Utility\GeneralUtility;
class IsFieldRequiredViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractConditionViewHelper {
/**
* @param string $fieldName Current field name
* @param string $requiredFields List of required names separated by spaces
*
* @return string the rendered string
*/
public function render($fieldName, $requiredFields) {
$requiredArray = GeneralUtility::trimExplode(' ', $requiredFields, true);
return (in_array($fieldName, $requiredArray))
? $this->renderThenChild()
: $this->renderElseChild();
}
}
因此,在您的Fluid模板中,您可以通过多种方式使用它,多个样本:
{namespace myvhs=Vendor\Myext\ViewHelpers}
<!-- 1: Use your condition with then/else blocks -->
<myvhs:isFieldRequired
fieldName="foo"
requiredFields="{settings.registration.requiredFields}">
<f:then>This field IS required</f:then>
<f:else>It's optional...</f:else>
</myvhs:isFieldRequired>
<!-- 2: or just with `then` implicit block: -->
<myvhs:isFieldRequired
fieldName="bar"
requiredFields="{settings.registration.requiredFields}">Fill the bellow input...</myvhs:isFieldRequired>
<!-- 3: Add `required-field` class inline -->
<input type="text" class="{myvhs:isFieldRequired(fieldName: 'baz', requiredFields: settings.registration.requiredFields, then: 'required-field')}">
(请注意,您当然需要更改供应商和扩展名以适合您当前的情况)
答案 1 :(得分:0)
要使v:
函数运行,有两件重要的事情要做:
命名空间是通过添加
来定义的 {namespace v=FluidTYPO3\Vhs\ViewHelpers}
在文件顶部。
<强>提示:强>
如果模板在此添加后中断,则可能不是namespace
行,而是<v:...>
语句中的拼写错误。
在我的情况下,它是一个缺失的结尾"
,并且在相同的变量周围缺少{}
。
因为新手花了我三天的时间来解决。