2012-04-16 4 views
0

Ситуация: Мне нужно было добавить форму с методом POST на страницу CMS. Я создал пользовательский крючок и модуль, отображающий форму успешно. Тогда мне нужно реагировать на ошибки ввода пользователя, например. когда пользователь не вводит адрес электронной почты, мне нужно его обнаружить, отобразить всю страницу снова вместе с формой и с «ошибками» в пользовательском вводе четко указано.PrestaShop - Страница обновления 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 переменных слишком

$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 вместе с включенными моими данными?

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

ответ

0

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

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

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