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