Magento首先将用户设置为&姓

时间:2012-01-25 11:22:45

标签: magento newsletter subscriber

当有人订阅Magento时事通讯时,我也希望他们填写他们的名字和姓氏。我已将两个输入字段添加到表单中。字段名称是'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 ,发现没有设置用户名的功能。

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

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

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

查看数据库中的newsletter_subscriber表。没有名字或姓氏。您只能在简报模型上设置这些字段。

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

如果您希望这些字段也适用于与cutomer无关的订阅者,您应该通过添加这两个字段来修改newsletter_subscriber数据库表。

答案 1 :(得分:0)

您必须创建以下的本地副本: 应用程序/代码/核心/法师/新闻/控制器/ SubscriberController.php 应用程序/代码/核心/法师/新闻/型号/ 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);
}

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