0

情况:我需要使用 POST 方法将表单添加到 CMS 页面。我创建了自定义钩子和一个成功显示表单的模块。然后我需要对用户输入错误做出反应,例如。当用户没有输入电子邮件地址时,我需要检测它,再次显示整个页面以及表单,并在用户输入中明确说明“错误”。

问题:问题是再次显示整个页面以及相关信息(例如,关于错误等)。当我添加这种代码时,在模块 PHP 文件中,

return $this->display(__FILE__, 'modulename.tpl');

它(自然)只显示表单,而不是带有表单的整个 CMS 页面。

在此代码的情况下,

Tools::redirectLink('cms.php?id_cms=7');

我无法通过 GET 和 POST 方法传输任何信息。

$_POST['test'] = 1;
Tools::redirectLink('cms.php?id_cms=7&test');

我也尝试分配给 smarty 变量

$smarty->assign('test', '1');

(我需要在创建表单本身的 .tpl 文件中使用它)但没有办法让它工作。

{if isset($test)}...,
{if isset($smarty.post.test)}...,
{if isset($_POST['test'])}... {* neither of these conditionals end up as true *}

即使将 GET 参数分配给 url 也没有影响,因为我猜,无论我是否包含其他参数,都会对某种友好的 url 进行链接重写。( [SHOPNAME]/cms.php?id_cms=7&test-> [SHOPNAME]/content/7-cmspage-name)

我的问题是:有没有办法在 prestashop 中“重定向”或“重新加载”当前页面(或通常可能是任何页面)以及我自己的数据?

我有点解释了整个案例,所以我愿意听到比我更好的整体解决方案(也许我完全以错误的方式思考这个案例)。这将是其他可能的答案。

4

1 回答 1

0

最简单的方法是使用 javascript 来验证表单 - 您可以使用 jQuery 突出显示错误的字段;提供有关提交失败的视觉反馈。实际上,您不允许用户提交表单(从而离开页面),直到您对操作成功感到高兴。我假设您将在收到成功提交后重定向到另一个页面。

有很多文章和操作方法可用于使用 javascript,实际上还有 jQuery 用于表单验证。如果您想保持站点精简和平均,那么您可以为 CMS 控制器提供覆盖,并且仅将您想要使用表单验证的特定页面的脚本排入队列。

If the validation is complex, then you might be best using AJAX and just reloading the form section of your page via a call to your module. Hooks aren't great for this kind of thing, so you might want to consider using an alternative mnethod to inject your code onto the cms page. I've written a few articles on this alternative approach which can be found on my prestashop blog

于 2012-04-20T11:21:54.213 回答