Forms 在前台添加自定义表单

Forms 在前台添加自定义表单,forms,prestashop,prestashop-1.7,Forms,Prestashop,Prestashop 1.7,在前台的产品页面上集成自己的HTML表单的正确方法是什么?使用displayProductAdditionalInfo钩子,我可以在产品页面上完美地显示我自己的*.tpl文件。但是:不可能在模板文件中添加表单,因为在product.tpl中,“添加到购物车”按钮的表单标记仅在product-additional-info.tpl之后关闭,并且HTML中不允许有两个嵌套表单。 具体来说,这里是Prestashop 1.7.7.3的原始product.tpl文件的相关部分: <

在前台的产品页面上集成自己的HTML表单的正确方法是什么?使用displayProductAdditionalInfo钩子,我可以在产品页面上完美地显示我自己的*.tpl文件。但是:不可能在模板文件中添加表单,因为在product.tpl中,“添加到购物车”按钮的表单标记仅在product-additional-info.tpl之后关闭,并且HTML中不允许有两个嵌套表单。 具体来说,这里是Prestashop 1.7.7.3的原始product.tpl文件的相关部分:

        <div class="product-actions">
          {block name='product_buy'}
            <form action="{$urls.pages.cart}" method="post" id="add-to-cart-or-refresh">
              <input type="hidden" name="token" value="{$static_token}">
              <input type="hidden" name="id_product" value="{$product.id}" id="product_page_product_id">
              <input type="hidden" name="id_customization" value="{$product.id_customization}" id="product_customization_id">

              {block name='product_variants'}
                {include file='catalog/_partials/product-variants.tpl'}
              {/block}

              {block name='product_pack'}
                {if $packItems}
                  <section class="product-pack">
                    <p class="h4">{l s='This pack contains' d='Shop.Theme.Catalog'}</p>
                    {foreach from=$packItems item="product_pack"}
                      {block name='product_miniature'}
                        {include file='catalog/_partials/miniatures/pack-product.tpl' product=$product_pack showPackProductsPrice=$product.show_price}
                      {/block}
                    {/foreach}
                </section>
                {/if}
              {/block}

              {block name='product_discounts'}
                {include file='catalog/_partials/product-discounts.tpl'}
              {/block}

              {block name='product_add_to_cart'}
                {include file='catalog/_partials/product-add-to-cart.tpl'}
              {/block}

              {block name='product_additional_info'}
                {include file='catalog/_partials/product-additional-info.tpl'}
              {/block}

              {* Input to refresh product HTML removed, block kept for compatibility with themes *}
              {block name='product_refresh'}{/block}
            </form>
          {/block}

{block name='product_buy'}
{block name='product_variants'}
{include file='catalog/_partials/product variants.tpl'}
{/block}
{block name='product_pack'}
{如果$packItems}

{l s=”此包包含'd='Shop.Theme.Catalog'}

{foreach from=$packItems item=“产品包装”} {block name='product_minimal'} {include file='catalog/\u partials/minimatures/pack product.tpl'product=$product\u pack showPackProductsPrice=$product.show\u price} {/block} {/foreach} {/if} {/block} {block name='product_折扣'} {include file='catalog/_partials/product discounters.tpl'} {/block} {block name='product\'u add\'u to\'u cart'} {include file='catalog/_partials/product add to cart.tpl'} {/block} {block name='product\u additional\u info'} {include file='catalog/_partials/product additional info.tpl'} {/block} {*已删除刷新产品HTML的输入,保留块以与主题兼容*} {block name='product_refresh'}{/block} {/block}

为什么不在三个输入字段之后直接关闭“添加到购物车”或“刷新表单”的表单标记?随后的*.tpl文件及其挂钩也可以使用表单。还是我遗漏了什么?

那是因为,在钩子中,您可能可以获得其他字段?只是猜测而已。无论如何,您可以为按钮赋予名称属性,例如
单击我
,在您的模块
中,如果(工具::isSubmit('my_按钮'))
。。。。或者,使用javascript函数发布您的数据。非常感谢您的回答,杰克!我不确定,如果我正确理解了您的第一个建议,但我猜当按下按钮时,仍然会调用原始表单中的操作URL。在这种情况下是这样的。这意味着我必须在该控制器中捕获提交事件。所以,也许我最好试试Javascript解决方案。总之,我不想修改原始PS文件。正确。但我建议不要编辑Prestashop核心文件,因为所有编辑都将被更新覆盖。考虑创建一个模块。嗨,杰克,谢谢。这绝对是我想要实现的。我已经启动了我自己的模块,我不想修改任何PS核心文件。我唯一的问题是如何将表单的字段提交到我自己的模块中。当我扩展现有的“添加到购物车”表单时,我必须修改购物车控件。或者我尝试通过JavaScript将购物车表单的操作URL重定向到我自己的模块。类似document.getElementById(“添加到购物车或刷新”).action=mymodule\uURL;但这也是一种黑客行为。。。