繁体   English   中英

如何在 TYPO3 Forms 中制作预定义的字段集?

[英]How to make a predefined fieldset in TYPO3 Forms?

使用ext:form ,我正在尝试创建一个自定义字段来收集地址。 所以我重用了Fieldset的代码来制作一个自定义元素:

<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" xmlns:formvh="http://typo3.org/ns/TYPO3/CMS/Form/ViewHelpers" data-namespace-typo3-fluid="true">

<formvh:renderRenderable renderable="{element}">
    <fieldset id="{element.uniqueIdentifier}" class="form-group{f:if(condition: element.properties.elementClassAttribute, then: ' {element.properties.elementClassAttribute}')}" value="24">
        <fp:address page="{element.parentRenderable}"/>
        
        <f:if condition="{element.label}">
            <legend ><f:format.html parseFuncTSPath="lib.tx_form.parseFunc">{formvh:translateElementProperty(element: element, property: 'label')}</f:format.html></legend>
        </f:if>

        <f:for each="{addressElements}" as="element">
            <f:render partial="{element.templateName}" arguments="{element: element}" />
        </f:for>
        
    </fieldset>
</formvh:renderRenderable>
</html>

在部分中,我可以设法使用自定义视图助手在Seciton中生成字段,

$addressFields = [
    'address-full-name' => 'Full name',
    'address-email' => 'Email',
    'address-phone' => 'Phone',
    'address-street' => 'Street',
    'address-city' => 'City',
    'address-state' => 'State',
    'address-zip' => 'Zip',
];
$fieldElements = [];
/** @var Section */
$section = $renderingContext->getVariableProvider()->get('element');

foreach ($addressFields as $identifier => $label) {
    $element = $section->createElement($identifier, 'Text');
    $element->setLabel($label);
    $fieldElements []= $element;
}

$renderingContext->getVariableProvider()->add('addressElements', $fieldElements);

但这些字段不会显示在摘要页面或 email 整理器中; 我假设是因为它们没有在 yaml 中定义。

是否可以预先设置一组字段而无需在表单定义中明确定义各个文本字段? 我希望能够使用表单编辑器随意将一个名为“地址”的字段放入表单中。

使用钩子比我尝试的要简单得多。

class AddressHooks 
{
    /**
     * @param RenderableInterface $renderable
     * @return void
     */
    public function initializeFormElement(RenderableInterface $renderable)
    {
        if ($renderable->getType() === 'Address') {
            $addressFields = [
                'address-full-name' => 'Full name',
                'address-email' => 'Email',
                'address-phone' => 'Phone',
                'address-street' => 'Street',
                'address-city' => 'City',
                'address-state' => 'State',
                'address-zip' => 'Zip',
            ];
    
            $fieldElements = [];
            
            /** @var Section */
            $section = $renderable;
    
            foreach ($addressFields as $identifier => $label) {
                $element = $section->createElement($identifier, 'Text');
                $element->setLabel($label);
                $fieldElements []= $element;
            }
        }
    }
}
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/form']['initializeFormElement'][1595622570]
    = \Vendor\Package\Hooks\AddressHooks::class;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM