如何参考magento寄存器块?

时间:2015-03-20 12:37:42

标签: magento magento-1.9

让我们考虑一下我正在使用注册表格,我想在其中添加新字段“公司”。在这里,我知道在/customer/form/register.phtml文件中创建模块和添加字段的所有过程,但我想以不同的方式进行。

这是我的查询,我希望在xml文件的帮助下执行此操作,我在其中创建新的xml文件并使用新{{1}引用customer_form_register块文件(不编辑.phtml)与创建模块的所有后端过程相同。

1 个答案:

答案 0 :(得分:2)

问题

我现在明白您的问题是询问您是否可以在客户注册表单上插入其他表单字段而无需编辑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之类的内容,因为它似乎可以轻松添加自定义注册字段。