Skip to content

Commit 26a5c04

Browse files
authored
Update search-insights and compatibility (#1129)
1 parent 8355351 commit 26a5c04

File tree

12 files changed

+321
-56
lines changed

12 files changed

+321
-56
lines changed
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
<?php
2+
3+
class Algolia_Algoliasearch_Block_Checkout_Success_Conversion extends Mage_Core_Block_Template
4+
{
5+
/** @var Mage_Sales_Model_Order */
6+
protected $_order;
7+
8+
protected function _construct()
9+
{
10+
parent::_construct();
11+
12+
if ($orderId = Mage::getSingleton('checkout/session')->getLastOrderId()) {
13+
$this->_order = Mage::getModel('sales/order')->load($orderId);
14+
}
15+
}
16+
17+
/**
18+
* @return string
19+
*/
20+
public function getOrderItemsConversionJson()
21+
{
22+
$orderItemsData = array();
23+
$orderItems = $this->_order->getAllVisibleItems();
24+
25+
/** @var Item $item */
26+
foreach ($orderItems as $item) {
27+
if ($item->getData('algoliasearch_query_param') !== '') {
28+
$orderItemsData[$item->getProductId()] = json_decode($item->getData('algoliasearch_query_param'));
29+
}
30+
}
31+
32+
return Mage::helper('core')->jsonEncode($orderItemsData);
33+
}
34+
35+
public function _toHtml()
36+
{
37+
if ($this->_order
38+
&& Mage::helper('algoliasearch/config')->isClickConversionAnalyticsEnabled($this->_order->getStoreId())
39+
&& Mage::helper('algoliasearch/config')->getConversionAnalyticsMode($this->_order->getStoreId()) === 'place_order'
40+
) {
41+
return parent::_toHtml();
42+
}
43+
44+
return '';
45+
}
46+
}
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
<?php
2+
3+
class Algolia_Algoliasearch_Model_Observer_Conversion
4+
{
5+
protected $_analyticsParams = array(
6+
'queryID',
7+
'indexName',
8+
'objectID',
9+
);
10+
11+
/**
12+
* @param null $storeId
13+
* @return bool
14+
*/
15+
protected function _isOrderConversionTrackingEnabled($storeId = null)
16+
{
17+
return Mage::helper('algoliasearch/config')->isClickConversionAnalyticsEnabled($storeId)
18+
&& Mage::helper('algoliasearch/config')->getConversionAnalyticsMode($storeId) === 'place_order';
19+
}
20+
21+
/**
22+
* @param array $params
23+
* @return bool
24+
*/
25+
protected function _hasRequiredParameters($params = array())
26+
{
27+
foreach ($this->_analyticsParams as $requiredParam) {
28+
if (!isset($params[$requiredParam])) {
29+
return false;
30+
}
31+
}
32+
33+
return true;
34+
}
35+
36+
/**
37+
* @event catalog_controller_product_init_before
38+
*/
39+
public function setAlgoliaParamsToSession(Varien_Event_Observer $observer)
40+
{
41+
$checkoutSession = Mage::getSingleton('checkout/session');
42+
if (!$this->_isOrderConversionTrackingEnabled($checkoutSession->getQuote()->getStoreId())) {
43+
return;
44+
}
45+
46+
/** @var Mage_Core_Controller_Front_Action $controllerAction */
47+
$controllerAction = $observer->getEvent()->getControllerAction();
48+
$params = $controllerAction->getRequest()->getParams();
49+
50+
if (!$this->_hasRequiredParameters($params)) {
51+
return;
52+
}
53+
54+
$conversionData = array(
55+
'queryID' => $params['queryID'],
56+
'indexName' => $params['indexName'],
57+
'objectID' => $params['objectID'],
58+
);
59+
60+
$session = Mage::getSingleton('core/session', array('name' => 'frontend'));
61+
$session->setData('algolia_conversion_parameters', Mage::helper('core')->jsonEncode($conversionData));
62+
}
63+
64+
/**
65+
* @event checkout_cart_product_add_after
66+
*/
67+
public function saveAlgoliaParamToQuoteItem(Varien_Event_Observer $observer)
68+
{
69+
/** @var Mage_Sales_Model_Quote_Item $quoteItem */
70+
$quoteItem = $observer->getEvent()->getQuoteItem();
71+
/** @var Mage_Catalog_Model_Product $product */
72+
$product = $observer->getEvent()->getProduct();
73+
74+
if ($this->_isOrderConversionTrackingEnabled($product->getStoreId())) {
75+
$session = Mage::getSingleton('core/session');
76+
$quoteItem->setData('algoliasearch_query_param', $session->getData('algolia_conversion_parameters'));
77+
$session->unsetData('algolia_conversion_parameters');
78+
}
79+
}
80+
}

app/code/community/Algolia/Algoliasearch/etc/config.xml

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<config>
33
<modules>
44
<Algolia_Algoliasearch>
5-
<version>1.16.0</version>
5+
<version>1.17.0</version>
66
</Algolia_Algoliasearch>
77
</modules>
88
<frontend>
@@ -148,6 +148,27 @@
148148
</algolia_savepage>
149149
</observers>
150150
</cms_page_save_before>
151+
152+
<catalog_controller_product_init_before>
153+
<observers>
154+
<algolia_conversion_save_request_to_session>
155+
<type>singleton</type>
156+
<class>algoliasearch/observer_conversion</class>
157+
<method>setAlgoliaParamsToSession</method>
158+
</algolia_conversion_save_request_to_session>
159+
</observers>
160+
</catalog_controller_product_init_before>
161+
162+
<checkout_cart_product_add_after>
163+
<observers>
164+
<algolia_conversion_save_quote_item>
165+
<type>singleton</type>
166+
<class>algoliasearch/observer_conversion</class>
167+
<method>saveAlgoliaParamToQuoteItem</method>
168+
</algolia_conversion_save_quote_item>
169+
</observers>
170+
</checkout_cart_product_add_after>
171+
151172
</events>
152173
<resources>
153174
<algoliasearch_setup>
@@ -181,6 +202,13 @@
181202
</algolia_delete_products>
182203
</indexer>
183204
</index>
205+
<fieldsets>
206+
<sales_convert_quote_item>
207+
<algoliasearch_query_param>
208+
<to_order_item>*</to_order_item>
209+
</algoliasearch_query_param>
210+
</sales_convert_quote_item>
211+
</fieldsets>
184212
</global>
185213
<default>
186214
<algoliasearch>
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
/** @var Mage_Core_Model_Resource_Setup $installer */
3+
$installer = $this;
4+
$installer->startSetup();
5+
6+
$setup = new Mage_Sales_Model_Resource_Setup('core_setup');
7+
8+
$setup->addAttribute(
9+
'quote_item',
10+
'algoliasearch_query_param',
11+
array(
12+
'type' => Varien_Db_Ddl_Table::TYPE_TEXT,
13+
'grid' => false,
14+
'comment' => 'AlgoliaSearch Conversion Query Parameters'
15+
)
16+
);
17+
18+
$setup->addAttribute(
19+
'order_item',
20+
'algoliasearch_query_param',
21+
array(
22+
'type' => Varien_Db_Ddl_Table::TYPE_TEXT,
23+
'grid' => false,
24+
'comment' => 'AlgoliaSearch Conversion Query Parameters'
25+
)
26+
);
27+
28+
$installer->endSetup();

app/design/frontend/base/default/layout/algoliasearch.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,4 +101,10 @@
101101
</reference>
102102
</algolia_search_handle_click_conversion_analytics>
103103

104+
<checkout_onepage_success>
105+
<reference name="before_body_end">
106+
<block type="algoliasearch/checkout_success_conversion" name="algolia.order.conversion" template="algoliasearch/checkout/success/conversion.phtml" />
107+
</reference>
108+
</checkout_onepage_success>
109+
104110
</layout>

app/design/frontend/base/default/template/algoliasearch/autocomplete/product.phtml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,13 @@ if ($config->isCustomerGroupsEnabled($storeId)) {
1919

2020
<!-- Product hit template -->
2121
<script type="text/template" id="autocomplete_products_template">
22-
<a class="algoliasearch-autocomplete-hit" href="{{url}}">
22+
<a class="algoliasearch-autocomplete-hit"
23+
{{^__queryID}} href="{{url}}" {{/__queryID}}
24+
{{#__queryID}} href="{{urlForInsights}}" {{/__queryID}}
25+
data-objectid="{{objectID}}"
26+
data-position="{{__position}}"
27+
data-queryid="{{__queryID}}"
28+
>
2329
{{#thumbnail_url}}
2430
<div class="thumb"><img src="{{thumbnail_url}}" /></div>
2531
{{/thumbnail_url}}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?php
2+
/** @var Algolia_Algoliasearch_Block_Checkout_Success_Conversion $this */
3+
$orderItemsJson = $this->getOrderItemsConversionJson();
4+
?>
5+
6+
<script type="text/javascript">
7+
var algoliaOrderConversionJson = <?php echo $orderItemsJson ?>;
8+
</script>

app/design/frontend/base/default/template/algoliasearch/instantsearch/hit-item.phtml

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,12 @@ if ($config->isCustomerGroupsEnabled($storeId)) {
1919

2020
<div class="col-md-4 col-sm-6">
2121
<div class="result-wrapper">
22-
<a href="{{url}}" class="result algolia-clearfix" data-objectid="{{objectID}}" data-position="{{__position}}">
22+
<a href="{{__urlForInsights}}"
23+
class="result algolia-clearfix"
24+
data-objectid="{{objectID}}"
25+
data-position="{{__position}}"
26+
data-queryid="{{__queryID}}"
27+
>
2328
<div class="result-content">
2429
<div class="result-thumbnail">
2530
{{#image_url}}<img src="{{{ image_url }}}"/>{{/image_url}}
@@ -71,4 +76,4 @@ if ($config->isCustomerGroupsEnabled($storeId)) {
7176
</div>
7277
</a>
7378
</div>
74-
</div>
79+
</div>

0 commit comments

Comments
 (0)