2015-06-20 71 views
0

我是新的magento。 当我点击跟踪参数的网站:www.yoursite.com?utm_source=abc&utm_medium=def&utm_content=ghi&utm_campaign=jkl&utm_term=mno,参数被保存到会话和cookie。 当客户注册时,跟踪字符串将保存在customer_entity_varchar表中,作为属性customer_campaign_params。当客户下订单时,跟踪字符串将保存在order_campaign_params列中的sales_flat_order表中。然后 跟踪字符串看起来像Magento客户和订单跟踪

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安装-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升级-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个字段,但无法在不同的字段中单独保存数据。 请参阅上面的代码,尽快解决我的问题。 感谢

+0

请有人帮助我,因为它非常紧迫...........谢谢 – Prince

回答

0

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

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'); 

你也可以Create a custom Session Namespace with a Model in Magento

+0

你能否请更新我的编码,使其完全可以理解......谢谢 – Prince