在动作属性中使用prestashop的1.7 smarty url标记

时间:2017-08-25 14:32:17

标签: php smarty prestashop prestashop-1.7

我正在使用prestashop 1.7.2.1构建一个带前端控制器的模块。

我要做的是将smarty DataTable dt1 = new DataTable(); dt1.Columns.Add("ID"); dt1.Columns.Add("Type"); dt1.Columns.Add("Value"); dt1.Rows.Add(new Object[] { "1", "ItemCost", "5000" }); dt1.Rows.Add(new Object[] { "2", "TravCost", "5700" }); dt1.Rows.Add(new Object[] { "3", "UpCharge", "3600" }); dt1.Rows.Add(new Object[] { "4", "TaxCost", "7000" }); DataTable dt2 = new DataTable(); dt2.Columns.Add("ID"); dt2.Columns.Add("Type"); dt2.Columns.Add("Value"); dt2.Rows.Add(new Object[] { "27", "ItemCost", "3800" }); dt2.Rows.Add(new Object[] { "28", "TravCost", "4851" }); DataTable dt3 = new DataTable(); dt3 = dt2.Clone(); foreach (DataRow item in dt2.Rows) { dt3.Rows.Add(new object[] { item["ID"], item["Type"], item["Value"] }); } foreach (DataRow item in dt1.Rows) { DataRow[] drs = dt3.Select("Type='" + item["Type"].ToString() + "'"); if (drs.Count() == 0) { dt3.Rows.Add(new object[] { item["ID"], item["Type"], "N/A" }); } } 标记添加到表单的action属性中。问题是,一旦我提交表单,就会删除from的action属性中提供的所有get参数。这是html中的正常行为。

这是我的代码:

{url}

通常我可以将这个聪明的<form id="car-type-form" action="{url entity='module' name='tuxinmodcartype' controller='cartypeproducts'}" method="get"> <div id="company-name-input-form-group" class="form-group row"> <label for="company-name-input" class="col-sm-2 col-form-label">Company</label> <div class="col-sm-10"> <input type="text" class="form-control" id="company-name-input" name="company_name" placeholder="Company" aria-label="Company" required="required"/> </div> </div> ... </form> 标记粘贴到变量中。提交时,将表单字段的值动态添加到我创建的变量中,并使用它来重定向,而不是允许表单提交。

我只是不知道这是否是最佳解决方案。

也许我错过了一些东西。

任何想法?

谢谢

1 个答案:

答案 0 :(得分:0)

现在我所做的是根据创建的url字符串向表单添加隐藏的输入元素。

我在模板文件的第一行有这个:

<script type="text/javascript">
    var carTypeProductsUrl='{url entity='module' name='tuxinmodcartype' controller='cartypeproducts'}';
</script>

并在提交函数中添加了以下代码:

...
if (isError) {
            event.preventDefault();
        } else {
            $('.hidden-form-params').remove();
            var params = carTypeProductsUrl.substr(carTypeProductsUrl.indexOf('?')+1).split('&');
            params.forEach((paramStr)=>{
                var paramsArray = paramStr.split('=');
                const paramKey = paramsArray[0];
                const paramvalue = paramsArray[1];
                $('#car-type-form').append(`<input type="hidden" name="${paramKey}" value="${paramvalue}" class="hidden-form-params" />`);
            });
        }

这种方法感觉有点.. hacky ?! :)我只是想确保这是要走的路