name = 'ganalytics'; $this->tab = 'analytics_stats'; $this->version = '1.3'; $this->author = 'PrestaShop'; $this->displayName = 'Google Analytics'; parent::__construct(); if ($this->id AND !Configuration::get('GANALYTICS_ID')) $this->warning = $this->l('You have not yet set your Google Analytics ID'); $this->description = $this->l('Integrate Google Analytics script into your shop'); $this->confirmUninstall = $this->l('Are you sure you want to delete your details ?'); } function install() { if (!parent::install() OR !$this->registerHook('header') OR !$this->registerHook('orderConfirmation')) return false; return true; } function uninstall() { if (!Configuration::deleteByName('GANALYTICS_ID') OR !parent::uninstall()) return false; return true; } public function getContent() { $output = '

Google Analytics

'; if (Tools::isSubmit('submitGAnalytics') AND ($gai = Tools::getValue('ganalytics_id'))) { Configuration::updateValue('GANALYTICS_ID', $gai); $output .= '
'.$this->l('Settings updated').'
'; } return $output.$this->displayForm(); } public function displayForm() { $output = '
'.$this->l('Settings').'

'.$this->l('Example:').' UA-1234567-1

'; $output .= '
'.$this->l('Help').'

'.$this->l('The first step of tracking e-commerce transactions is to enable e-commerce reporting for your website\'s profile.').'

'.$this->l('To enable e-Commerce reporting, please follow these steps:').'
  1. '.$this->l('Log in to your account').'
  2. '.$this->l('Click Edit next to the profile you would like to enable.').'
  3. '.$this->l('On the Profile Settings page, click Edit (next to Main Website Profile Information).').'
  4. '.$this->l('Change the e-Commerce Website radio button from No to Yes').'

'.$this->l('To set up your goals, enter Goal Information:').'

  1. '.$this->l('Return to Your Account main page').'
  2. '.$this->l('Find the profile for which you will be creating goals, then click Edit').'
  3. '.$this->l('Select one of the 4 goal slots available for that profile, then click Edit').'
  4. '.$this->l('Enter the Goal URL. Reaching this page marks a successful conversion.').'
  5. '.$this->l('Enter the Goal name as it should appear in your Google Analytics account.').'
  6. '.$this->l('Turn on Goal.').'

'.$this->l('Then, define a funnel by following these steps:').'

  1. '.$this->l('Enter the URL of the first page of your conversion funnel. This page should be a common page to all users working their way towards your Goal.').'
  2. '.$this->l('Enter a Name for this step.').'
  3. '.$this->l('If this step is a required step in the conversion process, mark the checkbox to the right of the step.').'
  4. '.$this->l('Continue entering goal steps until your funnel has been completely defined. You may enter up to 10 steps, or only one step.').'
'.$this->l('Finally, configure Additional settings by following the steps below:').'
  1. '.$this->l('If the URLs entered above are case sensitive, mark the checkbox.').'
  2. '.$this->l('Select the appropriate goal Match Type. (').''.$this->l('Learn more').' '.$this->l('about Match Types and how to choose the appropriate goal Match Type for your goal.)').'
  3. '.$this->l('Enter a Goal value. This is the value used in Google Analytics\' ROI calculations.').'
  4. '.$this->l('Click Save Changes to create this Goal and funnel, or Cancel to exit without saving.').'

'.$this->l('Demonstration: The order process').'

  1. '.$this->l('After having enabled your e-commerce reports and selected the respective profile enter \'order-confirmation.php\' as the targeted page URL.').'
  2. '.$this->l('Name this goal (for example \'Order process\')').'
  3. '.$this->l('Activate the goal').'
  4. '.$this->l('Add \'product.php\' as the first page of your conversion funnel').'
  5. '.$this->l('Give it a name (for example, \'Product page\')').'
  6. '.$this->l('Do not mark the \'required\' checkbox because the customer could be visiting directly from an \'adding to cart\' button such as in the homefeatured block on the homepage.').'
  7. '.$this->l('Continue by entering the following URLs as goal steps:').'
    • order/step0.html '.$this->l('(required)').'
    • authentication.php '.$this->l('(required)').'
    • order/step1.html '.$this->l('(required)').'
    • order/step2.html '.$this->l('(required)').'
    • order/step3.html '.$this->l('(required)').'
  8. '.$this->l('Check the \'Case sensitive\' option').'
  9. '.$this->l('Save this new goal').'
