2

連絡先と登録フォームをカスタマイズする方法を知る必要があります。新しいフィールド ( および ) を追加し、これらのフィールドの情報を必須または不要にする方法。

これらのフォーム用に編集する必要があるファイルを知る必要があります...

prestashop 1.4.7.0 を使用しています

4

1 に答える 1

4

それぞれのケースの処理方法には大きな違いがあるため、これは実際には 2 つの別個の質問です。

答え 1

登録フォームの場合、2 つのフック ハンドラー関数を含むモジュールを作成できます。これらは次のとおりです。

public function hookCreateAccountForm() {}
public function hookCreateAccount($params) {}

最初の機能を使用すると、登録フォームに追加のフィールドを追加できます (デフォルトでは、これらはフォームの最後に挿入されますauthentication.tplが、すべてを単一のグループとして別の場所に移動することもできます)。必要な追加のフォーム html を返すだけです。

2 番目の関数は、アカウント作成プロセスを処理する 2 つのパラメーターを提供します。これは、標準フィールドが検証され、新しい顧客が作成された後に実行されます。残念ながら、これを使用して追加フィールドの検証を行うことはできません (メンバー関数AuthControllerで独自の認証を実行するには、JavaScript またはオーバーライドを使用する必要があります)。preProcess()サイト用の独自のカスタム モジュールの 1 つで、たとえば次のようなものがあります。

public function hookCreateAccount($params)
{
  $id_lang = (int)Configuration::get('PS_LANG_DEFAULT');
  $customer = $params['newCustomer'];
  $address = new Address(Address::getFirstCustomerAddressId((int)$customer->id));
  $membership_number = $params['_POST']['membership_number'];
  ....
  ....
}

$params['newCustomer']配列内の標準の Prestashop 要素であり、新しく作成された顧客オブジェクトが含まれています。あなたのフィールドは$params['_POST']配列になります - 私の場合、それは と呼ばれる入力フィールドでしたmembership_number

答え 2

お問い合わせフォームの場合は、もっと複雑です。HTML の最も簡単な方法は、追加フィールドをテンプレート ファイルにハードコードすることですcontact-form.tpl

フォームを実際に処理するには、次のようなファイルを呼び出しContactController.phpて、コントローラーのオーバーライドを作成する必要があります。/<web-root>/<your-optional-ps-folder>/override/controller

<?php
class ContactController extends ContactControllerCore {

  function preProcess()
  {
    if (Tools::isSubmit('submitMessage'))
    {
      // The form has been submitted so your field validation code goes in here.
      // Get the entered values for your fields using Tools::getValue('<field-name>')
      // Flag errors by adding a message to $this->errors e.g.
      $this->errors[] = Tools::displayError('I haven't even bothered to check!');
    }
    parent::preProcess();
    if (Tools::isSubmit('submitMessage') && is_empty($this->errors))
    {
      // Success so now perform any addition required actions
      // Note that the only indication of success is that $this->errors is empty
    }
  }
}

もう 1 つの方法は、preProcess 関数全体をコピーして、必要な処理controllers\ContactControllerが実行されるまでハッキングすることです。

于 2012-04-26T15:54:59.547 に答える