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 コントローラーのオーバーライドを提供し、フォーム検証を使用する特定のページのスクリプトのみをキューに入れることができます。

検証が複雑な場合は、AJAX を使用し、モジュールへの呼び出しを介してページのフォーム セクションを再読み込みするのが最適な場合があります。フックはこの種の作業には適していないため、別の方法を使用してコードを cms ページに挿入することを検討することをお勧めします。私はprestashop ブログで見つけることができるこの代替アプローチに関するいくつかの記事を書きました

于 2012-04-20T11:21:54.213 に答える