3

誰かが Magento ニュースレターを購読するときに、姓名も記入してもらいたいです。フォームに 2 つの入力フィールドを追加しました。フィールド名は「firstname」と「lastname」です。

Mage/Newsletter/controllers/SubscriberController.phpを拡張していきます

newAction () で:

ここで投稿変数を取得しました:

$email = (string) $this->getRequest()->getPost('email');
$firstname = (string) $this->getRequest()->getPost('firstname');
$lastname = (string) $this->getRequest()->getPost('lastname');

成功メッセージの後に次のコードを追加しました。

$subscriber = Mage::getModel('newsletter/subscriber')->loadByEmail($email);             
            $subscriber->setEmail("example@email.com");             
            $subscriber->setFirstname("ADAM");              
            $subscriber->setLastname("MOSS");
            $subscriber->save();

姓と名のメソッドを機能させたいだけです-setEmail部分は完全に機能します。Model/Subscriber.phpを調べたところ、サブスクライバー名を設定する機能がないことがわかりました。

管理画面のグリッドを見ると、「Customer First Name」と「Customer Last Name」と表示されていることにも気付きました。そのため、これらの名前はサブスクライバー モデルではなく、カスタマー モデルに属していると思います。

これを回避する方法はありますか?ニュースレターを購読するときに、購読者に顧客名を割り当てられるようにしたいと考えています。この投稿に記載されているオブザーバー メソッドを試しましたが、同じ問題が存在すると思います: Magento のサブスクリプション モジュールにカスタム フィールドを追加する

どんな助けでも大歓迎です。

4

2 に答える 2

3

データベースのnewsletter_subscriberテーブルを見てください。姓も名もありません。これらのフィールドは、ニュースレター モデルでのみ設定します。

サブスクライバー モデルの subscribe() メソッドは、サブスクライバーを顧客 ID に関連付けるため、グリッドには実際に顧客の姓名が表示されます。

顧客に関連付けられていない購読者にもこれらのフィールドが必要な場合は、これら 2 つのフィールドを追加して、newsletter_subscriber データベース テーブルを変更する必要があります。

于 2013-04-26T09:26:52.107 に答える
0

app/code/core/Mage/Newsletter/controllers/SubscriberController.php app/code/core/Mage/Newsletter/Model/Subscriber.php のローカル コピーを作成する必要があります。

app/code/core/Mage/Newsletter/controllers/SubscriberController.php で、44 行目の後に追加します。

$firtname = (string) $this->getRequest()->getPost('firstname');
$lastname = (string) $this->getRequest()->getPost('lastname');

次に、次から変更します。

$status = Mage::getModel('newsletter/subscriber')->subscribe($email);

に:

$status = Mage::getModel('newsletter/subscriber')->subscribe($email,$firtname,$lastname);

app/code/core/Mage/Newsletter/Model/Subscriber.php で、307 行目の subscribe 関数の署名を編集します。

public function subscribe($email)

に:

public function subscribe($email,$firstname,$lastname)

これを 338 行の後に追加します。

$this->setSubscriberFirstname($firstname);
$this->setSubscriberLastname($lastname);

そのためのゲッターとセッターを追加します。

/**
* Alias for getSubscriberFirstname()
*
* @return string
*/
public function getFirstname()
{
    return $this->getSubscriberFirstname();
}

/**
* Alias for setSubscriberFirstName()
*
* @param string $value
*/
public function setFirstname($value)
{
    return $this->setSubscriberFirstname($value);
}

/**
* Alias for getSubscriberLastname()
*
* @return string
*/
public function getLastname()
{
    return $this->getSubscriberLastname();
}

/**
* Alias for setSubscriberLastname()
*
* @param string $value
*/
public function setLastname($value)
{
    return $this->setSubscriberLastname($value);
}

また、他の anwser で述べたように、名と姓の列を Newsletter_subscriber に追加する必要があります。

于 2015-06-09T14:50:58.800 に答える