PrestaShop - перезагрузить страницу CMS с дополнительными параметрами

Ситуация: мне нужно было добавить форму методом 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->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 вместе с моими собственными данными?

Я как бы объяснил все дело, поэтому я готов услышать лучшее общее решение, чем мое (возможно, я вообще неправильно думаю об этом деле). Это был бы другой возможный ответ.


person cin    schedule 16.04.2012    source источник


Ответы (1)


Самый простой способ - использовать javascript для проверки формы - вы можете использовать jQuery, чтобы выделить поля, в которых есть ошибка; предоставление визуальной обратной связи о том, как отправка не удалась. По сути, вы не разрешаете пользователю отправлять форму (и, таким образом, покидать страницу), пока вы не будете уверены, что действие завершится успешно. Я предполагаю, что после получения успешной отправки вы будете перенаправлены на другую страницу.

Есть много статей и инструкций по использованию javascript и даже jQuery для проверки формы. Если вы хотите, чтобы сайт был компактным и средним, вы можете предоставить переопределение для контроллера CMS и поставить в очередь скрипт только для определенных страниц, на которых вы хотите использовать проверку формы.

Если проверка сложна, вам может быть лучше всего использовать AJAX и просто перезагрузить раздел формы вашей страницы с помощью вызова вашего модуля. Хуки не подходят для такого рода вещей, поэтому вы можете рассмотреть возможность использования альтернативного метода mnethod для вставки вашего кода на страницу cms. Я написал несколько статей об этом альтернативном подходе, которые можно найти в моем блог prestashop

person Paul Campbell    schedule 20.04.2012