如何引用 magento 寄存器块?

How to give reference to magento register blocks?

让我们假设我正在使用注册表单,我想在其中添加新字段,比如 "Company"。在这里,我知道在 /customer/form/register.phtml 文件中创建模块和添加字段的所有过程,但我想以不同的方式进行。

这是我的查询,我想在 xml 文件的帮助下完成此操作,我在该文件中创建了新的 xml 文件,并使用新的 customer_form_register 块引用 .phtml 文件(无需编辑 /customer/form/register.phtml),所有创建模块的后端过程相同。

问题

我现在了解到您的问题是询问是否可以在不编辑 customer/form/register.phtml 模板的情况下在客户注册表单上插入其他表单字段。不幸的是,在 Magento 的布局中,我认为目前没有一种方法可以在另一个引用中创建对块的引用,除非是在相同的引用中。因此,虽然没有一种非常干净的方法可以仅使用布局 XML 来完成此操作,但有一种方法可以实现它...

一个可能的解决方案

为了将新的子块插入到 customer_form_register 块中,我们需要覆盖该块的布局定义。这并不理想,因为您替换了该块的任何其他定义,因此您需要小心地将任何其他必要的布局更新也合并到您的新布局中。需要考虑的一个因素是此块在 captcha.xml 中被重新定义,因此如果您需要该功能,您也需要将这些更新添加到您的新定义中。

然后我们将插入一个新块,customer.form.register.newsletter。这是因为该子块名称已经在 register.phtml 模板中被调用,例如 $this->getChildHtml('customer.form.register.newsletter'),但它似乎没有用于我注意到的任何其他内容。因此,一旦我们用这个名称定义了我们的新块,它将被插入到现有时事通讯复选框下方的页面中:

<customer_account_create>
    <reference name="content">
        <block type="customer/form_register" name="customer_form_register" template="customer/form/register.phtml">
            <block type="page/html_wrapper" name="customer.form.register.fields.before" as="form_fields_before" translate="label">
                <label>Form Fields Before</label>
            </block>

            <!-- This is our new block. -->
            <block type="core/template" name="customer.form.register.newsletter" template="customer/form/custom_register.phtml"/>

        </block>
    </reference>
</customer_account_create>

备选

我认为您可能需要考虑 this extension 之类的东西,因为它似乎可以轻松添加自定义注册字段。