当有人订阅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
非常感谢任何帮助。
答案 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中所述。