我也有类似的问题。但是,就我而言,我应该在时事通讯表格中添加“国家”和“性别”字段。所以,在深入挖掘核心几个小时后,我发现了这一点。下面是解释:
在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){}
所以,我在模型中要做的就是:
- 将方法 subscribe($email) 编辑为 subscribe($email,$country,$gender)
在 try 语句之前的 subscribe($email,$country,$gender) 函数中添加以下代码,如下所示:
$this->setSubscriberCountry($country);
$this->setSubscriberGender($gender);
尝试{ $this->save()
Hassan 的方法在我理解 Magento 的 MVC 方面发挥了关键作用,因此它从我身边回归。