'; return $output; } function hookHeader($params) { global $smarty, $cookie; // hookOrderConfirmation() already send the sats bypass this step if (strpos($_SERVER['REQUEST_URI'], __PS_BASE_URI__.'order-confirmation.php') === 0) return ''; // Otherwise, create Google Analytics stats $ganalytics_id = Configuration::get('GANALYTICS_ID'); $multilang = (Language::countActiveLanguages() > 1); $defaultMetaOrder = Meta::getMetaByPage('order',(int)$cookie->id_lang); $order = ($multilang?((string)Tools::getValue('isolang').'/'):'').$defaultMetaOrder['url_rewrite']; $pageTrack = ((strpos($_SERVER['REQUEST_URI'], __PS_BASE_URI__.'order.php') === 0 || strpos($_SERVER['REQUEST_URI'], __PS_BASE_URI__.($multilang?((string)Tools::getValue('isolang').'/'):'').$defaultMetaOrder['url_rewrite']) === 0) ? '/order/step'.(int)(Tools::getValue('step')).'.html' : ''); $smarty->assign('ganalytics_id', $ganalytics_id); $smarty->assign('pageTrack', $pageTrack); $smarty->assign('isOrder', false); return $this->display(__FILE__, 'header.tpl'); } function hookFooter($params) { // for retrocompatibility if (!$this->isRegisteredInHook('header')) $this->registerHook('header'); return ; } function hookOrderConfirmation($params) { global $smarty; // Setting parameters $parameters = Configuration::getMultiple(array('PS_LANG_DEFAULT')); $order = $params['objOrder']; if (Validate::isLoadedObject($order)) { $deliveryAddress = new Address(intval($order->id_address_delivery)); $conversion_rate = 1; if ($order->id_currency != Configuration::get('PS_CURRENCY_DEFAULT')) { $currency = new Currency(intval($order->id_currency)); $conversion_rate = floatval($currency->conversion_rate); } // Order general information $trans = array('id' => intval($order->id), // order ID - required 'store' => htmlentities(Configuration::get('PS_SHOP_NAME')), // affiliation or store name 'total' => Tools::ps_round(floatval($order->total_paid) / floatval($conversion_rate), 2), // total - required 'tax' => '0', // tax 'shipping' => Tools::ps_round(floatval($order->total_shipping) / floatval($conversion_rate), 2), // shipping 'city' => addslashes($deliveryAddress->city), // city 'state' => '', // state or province 'country' => addslashes($deliveryAddress->country) // country ); // Product information $products = $order->getProducts(); foreach ($products AS $product) { $category = Db::getInstance()->getRow(' SELECT name FROM `'._DB_PREFIX_.'category_lang` , '._DB_PREFIX_.'product WHERE `id_product` = '.intval($product['product_id']).' AND `id_category_default` = `id_category` AND `id_lang` = '.intval($parameters['PS_LANG_DEFAULT'])); $items[] = array('OrderId' => intval($order->id), // order ID - required 'SKU' => addslashes($product['product_id']), // SKU/code - required 'Product' => addslashes($product['product_name']), // product name 'Category' => addslashes($category['name']), // category or variation 'Price' => Tools::ps_round(floatval($product['product_price_wt']) / floatval($conversion_rate), 2), // unit price - required 'Quantity' => addslashes(intval($product['product_quantity'])) //quantity - required ); } $ganalytics_id = Configuration::get('GANALYTICS_ID'); $pageTrack = (strpos($_SERVER['REQUEST_URI'], __PS_BASE_URI__.'order.php') === 0 ? '/order/step'.intval($step).'.html' : ''); $smarty->assign('items', $items); $smarty->assign('trans', $trans); $smarty->assign('ganalytics_id', $ganalytics_id); $smarty->assign('pageTrack', $pageTrack); $smarty->assign('isOrder', true); return $this->display(__FILE__, 'header.tpl'); } } }