Имя и фамилия абонента Magento set - PullRequest
4 голосов
/ 25 января 2012

Когда кто-то подписывается на рассылку 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("example@email.com");             
            $subscriber->setFirstname("ADAM");              
            $subscriber->setLastname("MOSS");
            $subscriber->save();

Я просто хочу, чтобы метод имени и фамилии работал - часть setEmail работает отлично. Я заглянул в Model / Subscriber.php и увидел, что нет функции для установки имен подписчиков.

Глядя на сетку в админке, я также заметил, что там написано «Имя клиента» и «Фамилия клиента», поэтому я предполагаю, что имена принадлежат модели клиента, а не модели подписчика.

Есть ли способ обойти это? Я хочу иметь возможность назначить имя клиента подписчику при подписке на новостную рассылку. Я попробовал метод наблюдателя, упомянутый в этом посте, но я думаю, что та же проблема существует: Добавление пользовательского поля в модуль подписки Magento

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

3 голосов
/ 26 апреля 2013

Взгляните на таблицу newsletter_subscriber в базе данных. Там нет имени или фамилии. Вы устанавливаете эти поля только в модели новостной рассылки.

Метод подписки () из модели подписчика связывает подписчика с идентификатором клиента, поэтому в сетке отображаются имя и фамилия клиента.

Если вы хотите, чтобы эти поля были также для подписчиков, не связанных с пользователями, вам следует изменить таблицу базы данных newsletter_subscriber, добавив эти два поля.

0 голосов
/ 09 июня 2015

Вы должны создать локальную копию: приложение / код / ​​ядро ​​/ Mage / Информационный бюллетень / контроллеры / SubscriberController.php Приложение / код / ​​ядро ​​/ Mage / Информационный бюллетень / модель / 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);

Теперь в приложении / 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);

И добавьте для него геттеры и сеттеры:

/**
* 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, как сказано в другом ответе.

...