I am new in magento.
When i hit the site with tracking parameters: www.yoursite.com?utm_source=abc&utm_medium=def&utm_content=ghi&utm_campaign=jkl&utm_term=mno
, The parameters are saved to session and cookie.
When the customer signes up, the tracking string is saved in customer_entity_varchar
table as attribute customer_campaign_params
. When the customer places an order, the tracking string is saved in the sales_flat_order
table in the order_campaign_params
column.
The tracking string then looks like that
utm_source=abc|utm_medium=|utm_content=|utm_campaign=|utm_term=
But it saves the data as a string in one field but i want to save the data separately in 5 different fields separately. I tried to do it but unable to do that. Please see the code
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();
I already made the 5 fields in sales_flat_order table but unable to save data individually each in different fields. Please see the above code and solve my problem as soon as possible. Thanks
Try saving each variable as it own session key
To retrieve
or
You could also Create a custom Session Namespace with a Model in Magento