Magento为客人/未经证实的用户放弃了购物车

时间:2012-11-27 12:15:37

标签: magento shopping-cart magento-1.5

在Magento中,废弃的购物车仅适用于经过验证的注册用户。有没有办法为访客和未经证实的用户捕获它 programmaticaly

还有一种方法可以通过电子邮件发送警报吗?

请告诉我至少应该从哪里开始。我在一个论坛上发现,使用以下SQL可以获得所有被遗弃的购物车,但我发现其中一些也丢失了。

SELECT entity_id, customer_firstname, customer_email, items_count, grand_total, created_at
FROM sales_flat_quote
WHERE entity_id NOT IN (SELECT quote_item_id AS quote_id FROM sales_flat_order_item) 
AND items_count >0
AND customer_email IS NOT NULL
ORDER BY `sales_flat_quote`.`created_at` DESC

3 个答案:

答案 0 :(得分:2)

我使用第三方系统来做这样的事情。它们的成本很高,但可以成为一种有价值的工具,特别是如果你有冲动的购买物品。由于用户未在网站上登录,因此Magento只能使用他们的会话将他们的购物篮存储为报价,因此除了内容之外,您无法获得有关客户或废弃购物车的任何详细信息。

如果您只对添加到人们抛弃的篮子中的项目感兴趣,您可以创建自定义SQL,查看您在示例中标识的两个表。 Magento为每个购物车创建一个报价,当客户购买时,该报价会转换为订单,因此sales_quotes是表格,是您需要开始的地方。

关于第三方服务,它们通常涉及在网站上的文本框上设置监听器,例如电子邮件文本框,名称等,在修改字段时使用ajax发布数据。如果您已启用并且客户未能完成购买,则可以在访客结账期间捕获数据。他们也会这样做以添加到购物车按钮,并在他们使用网站时开始建立客户的定制配置文件以及购物车中的商品。

当有人命令你然后再打电话给另一个ajax请求,该请求告诉客户已购买的第三方,而那些没有得到最终请求的那个是它被归类为废弃的购物车。这些系统中的大多数将在您定义的一定时间和天数后通过电子邮件发送给客户,您通常可以在不同的时间段发送许多电子邮件。您通常也可以查看已收集的所有废弃购物车和客户数据。

Magento内置废弃的推车可以基本使用,但我不会依赖它。 AFAIK无法触发废弃购物车的电子邮件。如上所述的电子邮件重新定位可以非常有效地重新捕获废弃的销售。

看看有人像exacttarget或搜索magento电子邮件废弃的购物车模块,因为我相信有一些将与magento即插即用。

答案 1 :(得分:2)

我遇到了同样的问题,并且能够通过以下方法将其解决为magento 1.9.2:

<强>步骤1:

从中复制 Collection.php 文件 应用/代码/核心/法师/报告/型号/资源/报价/

应用/代码/本地/法师/报告/型号/资源/报价/

<强>步骤-2:

从第194行替换以下代码

$customerName = $adapter->getConcatSql(array('cust_fname.value', 'cust_mname.value', 'cust_lname.value',), ' ');
    $this->getSelect()
        ->joinInner(
            array('cust_email' => $attrEmailTableName),
            'cust_email.entity_id = main_table.customer_id',
            array('email' => 'cust_email.email')
        )
        ->joinInner(
            array('cust_fname' => $attrFirstnameTableName),
            implode(' AND ', array(
                'cust_fname.entity_id = main_table.customer_id',
                $adapter->quoteInto('cust_fname.attribute_id = ?', (int) $attrFirstnameId),
            )),
            array('firstname' => 'cust_fname.value')
        )
        ->joinInner(
            array('cust_mname' => $attrMiddlenameTableName),
            implode(' AND ', array(
                'cust_mname.entity_id = main_table.customer_id',
                $adapter->quoteInto('cust_mname.attribute_id = ?', (int) $attrMiddlenameId),
            )),
            array('middlename' => 'cust_mname.value')
        )
        ->joinInner(
            array('cust_lname' => $attrLastnameTableName),
            implode(' AND ', array(
                'cust_lname.entity_id = main_table.customer_id',
                 $adapter->quoteInto('cust_lname.attribute_id = ?', (int) $attrLastnameId)
            )),
            array(
                'lastname'      => 'cust_lname.value',
                'customer_name' => $customerName
            )
        );

    $this->_joinedFields['customer_name'] = $customerName;
    $this->_joinedFields['email']         = 'cust_email.email';

        $customerName = $adapter->getConcatSql(array('main_table.customer_firstname', 'main_table.customer_middlename', 'main_table.customer_lastname',), ' ');
    $this->getSelect()
            ->columns(
                     array(
                         'email' => new Zend_Db_Expr('main_table.customer_email'), 
                         'firstname'  => new Zend_Db_Expr('main_table.customer_firstname'),
                         'middlename' => new Zend_Db_Expr('main_table.customer_middlename'),
                         'lastname'   => new Zend_Db_Expr('main_table.customer_lastname'),
                         'customer_name' => $customerName
                        )
            )
            ->where('main_table.customer_email IS NOT NULL');


    $this->_joinedFields['customer_name'] = $customerName;
    $this->_joinedFields['email']         = 'main_table.customer_email';

答案 2 :(得分:0)

如果您知道引用ID,则可以为访客加载购物车。请尝试以下代码:

$quote = Mage::getModel('sales/quote')->loadByIdWithoutStore($quoteId);
if ($quote) {
                      Mage::getSingleton('checkout/session')->setQuoteId($quoteId);
                    Mage::getSingleton('checkout/cart')->setQuote($quote);                      
}