2012-01-25 58 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中所述。