Отслеживание клиентов и заказов 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. Когда клиент размещает заказ, строка отслеживания сохраняется в таблице sales_flat_order в столбце order_campaign_params. Тогда строка отслеживания выглядит так

utm_source=abc|utm_medium=|utm_content=|utm_campaign=|utm_term=

Но он сохраняет данные в виде строки в одном поле, но я хочу сохранить данные отдельно в 5 разных полях отдельно. Я пытался это сделать, но не смог этого сделать. Пожалуйста, посмотрите код

Данные.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;
    }
}

наблюдатель.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();

Я уже сделал 5 полей в таблице sales_flat_order, но не смог сохранить данные по отдельности в разных полях. Пожалуйста, посмотрите приведенный выше код и решите мою проблему как можно скорее. Спасибо


person Prince    schedule 20.06.2015    source источник
comment
Пожалуйста, помогите мне, это очень срочно ......... спасибо   -  person Prince    schedule 20.06.2015


Ответы (1)


Попробуйте сохранить каждую переменную как собственный ключ сеанса.

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();
...

or

$session->getData('utm_source');

Вы также можете Создать пользовательское пространство имен сеанса с моделью в Magento

person Renon Stewart    schedule 21.06.2015
comment
не могли бы вы обновить мою кодировку, чтобы сделать ее полностью понятной... спасибо - person Prince; 22.06.2015