Добавьте поля "subscription_date" и "user_ip_address" для подписчика на новостную рассылку и отобразите его на панели администратора в Magento.

Я хочу добавить два настраиваемых поля для подписчика на новостную рассылку, на который подписался клиент и его IP-адрес: 1) Я добавил два столбца в таблицу "newsletter_subscriber". Как этого можно достичь?

В файле app/code/core/Mage/Newsletter/Model/Subscriber.php я нашел следующие функции:

$this->setSubscriberEmail($email);
$this->setStoreId(Mage::app()->getStore()->getId());
$this->setCustomerId(0); 

Но я не нашел его код. Я думаю, что я тоже сохраняю такие данные, но как это будет возможно? где я должен определить и объявить код для функции, такой как $this->seSubscriptionDate();

А как отобразить в панели администратора под Newsletter->Newsletter Subscriber?

2 ответа

Решение

Я не нашел решения или помощи от любого человека. Я бьюсь головой и нахожу решение очень простой надеждой на то, что в будущем эта статья может сэкономить время: 1) Добавить столбцы в таблицу "newsletter_subscriber", скажем, в моем случае "subscription_date" и "sub_ip_address" 2) Добавить следующие две строки в файле @ двухпозиционное приложение \code\core\Mage\Newsletter\Model\Subscriber.php

**$this->setSubscriptionDate(date("d-m-Y"));
**$this->setSubIpAddress($_SERVER['REMOTE_ADDR']);

Одно место: в функции: public function subscribe($email) До: $this->save(); Второе место: в функции: public function subscribeCustomer($customer) До: $this->save(); Теперь данные будут добавлены в таблицу. Теперь они будут показаны в панели администратора. 1) Откройте файл app\code\core\Mage\Adminhtml\Block\Newsletter\Subscriber\Grid.php. Просто добавьте в него два необходимых столбца, например:

$this->addColumn('subscription_date', array(
            'header'    => Mage::helper('newsletter')->__('Subscription Date'),
            'index'     => 'subscription_date',
            'default'   =>    '----'
        ));

        $this->addColumn('sub_ip_address', array(
            'header'    => Mage::helper('newsletter')->__('IP Address'),
            'index'     => 'sub_ip_address',
            'default'   =>    '----'
        ));

Теперь закончите. ** Это тот момент, когда я тратил свое время, и в конце я добавил эту функцию на основе хит и триал, но она работает. Кто-то из команды Core magento, плз, объясните, почему эта функция {setSubscriptionDate()} работает? Я не объявил никому об этой функции. Кажется, это показывает intellisense для обнаружения поля таблицы?

У меня тоже была похожая проблема. Однако в моем случае я должен добавить поле "страна" и "пол" в форму бюллетеня. Итак, покопавшись в ядре часами, я понял это. Ниже приведено объяснение:

В приложении / design / frontend // default / template / newsletter / subscribe.phtml форма имеет getFormActionUrl()?> В своем поле действия. Это относится к app/code/core/Mage/Newsletter/Block/Subscribe.php

Объект $this, используемый в файле subscirbe.phtml, ссылается на этот класс (т.е. Mage_Newsletter_Block_Subscribe), и, таким образом, $this->getFormActionUrl() в файле subscribe.phtml ссылается на функцию getFormActionUrl () этого класса.

Теперь этот getFormActionUrl () возвращает метод $this->getUrl('newsletter/subscriber/new', array('_secure' => true)), который принадлежит его родительскому Mage_Core_Block_Template (я имею в виду метод getURL()). Эта часть не имеет значения для нас.

См. Параметр, передаваемый в функцию getURL (), которая называется newsletter / subscriber / new. Первая часть "newsletter" - это имя модуля (app/code/code/Mage/newsletter), вторая часть "subscriber" - это имя контроллера (app/code/code/Mage/newsletter/controllers/SubscriberController) и третья часть "new" - это метод newAction в контроллере SubscriberController.

К именам контроллеров добавляется суффикс Controller, а к именам функций - Action. (Благодаря платформе Phalcon, чтобы помочь понять это)

Теперь в методе newAction() вы можете видеть, что по умолчанию только электронная почта публикуется как
$email = (строка) $this->getRequest()->getPost('email');

То, что я сделал, я клонировал шаблон subscribe.phtml с именем custom-newsletter.phtml и добавил два поля с именами "страна" и "пол". Затем добавлены следующие строки в newAction():

        $country            = (string) $this->getRequest()->getPost('country');
        $gender             = (string) $this->getRequest()->getPost('gender');

Теперь в строке № 67 SubscriberController (внутри метода newAction()) есть код:

$status = Mage::getModel('newsletter/subscriber')->subscribe($email);

Эта строка вызывает метод подписки app/code/code/Mage/newsletter/Model/Subscriber.php и передает в него электронную почту $, которая публикуется из формы рассылки. Я изменил строку как:

$ status = Mage:: getModel ('рассылка / подписчик')-> подписаться ($email,$country,$ пол);

Теперь мне нужно отредактировать приложение / code / code / Mage / newsletter / Model / Subscriber.php

Когда мы говорим о моделях, мы говорим о таблице базы данных, на которую ссылается модель. Название модели - Subscriber, оно принадлежит модулю Newsletter, поэтому таблица базы данных, на которую влияет эта модель, - newsletter_subscriber.

С этой части на вопрос @Hassan Ali Sshahzad будет дан ответ.

Я добавил туда два новых столбца с именем: subscriber_country и subscriber_gender. Теперь система Magento автоматически делает доступными функции получения и установки для этих столбцов со следующим именем:

function getSubscriberCountry () {} function setSubscriberCountry ($ country_name) {}

Итак, все, что я должен был сделать в модели:

  1. Отредактируйте метод подписки ($email), чтобы подписаться ($email,$country,$ пол)
  2. Добавьте следующий код в функцию подписки ($email,$country,$ пол) прямо перед оператором try следующим образом:

    $this->setSubscriberCountry($country);
    $this->setSubscriberGender($gender);
    

попробуйте { $this->save()


Метод Хасана сыграл ключевую роль в моем понимании MVC Magento, так что это возвращение с моей стороны.

Другие вопросы по тегам