3

当有人订阅 Magento 时事通讯时,我还希望他们填写他们的名字和姓氏。我已将两个输入字段添加到表单中。字段名称是“名字”和“姓氏”。

我要扩展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,发现没有设置订阅者名称的功能。

查看管理员中的网格,我还注意到它显示“客户名字”和“客户姓氏”,因此我假设名称属于客户模型而不是订阅者模型。

有没有解决的办法?我希望能够在订阅者订阅时事通讯时将客户名称分配给订阅者。我尝试了这篇文章中提到的观察者方法,但我认为存在同样的问题:Adding a custom field to Magento's subscription module

任何帮助将非常感激。

4

2 回答 2

3

查看数据库中的 newsletter_subscriber 表。没有名字或姓氏。您仅在时事通讯模型上设置这些字段。

订阅者模型中的 subscribe() 方法将订阅者与客户 ID 相关联,因此网格确实显示了客户的名字和姓氏。

如果您希望这些字段也用于未与客户关联的订阅者,您应该通过添加这两个字段来修改 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 行的订阅函数签名:

public function subscribe($email)

至:

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

在第 338 行之后添加:

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

并为其添加 getter 和 setter:

/**
* 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);
}

您还需要将 firstname 和 lastname 列添加到 newsletter_subscriber,如另一个 anwser 中所述。

于 2015-06-09T14:50:58.800 回答