1

我想为客户订阅的日期及其 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 下的管理面板中显示?

4

2 回答 2

7

我没有找到任何人的解决方案或帮助。我敲了敲脑袋,发现解决方案非常简单,希望将来可以通过这篇文章节省一些人的时间:1)在“newsletter_subscriber”表中添加列,在我的例子中是“subscription_date”和“sub_ip_address”2)添加以下两行在文件@两个地方 app\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()} 函数有效?我没有宣布任何人的这个功能。似乎它显示了智能感知来检测表字段?

于 2012-12-06T14:19:17.660 回答
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->getFormActionUrl()引用了这个类的函数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”是控制器SubscriberController中的newAction方法。

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

现在在 newAction() 方法中,您可以看到默认情况下,只有电子邮件被发布为
$email = (string) $this->getRequest()->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')->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 函数,名称如下:

函数 getSubscriberCountry(){} 函数 setSubscriberCountry($country_name){}

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

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

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

尝试{ $this->save()


Hassan 的方法在我理解 Magento 的 MVC 方面发挥了关键作用,因此它从我身边回归。

于 2015-01-07T10:14:37.670 回答