Magento客户和订单跟踪

Magento客户和订单跟踪,magento,magento-1.9,magento-1.9.1,Magento,Magento 1.9,Magento 1.9.1,我是马根托的新手。 当我点击带有跟踪参数的站点时:www.yoursite.com?utm_source=abc&utm_medium=def&utm_content=ghi&utm_campaign=jkl&utm_term=mno,这些参数被保存到会话和cookie中。 当客户注册时,跟踪字符串作为属性customer\u action\u params保存在customer\u entity\u varchar表中。当客户下订单时,跟踪字符串将保存在order\u campaign\u p

我是马根托的新手。 当我点击带有跟踪参数的站点时:
www.yoursite.com?utm_source=abc&utm_medium=def&utm_content=ghi&utm_campaign=jkl&utm_term=mno
,这些参数被保存到会话和cookie中。 当客户注册时,跟踪字符串作为属性
customer\u action\u params
保存在
customer\u entity\u varchar
表中。当客户下订单时,跟踪字符串将保存在
order\u campaign\u params
列的
sales\u flat\u order
表中。 跟踪字符串如下所示

utm_source=abc|utm_medium=|utm_content=|utm_campaign=|utm_term=
但是它将数据作为字符串保存在一个字段中,但是我想将数据分别保存在5个不同的字段中。 我试着去做,但做不到。 请看代码

Data.php

class Robm_Tracking_Helper_Data extends Mage_Core_Helper_Abstract
{
    const CUSTOMER_CAMPAIGN_PARAMS = 'customer_campaign_params';
    const TRACKING_COOKIE_LIFETIME = 15552000;

    public function getCampaignParamsArray()
    {
        $request = Mage::app()->getRequest();
        $campaignParams = array(
            'utm_source' => utf8_encode($request->getParam('utm_source')),
            'utm_medium' => utf8_encode($request->getParam('utm_medium')),
            'utm_content' => utf8_encode($request->getParam('utm_content')),
            'utm_campaign' => utf8_encode($request->getParam('utm_campaign')),
            'utm_term' => utf8_encode($request->getParam('utm_term')), 
        );

        return $campaignParams;
    }

    public function getUtmSource()
    {
        $session = Mage::getSingleton('customer/session');
        $campaignString = $session->getData(Robm_Tracking_Helper_Data::CUSTOMER_CAMPAIGN_PARAMS);
        if(is_null($campaignString)) {
            $cookie = Mage::getSingleton('core/cookie');
            $campaignString = $cookie->get(Robm_Tracking_Helper_Data::CUSTOMER_CAMPAIGN_PARAMS);
        }

        $utmSource = '';
        $campaignStringArray = explode("|", $campaignString);
        foreach ($campaignStringArray as $campaignParam) {
            if (!empty($campaignParam) && strpos($campaignParam, "=")) {
                $keyValuePair = explode("=", $campaignParam);
                if ($keyValuePair[0] == 'utm_source') {
                    $utmSource = strtolower($keyValuePair[1]);
                    break;
                }
            }
        }

        return $utmSource;
    }


    public function getUtmSourceSession()
    {
        $session = Mage::getSingleton('customer/session');
        $campaignString = $session->getData(Robm_Tracking_Helper_Data::CUSTOMER_CAMPAIGN_PARAMS);

        $utmSource = '';
        $campaignStringArray = explode("|", $campaignString);
        foreach ($campaignStringArray as $campaignParam) {
            if (!empty($campaignParam) && strpos($campaignParam, "=")) {
                $keyValuePair = explode("=", $campaignParam);
                if ($keyValuePair[0] == 'utm_source') {
                    $utmSource = strtolower($keyValuePair[1]);
                    break;
                }
            }
        }

        return $utmSource;
    }
}
observer.php

