0

Opencart テーマのフッターに基本的なお問い合わせフォームを追加しました。たとえば、私は持っています:

if (($this->request->server['REQUEST_METHOD'] == 'POST') &&
(isset($this->request->post['enquiry_submit'])) && $this->validate()) {

これは期待どおりに正しく機能します。問題は、顧客登録などの別のページにいて、フッターの連絡先フォームを送信しようとすると、未定義の通知が大量に表示されることです。

4

2 に答える 2

1

ここでの問題は明らかです。

  1. おそらく最後のコントローラーとして処理されるコードif (($this->request->server['REQUEST_METHOD'] == 'POST') && (isset($this->request->post['enquiry_submit'])) && $this->validate()) {を FOOTER コントローラーに配置しました。
  2. フッター コントローラーが処理される前に、さらに多くの (最大数十個の) コントローラーが処理されます。
  3. ほとんどすべてのコントローラーにはこのコードが含まれています: if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {- したがって、フッターの前のほとんどすべてのコントローラーは、フォームが送信されたときに自分のことをしようとします...そして、それがあなたがたくさんのUndefined index通知を持っている理由です...

私はお勧めします:

  1. フォームの表示を処理するためにフッター コントローラーを残します
  2. フッター テンプレートにフォームを表示する
  3. メインの連絡先フォーム コントローラー/テンプレート/言語ファイルを編集します。
    1. コントローラーに次のような新しい関数を追加footer()し、送信後のすべての処理コードをフッターコントローラーからここに移動します
    2. 連絡先テンプレートと言語ファイルに必要なものを追加する
  4. フッターのお問い合わせフォームで、フォームが次の URL に送信されていることを確認してください: http://www.youropencartsite.com/index.php?route=contact/contact/footer

これにより、フッターから連絡フォームが送信されたときに、送信されたデータを処理する具体的なメソッドが呼び出され、他のコントローラーがデータ処理に関与しない通常の連絡フォームにユーザーがリダイレクトされるようにします...

于 2012-05-28T10:09:31.890 に答える
0

フッターのコントローラーにコードを配置することは良い考えのように思えるかもしれませんが、それは、すべてのページが利用可能であることを保証するためにフッター自体に投稿しようとすることになることを意味します。これは少しやり過ぎで悪いことです。練習。これを解決する方法は、次のいずれかです。

  • フォームを取得して、お問い合わせフォーム (情報/連絡ルート) に投稿します。これにはすでにコード化されているという利点がありますが、顧客がそのページにリダイレクトされることを意味します
  • AJAX を使用してお問い合わせフォームまたはこれを処理するために作成された新しいコントローラーに送信し、JSON を使用して連絡先送信の結果を返信します。私の意見では、これはお客様にとってより良い選択肢です
于 2012-05-28T11:06:54.267 に答える