Добавьте поля "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) {}
Итак, все, что я должен был сделать в модели:
- Отредактируйте метод подписки ($email), чтобы подписаться ($email,$country,$ пол)
Добавьте следующий код в функцию подписки ($email,$country,$ пол) прямо перед оператором try следующим образом:
$this->setSubscriberCountry($country); $this->setSubscriberGender($gender);
попробуйте { $this->save()
Метод Хасана сыграл ключевую роль в моем понимании MVC Magento, так что это возвращение с моей стороны.