class Robm_Tracking_Model_Observer
{
    public function setCampaignParamsToSessionAndCookie()
    {
        $request = Mage::app()->getRequest();

        $utmSource = $request->getParam('utm_source');
        if ($utmSource) {
            $campaignParams = Mage::helper("robm_tracking")->getCampaignParamsArray();


            $campaignString = '';
            foreach ($campaignParams as $key => $value) {
                $campaignString .= $key . '=' . $value . '|';               
            }

            // set data to customer session
            $session = Mage::getSingleton('customer/session');
            $session->setData(Robm_Tracking_Helper_Data::CUSTOMER_CAMPAIGN_PARAMS, $campaignString);

            // set cookie containing data
            $expire = time() + Robm_Tracking_Helper_Data::TRACKING_COOKIE_LIFETIME;
            $cookie = Mage::getSingleton('core/cookie');
            $cookie->set(Robm_Tracking_Helper_Data::CUSTOMER_CAMPAIGN_PARAMS, $campaignString, $expire, '/');
            $__fields = array('utf_source'=> $utmSource);

            $db = Mage::getSingleton('core/resource')->getConnection('core_write');

            try {
                $db->insertOnDuplicate($db->getTableName('robm_tracking'), array('date' => date('Y-m-d'), 'utm_source' => $utmSource, 'clicks' => 1),  array('clicks' => new Zend_Db_Expr('`clicks` +1')));
                $db->setData($__fields)->save()->getId();
            } catch (Exception $e) {
                Mage::logException($e);
            }

            return true;
        }

        return false;
    }


    public function addTrackingToCustomerCreate(Varien_Event_Observer $observer) {
        $cookie = Mage::getSingleton('core/cookie');
        $campaignString = $cookie->get(Robm_Tracking_Helper_Data::CUSTOMER_CAMPAIGN_PARAMS);
        if(is_null($campaignString) || $campaignString == '') {
            $campaignString = 'untracked';
        }

        $customerObject = $observer->getEvent()->getDataObject();
        if($customerObject->isObjectNew()) {
            $customerObject->setCustomerCampaignParams($campaignString);
        }

        return $this;
    }

    public function addTrackingToOrderCreate(Varien_Event_Observer $observer) {
        $cookie = Mage::getSingleton('core/cookie');
        $campaignString = $cookie->get(Robm_Tracking_Helper_Data::CUSTOMER_CAMPAIGN_PARAMS);
        if(is_null($campaignString) || $campaignString == '') {
            $campaignString = 'untracked';
        }

        $orderObject = $observer->getEvent()->getOrder();
        $orderObject->setOrderCampaignParams($campaignString);

        return $this;
    }
}
mysql4-install-0.0.1.php

$installer = $this;
$installer->startSetup();
$installer->run("ALTER TABLE {$this->getTable('sales_flat_order')} ADD `order_campaign_params` VARCHAR(255) NULL;");
$installer->endSetup();
mysql4-upgrade-0.0.1-0.0.2.php

$installer = $this;
$installer->startSetup();
$installer->addAttribute(
    'customer',
    'customer_campaign_params',
    array(
        'type'                      => 'varchar',
        'label'                     => 'Customer Campaign Params',
        'input'                     => 'text',
        'is_used_for_price_rules'   => 0,
        'required'                  => 0,
        'visible'                   => 0,
    )
);
$installer->endSetup();
我已经在sales_flat_order表中创建了5个字段,但无法在不同的字段中分别保存数据。 请查看以上代码并尽快解决我的问题。
谢谢

尝试将每个变量保存为它自己的会话密钥

class Robm_Tracking_Model_Observer
{
    public function setCampaignParamsToSessionAndCookie()
    {
        ......

            $campaignParams = Mage::helper("robm_tracking")->getCampaignParamsArray();

            // set data to customer session
            $session = Mage::getSingleton('customer/session');
            $session->setData($campaignParams);
取回

$session->getUtmSource(); 
$session->getUtmMedium();
...


您也可以

请任何人帮助我,因为它非常紧急……….谢谢您请更新我的编码,使其完全可以理解…谢谢
$session->getData('utm_source');