1

我们一直在尝试修改 Customer.php 文件 ( import/export ) 以使其在从 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;
}
4

2 回答 2

2

为了提高性能 magento 'caches' 对象,因此当尝试在循环中加载对象时,您需要加载新实例或调用它 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”!小问题,但让我走了几个小时!

于 2012-11-27T11:34:17.127 回答
0

我找到了这个关于如何为现有客户自动生成密码的脚本

$passwordLength = 10;
$customers = Mage::getModel('customer/customer')->getCollection();
foreach ($customers as $customer){
    $customer->setPassword($customer->generatePassword($passwordLength))->save();
    $customer->sendNewAccountEmail();
}
于 2013-01-21T10:02:30.637 回答