我们一直在尝试修改Customer.php文件(导入/导出),以便在从CSV文件导入客户时自动发送新帐户详细信息。
我们在正确的区域工作,因为我们删除了一个简单的mail()调用,该调用被称为(我们收到了电子邮件)每个新行。当试图让它生成一个新的随机密码并发出新的帐户详细信息时出现问题 - 它从不发送任何邮件,我们无法弄清楚原因!代码如下(从app / code / local / Mage / ImportExport / Model / Import / Entity / Customer.php编辑)
/**
* Update and insert data in entity table.
*
* @param array $entityRowsIn Row for insert
* @param array $entityRowsUp Row for update
* @return Mage_ImportExport_Model_Import_Entity_Customer
*/
protected function _saveCustomerEntity(array $entityRowsIn, array $entityRowsUp)
{
if ($entityRowsIn) {
$this->_connection->insertMultiple($this->_entityTable, $entityRowsIn);
// BEGIN: Send New Account Email
$cust = Mage::getModel('customer/customer');
$cust->setWebsiteId(Mage::app()->getWebsite()->getId());
foreach($entityRowsIn as $idx => $u){
// Failed
$cust->loadByEmail($u['email']);
$cust->setConfirmation(NULL);
$cust->setPassword($cust->generatePassword(8));
$cust->save();
$cust->sendNewAccountEmail();
//$cust->sendPasswordReminderEmail(); // this call doesnt work either
}
// END: Send New Account Email
}
if ($entityRowsUp) {
$this->_connection->insertOnDuplicate(
$this->_entityTable,
$entityRowsUp,
array('group_id', 'store_id', 'updated_at', 'created_at')
);
}
return $this;
}
答案 0 :(得分:2)
为了提高magento'缓存'对象的性能,所以在尝试在循环中加载对象时,你需要加载一个新实例或者调用它reset()方法
$website_id = Mage::app()->getWebsite()->getId();
foreach($entityRowsIn as $idx => $u){
$cust = Mage::getModel('customer/customer');
$cust->setWebsiteId($website_id);
$cust->loadByEmail($u['email']);
$cust->setPassword($cust->generatePassword(8));
$cust->save();
$cust->sendNewAccountEmail(); // if you are getting 2 email then remove this line
}
如果您加载了大量客户,那么您可能会遇到内存问题,我需要使用reset()
来查看其他技术
如果从Magento的“管理”部分运行此代码,则需要确保设置正确的网站ID(Mage::app()->getWebsite()->getId()
将返回错误的网站ID。)
从前端开始,此代码可以正常工作,但对于管理员工作,您应使用“1”或任何前端网站ID,因为getId()方法在管理区域中返回“0”!小骗局,但让我去了几个小时!
答案 1 :(得分:0)
我找到了关于如何为现有客户自动生成密码的脚本
$passwordLength = 10;
$customers = Mage::getModel('customer/customer')->getCollection();
foreach ($customers as $customer){
$customer->setPassword($customer->generatePassword($passwordLength))->save();
$customer->sendNewAccountEmail();
}