Magento set subscriber first & last name

Adam Moss picture Adam Moss · Jan 25, 2012 · Viewed 7.4k times · Source

When someone subscribes to the Magento newsletter I also want them to fill in their first and last name. I have added the two input fields to the form. The field names are 'firstname' and 'lastname'.

I'm going to extend Mage/Newsletter/controllers/SubscriberController.php

In newAction():

I have retrieved the post variables here:

$email = (string) $this->getRequest()->getPost('email');
$firstname = (string) $this->getRequest()->getPost('firstname');
$lastname = (string) $this->getRequest()->getPost('lastname');

I have added the following code after the success message:

$subscriber = Mage::getModel('newsletter/subscriber')->loadByEmail($email);             
            $subscriber->setEmail("[email protected]");             
            $subscriber->setFirstname("ADAM");              
            $subscriber->setLastname("MOSS");
            $subscriber->save();

I just want to get the first and last name method working - the setEmail part works perfectly. I looked in Model/Subscriber.php and saw that there's no function for setting subscriber names.

Looking at the grid in the admin I also noticed that it says 'Customer First Name' and 'Customer Last Name' so I assume the names belong to the customer model rather than the subscriber model.

Is there a way around this? I want to be able to assign the customer name to the subscriber when they subscribe to the newsletter. I tried the observer method mentioned on this post, but I think the same issue exists: Adding a custom field to Magento's subscription module

Any help would be much appreciated.

Answer

user2239352 picture user2239352 · Apr 26, 2013

Take a look at newsletter_subscriber table in the database. There is no firstname or lastname. You set these fields only on the newsletter model.

The subscribe() method from subscriber model associate the subscriber to customer id so the grid shows indeed the customer firstname and lastname.

If you want to have these fields also for subscribers that are not associated to cutomers you should modify the newsletter_subscriber database table by adding these two fields.