如何在 Silvershop 多步结帐中将每个表单字段列表(如联系人详细信息表单、账单地址表单)呈现为自定义模板

how to render each form fieldlist like contactdetails form, billingaddress form to a custom template in Silvershop multi-step checkout

我目前正在使用 Silverstripe 模块 Silvershop (https://github.com/silvershop/silvershop-core) 并使用多步 "Stepped" 结帐自定义结帐流程。我的问题是如何将每个表单字段列表(如 contactdetails 表单、billingaddress 从自定义模板)呈现出来,以便我可以更好地控制表单的样式。 我尝试按照 silverstripe doc(https://docs.silverstripe.org/en/3.4/developer_guides/forms/form_templates/) 创建表单模板,但没有成功。自定义表单字段未输出到前端。

site/mysite/code/CheckoutStep_ContactDetailsCustom.php

中的部分代码
public function ContactDetailsForm()
{
    .....

    $form->setTemplate('CustomContactForm');
    $this->owner->extend('updateContactDetailsForm', $form);

    return $form;
}

site/themes/custom/templates/Includes/CustomContactForm.ss

中的一些代码
<form $AttributesHTML>
<fieldset>
    <% with Fields %>
        <% with FieldByName(FirstName) %>
            <div>
                {$Field}
            </div>
        <% end_with %>
        <% with FieldByName(Surname) %>
            <div>
                {$Field}
            </div>
        <% end_with %>
    <% end_with %>
</fieldset>
</form>

这是默认的表单布局:

首先,您需要呈现 {$FieldHolder} 而不是 {$Field},因为 holder 模板包含 $Message,它将显示验证消息。 (不渲染这会让你想知道为什么一个表格几个小时都不能工作)

其次,添加模板后是否?flush=all?我想不出这行不通的另一个原因。