Skip to content
Merged
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
<?php

class Algolia_Algoliasearch_Block_Checkout_Success_Conversion extends Mage_Core_Block_Template
{
/** @var Mage_Sales_Model_Order */
protected $_order;

protected function _construct()
{
parent::_construct();

if ($orderId = Mage::getSingleton('checkout/session')->getLastOrderId()) {
$this->_order = Mage::getModel('sales/order')->load($orderId);
}
}

/**
* @return string
*/
public function getOrderItemsConversionJson()
{
$orderItemsData = array();
$orderItems = $this->_order->getAllVisibleItems();

/** @var Item $item */
foreach ($orderItems as $item) {
if ($item->getData('algoliasearch_query_param') !== '') {
$orderItemsData[$item->getProductId()] = json_decode($item->getData('algoliasearch_query_param'));
}
}

return Mage::helper('core')->jsonEncode($orderItemsData);
}

public function _toHtml()
{
if ($this->_order
&& Mage::helper('algoliasearch/config')->isClickConversionAnalyticsEnabled($this->_order->getStoreId())
&& Mage::helper('algoliasearch/config')->getConversionAnalyticsMode($this->_order->getStoreId()) === 'place_order'
) {
return parent::_toHtml();
}

return '';
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
<?php

class Algolia_Algoliasearch_Model_Observer_Conversion
{
protected $_analyticsParams = array(
'queryID',
'indexName',
'objectID',
);

/**
* @param null $storeId
* @return bool
*/
protected function _isOrderConversionTrackingEnabled($storeId = null)
{
return Mage::helper('algoliasearch/config')->isClickConversionAnalyticsEnabled($storeId)
&& Mage::helper('algoliasearch/config')->getConversionAnalyticsMode($storeId) === 'place_order';
}

/**
* @param array $params
* @return bool
*/
protected function _hasRequiredParameters($params = array())
{
foreach ($this->_analyticsParams as $requiredParam) {
if (!isset($params[$requiredParam])) {
return false;
}
}

return true;
}

/**
* @event catalog_controller_product_init_before
*/
public function setAlgoliaParamsToSession(Varien_Event_Observer $observer)
{
$checkoutSession = Mage::getSingleton('checkout/session');
if (!$this->_isOrderConversionTrackingEnabled($checkoutSession->getQuote()->getStoreId())) {
return;
}

/** @var Mage_Core_Controller_Front_Action $controllerAction */
$controllerAction = $observer->getEvent()->getControllerAction();
$params = $controllerAction->getRequest()->getParams();

if (!$this->_hasRequiredParameters($params)) {
return;
}

$conversionData = array(
'queryID' => $params['queryID'],
'indexName' => $params['indexName'],
'objectID' => $params['objectID'],
);

$session = Mage::getSingleton('core/session', array('name' => 'frontend'));
$session->setData('algolia_conversion_parameters', Mage::helper('core')->jsonEncode($conversionData));
}

/**
* @event checkout_cart_product_add_after
*/
public function saveAlgoliaParamToQuoteItem(Varien_Event_Observer $observer)
{
/** @var Mage_Sales_Model_Quote_Item $quoteItem */
$quoteItem = $observer->getEvent()->getQuoteItem();
/** @var Mage_Catalog_Model_Product $product */
$product = $observer->getEvent()->getProduct();

if ($this->_isOrderConversionTrackingEnabled($product->getStoreId())) {
$session = Mage::getSingleton('core/session');
$quoteItem->setData('algoliasearch_query_param', $session->getData('algolia_conversion_parameters'));
$session->unsetData('algolia_conversion_parameters');
}
}
}
30 changes: 29 additions & 1 deletion app/code/community/Algolia/Algoliasearch/etc/config.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<config>
<modules>
<Algolia_Algoliasearch>
<version>1.16.0</version>
<version>1.17.0</version>
</Algolia_Algoliasearch>
</modules>
<frontend>
Expand Down Expand Up @@ -148,6 +148,27 @@
</algolia_savepage>
</observers>
</cms_page_save_before>

<catalog_controller_product_init_before>
<observers>
<algolia_conversion_save_request_to_session>
<type>singleton</type>
<class>algoliasearch/observer_conversion</class>
<method>setAlgoliaParamsToSession</method>
</algolia_conversion_save_request_to_session>
</observers>
</catalog_controller_product_init_before>

<checkout_cart_product_add_after>
<observers>
<algolia_conversion_save_quote_item>
<type>singleton</type>
<class>algoliasearch/observer_conversion</class>
<method>saveAlgoliaParamToQuoteItem</method>
</algolia_conversion_save_quote_item>
</observers>
</checkout_cart_product_add_after>

</events>
<resources>
<algoliasearch_setup>
Expand Down Expand Up @@ -181,6 +202,13 @@
</algolia_delete_products>
</indexer>
</index>
<fieldsets>
<sales_convert_quote_item>
<algoliasearch_query_param>
<to_order_item>*</to_order_item>
</algoliasearch_query_param>
</sales_convert_quote_item>
</fieldsets>
</global>
<default>
<algoliasearch>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<?php
/** @var Mage_Core_Model_Resource_Setup $installer */
$installer = $this;
$installer->startSetup();

$setup = new Mage_Sales_Model_Resource_Setup('core_setup');

$setup->addAttribute(
'quote_item',
'algoliasearch_query_param',
array(
'type' => Varien_Db_Ddl_Table::TYPE_TEXT,
'grid' => false,
'comment' => 'AlgoliaSearch Conversion Query Parameters'
)
);

$setup->addAttribute(
'order_item',
'algoliasearch_query_param',
array(
'type' => Varien_Db_Ddl_Table::TYPE_TEXT,
'grid' => false,
'comment' => 'AlgoliaSearch Conversion Query Parameters'
)
);

$installer->endSetup();
6 changes: 6 additions & 0 deletions app/design/frontend/base/default/layout/algoliasearch.xml
Original file line number Diff line number Diff line change
Expand Up @@ -101,4 +101,10 @@
</reference>
</algolia_search_handle_click_conversion_analytics>

<checkout_onepage_success>
<reference name="before_body_end">
<block type="algoliasearch/checkout_success_conversion" name="algolia.order.conversion" template="algoliasearch/checkout/success/conversion.phtml" />
</reference>
</checkout_onepage_success>

</layout>
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,13 @@ if ($config->isCustomerGroupsEnabled($storeId)) {

<!-- Product hit template -->
<script type="text/template" id="autocomplete_products_template">
<a class="algoliasearch-autocomplete-hit" href="{{url}}">
<a class="algoliasearch-autocomplete-hit"
{{^__queryID}} href="{{url}}" {{/__queryID}}
{{#__queryID}} href="{{urlForInsights}}" {{/__queryID}}
data-objectid="{{objectID}}"
data-position="{{__position}}"
data-queryid="{{__queryID}}"
>
{{#thumbnail_url}}
<div class="thumb"><img src="{{thumbnail_url}}" /></div>
{{/thumbnail_url}}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?php
/** @var Algolia_Algoliasearch_Block_Checkout_Success_Conversion $this */
$orderItemsJson = $this->getOrderItemsConversionJson();
?>

<script type="text/javascript">
var algoliaOrderConversionJson = <?php echo $orderItemsJson ?>;
</script>
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,12 @@ if ($config->isCustomerGroupsEnabled($storeId)) {

<div class="col-md-4 col-sm-6">
<div class="result-wrapper">
<a href="{{url}}" class="result algolia-clearfix" data-objectid="{{objectID}}" data-position="{{__position}}">
<a href="{{__urlForInsights}}"
class="result algolia-clearfix"
data-objectid="{{objectID}}"
data-position="{{__position}}"
data-queryid="{{__queryID}}"
>
<div class="result-content">
<div class="result-thumbnail">
{{#image_url}}<img src="{{{ image_url }}}"/>{{/image_url}}
Expand Down Expand Up @@ -71,4 +76,4 @@ if ($config->isCustomerGroupsEnabled($storeId)) {
</div>
</a>
</div>
</div>
</div>
Loading