为Newsletter Subscriber添加'subscription_date'和'user_ip_address'字段,并在Magento的管理面板中显示

时间:2012-12-05 15:17:18

标签: magento-1.7

我想为新闻稿订阅者添加两个自定义字段,客户订阅的日期及其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();

如何在“简报” - >“简报订阅者”下的“管理”面板中显示?

2 个答案:

答案 0 :(得分:7)

我没有找到任何人的解决方案或帮助。 我砰然一声,找到了解决方案,将来非常简单的希望可能会有一些时间由这篇文章保存: 1)在表“newsletter_subscriber”中添加列,在我的情况下说“subscription_date”和“sub_ip_address” 2)在文件@ two place中添加以下两行 应用\代码\核心\法师\通讯\模型\ Subscriber.php

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

一个地方:在函数中:公共函数订阅($ 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'   =>    '----'
        ));

现在结束。 **这是我花费时间的地方,最后我在hit和trieal基础上添加了这个功能,但它有效。 来自Core magento团队的人plz解释了为什么这个{setSubscriptionDate()}函数有效?我没有宣布这个功能的任何人。 它似乎显示了intellisense检测表字段?

答案 1 :(得分:0)

我也有类似的问题。但是,在我的情况下,我应该在简报表格中添加“国家”和“性别”字段。因此,在挖掘核心数小时后,我发现了这一点。以下是解释:

app / design / frontend // default / template / newsletter / subscribe.phtml 中, 表单有getFormActionUrl()?>在其行动领域。这引用了app / code / core / Mage / Newsletter / Block / Subscribe.php

subscirbe.phtml文件中使用的$ this对象引用此类(即Mage_Newsletter_Block_Subscribe),因此subscribe.phtml文件中的 $ this-&gt; getFormActionUrl()引用函数< strong>此类的getFormActionUrl()。

现在,这个getFormActionUrl()返回一个方法$ this-&gt; getUrl('newsletter / subscriber / new',array('_ secure'=&gt; true))属于它的父Mage_Core_Block_Template(我的意思是方法)使用getURL())。这部分对我们来说并不重要。

查看传递给getURL()函数的参数 newsletter / subscriber / new 第一部分“时事通讯”是模块名称(app / code / code / Mage / newsletter),第二部分“subscriber”是控制器名称(app / code / code / Mage / newsletter / controllers / SubscriberController)和第三部分part“new”是控制器SubscriberController中的方法newAction。

控制器名称后缀为控制器,函数名称后缀为操作。 (感谢Phalcon框架帮助理解这一点)

现在,在newAction()方法中,您可以看到默认情况下只发送电子邮件 作为
    $ email =(string)$ this-&gt; getRequest() - &gt; getPost('email');

我所做的是,我使用名称custom-newsletter.phtml克隆了subscribe.phtml模板,并添加了名为“country”和“gender”的两个字段。然后在newAction()中添加以下行:

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

现在在SubscriberController的第67行(在newAction()方法内)有一个代码:

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

这一行正在调用app / code / code / Mage / newsletter / Model / Subscriber.php的 subscribe 方法,并将从简报表单发布的$ email传递给它。我将该行修改为:

$ status = Mage :: getModel('newsletter / subscriber') - &gt; subscribe($ email,$ country,$ gender);

现在,我必须编辑app / code / code / Mage / newsletter / Model / Subscriber.php

当我们谈论模型时,我们讨论的是模型引用的数据库表。模型名称是Subscriber,它属于模块Newsletter,因此,此模型影响的数据库表是 newsletter_subscriber

关于@Hassan的这一部分,Ali Sshahzad的问题将得到解答。

我在那里添加了两个名为subscriber_country和subscriber_gender的新列。 现在,Magento系统自动为这些列提供getter和setter函数,名称如下:

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

所以,我在模型中所要做的就是:

  1. 编辑方法订阅($ email)以订阅($ email,$ country,$ gender)
  2. 在try语句之前的subscribe($ email,$ country,$ gender)函数中添加以下代码,如下所示:

    $this->setSubscriberCountry($country);
    $this->setSubscriberGender($gender);
    
  3. 尝试{    $这 - &GT;保存()


    哈桑的方法在我对Magento的MVC的理解中发挥了关键作用,所以它从我这边回归。