情境:我需要将带有POST方法的表单添加到CMS页面。我创建了自定义钩子和一个成功显示表单的模块。然后我需要对用户输入错误做出反应,例如。当用户没有输入电子邮件地址时我需要检测它,再次与表格一起显示整个页面,并在用户输入中明确说明“错误”。
问题:问题是再次显示带有连接信息的WHOLE页面(例如关于错误等)。在我添加这种代码的模块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->assign('test', '1');
(我需要在创建表单的.tpl文件中使用它)但是没办法让它工作。
{if isset($test)}...,
{if isset($smarty.post.test)}...,
{if isset($_POST['test'])}... {* neither of these conditionals end up as true *}
即使为url分配一个GET参数也没有任何影响,因为无论我是否包含其他参数,我都会想到链接重写到某种友好网址。 ([SHOPNAME]/cms.php?id_cms=7&test
- > [SHOPNAME]/content/7-cmspage-name
)
我的问题是:有没有办法在prestashop中“重定向”或“重新加载”当前页面(或者可能是任何页面)以及我自己的数据?
我有点解释了整个案例,所以我愿意听到一个比我更好的整体解决方案(也许我正在以错误的方式思考案例)。这可能是其他可能的答案。
答案 0 :(得分:0)
最简单的方法是使用javascript来验证表单 - 您可以使用jQuery突出显示错误的字段;提供有关提交失败的视觉反馈。实际上,您不允许用户提交表单(从而离开页面),直到您对该操作成功感到高兴为止。我假设一旦收到成功提交,您将重定向到另一个页面。
有很多文章和how-tos可用于使用javascript,实际上jQuery用于表单验证。如果您希望保持网站精简和平均,那么您可以为CMS控制器提供覆盖,并且只将您要使用表单验证的特定页面的脚本排入队列。
如果验证很复杂,那么您最好使用AJAX,只需通过调用模块重新加载页面的表单部分即可。钩子对于这种事情并不好,所以你可能想考虑使用另一种方法将你的代码注入cms页面。我已经写了一些关于这种替代方法的文章,可以在我的prestashop blog
上找到