2012-01-25 20 views
4

当有人订阅Magento时事通讯时,我也希望他们填写他们的名字和姓氏。我已将两个输入字段添加到表单中。字段名称是'firstname'和'lastname'。Magento设置用户名和姓

我打算延长法师/新闻/控制器/ 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("[email protected]");    
      $subscriber->setFirstname("ADAM");    
      $subscriber->setLastname("MOSS"); 
      $subscriber->save(); 

我只想让名字和名字的方法工作 - setEmail部分完美地工作。我查看了Model/Subscriber.php,发现没有设置用户名的功能。

查看管理员中的网格我还注意到它说'客户名字'和'客户姓',所以我假设名称属于客户模型而不是订户模型。

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

任何帮助将不胜感激。

回答

2

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

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

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

0

您必须创建的本地副本: 应用程序/代码/核心/法师/新闻/控制器/ SubscriberController.php 应用程序/代码/核心/法师/新闻/型号/ Subscriber.php

在应用/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。

public function subscribe($email) 

到:PHP编辑在线路307从订阅功能签名

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中所述。