Version Notes
Used JS SDK III
Download this release
Release Info
Developer | REES46 |
Extension | Rees46_Personalization |
Version | 4.0.0 |
Comparing to | |
See all releases |
Code changes from version 3.3.7 to 4.0.0
- app/code/community/Rees46/Personalization/Helper/Admin.php +17 -19
- app/code/community/Rees46/Personalization/Helper/Data.php +55 -79
- app/code/community/Rees46/Personalization/Helper/Event.php +45 -53
- app/code/community/Rees46/Personalization/Model/Observer.php +101 -111
- app/code/community/Rees46/Personalization/controllers/Adminhtml/PersonalizationController.php +55 -58
- app/code/community/Rees46/Personalization/controllers/BlockController.php +91 -90
- app/code/community/Rees46/Personalization/etc/adminhtml.xml +40 -43
- app/code/community/Rees46/Personalization/etc/config.xml +6 -3
- app/code/community/Rees46/Personalization/etc/system.xml +59 -71
- app/design/adminhtml/default/default/layout/rees46_personalization.xml +9 -39
- app/design/adminhtml/default/default/template/rees46/personalization/index.phtml +26 -20
- app/design/frontend/base/default/layout/rees46_personalization.xml +6 -40
- app/design/frontend/base/default/template/rees46/personalization/blocks/cart.phtml +0 -3
- app/design/frontend/base/default/template/rees46/personalization/blocks/category.phtml +0 -4
- app/design/frontend/base/default/template/rees46/personalization/blocks/category_popular.phtml +0 -3
- app/design/frontend/base/default/template/rees46/personalization/blocks/home.phtml +0 -5
- app/design/frontend/base/default/template/rees46/personalization/blocks/product.phtml +0 -5
- app/design/frontend/base/default/template/rees46/personalization/css.phtml +0 -3
- app/design/frontend/base/default/template/rees46/personalization/init.phtml +136 -155
- app/etc/modules/Rees46_Personalization.xml +1 -3
- app/locale/en_US/Rees46_Personalization.csv +10 -8
- app/locale/ru_RU/Rees46_Personalization.csv +7 -5
- package.xml +17 -62
app/code/community/Rees46/Personalization/Helper/Admin.php
CHANGED
@@ -1,19 +1,17 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
*
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
}
|
19 |
-
}
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright © 2017 REES46, INC. All rights reserved.
|
4 |
+
*/
|
5 |
+
class Rees46_Personalization_Helper_Admin extends Mage_Core_Helper_Abstract
|
6 |
+
{
|
7 |
+
/**
|
8 |
+
* Check permission for passed action
|
9 |
+
*
|
10 |
+
* @param string $action
|
11 |
+
* @return bool
|
12 |
+
*/
|
13 |
+
public function isActionAllowed($action)
|
14 |
+
{
|
15 |
+
return Mage::getSingleton('admin/session')->isAllowed('personalization/manage/' . $action);
|
16 |
+
}
|
17 |
+
}
|
|
|
|
app/code/community/Rees46/Personalization/Helper/Data.php
CHANGED
@@ -1,79 +1,55 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
*
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
*
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
/**
|
48 |
-
*
|
49 |
-
* @
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
$
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
/**
|
59 |
-
* Returns ids array of products in customer's cart
|
60 |
-
* @return array
|
61 |
-
*/
|
62 |
-
public function getCartProductIds() {
|
63 |
-
$cart = Mage::getModel('checkout/cart')->getQuote();
|
64 |
-
return array_map(function($element){ return $element->getProductId(); }, $cart->getAllItems());
|
65 |
-
}
|
66 |
-
|
67 |
-
/**
|
68 |
-
* Checks whether module works in expert mode
|
69 |
-
*
|
70 |
-
* @param integer|string|Mage_Core_Model_Store $store
|
71 |
-
* @return boolean
|
72 |
-
*/
|
73 |
-
public function isExpertMode($store = null)
|
74 |
-
{
|
75 |
-
return Mage::getStoreConfigFlag(self::XML_PATH_EXPERT_MODE, $store);
|
76 |
-
}
|
77 |
-
|
78 |
-
}
|
79 |
-
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright © 2017 REES46, INC. All rights reserved.
|
4 |
+
*/
|
5 |
+
class Rees46_Personalization_Helper_Data extends Mage_Core_Helper_Data
|
6 |
+
{
|
7 |
+
/**
|
8 |
+
* Path to store config if front-end output is enabled
|
9 |
+
*
|
10 |
+
* @var string
|
11 |
+
*/
|
12 |
+
const XML_PATH_ENABLED = 'personalization/view/enabled';
|
13 |
+
|
14 |
+
/**
|
15 |
+
* REES46 API Key
|
16 |
+
* @var string
|
17 |
+
*/
|
18 |
+
const XML_PATH_API_KEY = 'personalization/view/api_key';
|
19 |
+
|
20 |
+
/**
|
21 |
+
* REES46 Secret Key
|
22 |
+
* @var string
|
23 |
+
*/
|
24 |
+
const XML_PATH_SECRET_KEY = 'personalization/view/secret_key';
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Checks whether news can be displayed in the frontend
|
28 |
+
*
|
29 |
+
* @param integer|string|Mage_Core_Model_Store $store
|
30 |
+
* @return boolean
|
31 |
+
*/
|
32 |
+
public function isEnabled($store = null)
|
33 |
+
{
|
34 |
+
return Mage::getStoreConfigFlag(self::XML_PATH_ENABLED, $store);
|
35 |
+
}
|
36 |
+
|
37 |
+
/**
|
38 |
+
* Return REES46 API Key
|
39 |
+
* @param integer|string|Mage_Core_Model_Store $store
|
40 |
+
* @return string
|
41 |
+
*/
|
42 |
+
public function getAPIKey($store = null) {
|
43 |
+
$api_key = Mage::getStoreConfig(self::XML_PATH_API_KEY, $store);
|
44 |
+
return $api_key ? $api_key : false;
|
45 |
+
}
|
46 |
+
|
47 |
+
/**
|
48 |
+
* Returns ids array of products in customer's cart
|
49 |
+
* @return array
|
50 |
+
*/
|
51 |
+
public function getCartProductIds() {
|
52 |
+
$cart = Mage::getModel('checkout/cart')->getQuote();
|
53 |
+
return array_map(function($element){ return $element->getProductId(); }, $cart->getAllItems());
|
54 |
+
}
|
55 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
app/code/community/Rees46/Personalization/Helper/Event.php
CHANGED
@@ -1,53 +1,45 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
*
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
$
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
*/
|
47 |
-
public function clearEventsQueue() {
|
48 |
-
Mage::getSingleton('core/session')->unsetData(self::REES46_SESSION_KEY_IDENTIFIER);
|
49 |
-
}
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
}
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright © 2017 REES46, INC. All rights reserved.
|
4 |
+
*/
|
5 |
+
class Rees46_Personalization_Helper_Event extends Mage_Core_Helper_Abstract
|
6 |
+
{
|
7 |
+
const REES46_SESSION_KEY_IDENTIFIER = 'rees46_events';
|
8 |
+
|
9 |
+
/**
|
10 |
+
* Collect event's data to buffer for future rendering in template
|
11 |
+
* @param $name
|
12 |
+
* @param $data
|
13 |
+
*/
|
14 |
+
public function pushEvent($name, $data) {
|
15 |
+
$events = $this->getEventsQueue();
|
16 |
+
array_push($events, array(
|
17 |
+
'name' => $name,
|
18 |
+
'data' => $data
|
19 |
+
));
|
20 |
+
Mage::getSingleton('core/session')->setData(self::REES46_SESSION_KEY_IDENTIFIER, $events);
|
21 |
+
}
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Return array of REES46 events storage
|
25 |
+
* @param bool $and_clear_queue Clear events if set to true
|
26 |
+
* @return array
|
27 |
+
*/
|
28 |
+
public function getEventsQueue($and_clear_queue = false) {
|
29 |
+
$events = Mage::getSingleton('core/session')->getData(self::REES46_SESSION_KEY_IDENTIFIER);
|
30 |
+
if(!is_array($events)) {
|
31 |
+
$events = array();
|
32 |
+
}
|
33 |
+
if($and_clear_queue) {
|
34 |
+
$this->clearEventsQueue();
|
35 |
+
}
|
36 |
+
return $events;
|
37 |
+
}
|
38 |
+
|
39 |
+
/**
|
40 |
+
* Clear REES46 events storage
|
41 |
+
*/
|
42 |
+
public function clearEventsQueue() {
|
43 |
+
Mage::getSingleton('core/session')->unsetData(self::REES46_SESSION_KEY_IDENTIFIER);
|
44 |
+
}
|
45 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
app/code/community/Rees46/Personalization/Model/Observer.php
CHANGED
@@ -1,111 +1,101 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
*
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
*
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
$
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
$
|
95 |
-
|
96 |
-
|
97 |
-
'
|
98 |
-
'
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
'is_available' => $product->isAvailable(),
|
103 |
-
'locations' => null,
|
104 |
-
'url' => null,
|
105 |
-
'image_url' => $image,
|
106 |
-
'tags' => null,
|
107 |
-
/* @todo: do not forgot processing of recommender */
|
108 |
-
'recommended_by' => null
|
109 |
-
);
|
110 |
-
}
|
111 |
-
}
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright © 2017 REES46, INC. All rights reserved.
|
4 |
+
*/
|
5 |
+
class Rees46_Personalization_Model_Observer
|
6 |
+
{
|
7 |
+
/**
|
8 |
+
* Event after show product.
|
9 |
+
* Used to track product views
|
10 |
+
*
|
11 |
+
* @param Varien_Event_Observer $observer
|
12 |
+
*/
|
13 |
+
public function productViewed(Varien_Event_Observer $observer)
|
14 |
+
{
|
15 |
+
$product = $observer->getEvent()->getData('product');
|
16 |
+
if(!is_null($product)) {
|
17 |
+
$product_data = $this->_prepareCommonProductInfo($product);
|
18 |
+
Mage::helper('rees46_personalization/event')->pushEvent('view', $product_data);
|
19 |
+
}
|
20 |
+
}
|
21 |
+
|
22 |
+
/**
|
23 |
+
* Event after product added to cart.
|
24 |
+
* Used to track product carts
|
25 |
+
*
|
26 |
+
* @param Varien_Event_Observer $observer
|
27 |
+
*/
|
28 |
+
public function productAddedToCart(Varien_Event_Observer $observer)
|
29 |
+
{
|
30 |
+
$product = $observer->getEvent()->getData('product');
|
31 |
+
if(!is_null($product)) {
|
32 |
+
$product_data = $this->_prepareCommonProductInfo($product);
|
33 |
+
Mage::helper('rees46_personalization/event')->pushEvent('cart', $product_data);
|
34 |
+
}
|
35 |
+
}
|
36 |
+
|
37 |
+
/**
|
38 |
+
* Event after product removed from cart.
|
39 |
+
* Used to track product carts
|
40 |
+
*
|
41 |
+
* @param Varien_Event_Observer $observer
|
42 |
+
*/
|
43 |
+
public function productRemovedFromCart(Varien_Event_Observer $observer)
|
44 |
+
{
|
45 |
+
$product = $observer->getEvent()->getQuoteItem()->getProduct();
|
46 |
+
if(!is_null($product)) {
|
47 |
+
$product_data = $this->_prepareCommonProductInfo($product);
|
48 |
+
Mage::helper('rees46_personalization/event')->pushEvent('remove_from_cart', $product_data);
|
49 |
+
}
|
50 |
+
}
|
51 |
+
|
52 |
+
/**
|
53 |
+
* Event after order created.
|
54 |
+
*
|
55 |
+
* @param Varien_Event_Observer $observer
|
56 |
+
*/
|
57 |
+
public function purchaseHappened(Varien_Event_Observer $observer)
|
58 |
+
{
|
59 |
+
$order = $observer->getEvent()->getOrder();
|
60 |
+
if(!is_null($order)) {
|
61 |
+
$order_data = array(
|
62 |
+
'order_id' => $order->getIncrementId(),
|
63 |
+
'order_price' => $order->getBaseGrandTotal(),
|
64 |
+
'products' => array()
|
65 |
+
);
|
66 |
+
$items = $order->getItemsCollection();
|
67 |
+
foreach($items as $item) {
|
68 |
+
$product = $item->getProduct();
|
69 |
+
$product_data = $this->_prepareCommonProductInfo($product);
|
70 |
+
$product_data['amount'] = $item->getQtyToShip();
|
71 |
+
$order_data['products'][] = $product_data;
|
72 |
+
}
|
73 |
+
Mage::helper('rees46_personalization/event')->pushEvent('purchase', $order_data);
|
74 |
+
}
|
75 |
+
}
|
76 |
+
|
77 |
+
/**
|
78 |
+
* Prepare base array of data about product for tracking
|
79 |
+
* @param Mage_Catalog_Model_Product $product
|
80 |
+
* @return array
|
81 |
+
*/
|
82 |
+
private function _prepareCommonProductInfo(Mage_Catalog_Model_Product $product) {
|
83 |
+
$images = $product->getMediaGalleryImages();
|
84 |
+
|
85 |
+
if($images && $images->count() > 0) {
|
86 |
+
$image = $images->getFirstItem()->getUrl();
|
87 |
+
} else {
|
88 |
+
$image = null;
|
89 |
+
}
|
90 |
+
|
91 |
+
return array(
|
92 |
+
'id' => $product->getId(),
|
93 |
+
'stock' => $product->isAvailable(),
|
94 |
+
'price' => $product->getSpecialPrice() ? $product->getSpecialPrice() : $product->getPrice(),
|
95 |
+
'name' => $product->getName(),
|
96 |
+
'categories' => implode(',', $product->getCategoryIds()),
|
97 |
+
'image' => $image,
|
98 |
+
'url' => $product->getProductUrl(false),
|
99 |
+
);
|
100 |
+
}
|
101 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
app/code/community/Rees46/Personalization/controllers/Adminhtml/PersonalizationController.php
CHANGED
@@ -1,58 +1,55 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
*
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
;
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
}
|
57 |
-
|
58 |
-
}
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright © 2017 REES46, INC. All rights reserved.
|
4 |
+
*/
|
5 |
+
class Rees46_Personalization_Adminhtml_PersonalizationController extends Mage_Adminhtml_Controller_Action
|
6 |
+
{
|
7 |
+
/**
|
8 |
+
* Init actions
|
9 |
+
*
|
10 |
+
* @return Magentostudy_News_Adminhtml_NewsController
|
11 |
+
*/
|
12 |
+
protected function _initAction()
|
13 |
+
{
|
14 |
+
/* load layout, set active menu and breadcrumbs */
|
15 |
+
$this->loadLayout()
|
16 |
+
->_setActiveMenu('personalization/overview')
|
17 |
+
->_addBreadcrumb(
|
18 |
+
Mage::helper('rees46_personalization')->__('Personalization'),
|
19 |
+
Mage::helper('rees46_personalization')->__('Personalization')
|
20 |
+
)
|
21 |
+
->_addBreadcrumb(
|
22 |
+
Mage::helper('rees46_personalization')->__('Overview'),
|
23 |
+
Mage::helper('rees46_personalization')->__('Overview')
|
24 |
+
)
|
25 |
+
;
|
26 |
+
$this->_addContent($this->getLayout()->createBlock('adminhtml/template')->setTemplate('rees46/personalization/index.phtml'));
|
27 |
+
return $this;
|
28 |
+
}
|
29 |
+
|
30 |
+
/**
|
31 |
+
* Index action
|
32 |
+
*/
|
33 |
+
public function indexAction()
|
34 |
+
{
|
35 |
+
$this->_title($this->__('Personalization'))
|
36 |
+
->_title($this->__('Overview'));
|
37 |
+
|
38 |
+
$this->_initAction();
|
39 |
+
$this->renderLayout();
|
40 |
+
}
|
41 |
+
|
42 |
+
/**
|
43 |
+
* Check the permission to run it
|
44 |
+
*
|
45 |
+
* @return boolean
|
46 |
+
*/
|
47 |
+
protected function _isAllowed()
|
48 |
+
{
|
49 |
+
switch ($this->getRequest()->getActionName()) {
|
50 |
+
default:
|
51 |
+
return Mage::getSingleton('admin/session')->isAllowed('personalization/overview');
|
52 |
+
break;
|
53 |
+
}
|
54 |
+
}
|
55 |
+
}
|
|
|
|
|
|
app/code/community/Rees46/Personalization/controllers/BlockController.php
CHANGED
@@ -1,90 +1,91 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
*
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
$product_ids = $this->getRequest()->getParam('ids');
|
29 |
-
$
|
30 |
-
$
|
31 |
-
|
32 |
-
$
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
->
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
$products
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
$
|
56 |
-
}
|
57 |
-
|
58 |
-
$html = '<div class="rees46 rees46-recommend"><div class="recommender-block-title">' . $
|
59 |
-
|
60 |
-
|
61 |
-
/* Specific settings cause problems with large photos, so find it another way */
|
62 |
-
$productForImage = Mage::getModel('catalog/product')->load($product->getId());
|
63 |
-
|
64 |
-
/* Sometimes Magento adds special attributes to URL's, so add our attributes depending of this situation */
|
65 |
-
$product_url = $product->getProductUrl(false);
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
<div class="recommended-item-
|
75 |
-
<a href="' . $product_url . '"
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
}
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright © 2017 REES46, INC. All rights reserved.
|
4 |
+
*/
|
5 |
+
class Rees46_Personalization_BlockController extends Mage_Core_Controller_Front_Action
|
6 |
+
{
|
7 |
+
/**
|
8 |
+
* Pre dispatch action that allows to redirect to no route page in case of disabled extension through admin panel
|
9 |
+
*/
|
10 |
+
public function preDispatch()
|
11 |
+
{
|
12 |
+
parent::preDispatch();
|
13 |
+
|
14 |
+
if (!Mage::helper('rees46_personalization')->isEnabled()) {
|
15 |
+
$this->setFlag('', 'no-dispatch', true);
|
16 |
+
$this->_redirect('noRoute');
|
17 |
+
}
|
18 |
+
}
|
19 |
+
|
20 |
+
/**
|
21 |
+
* Render recommended products as block
|
22 |
+
*/
|
23 |
+
public function indexAction()
|
24 |
+
{
|
25 |
+
$this->loadLayout();
|
26 |
+
$products = array();
|
27 |
+
|
28 |
+
$product_ids = explode(',', $this->getRequest()->getParam('ids'));
|
29 |
+
$type = $this->getRequest()->getParam('type');
|
30 |
+
$limit = intval($this->getRequest()->getParam('limit'));
|
31 |
+
|
32 |
+
$attributes = Mage::getSingleton('catalog/config')->getProductAttributes();
|
33 |
+
$collection = Mage::getModel('catalog/product')
|
34 |
+
->getCollection()
|
35 |
+
->addAttributeToFilter('entity_id', array('in' => $product_ids))
|
36 |
+
->addAttributeToSelect($attributes);
|
37 |
+
|
38 |
+
/* Sort items as REES46 returned */
|
39 |
+
foreach($product_ids as $id) {
|
40 |
+
foreach($collection as $product) {
|
41 |
+
if ($product->getId() == $id) {
|
42 |
+
$products[] = $product;
|
43 |
+
|
44 |
+
if (count($products) == $limit) {
|
45 |
+
break;
|
46 |
+
}
|
47 |
+
}
|
48 |
+
}
|
49 |
+
}
|
50 |
+
|
51 |
+
if (count($products) > 0) {
|
52 |
+
if ($this->getRequest()->getParam('title')) {
|
53 |
+
$title = urldecode($this->getRequest()->getParam('title'));
|
54 |
+
} else {
|
55 |
+
$title = Mage::helper('rees46_personalization')->__($type);
|
56 |
+
}
|
57 |
+
|
58 |
+
$html = '<div class="rees46 rees46-recommend"><div class="recommender-block-title">' . $title . '</div><div class="recommended-items">';
|
59 |
+
|
60 |
+
foreach($products as $product) {
|
61 |
+
/* Specific settings cause problems with large photos, so find it another way */
|
62 |
+
$productForImage = Mage::getModel('catalog/product')->load($product->getId());
|
63 |
+
|
64 |
+
/* Sometimes Magento adds special attributes to URL's, so add our attributes depending of this situation */
|
65 |
+
$product_url = $product->getProductUrl(false);
|
66 |
+
|
67 |
+
if (strpos($product_url, '?') !== false) {
|
68 |
+
$product_url = str_replace('?', '?recommended_by=' . $type . '& ', $product_url);
|
69 |
+
} else {
|
70 |
+
$product_url = $product_url . '?recommended_by=' . $type;
|
71 |
+
}
|
72 |
+
|
73 |
+
$html .= '<div class="recommended-item">
|
74 |
+
<div class="recommended-item-photo">
|
75 |
+
<a href="' . $product_url . '"><img src="' . $productForImage->getThumbnailUrl(200, 200) . '"></a></div>
|
76 |
+
<div class="recommended-item-title">
|
77 |
+
<a href="' . $product_url . '">' . $product->getName() . '</a>
|
78 |
+
</div>
|
79 |
+
<div class="recommended-item-price">' . $product->getFormatedPrice() . '</div>
|
80 |
+
<div class="recommended-item-action"><a href="' . $product_url . '">' . Mage::helper('rees46_personalization')->__('More') . '</a></div>
|
81 |
+
</div>';
|
82 |
+
}
|
83 |
+
|
84 |
+
$html .= '</div></div>';
|
85 |
+
|
86 |
+
echo $html;
|
87 |
+
} else {
|
88 |
+
echo '';
|
89 |
+
}
|
90 |
+
}
|
91 |
+
}
|
app/code/community/Rees46/Personalization/etc/adminhtml.xml
CHANGED
@@ -1,43 +1,40 @@
|
|
1 |
-
<?xml version="1.0"?>
|
2 |
-
<!--
|
3 |
-
/**
|
4 |
-
*
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
<
|
10 |
-
|
11 |
-
|
12 |
-
<
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
<
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
</resources>
|
42 |
-
</acl>
|
43 |
-
</config>
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<!--
|
3 |
+
/**
|
4 |
+
* Copyright © 2017 REES46, INC. All rights reserved.
|
5 |
+
*/
|
6 |
+
-->
|
7 |
+
<config>
|
8 |
+
<menu>
|
9 |
+
<personalization translate="title" module="rees46_personalization">
|
10 |
+
<title>REES46 Recommendations</title>
|
11 |
+
<sort_order>65</sort_order>
|
12 |
+
<children>
|
13 |
+
<overview translate="title" module="rees46_personalization">
|
14 |
+
<title>Overview</title>
|
15 |
+
<action>adminhtml/personalization</action>
|
16 |
+
<sort_order>50</sort_order>
|
17 |
+
</overview>
|
18 |
+
</children>
|
19 |
+
</personalization>
|
20 |
+
</menu>
|
21 |
+
<acl>
|
22 |
+
<resources>
|
23 |
+
<admin>
|
24 |
+
<children>
|
25 |
+
<system>
|
26 |
+
<children>
|
27 |
+
<config>
|
28 |
+
<children>
|
29 |
+
<personalization translate="title" module="rees46_personalization">
|
30 |
+
<title>Overview</title>
|
31 |
+
</personalization>
|
32 |
+
</children>
|
33 |
+
</config>
|
34 |
+
</children>
|
35 |
+
</system>
|
36 |
+
</children>
|
37 |
+
</admin>
|
38 |
+
</resources>
|
39 |
+
</acl>
|
40 |
+
</config>
|
|
|
|
|
|
app/code/community/Rees46/Personalization/etc/config.xml
CHANGED
@@ -1,8 +1,13 @@
|
|
1 |
<?xml version="1.0"?>
|
|
|
|
|
|
|
|
|
|
|
2 |
<config>
|
3 |
<modules>
|
4 |
<Rees46_Personalization>
|
5 |
-
<version>
|
6 |
</Rees46_Personalization>
|
7 |
</modules>
|
8 |
<global>
|
@@ -139,5 +144,3 @@
|
|
139 |
</personalization>
|
140 |
</default>
|
141 |
</config>
|
142 |
-
|
143 |
-
|
1 |
<?xml version="1.0"?>
|
2 |
+
<!--
|
3 |
+
/**
|
4 |
+
* Copyright © 2017 REES46, INC. All rights reserved.
|
5 |
+
*/
|
6 |
+
-->
|
7 |
<config>
|
8 |
<modules>
|
9 |
<Rees46_Personalization>
|
10 |
+
<version>4.0.0</version>
|
11 |
</Rees46_Personalization>
|
12 |
</modules>
|
13 |
<global>
|
144 |
</personalization>
|
145 |
</default>
|
146 |
</config>
|
|
|
|
app/code/community/Rees46/Personalization/etc/system.xml
CHANGED
@@ -1,71 +1,59 @@
|
|
1 |
-
<?xml version="1.0"?>
|
2 |
-
<!--
|
3 |
-
/**
|
4 |
-
*
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
<
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
<
|
50 |
-
<
|
51 |
-
<
|
52 |
-
<
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
<source_model>adminhtml/system_config_source_yesno</source_model>
|
61 |
-
<sort_order>80</sort_order>
|
62 |
-
<show_in_default>1</show_in_default>
|
63 |
-
<show_in_website>1</show_in_website>
|
64 |
-
<show_in_store>1</show_in_store>
|
65 |
-
</expert_mode>
|
66 |
-
</fields>
|
67 |
-
</view>
|
68 |
-
</groups>
|
69 |
-
</personalization>
|
70 |
-
</sections>
|
71 |
-
</config>
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<!--
|
3 |
+
/**
|
4 |
+
* Copyright © 2017 REES46, INC. All rights reserved.
|
5 |
+
*/
|
6 |
+
-->
|
7 |
+
<config>
|
8 |
+
<sections>
|
9 |
+
<personalization>
|
10 |
+
<class>separator-top</class>
|
11 |
+
<label>REES46 Recommendations</label>
|
12 |
+
<tab>general</tab>
|
13 |
+
<frontend_type>text</frontend_type>
|
14 |
+
<sort_order>500</sort_order>
|
15 |
+
<show_in_default>1</show_in_default>
|
16 |
+
<show_in_website>1</show_in_website>
|
17 |
+
<show_in_store>1</show_in_store>
|
18 |
+
<groups>
|
19 |
+
<view translate="label">
|
20 |
+
<label>Settings</label>
|
21 |
+
<frontend_type>text</frontend_type>
|
22 |
+
<sort_order>10</sort_order>
|
23 |
+
<show_in_default>1</show_in_default>
|
24 |
+
<show_in_website>1</show_in_website>
|
25 |
+
<show_in_store>1</show_in_store>
|
26 |
+
<fields>
|
27 |
+
<enabled translate="label">
|
28 |
+
<label>Enable Module</label>
|
29 |
+
<frontend_type>select</frontend_type>
|
30 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
31 |
+
<sort_order>10</sort_order>
|
32 |
+
<show_in_default>1</show_in_default>
|
33 |
+
<show_in_website>1</show_in_website>
|
34 |
+
<show_in_store>1</show_in_store>
|
35 |
+
</enabled>
|
36 |
+
<api_key translate="label">
|
37 |
+
<label>API Key</label>
|
38 |
+
<comment>Put API key taken after registration in rees46.com here.</comment>
|
39 |
+
<sort_order>20</sort_order>
|
40 |
+
<depends><enabled>1</enabled></depends>
|
41 |
+
<show_in_default>1</show_in_default>
|
42 |
+
<show_in_website>1</show_in_website>
|
43 |
+
<show_in_store>1</show_in_store>
|
44 |
+
</api_key>
|
45 |
+
<secret_key translate="label">
|
46 |
+
<label>Secret Key</label>
|
47 |
+
<comment>Put secret key taken after registration in rees46.com here.</comment>
|
48 |
+
<sort_order>30</sort_order>
|
49 |
+
<depends><enabled>1</enabled></depends>
|
50 |
+
<show_in_default>1</show_in_default>
|
51 |
+
<show_in_website>1</show_in_website>
|
52 |
+
<show_in_store>1</show_in_store>
|
53 |
+
</secret_key>
|
54 |
+
</fields>
|
55 |
+
</view>
|
56 |
+
</groups>
|
57 |
+
</personalization>
|
58 |
+
</sections>
|
59 |
+
</config>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
app/design/adminhtml/default/default/layout/rees46_personalization.xml
CHANGED
@@ -1,43 +1,13 @@
|
|
1 |
<?xml version="1.0"?>
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
</reference>
|
10 |
-
</default>
|
11 |
-
|
12 |
-
<!-- Home-->
|
13 |
-
<cms_index_index>
|
14 |
-
<reference name="content">
|
15 |
-
<block type="core/template" name="rees46_home" after="-" template="rees46/personalization/blocks/home.phtml" />
|
16 |
-
</reference>
|
17 |
-
</cms_index_index>
|
18 |
-
|
19 |
-
|
20 |
-
<!-- Category -->
|
21 |
-
<catalog_category_view translate="label">
|
22 |
-
<reference name="content">
|
23 |
-
<block type="core/template" name="rees46_category" after="category.products" template="rees46/personalization/blocks/category.phtml" />
|
24 |
-
</reference>
|
25 |
-
</catalog_category_view>
|
26 |
-
|
27 |
-
<!-- Product -->
|
28 |
-
<catalog_product_view translate="label">
|
29 |
-
<reference name="content">
|
30 |
-
<block type="core/template" name="rees46_product" after="-" template="rees46/personalization/blocks/product.phtml" />
|
31 |
-
</reference>
|
32 |
-
</catalog_product_view>
|
33 |
-
|
34 |
-
<!-- Cart -->
|
35 |
-
<checkout_cart_index translate="label">
|
36 |
<reference name="content">
|
37 |
-
<block type="
|
38 |
</reference>
|
39 |
-
</
|
40 |
-
|
41 |
</layout>
|
42 |
-
|
43 |
-
|
1 |
<?xml version="1.0"?>
|
2 |
+
<!--
|
3 |
+
/**
|
4 |
+
* Copyright © 2017 REES46, INC. All rights reserved.
|
5 |
+
*/
|
6 |
+
-->
|
7 |
+
<layout>
|
8 |
+
<adminhtml_personalization_index>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9 |
<reference name="content">
|
10 |
+
<block type="rees46_personalization/adminhtml_personalization" name="personalization" />
|
11 |
</reference>
|
12 |
+
</adminhtml_personalization_index>
|
|
|
13 |
</layout>
|
|
|
|
app/design/adminhtml/default/default/template/rees46/personalization/index.phtml
CHANGED
@@ -1,21 +1,27 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
21 |
</table>
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright © 2017 REES46, INC. All rights reserved.
|
4 |
+
*/
|
5 |
+
?>
|
6 |
+
<table>
|
7 |
+
<tr>
|
8 |
+
<td>
|
9 |
+
<img src="<?php echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA). 'rees46/logo.png'; ?>" alt="REES46">
|
10 |
+
</td>
|
11 |
+
<td style="padding-left: 20px">
|
12 |
+
<h1>REES46 Recommendation Engine Overview</h1>
|
13 |
+
<p><?php echo __('Go to your REES46 store dashboard to get the access to:'); ?></p>
|
14 |
+
<ul style="list-style: disc; padding-left: 40px;">
|
15 |
+
<li><?php echo __('Triggered emails'); ?></li>
|
16 |
+
<li><?php echo __('Email marketing tool'); ?></li>
|
17 |
+
<li><?php echo __('Personalized search'); ?></li>
|
18 |
+
<li><?php echo __('Web push triggered notifications'); ?></li>
|
19 |
+
<li><?php echo __('Instant web push notifications'); ?></li>
|
20 |
+
<li><?php echo __('Audience segmentation'); ?></li>
|
21 |
+
<li><?php echo __('Abandoned cart remarketing tool'); ?></li>
|
22 |
+
</ul><br>
|
23 |
+
<button onclick="window.open('https://rees46.com/customers/sign_in', '_blank'); return false;" class="primary"><?php echo __('REES46 dashboard'); ?></button><br><br>
|
24 |
+
<p><?php echo __('Documentation:'); ?> <a href="<?php echo __('http://docs.rees46.com/display/en/Magento+1.9.x+Extension'); ?>" target="_blank"><?php echo __('http://docs.rees46.com/display/en/Magento+1.9.x+Extension'); ?></a></p>
|
25 |
+
</td>
|
26 |
+
</tr>
|
27 |
</table>
|
app/design/frontend/base/default/layout/rees46_personalization.xml
CHANGED
@@ -1,47 +1,13 @@
|
|
1 |
<?xml version="1.0"?>
|
|
|
|
|
|
|
|
|
|
|
2 |
<layout version="0.1.0">
|
3 |
-
<!-- @rees46 -->
|
4 |
-
|
5 |
-
<!-- All pages tracking -->
|
6 |
<default>
|
7 |
-
<reference name="
|
8 |
<block type="core/template" name="rees46_init" after="-" template="rees46/personalization/init.phtml"/>
|
9 |
</reference>
|
10 |
-
<reference name="before_body_end">
|
11 |
-
<block type="core/template" name="rees46_css" before="-" template="rees46/personalization/css.phtml"/>
|
12 |
-
</reference>
|
13 |
</default>
|
14 |
-
|
15 |
-
<!-- Home-->
|
16 |
-
<cms_index_index>
|
17 |
-
<reference name="content">
|
18 |
-
<block type="core/template" name="rees46_home" after="-" template="rees46/personalization/blocks/home.phtml" />
|
19 |
-
</reference>
|
20 |
-
</cms_index_index>
|
21 |
-
|
22 |
-
|
23 |
-
<!-- Category -->
|
24 |
-
<catalog_category_view translate="label">
|
25 |
-
<reference name="content">
|
26 |
-
<block type="core/template" name="rees46_category_popular" after="category.description" template="rees46/personalization/blocks/category_popular.phtml" />
|
27 |
-
<block type="core/template" name="rees46_category" after="category.products" template="rees46/personalization/blocks/category.phtml" />
|
28 |
-
</reference>
|
29 |
-
</catalog_category_view>
|
30 |
-
|
31 |
-
<!-- Product -->
|
32 |
-
<catalog_product_view translate="label">
|
33 |
-
<reference name="content">
|
34 |
-
<block type="core/template" name="rees46_product" after="-" template="rees46/personalization/blocks/product.phtml" />
|
35 |
-
</reference>
|
36 |
-
</catalog_product_view>
|
37 |
-
|
38 |
-
<!-- Cart -->
|
39 |
-
<checkout_cart_index translate="label">
|
40 |
-
<reference name="content">
|
41 |
-
<block type="core/template" name="rees46_cart" after="-" template="rees46/personalization/blocks/cart.phtml" />
|
42 |
-
</reference>
|
43 |
-
</checkout_cart_index>
|
44 |
-
|
45 |
</layout>
|
46 |
-
|
47 |
-
|
1 |
<?xml version="1.0"?>
|
2 |
+
<!--
|
3 |
+
/**
|
4 |
+
* Copyright © 2017 REES46, INC. All rights reserved.
|
5 |
+
*/
|
6 |
+
-->
|
7 |
<layout version="0.1.0">
|
|
|
|
|
|
|
8 |
<default>
|
9 |
+
<reference name="head">
|
10 |
<block type="core/template" name="rees46_init" after="-" template="rees46/personalization/init.phtml"/>
|
11 |
</reference>
|
|
|
|
|
|
|
12 |
</default>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
13 |
</layout>
|
|
|
|
app/design/frontend/base/default/template/rees46/personalization/blocks/cart.phtml
DELETED
@@ -1,3 +0,0 @@
|
|
1 |
-
<?php if (Mage::helper('rees46_personalization')->isExpertMode() != true): ?>
|
2 |
-
<div class="rees46 rees46-recommend" data-type="see_also"></div>
|
3 |
-
<?php endif; ?>
|
|
|
|
|
|
app/design/frontend/base/default/template/rees46/personalization/blocks/category.phtml
DELETED
@@ -1,4 +0,0 @@
|
|
1 |
-
<?php if (Mage::helper('rees46_personalization')->isExpertMode() != true): ?>
|
2 |
-
<div class="rees46 rees46-recommend" data-type="recently_viewed"></div>
|
3 |
-
<div class="rees46 rees46-recommend" data-type="interesting"></div>
|
4 |
-
<?php endif; ?>
|
|
|
|
|
|
|
|
app/design/frontend/base/default/template/rees46/personalization/blocks/category_popular.phtml
DELETED
@@ -1,3 +0,0 @@
|
|
1 |
-
<?php if (Mage::helper('rees46_personalization')->isExpertMode() != true): ?>
|
2 |
-
<div class="rees46 rees46-recommend" data-type="popular" data-category="<?php echo Mage::registry('current_category')->getId() ?>">популярные</div>
|
3 |
-
<?php endif; ?>
|
|
|
|
|
|
app/design/frontend/base/default/template/rees46/personalization/blocks/home.phtml
DELETED
@@ -1,5 +0,0 @@
|
|
1 |
-
<?php if (Mage::helper('rees46_personalization')->isExpertMode() != true): ?>
|
2 |
-
<div class="rees46 rees46-recommend" data-type="popular"></div>
|
3 |
-
<div class="rees46 rees46-recommend" data-type="interesting"></div>
|
4 |
-
<div class="rees46 rees46-recommend" data-type="recently_viewed"></div>
|
5 |
-
<?php endif; ?>
|
|
|
|
|
|
|
|
|
|
app/design/frontend/base/default/template/rees46/personalization/blocks/product.phtml
DELETED
@@ -1,5 +0,0 @@
|
|
1 |
-
<?php if (Mage::helper('rees46_personalization')->isExpertMode() != true): ?>
|
2 |
-
<div class="rees46 rees46-recommend" data-type="also_bought" data-item="<?php echo Mage::registry('current_product')->getId() ?>"></div>
|
3 |
-
<div class="rees46 rees46-recommend" data-type="similar" data-item="<?php echo Mage::registry('current_product')->getId() ?>"></div>
|
4 |
-
<div class="rees46 rees46-recommend" data-type="interesting" data-item="<?php echo Mage::registry('current_product')->getId() ?>"></div>
|
5 |
-
<?php endif; ?>
|
|
|
|
|
|
|
|
|
|
app/design/frontend/base/default/template/rees46/personalization/css.phtml
DELETED
@@ -1,3 +0,0 @@
|
|
1 |
-
<?php if (Mage::helper('rees46_personalization')->isEnabled()): ?>
|
2 |
-
<link rel="stylesheet" type="text/css" href="//rees46.com/shop_css/<?= $this->helper('rees46_personalization')->getAPIKey() ?>" media="all" />
|
3 |
-
<?php endif; ?>
|
|
|
|
|
|
app/design/frontend/base/default/template/rees46/personalization/init.phtml
CHANGED
@@ -1,163 +1,144 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
REES46.init('<?php echo $this->helper('rees46_personalization')->getAPIKey() ?>', user_data, function() {
|
17 |
-
REES46.addStyleToPage();
|
18 |
-
<?php $events = Mage::helper('rees46_personalization/event')->getEventsQueue(true) ?>
|
19 |
-
<?php foreach($events as $event): ?>
|
20 |
-
<?php if($event['name'] == 'view' || $event['name'] == 'cart' || $event['name'] == 'remove_from_cart'): ?>
|
21 |
-
REES46.pushData('<?php echo $event['name'] ?>', {
|
22 |
-
item_id: '<?php echo $event['data']['item_id'] ?>',
|
23 |
-
name: '<?php echo $event['data']['name'] ?>',
|
24 |
-
price: '<?php echo $event['data']['price'] ?>',
|
25 |
-
is_available: '<?php echo intval($event['data']['is_available']) ?>',
|
26 |
-
categories: [<?php echo implode(',', $event['data']['categories']) ?>],
|
27 |
-
<?php if($event['data']['recommended_by']): ?>
|
28 |
-
recommended_by: '<?php echo $event['data']['recommended_by'] ?>',
|
29 |
-
<?php endif; ?>
|
30 |
-
});
|
31 |
-
<?php endif; ?>
|
32 |
-
<?php if($event['name'] == 'purchase'): ?>
|
33 |
-
REES46.pushData('purchase', [
|
34 |
-
<?php foreach($event['data']['products'] as $product): ?>
|
35 |
-
{
|
36 |
-
item_id: '<?php echo $product['item_id'] ?>',
|
37 |
-
name: '<?php echo $product['name'] ?>',
|
38 |
-
price: '<?php echo $product['price'] ?>',
|
39 |
-
is_available: '<?php echo intval($product['is_available']) ?>',
|
40 |
-
categories: [<?php echo implode(',', $product['categories']) ?>],
|
41 |
-
amount: <?php echo $product['amount'] ?>,
|
42 |
-
<?php if($product['recommended_by']): ?>
|
43 |
-
recommended_by: '<?php echo $product['recommended_by'] ?>',
|
44 |
-
<?php endif; ?>
|
45 |
-
},
|
46 |
-
<?php endforeach; ?>
|
47 |
-
],
|
48 |
-
'<?php echo $event['data']['order_id'] ?>');
|
49 |
-
<?php endif; ?>
|
50 |
-
<?php endforeach; ?>
|
51 |
-
|
52 |
-
jQuery('.rees46.rees46-recommend').each(function(){
|
53 |
-
var recommenderBlock = jQuery(this);
|
54 |
-
var recommenderType = recommenderBlock.data('type');
|
55 |
-
switch(recommenderType) {
|
56 |
-
case 'interesting':
|
57 |
-
case 'also_bought':
|
58 |
-
case 'similar':
|
59 |
-
case 'recently_viewed':
|
60 |
-
case 'buying_now':
|
61 |
-
REES46.recommend({
|
62 |
-
recommender_type: recommenderType,
|
63 |
-
item: recommenderBlock.data('item'),
|
64 |
-
cart: REES46_CART
|
65 |
-
}, function(data){
|
66 |
-
REES46_Recommender_Callback(recommenderType, recommenderBlock, data);
|
67 |
-
});
|
68 |
-
break;
|
69 |
-
case 'popular':
|
70 |
-
REES46.recommend({
|
71 |
-
recommender_type: recommenderType,
|
72 |
-
category: recommenderBlock.data('category')
|
73 |
-
}, function(data){
|
74 |
-
REES46_Recommender_Callback(recommenderType, recommenderBlock, data);
|
75 |
-
});
|
76 |
-
break;
|
77 |
-
case 'see_also':
|
78 |
-
REES46.recommend({
|
79 |
-
recommender_type: recommenderType,
|
80 |
-
cart: REES46_CART
|
81 |
-
}, function(data){
|
82 |
-
REES46_Recommender_Callback(recommenderType, recommenderBlock, data);
|
83 |
-
});
|
84 |
-
break;
|
85 |
-
}
|
86 |
-
});
|
87 |
-
|
88 |
-
function REES46_Recommender_Callback(recommenderType, block, data) {
|
89 |
-
/* @todo: update settings – include parameter for limit minimum recommended items */
|
90 |
-
var min_products = 1;
|
91 |
-
if(data.length >= min_products) {
|
92 |
-
REES46RENDER(
|
93 |
-
'/personalization/block',
|
94 |
-
{
|
95 |
-
ids: data,
|
96 |
-
type: recommenderType,
|
97 |
-
minimum: min_products,
|
98 |
-
block_title: ( block.data('title') || '' )
|
99 |
-
},
|
100 |
-
function(response) {
|
101 |
-
if(response) {
|
102 |
-
block.html(response);
|
103 |
-
}
|
104 |
-
}
|
105 |
-
);
|
106 |
-
}
|
107 |
-
};
|
108 |
-
|
109 |
-
/**
|
110 |
-
* Функция должна всегда получать URL (без параметров) и отдельно params независимо от: POST или GET запрос
|
111 |
-
* @param url
|
112 |
-
* @param attributes
|
113 |
-
* @param callback
|
114 |
-
* @returns {*}
|
115 |
-
* @constructor
|
116 |
-
*/
|
117 |
-
function REES46RENDER (url, attributes, callback) {
|
118 |
|
119 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
120 |
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
131 |
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
|
|
|
|
|
|
|
|
|
|
137 |
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
_xml.send(null);
|
149 |
-
this._xml = _xml;
|
150 |
-
return this._xml;
|
151 |
-
} catch( e ) {
|
152 |
-
console.log(e);
|
153 |
-
}
|
154 |
|
155 |
-
|
156 |
-
|
|
|
|
|
|
|
157 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
158 |
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
|
|
163 |
<?php endif; ?>
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Copyright © 2017 REES46, INC. All rights reserved.
|
4 |
+
*/
|
5 |
+
?>
|
6 |
+
<?php if (Mage::helper('rees46_personalization')->isEnabled() && $this->helper('rees46_personalization')->getAPIKey()): ?>
|
7 |
+
<!-- BEGIN REES46 INIT -->
|
8 |
+
<script type="text/javascript">
|
9 |
+
(function(r){window.r46=window.r46||function(){(r46.q=r46.q||[]).push(arguments)};var s=document.getElementsByTagName(r)[0],rs=document.createElement(r);rs.async=1;rs.src='//cdn.rees46.com/v3.js';s.parentNode.insertBefore(rs,s);})('script');
|
10 |
+
r46('init', '<?php echo $this->helper('rees46_personalization')->getAPIKey(); ?>');
|
11 |
+
r46('add_css', 'recommendations');
|
12 |
+
<?php if (Mage::getSingleton('customer/session')->isLoggedIn()): ?>
|
13 |
+
r46('profile', 'set', {id: <?php echo Mage::getSingleton('customer/session')->getCustomer()->getID() ?>, email: '<?php echo Mage::getSingleton('customer/session')->getCustomer()->getEmail() ?>'});
|
14 |
+
<?php endif; ?>
|
15 |
+
REES46_CART = <?php echo json_encode($this->helper('rees46_personalization')->getCartProductIds()); ?>;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16 |
|
17 |
+
jQuery(document).ready(function() {
|
18 |
+
<?php foreach(Mage::helper('rees46_personalization/event')->getEventsQueue(true) as $event): ?>
|
19 |
+
<?php if ($event['name'] == 'view'): ?>
|
20 |
+
r46('track', 'view', {
|
21 |
+
id: <?php echo $event['data']['id'] ?>,
|
22 |
+
stock: <?php echo intval($event['data']['stock']) ?>,
|
23 |
+
price: <?php echo $event['data']['price'] ?>,
|
24 |
+
name: '<?php echo $event['data']['name'] ?>',
|
25 |
+
categories: [<?php echo $event['data']['categories'] ?>],
|
26 |
+
image: '<?php echo $event['data']['image'] ?>',
|
27 |
+
url: '<?php echo $event['data']['url'] ?>'
|
28 |
+
});
|
29 |
+
<?php endif; ?>
|
30 |
+
<?php if ($event['name'] == 'cart'): ?>
|
31 |
+
r46('track', 'cart', <?php echo $event['data']['id'] ?>);
|
32 |
+
<?php endif; ?>
|
33 |
+
<?php if ($event['name'] == 'remove_from_cart'): ?>
|
34 |
+
r46('track', 'remove_from_cart', <?php echo $event['data']['id'] ?>);
|
35 |
+
<?php endif; ?>
|
36 |
+
<?php if ($event['name'] == 'purchase'): ?>
|
37 |
+
r46('track', 'purchase', {
|
38 |
+
products: [
|
39 |
+
<?php foreach($event['data']['products'] as $product): ?>
|
40 |
+
{id: <?php echo $product['id'] ?>, price: <?php echo $product['price'] ?>, amount: <?php echo $product['amount'] ?>},
|
41 |
+
<?php endforeach; ?>
|
42 |
+
],
|
43 |
+
order: '<?php echo $event['data']['order_id'] ?>',
|
44 |
+
order_price: <?php echo $event['data']['order_price'] ?>
|
45 |
+
});
|
46 |
+
<?php endif; ?>
|
47 |
+
<?php endforeach; ?>
|
48 |
+
jQuery('.rees46.rees46-recommend').each(function(){
|
49 |
+
var recommenderBlock = jQuery(this);
|
50 |
+
var recommenderType = recommenderBlock.data('type');
|
51 |
+
switch(recommenderType) {
|
52 |
+
case 'interesting':
|
53 |
+
case 'also_bought':
|
54 |
+
case 'similar':
|
55 |
+
case 'recently_viewed':
|
56 |
+
case 'buying_now':
|
57 |
+
case 'supply':
|
58 |
+
r46('recommend', recommenderType, {item: recommenderBlock.data('item'), cart: [REES46_CART]}, function(results) {
|
59 |
+
REES46_Recommender_Callback(recommenderType, recommenderBlock, results);
|
60 |
+
});
|
61 |
+
break;
|
62 |
+
case 'popular':
|
63 |
+
r46('recommend', recommenderType, {category: recommenderBlock.data('category'), cart: [REES46_CART]}, function(results) {
|
64 |
+
REES46_Recommender_Callback(recommenderType, recommenderBlock, results);
|
65 |
+
});
|
66 |
+
break;
|
67 |
+
case 'see_also':
|
68 |
+
r46('recommend', recommenderType, {cart: [REES46_CART]}, function(results) {
|
69 |
+
REES46_Recommender_Callback(recommenderType, recommenderBlock, results);
|
70 |
+
});
|
71 |
+
break;
|
72 |
+
}
|
73 |
+
});
|
74 |
|
75 |
+
function REES46_Recommender_Callback(recommenderType, block, data) {
|
76 |
+
if (data.length > 0) {
|
77 |
+
REES46RENDER(
|
78 |
+
'<?php echo Mage::helper('core/url')->getHomeUrl(); ?>personalization/block',
|
79 |
+
{
|
80 |
+
ids: data,
|
81 |
+
type: recommenderType,
|
82 |
+
limit: (block.data('limit') || 4),
|
83 |
+
title: (block.data('title') || '')
|
84 |
+
},
|
85 |
+
function(response) {
|
86 |
+
if(response) {
|
87 |
+
block.html(response);
|
88 |
+
}
|
89 |
+
}
|
90 |
+
);
|
91 |
+
}
|
92 |
+
};
|
93 |
|
94 |
+
/**
|
95 |
+
* Функция должна всегда получать URL (без параметров) и отдельно params независимо от: POST или GET запрос
|
96 |
+
* @param url
|
97 |
+
* @param attributes
|
98 |
+
* @param callback
|
99 |
+
* @returns {*}
|
100 |
+
* @constructor
|
101 |
+
*/
|
102 |
+
function REES46RENDER (url, attributes, callback) {
|
103 |
+
var params = "ids=" + attributes.ids.join(',') + "&title=" + attributes.title + "&limit=" + attributes.limit + "&type=" + attributes.type;
|
104 |
|
105 |
+
/* Обработка результата запроса */
|
106 |
+
var handler = function () {
|
107 |
+
if (_xml.readyState == 4) {
|
108 |
+
if (_xml.status == 200) {
|
109 |
+
if (typeof(callback) == 'function') {
|
110 |
+
callback(_xml.responseText);
|
111 |
+
}
|
112 |
+
}
|
113 |
+
}
|
114 |
+
};
|
|
|
|
|
|
|
|
|
|
|
|
|
115 |
|
116 |
+
var handlerIE = function () {
|
117 |
+
if (typeof(callback) == 'function') {
|
118 |
+
callback(_xml.responseText);
|
119 |
+
}
|
120 |
+
};
|
121 |
|
122 |
+
try {
|
123 |
+
var XHR = window.XDomainRequest || window.XMLHttpRequest;
|
124 |
+
var _xml = new XHR();
|
125 |
+
_xml.withCredentials = "true";
|
126 |
+
_xml.open('GET', url + '?' + params, true);
|
127 |
+
if (XHR == window.XDomainRequest) {
|
128 |
+
_xml.onload = handlerIE;
|
129 |
+
} else {
|
130 |
+
_xml.onload = handler;
|
131 |
+
}
|
132 |
+
_xml.send(null);
|
133 |
+
this._xml = _xml;
|
134 |
+
return this._xml;
|
135 |
+
} catch( e ) {
|
136 |
+
console.log(e);
|
137 |
+
}
|
138 |
|
139 |
+
return true;
|
140 |
+
};
|
141 |
+
});
|
142 |
+
</script>
|
143 |
+
<!-- END REES46 INIT -->
|
144 |
<?php endif; ?>
|
app/etc/modules/Rees46_Personalization.xml
CHANGED
@@ -1,9 +1,7 @@
|
|
1 |
<?xml version="1.0"?>
|
2 |
<!--
|
3 |
/**
|
4 |
-
*
|
5 |
-
*
|
6 |
-
* @author REES46
|
7 |
*/
|
8 |
-->
|
9 |
<config>
|
1 |
<?xml version="1.0"?>
|
2 |
<!--
|
3 |
/**
|
4 |
+
* Copyright © 2017 REES46, INC. All rights reserved.
|
|
|
|
|
5 |
*/
|
6 |
-->
|
7 |
<config>
|
app/locale/en_US/Rees46_Personalization.csv
CHANGED
@@ -1,8 +1,10 @@
|
|
1 |
-
"
|
2 |
-
"
|
3 |
-
"
|
4 |
-
"
|
5 |
-
"see_also","
|
6 |
-
"recently_viewed","Recently
|
7 |
-
"buying_now","
|
8 |
-
"
|
|
|
|
1 |
+
"interesting","You May Also Like"
|
2 |
+
"also_bought","Frequently Bought Together"
|
3 |
+
"similar","Similar Products"
|
4 |
+
"popular","Popular Products"
|
5 |
+
"see_also","Recommended For You"
|
6 |
+
"recently_viewed","You Recently Viewed"
|
7 |
+
"buying_now","Trending Products"
|
8 |
+
"search","Customers Who Looked For This Item Also Bought"
|
9 |
+
"supply","Regular Purchase"
|
10 |
+
"More","More"
|
app/locale/ru_RU/Rees46_Personalization.csv
CHANGED
@@ -1,8 +1,10 @@
|
|
1 |
-
"
|
2 |
-
"
|
3 |
-
"also_bought","С этим товаром также покупают"
|
4 |
"similar","Похожие товары"
|
5 |
-
"
|
|
|
6 |
"recently_viewed","Вы недавно смотрели"
|
7 |
-
"buying_now","
|
|
|
|
|
8 |
"More","Подробнее"
|
1 |
+
"interesting","Возможно, вам это понравится"
|
2 |
+
"also_bought","С этим товаром покупают"
|
|
|
3 |
"similar","Похожие товары"
|
4 |
+
"popular","Популярные товары"
|
5 |
+
"see_also","Посмотрите также"
|
6 |
"recently_viewed","Вы недавно смотрели"
|
7 |
+
"buying_now","Прямо сейчас покупают"
|
8 |
+
"search","Пользователи, искавшие этот товар, также купили"
|
9 |
+
"supply","У вас скоро закончатся"
|
10 |
"More","Подробнее"
|
package.xml
CHANGED
@@ -1,71 +1,26 @@
|
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>Rees46_Personalization</name>
|
4 |
-
<version>
|
5 |
<stability>stable</stability>
|
6 |
<license>GNU</license>
|
7 |
<channel>community</channel>
|
8 |
<extends/>
|
9 |
-
<summary>
|
10 |
-
<description>
|
11 |
-

|
12 |
-
|
13 |
-

|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
-
|
22 |
-
|
23 |
-
|
24 |
-

|
25 |
-
Personalise all channels: your online storefront, search, mailings, push-notifications and offline recommendations as well. Also you can integrate your email-marketing platform with REES46 personalized mechanics — and gain the powerful marketing tool.
|
26 |
-

|
27 |
-
== Personalized email-marketing. 
|
28 |
-

|
29 |
-
Use trigger-based and transactional mailing to activate your customers, to return them to ordering or to raise some spontaneous purchase. It works better than traditional emails because you can include personalized product recommendation into each customer’s mailing.
|
30 |
-

|
31 |
-
== Audience segmentation. 
|
32 |
-

|
33 |
-
Define target segments automatically due to the fact that REES46 knows the history of the customers’ behaviour.
|
34 |
-

|
35 |
-
== Remarketing and abandoned carts. 
|
36 |
-

|
37 |
-
REES46 helps to return your customers and remind them to complete the ordering. Our advertising network has CPA-model, so you will pay only for orders, not views or clicks. Save money and sell more!
|
38 |
-

|
39 |
-
== Industry specific algorithms. 
|
40 |
-

|
41 |
-
Nobody can’t sell apparels in the same way as cosmetics or FMCG, right? So REES46 using industry algorithms to act more accurate and recommend the most relevant items to customers.
|
42 |
-

|
43 |
-
Available industrial algorithms at this moment:
|
44 |
-

|
45 |
-
- Apparel.
|
46 |
-
- Baby products.
|
47 |
-
- FMCG.
|
48 |
-
- Pets products.
|
49 |
-
- Home improvement and repair.
|
50 |
-
- Cosmetics.
|
51 |
-
- Consumer electronics.
|
52 |
-

|
53 |
-
== Virtual profiles and Big Data. 
|
54 |
-

|
55 |
-
REES46 knows not only customers’ basic info, but also it keeps data about user’s children, pets, skin condition or hair type, family budget and relations between the family members. Every customer has it’s own virtual profile in REES46 with all this data (keeping anonymously!). 
|
56 |
-

|
57 |
-
== In-house analytics. 
|
58 |
-

|
59 |
-
All KPIs and ordering history are available at your REES46 profile. Track the perfomance of your campaigns and see the sales growth.
|
60 |
-

|
61 |
-
== Bonus: make more income with REES46 online-merchandising platform. 
|
62 |
-

|
63 |
-
You can participate in our advertising program. Switch on the merchandising mode to allow the promotiong brands to appear in first row of your in-store recommendation. You’ll get revenue for clicks. It’s important: this model promote only items that already in your catalogue (not the items from another sites)!</description>
|
64 |
-
<notes>Centralized CSS management.</notes>
|
65 |
-
<authors><author><name>REES46</name><user>mkechinov</user><email>kechinoff@gmail.com</email></author></authors>
|
66 |
-
<date>2016-07-29</date>
|
67 |
-
<time>15:22:27</time>
|
68 |
-
<contents><target name="magecommunity"><dir name="Rees46"><dir name="Personalization"><dir name="Helper"><file name="Admin.php" hash="2d31ca47bba5404e8b9d777027f70f48"/><file name="Data.php" hash="eecf1cab557b61ff3de492ca8d768ff2"/><file name="Event.php" hash="b556b383c49d1ce32e75a34739c0ec80"/></dir><dir name="Model"><file name="Observer.php" hash="46514b2c3bebbf55a375df6eef73b01d"/></dir><dir name="controllers"><dir name="Adminhtml"><file name="PersonalizationController.php" hash="223eb514006587a194e969487e650b6d"/></dir><file name="BlockController.php" hash="af21b92af9fb8c8aacc60f41cf40b54c"/></dir><dir name="etc"><file name="adminhtml.xml" hash="6377f088c69a7b1b241fe382893d0254"/><file name="config.xml" hash="f60a7ac504290d1652aa033b087d646f"/><file name="system.xml" hash="9b5cca89ddeea0405ed55fb34f7dea7f"/></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="rees46_personalization.xml" hash="83770ae4cef3d6602ab4bace18c50d18"/></dir><dir name="template"><dir name="rees46"><dir name="personalization"><file name="index.phtml" hash="4af8baf7282f391241fc980b6d56aff5"/></dir></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="rees46_personalization.xml" hash="b1a6845c76cc0e3efbf901bb5a6a0322"/></dir><dir name="template"><dir name="rees46"><dir name="personalization"><dir name="blocks"><file name="cart.phtml" hash="c594f670a1b069c5c8418db41a89e4a7"/><file name="category.phtml" hash="ddaa3e5542058a6091ada3565e32b085"/><file name="category_popular.phtml" hash="db6f2d7df16ab69b76030eb008df9b22"/><file name="home.phtml" hash="3ca3dff9140e0bb0d850b456f9bf8640"/><file name="product.phtml" hash="8e5621b3897e374fe34436326f2132e9"/></dir><file name="css.phtml" hash="8a8c5c44da1286ec14b040f5edeb2cfd"/><file name="init.phtml" hash="a62110d92e9a14645e428b830ad087ce"/></dir></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Rees46_Personalization.xml" hash="67bdc8c38ce74e98dda5d70a0943f2fe"/></dir></target><target name="magelocale"><dir><dir name="en_US"><file name="Rees46_Personalization.csv" hash="0169f9749d80016235f9c69c245f0976"/></dir><dir name="ru_RU"><file name="Rees46_Personalization.csv" hash="9a71f4c9cb704beb7bf698595ee9db13"/></dir></dir></target></contents>
|
69 |
<compatible/>
|
70 |
-
<dependencies><required><php><min>5.2.1</min><max>
|
71 |
</package>
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>Rees46_Personalization</name>
|
4 |
+
<version>4.0.0</version>
|
5 |
<stability>stable</stability>
|
6 |
<license>GNU</license>
|
7 |
<channel>community</channel>
|
8 |
<extends/>
|
9 |
+
<summary>REES46 is free professional recommender system for e-commerce, with personalized merchandising, trigger and digest mailings, search personalization, etc. analyzes customers activity and recommend them best goods they are willing to buy for greater conversion and ARPPU.</summary>
|
10 |
+
<description>REES46 is an all-in-one marketing suite that can be applied to an e-commerce store of any size, demographic, or niche. Once set up, you can manage several tools from a central dashboard that will make your basic marketing processes easier to manage and follow up.
|
11 |
+

|
12 |
+
Using REES46 you can easily:
|
13 |
+

|
14 |
+
Acquire more visitors using our advertising platform with extremely precise targeting.
|
15 |
+
Convert your visitors into customers using personalized product recommendations and personalized search.
|
16 |
+
Recover abandoned carts using triggered emails, web push notifications and remarketing.
|
17 |
+
Induce repeat purchases through digest emails and push notifications with individual selections of recommended products.
|
18 |
+
Gain customer feedback, product and store reviews to improve your store credibility and merchant reputation. </description>
|
19 |
+
<notes>Used JS SDK III</notes>
|
20 |
+
<authors><author><name>REES46</name><user>mkechinov</user><email>kechinoff@gmail.com</email></author><author><name>REES46</name><user>p0v1n0m</user><email>ay@rees46.com</email></author></authors>
|
21 |
+
<date>2017-03-23</date>
|
22 |
+
<time>15:43:59</time>
|
23 |
+
<contents><target name="magecommunity"><dir name="Rees46"><dir name="Personalization"><dir name="Helper"><file name="Admin.php" hash="a01aceaba456186604b779c5920cafe9"/><file name="Data.php" hash="4896d769e47ba5c0896d0c8b2e7ec92d"/><file name="Event.php" hash="c50e9b22f08a3251602a3372d2622b65"/></dir><dir name="Model"><file name="Observer.php" hash="14f3fae00e741ffbaa6a9842a642d5c9"/></dir><dir name="controllers"><dir name="Adminhtml"><file name="PersonalizationController.php" hash="b3ddd3bb3a8acc4df0034f1dc681b952"/></dir><file name="BlockController.php" hash="b393c157296eb4ffd52af2e69eeac4bc"/></dir><dir name="etc"><file name="adminhtml.xml" hash="051c97f0c45ce97134344590f930cd73"/><file name="config.xml" hash="81ae75517b240152cb9acdc27fffc4d2"/><file name="system.xml" hash="7d2293a79736ee4ffa30151cfd4ba28d"/></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="rees46_personalization.xml" hash="682bbcffec8a0933d64ef2910fc52bb0"/></dir><dir name="template"><dir name="rees46"><dir name="personalization"><file name="index.phtml" hash="f09eeb4522c3b5095591697fa92803af"/></dir></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="rees46_personalization.xml" hash="ec585005bed91c3f5204122d6a9dcbc5"/></dir><dir name="template"><dir name="rees46"><dir name="personalization"><file name="init.phtml" hash="717be6d0b3d8aa5eec26a58c0ab13432"/></dir></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Rees46_Personalization.xml" hash="7b0cf94d20b8263561e8b63cf52d22ae"/></dir></target><target name="magelocale"><dir><dir name="en_US"><file name="Rees46_Personalization.csv" hash="eb3790f608f01c384916cc2660820987"/></dir><dir name="ru_RU"><file name="Rees46_Personalization.csv" hash="022b43e549a584556d1a68ea7901d7b9"/></dir></dir></target></contents>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
24 |
<compatible/>
|
25 |
+
<dependencies><required><php><min>5.2.1</min><max>6.0.0</max></php></required></dependencies>
|
26 |
</package>
|