Version Notes
- updated dashboard and translations
- improved product synchronization for email retargeting)
- added language on register
- removed A/B testing implementation
Download this release
Release Info
Developer | Mathieu |
Extension | Affinity_Items |
Version | 1.1.0 |
Comparing to | |
See all releases |
Code changes from version 1.0.0 to 1.1.0
- app/code/local/AffinityEngine/AffinityItems/Block/Index.php +1 -1
- app/code/local/AffinityEngine/AffinityItems/Model/Sync/ProductSync.php +39 -1
- app/code/local/AffinityEngine/AffinityItems/Model/Sync/Sync.php +1 -0
- app/code/local/AffinityEngine/AffinityItems/bin/manual-run.php +1 -0
- app/code/local/AffinityEngine/AffinityItems/etc/config.xml +1 -1
- app/code/local/AffinityEngine/AffinityItems/etc/system.xml +1 -31
- app/code/local/AffinityEngine/AffinityItems/sql/affinityitems_setup/mysql4-install-1.0.0.php +1 -1
- app/design/adminhtml/default/default/template/affinityitems/affinityitems_sync.phtml +13 -10
- app/design/frontend/base/default/template/affinityengine/horizontal.phtml +1 -1
- app/locale/fr_FR/AffinityEngine_AffinityItems.csv +14 -9
- package.xml +8 -5
- skin/adminhtml/default/default/affinityengine/main.css +6 -1
app/code/local/AffinityEngine/AffinityItems/Block/Index.php
CHANGED
@@ -29,7 +29,7 @@ class AffinityEngine_AffinityItems_Block_Index extends Mage_Core_Block_Template
|
|
29 |
//$category_id = (Mage::registry('current_category')) ? Mage::registry('current_category')->getId() : false;
|
30 |
// $context = "recoCategory";
|
31 |
} elseif (strpos($path, 'search')) {
|
32 |
-
$refType = "keywords";
|
33 |
$expr = Mage::app()->getRequest()->getParam('q');
|
34 |
// $context = "recoSearch";
|
35 |
} elseif (strpos($path, 'product')) {
|
29 |
//$category_id = (Mage::registry('current_category')) ? Mage::registry('current_category')->getId() : false;
|
30 |
// $context = "recoCategory";
|
31 |
} elseif (strpos($path, 'search')) {
|
32 |
+
$refType = "keywords";
|
33 |
$expr = Mage::app()->getRequest()->getParam('q');
|
34 |
// $context = "recoSearch";
|
35 |
} elseif (strpos($path, 'product')) {
|
app/code/local/AffinityEngine/AffinityItems/Model/Sync/ProductSync.php
CHANGED
@@ -26,15 +26,19 @@ class AffinityEngine_AffinityItems_Model_Sync_ProductSync extends AffinityEngine
|
|
26 |
foreach ($products as $prod) {
|
27 |
$prod = Mage::getModel('catalog/product')->setStoreId(0)->load($prod->getId());
|
28 |
$aeproduct = new stdClass();
|
|
|
|
|
29 |
$aeproduct->productId = $prod->getId();
|
30 |
$aeproduct->updateDate = $prod->getUpdatedAt();
|
31 |
$aeproduct->categoryIds = $prod->getCategoryIds();
|
32 |
$aeproduct->recommendable = $this->isRecomendable($prod);
|
33 |
$aeproduct->localizations = $this->getLocalizations($prod);
|
34 |
$aeproduct->prices = $this->getProductPrices($prod);
|
|
|
35 |
array_push($aeproductList, $aeproduct);
|
36 |
}
|
37 |
|
|
|
38 |
$request = new AffinityEngine_AffinityItems_Model_Sdk_Request_ProductRequest($aeproductList);
|
39 |
if ($new && count($aeproductList)) {
|
40 |
$response = $request->post();
|
@@ -117,6 +121,7 @@ class AffinityEngine_AffinityItems_Model_Sync_ProductSync extends AffinityEngine
|
|
117 |
$aeproduct->recommendable = $this->isRecomendable($prod);
|
118 |
$aeproduct->localizations = $this->getLocalizations($prod);
|
119 |
$aeproduct->prices = $this->getProductPrices($prod);
|
|
|
120 |
$request = new AffinityEngine_AffinityItems_Model_Sdk_Request_ProductRequest($aeproduct);
|
121 |
if (!$is_new) {
|
122 |
$response = $request->post();
|
@@ -171,12 +176,41 @@ class AffinityEngine_AffinityItems_Model_Sync_ProductSync extends AffinityEngine
|
|
171 |
$plocalization->tags = $tagList;
|
172 |
$plocalization->attributes = $attributeList;
|
173 |
$plocalization->features = array();
|
174 |
-
|
175 |
array_push($localizationList, $plocalization);
|
176 |
}
|
177 |
return $localizationList;
|
178 |
}
|
179 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
180 |
public function getProductTags($p) {
|
181 |
$listTag = array();
|
182 |
$model = Mage::getModel('tag/tag');
|
@@ -204,18 +238,22 @@ class AffinityEngine_AffinityItems_Model_Sync_ProductSync extends AffinityEngine
|
|
204 |
$price = new stdClass();
|
205 |
$price->currency = $iso_code;
|
206 |
$price->amount = $p->getPrice();
|
|
|
207 |
array_push($listPrice, $price);
|
208 |
}
|
209 |
if ($p->getFinalPrice() && $p->getPrice() <> $p->getFinalPrice()) {
|
210 |
$price = new stdClass();
|
211 |
$price->currency = $iso_code;
|
212 |
$price->amount = $p->getFinalPrice();
|
|
|
213 |
array_push($listPrice, $price);
|
214 |
}
|
215 |
if ($p->getSpecialPrice() && $p->getPrice() <> $p->getSpecialPrice()) {
|
216 |
$price = new stdClass();
|
217 |
$price->currency = $iso_code;
|
218 |
$price->amount = $p->getSpecialPrice();
|
|
|
|
|
219 |
array_push($listPrice, $price);
|
220 |
}
|
221 |
return $listPrice;
|
26 |
foreach ($products as $prod) {
|
27 |
$prod = Mage::getModel('catalog/product')->setStoreId(0)->load($prod->getId());
|
28 |
$aeproduct = new stdClass();
|
29 |
+
|
30 |
+
|
31 |
$aeproduct->productId = $prod->getId();
|
32 |
$aeproduct->updateDate = $prod->getUpdatedAt();
|
33 |
$aeproduct->categoryIds = $prod->getCategoryIds();
|
34 |
$aeproduct->recommendable = $this->isRecomendable($prod);
|
35 |
$aeproduct->localizations = $this->getLocalizations($prod);
|
36 |
$aeproduct->prices = $this->getProductPrices($prod);
|
37 |
+
$aeproduct->imageUrls = $this->getImagesUrl($prod);
|
38 |
array_push($aeproductList, $aeproduct);
|
39 |
}
|
40 |
|
41 |
+
|
42 |
$request = new AffinityEngine_AffinityItems_Model_Sdk_Request_ProductRequest($aeproductList);
|
43 |
if ($new && count($aeproductList)) {
|
44 |
$response = $request->post();
|
121 |
$aeproduct->recommendable = $this->isRecomendable($prod);
|
122 |
$aeproduct->localizations = $this->getLocalizations($prod);
|
123 |
$aeproduct->prices = $this->getProductPrices($prod);
|
124 |
+
|
125 |
$request = new AffinityEngine_AffinityItems_Model_Sdk_Request_ProductRequest($aeproduct);
|
126 |
if (!$is_new) {
|
127 |
$response = $request->post();
|
176 |
$plocalization->tags = $tagList;
|
177 |
$plocalization->attributes = $attributeList;
|
178 |
$plocalization->features = array();
|
179 |
+
$plocalization->pageUrl = $this->helper->getFullProductUrl($p);
|
180 |
array_push($localizationList, $plocalization);
|
181 |
}
|
182 |
return $localizationList;
|
183 |
}
|
184 |
|
185 |
+
public function getImagesUrl($prod) {
|
186 |
+
$urls = array();
|
187 |
+
|
188 |
+
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
|
189 |
+
$p = Mage::getModel('catalog/product')->setStoreId(0)->load($prod->getId());
|
190 |
+
|
191 |
+
$resolution = new stdClass();
|
192 |
+
$resolution->name = 'large';
|
193 |
+
$resolution->urls = array((string)Mage::helper('catalog/image')->init($p, 'image')->resize(458, 458));
|
194 |
+
array_push($urls, $resolution);
|
195 |
+
|
196 |
+
$resolution = new stdClass();
|
197 |
+
$resolution->name = 'medium';
|
198 |
+
$resolution->urls = array((string)Mage::helper('catalog/image')->init($p, 'image')->resize(250, 250));
|
199 |
+
array_push($urls, $resolution);
|
200 |
+
|
201 |
+
$resolution = new stdClass();
|
202 |
+
$resolution->name = 'small';
|
203 |
+
$resolution->urls = array((string)Mage::helper('catalog/image')->init($p, 'image')->resize(98, 98));
|
204 |
+
array_push($urls, $resolution);
|
205 |
+
|
206 |
+
$resolution = new stdClass();
|
207 |
+
$resolution->name = 'other';
|
208 |
+
$resolution->urls = array((string)Mage::helper('catalog/image')->init($p, 'image')->resize(125, 125));
|
209 |
+
array_push($urls, $resolution);
|
210 |
+
|
211 |
+
return $urls;
|
212 |
+
}
|
213 |
+
|
214 |
public function getProductTags($p) {
|
215 |
$listTag = array();
|
216 |
$model = Mage::getModel('tag/tag');
|
238 |
$price = new stdClass();
|
239 |
$price->currency = $iso_code;
|
240 |
$price->amount = $p->getPrice();
|
241 |
+
$price->displayedPrice = $p->getPrice();
|
242 |
array_push($listPrice, $price);
|
243 |
}
|
244 |
if ($p->getFinalPrice() && $p->getPrice() <> $p->getFinalPrice()) {
|
245 |
$price = new stdClass();
|
246 |
$price->currency = $iso_code;
|
247 |
$price->amount = $p->getFinalPrice();
|
248 |
+
$price->displayedPrice = $p->getFinalPrice();
|
249 |
array_push($listPrice, $price);
|
250 |
}
|
251 |
if ($p->getSpecialPrice() && $p->getPrice() <> $p->getSpecialPrice()) {
|
252 |
$price = new stdClass();
|
253 |
$price->currency = $iso_code;
|
254 |
$price->amount = $p->getSpecialPrice();
|
255 |
+
$price->displayedPrice = $p->getSpecialPrice();
|
256 |
+
$price->prediscountPrice = $p->getPrice();
|
257 |
array_push($listPrice, $price);
|
258 |
}
|
259 |
return $listPrice;
|
app/code/local/AffinityEngine/AffinityItems/Model/Sync/Sync.php
CHANGED
@@ -4,6 +4,7 @@ class AffinityEngine_AffinityItems_Model_Sync_Sync extends Mage_Core_Model_Abstr
|
|
4 |
|
5 |
public function __construct() {
|
6 |
$this->logger = Mage::getModel('affinityitems/log');
|
|
|
7 |
}
|
8 |
|
9 |
public function getProductsForSync() {
|
4 |
|
5 |
public function __construct() {
|
6 |
$this->logger = Mage::getModel('affinityitems/log');
|
7 |
+
$this->helper = Mage::helper('affinityitems');
|
8 |
}
|
9 |
|
10 |
public function getProductsForSync() {
|
app/code/local/AffinityEngine/AffinityItems/bin/manual-run.php
CHANGED
@@ -1,5 +1,6 @@
|
|
1 |
#!/usr/bin/env php
|
2 |
<?php
|
|
|
3 |
$mageFilename = '/../../../../../Mage.php';
|
4 |
require_once dirname(__FILE__) . $mageFilename;
|
5 |
Mage::app();
|
1 |
#!/usr/bin/env php
|
2 |
<?php
|
3 |
+
ini_set('memory_limit','256M');
|
4 |
$mageFilename = '/../../../../../Mage.php';
|
5 |
require_once dirname(__FILE__) . $mageFilename;
|
6 |
Mage::app();
|
app/code/local/AffinityEngine/AffinityItems/etc/config.xml
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
<config>
|
3 |
<modules>
|
4 |
<AffinityEngine_AffinityItems>
|
5 |
-
<version>1.
|
6 |
</AffinityEngine_AffinityItems>
|
7 |
</modules>
|
8 |
|
2 |
<config>
|
3 |
<modules>
|
4 |
<AffinityEngine_AffinityItems>
|
5 |
+
<version>1.1.0</version>
|
6 |
</AffinityEngine_AffinityItems>
|
7 |
</modules>
|
8 |
|
app/code/local/AffinityEngine/AffinityItems/etc/system.xml
CHANGED
@@ -42,25 +42,7 @@
|
|
42 |
<show_in_website>1</show_in_website>
|
43 |
<show_in_store>1</show_in_store>
|
44 |
<comment><![CDATA[You will be logged out from affinity server on change]]></comment>
|
45 |
-
</dev_prod>
|
46 |
-
<guest_percentage translate="label">
|
47 |
-
<label>% guests with recommendations</label>
|
48 |
-
<frontend_type>text</frontend_type>
|
49 |
-
<sort_order>5</sort_order>
|
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 |
-
<comment><![CDATA[Please enter number from 1 to 100]]></comment>
|
54 |
-
<tooltip><![CDATA[
|
55 |
-
The outcome measurement relies on the AB Testing method, an unbiased and reliable impact measure, no matter the conditions.
|
56 |
-
<br>In this method, a control group of visitors is not eligible for the recommandation.
|
57 |
-
<br>You can control the AB Testing groups :
|
58 |
-
<br>• First test our solution with a low rate of recommandation
|
59 |
-
<br>• Maximize the rate to benefit from the full recommandation impact]]></tooltip>
|
60 |
-
<depends>
|
61 |
-
<enable>1</enable>
|
62 |
-
</depends>
|
63 |
-
</guest_percentage>
|
64 |
<version translate="label">
|
65 |
<label>Version</label>
|
66 |
<frontend_type>text</frontend_type>
|
@@ -114,18 +96,6 @@
|
|
114 |
<tooltip><![CDATA[
|
115 |
This option allows you to avoid the resynchronization step when installing a new version of the module.]]></tooltip>
|
116 |
</rescind>-->
|
117 |
-
<ab_blacklist_ip translate="label">
|
118 |
-
<label>A/B Testing IP Blacklist</label>
|
119 |
-
<frontend_model>affinityitems/renderer_config_ipblacklist</frontend_model>
|
120 |
-
<backend_model>adminhtml/system_config_backend_serialized</backend_model>
|
121 |
-
<sort_order>40</sort_order>
|
122 |
-
<show_in_default>1</show_in_default>
|
123 |
-
<show_in_website>1</show_in_website>
|
124 |
-
<show_in_store>1</show_in_store>
|
125 |
-
<comment><![CDATA[IP list]]></comment>
|
126 |
-
<tooltip><![CDATA[
|
127 |
-
This feature lets you blacklist the IP addresses of your own company, so that the statistics are unbiased. For example, if a call center places orders directly on the site, these commands should not be taken into account in the AB Testing. Blacklisted IP addresses do not receive recommendations]]></tooltip>
|
128 |
-
</ab_blacklist_ip>
|
129 |
<sync_count translate="label">
|
130 |
<label>Number of elements to be synced</label>
|
131 |
<frontend_type>text</frontend_type>
|
42 |
<show_in_website>1</show_in_website>
|
43 |
<show_in_store>1</show_in_store>
|
44 |
<comment><![CDATA[You will be logged out from affinity server on change]]></comment>
|
45 |
+
</dev_prod>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
46 |
<version translate="label">
|
47 |
<label>Version</label>
|
48 |
<frontend_type>text</frontend_type>
|
96 |
<tooltip><![CDATA[
|
97 |
This option allows you to avoid the resynchronization step when installing a new version of the module.]]></tooltip>
|
98 |
</rescind>-->
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
99 |
<sync_count translate="label">
|
100 |
<label>Number of elements to be synced</label>
|
101 |
<frontend_type>text</frontend_type>
|
app/code/local/AffinityEngine/AffinityItems/sql/affinityitems_setup/mysql4-install-1.0.0.php
CHANGED
@@ -100,7 +100,7 @@ $sql = "INSERT INTO `" . $this->getTable('core_config_data') . "` (`config_id`,
|
|
100 |
(NULL, 'default', '0', 'affinityitems/security/key', ''),
|
101 |
(NULL, 'default', '0', 'affinityitems/security/conf_test_host', 'json.approval.v1.0.affinityitems.com'),
|
102 |
(NULL, 'default', '0', 'affinityitems/security/conf_prod_host', 'json.production.affinityitems.com'),
|
103 |
-
(NULL, 'default', '0', 'affinityitems/security/conf_port', '
|
104 |
(NULL, 'default', '0', 'affinityitems/general/dev_prod','0'),
|
105 |
(NULL, 'default', '0', 'affinityitems/general/dev_prod_rel','0'),
|
106 |
(NULL, 'default', '0', 'affinityitems/image_size/default', '125,125'),
|
100 |
(NULL, 'default', '0', 'affinityitems/security/key', ''),
|
101 |
(NULL, 'default', '0', 'affinityitems/security/conf_test_host', 'json.approval.v1.0.affinityitems.com'),
|
102 |
(NULL, 'default', '0', 'affinityitems/security/conf_prod_host', 'json.production.affinityitems.com'),
|
103 |
+
(NULL, 'default', '0', 'affinityitems/security/conf_port', '8182'),
|
104 |
(NULL, 'default', '0', 'affinityitems/general/dev_prod','0'),
|
105 |
(NULL, 'default', '0', 'affinityitems/general/dev_prod_rel','0'),
|
106 |
(NULL, 'default', '0', 'affinityitems/image_size/default', '125,125'),
|
app/design/adminhtml/default/default/template/affinityitems/affinityitems_sync.phtml
CHANGED
@@ -53,46 +53,49 @@ $initialsync = (count(Mage::getModel('affinityitems/syncrotate')->getCollection(
|
|
53 |
|
54 |
<?php } ?>
|
55 |
|
|
|
|
|
|
|
56 |
<div class="items-boxes">
|
57 |
|
58 |
<div class="items-box items-box-black">
|
59 |
-
<p><span class="items-box-large-font"><?php echo is_numeric($statistics['onlineUsers']) ? $statistics['onlineUsers'] : 0; ?></span> <br> <span> <?php echo $this->__('current connected visitors'); ?> </span></p>
|
60 |
</div>
|
61 |
|
62 |
<div class="items-box items-box-black">
|
63 |
-
<p><span class="items-box-large-font"><?php echo is_numeric($statistics['cartsInProgress']) ? $statistics['cartsInProgress'] : 0; ?></span> <br> <span><?php echo $this->__('current carts'); ?></span></p>
|
64 |
</div>
|
65 |
|
66 |
<div class="items-box items-box-purple">
|
67 |
-
<p><span class="items-box-large-font"><?php echo is_numeric($statistics['lastMonthVisitsWithRecommendation']) ? $statistics['lastMonthVisitsWithRecommendation'] : 0; ?></span> <br> <span><?php echo $this->__('visits with recommendations'); ?></span></p>
|
68 |
</div>
|
69 |
|
70 |
<div class="items-box items-box-purple">
|
71 |
-
<p><span class="items-box-large-font"><?php echo round(($statistics['bestClickRate']['rate']*100), 2); ?> %</span> <br> <span> <?php echo $this->__('recommendations click rate on'); ?> <?php echo $statistics['bestClickRate']['hook'] ?> page*</span></p>
|
72 |
</div>
|
73 |
|
74 |
<div class="items-box items-box-purple">
|
75 |
-
<p><span class="items-box-large-font"><?php echo round($statistics['lastMonthClickersConversationRate'], 2); ?> %</span> <br> <span><?php echo $this->__('transformation rate among clickers');
|
76 |
</div>
|
77 |
|
78 |
<div class="items-box items-box-black">
|
79 |
-
<p><span class="items-box-large-font"><?php echo is_numeric($statistics['lastMonthOrders']) ? $statistics['lastMonthOrders'] : 0; ?></span> <br> <span> <?php echo $this->__('orders last 30 days'); ?></span></p>
|
80 |
</div>
|
81 |
|
82 |
<div class="items-box items-box-black">
|
83 |
-
<p><span class="items-box-large-font"><?php echo round($statistics['lastMonthSales'], 0) ?></span> <br> <span><?php echo $this->__('sales last 30 days');
|
84 |
</div>
|
85 |
|
86 |
<div class="items-box items-box-purple">
|
87 |
-
<p><span class="items-box-large-font"><?php echo is_numeric($data['recommendation']) ? $data['recommendation'] : 0; ?></span> <br> <span><?php echo $this->__('recommandations
|
88 |
</div>
|
89 |
|
90 |
<div class="items-box items-box-purple">
|
91 |
-
<p><span class="items-box-large-font"><?php echo round($statistics['salesAfterClick'], 0) ?>
|
92 |
</div>
|
93 |
|
94 |
<div class="items-box items-box-purple">
|
95 |
-
<p><span class="items-box-large-font"><?php echo round($statistics['salesAfterReco'], 0) ?>
|
96 |
</div>
|
97 |
|
98 |
</div>
|
53 |
|
54 |
<?php } ?>
|
55 |
|
56 |
+
|
57 |
+
<?php $currency_code = Mage::app()->getStore()->getCurrentCurrencyCode(); ?>
|
58 |
+
|
59 |
<div class="items-boxes">
|
60 |
|
61 |
<div class="items-box items-box-black">
|
62 |
+
<p><span class="items-box-large-font"><?php echo is_numeric($statistics['onlineUsers']) ? $statistics['onlineUsers'] : 0; ?></span> <br> <span class="items-box-content"> <?php echo $this->__('current'); echo '<br />' . $this->__('connected visitors'); ?> </span></p>
|
63 |
</div>
|
64 |
|
65 |
<div class="items-box items-box-black">
|
66 |
+
<p><span class="items-box-large-font"><?php echo is_numeric($statistics['cartsInProgress']) ? $statistics['cartsInProgress'] : 0; ?></span> <br> <span class="items-box-content"><?php echo $this->__('current carts'); ?></span></p>
|
67 |
</div>
|
68 |
|
69 |
<div class="items-box items-box-purple">
|
70 |
+
<p><span class="items-box-large-font"><?php echo is_numeric($statistics['lastMonthVisitsWithRecommendation']) ? $statistics['lastMonthVisitsWithRecommendation'] : 0; ?></span> <br> <span class="items-box-content"><?php echo $this->__('visits'); echo '<br />' . $this->__('with recommendations'); ?></span></p>
|
71 |
</div>
|
72 |
|
73 |
<div class="items-box items-box-purple">
|
74 |
+
<p><span class="items-box-large-font"><?php echo round(($statistics['bestClickRate']['rate']*100), 2); ?> %</span> <br> <span class="items-box-content"> <?php echo $this->__('recommendations'); echo '<br />' . $this->__('click rate on'); ?> <?php echo $statistics['bestClickRate']['hook'] ?> page*</span></p>
|
75 |
</div>
|
76 |
|
77 |
<div class="items-box items-box-purple">
|
78 |
+
<p><span class="items-box-large-font"><?php echo round($statistics['lastMonthClickersConversationRate'], 2); ?> %</span> <br> <span class="items-box-content"><?php echo $this->__('transformation'); echo '<br />' . $this->__('rate among clickers'); ?></span></p>
|
79 |
</div>
|
80 |
|
81 |
<div class="items-box items-box-black">
|
82 |
+
<p><span class="items-box-large-font"><?php echo is_numeric($statistics['lastMonthOrders']) ? $statistics['lastMonthOrders'] : 0; ?></span> <br> <span class="items-box-content"> <?php echo $this->__('orders'); echo '<br />' . $this->__('during last 30 days'); ?></span></p>
|
83 |
</div>
|
84 |
|
85 |
<div class="items-box items-box-black">
|
86 |
+
<p><span class="items-box-large-font"><?php echo round($statistics['lastMonthSales'], 0) ?> <?php echo Mage::app()->getLocale()->currency( $currency_code )->getSymbol(); ?></span> <br> <span class="items-box-content"><?php echo $this->__('value sales'); echo '<br />' . $this->__('during last 30 days'); ?> </span></p>
|
87 |
</div>
|
88 |
|
89 |
<div class="items-box items-box-purple">
|
90 |
+
<p><span class="items-box-large-font"><?php echo is_numeric($data['recommendation']) ? $data['recommendation'] : 0; ?></span> <br> <span class="items-box-content"><?php echo $this->__('recommandations'); echo '<br />' . $this->__('during last 30 days'); ?></span></p>
|
91 |
</div>
|
92 |
|
93 |
<div class="items-box items-box-purple">
|
94 |
+
<p><span class="items-box-large-font"><?php echo round($statistics['salesAfterClick'], 0) ?> <?php echo Mage::app()->getLocale()->currency( $currency_code )->getSymbol(); ?></span> <br> <span class="items-box-content"><?php echo $this->__('value sales'); echo '<br />' . $this->__('following click on recommendations'); ?></span></p>
|
95 |
</div>
|
96 |
|
97 |
<div class="items-box items-box-purple">
|
98 |
+
<p><span class="items-box-large-font"><?php echo round($statistics['salesAfterReco'], 0) ?> <?php echo Mage::app()->getLocale()->currency( $currency_code )->getSymbol(); ?></span> <br> <span class="items-box-content"><?php echo $this->__('value sales'); echo '<br />' . $this->__('following a recommendation'); ?></span></p>
|
99 |
</div>
|
100 |
|
101 |
</div>
|
app/design/frontend/base/default/template/affinityengine/horizontal.phtml
CHANGED
@@ -19,7 +19,7 @@
|
|
19 |
<?php if ($helper->canDisplayProduct($product)) continue;?>
|
20 |
<?php $pname = $this->escapeHtml($product->getName()); ?>
|
21 |
<li id="<?php echo $helper->getId('li'); ?>" class="<?php echo $helper->getClass('ul'); ?> <?php if(($i % $helper->getConfig('number_products_per_line')) == ($helper->getConfig('number_products_per_line') - 1)) echo 'ae_last_item_of_line'; ?>">
|
22 |
-
<a rel="<?php echo $product->getId()?>" href="<?php echo $helper->getFullProductUrl($product); ?>" title="<?php echo $pname ?>" rel="<?php echo $product->getId() ?>"><img class="<?php echo $helper->getClass('product_image_class'); ?>" src="<?php echo Mage::helper('catalog/image')->init($product, 'image')->resize($imagesize[0], $imagesize[1]) ?>"
|
23 |
<h5 itemprop="name">
|
24 |
<a rel="<?php echo $product->getId()?>" class="<?php echo $helper->getClass('product_name_class'); ?>" href="<?php echo $helper->getFullProductUrl($product); ?>" rel="<?php echo $pname ?>" title="<?php echo $pname ?>"><?php echo $pname ?></a>
|
25 |
</h5>
|
19 |
<?php if ($helper->canDisplayProduct($product)) continue;?>
|
20 |
<?php $pname = $this->escapeHtml($product->getName()); ?>
|
21 |
<li id="<?php echo $helper->getId('li'); ?>" class="<?php echo $helper->getClass('ul'); ?> <?php if(($i % $helper->getConfig('number_products_per_line')) == ($helper->getConfig('number_products_per_line') - 1)) echo 'ae_last_item_of_line'; ?>">
|
22 |
+
<a rel="<?php echo $product->getId()?>" href="<?php echo $helper->getFullProductUrl($product); ?>" title="<?php echo $pname ?>" rel="<?php echo $product->getId() ?>"><img class="<?php echo $helper->getClass('product_image_class'); ?>" src="<?php echo Mage::helper('catalog/image')->init($product, 'image')->resize($imagesize[0], $imagesize[1]) ?>" height="<?php echo $imagesize[0]; ?>" width="<?php echo $imagesize[1]; ?>" alt="<?php echo $pname ?>" /></a>
|
23 |
<h5 itemprop="name">
|
24 |
<a rel="<?php echo $product->getId()?>" class="<?php echo $helper->getClass('product_name_class'); ?>" href="<?php echo $helper->getFullProductUrl($product); ?>" rel="<?php echo $pname ?>" title="<?php echo $pname ?>"><?php echo $pname ?></a>
|
25 |
</h5>
|
app/locale/fr_FR/AffinityEngine_AffinityItems.csv
CHANGED
@@ -37,16 +37,21 @@
|
|
37 |
"More about", "Plus d'info"
|
38 |
"Access my account", "Accèder à mon compte"
|
39 |
"Affinity items is activated and operational", "Affinity items est activé et opérationnel"
|
40 |
-
"current
|
|
|
41 |
"current carts", "paniers en cours"
|
42 |
-
"visits
|
43 |
-
"recommendations
|
44 |
-
"
|
45 |
-
"
|
46 |
-
"
|
47 |
-
"
|
48 |
-
"
|
49 |
-
"
|
|
|
|
|
|
|
|
|
50 |
"Affinity Items Synchronization", "Synchronisation d'Affinity Items"
|
51 |
"Initial sync in progress", "Synchronisation générale en progression"
|
52 |
"Your system is synchronized", "Votre système est synchronisé"
|
37 |
"More about", "Plus d'info"
|
38 |
"Access my account", "Accèder à mon compte"
|
39 |
"Affinity items is activated and operational", "Affinity items est activé et opérationnel"
|
40 |
+
"current", "visiteurs"
|
41 |
+
"connected visitors", "connectés"
|
42 |
"current carts", "paniers en cours"
|
43 |
+
"visits", "visites"
|
44 |
+
"with recommendations", "avec recommandations"
|
45 |
+
"recommendations", "recommandations"
|
46 |
+
"click rate on", "taux de click sur"
|
47 |
+
"transformation", "de taux de transformation auprès des clickers"
|
48 |
+
"rate among clickers", ""
|
49 |
+
"orders", "commandes"
|
50 |
+
"during last 30 days", "les 30 derniers jours"
|
51 |
+
"value sales", "de ventes"
|
52 |
+
"recommandations", "recommandations"
|
53 |
+
"following click on recommendations", "après un clic sur une recommandation"
|
54 |
+
"following a recommendation", "après une recommandation"
|
55 |
"Affinity Items Synchronization", "Synchronisation d'Affinity Items"
|
56 |
"Initial sync in progress", "Synchronisation générale en progression"
|
57 |
"Your system is synchronized", "Votre système est synchronisé"
|
package.xml
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>Affinity_Items</name>
|
4 |
-
<version>1.
|
5 |
<stability>stable</stability>
|
6 |
<license uri="http://opensource.org/licenses/osl-3.0.php">OSL v3</license>
|
7 |
<channel>community</channel>
|
@@ -42,11 +42,14 @@ Affinity items pricing model is a pure success based pricing model. There are no
|
|
42 |
Developers
|
43 |

|
44 |
Affinity items Magento extension is also downloadable from our developer platform: http://developer.affinity-engine.fr/affinityitems/magento/wikis/master/en-home</description>
|
45 |
-
<notes
|
|
|
|
|
|
|
46 |
<authors><author><name>Mathieu</name><user>BARAN</user><email>mathieu@affinity-engine.fr</email></author></authors>
|
47 |
-
<date>2015-
|
48 |
-
<time>
|
49 |
-
<contents><target name="magelocal"><dir name="AffinityEngine"><dir name="AffinityItems"><dir name="Block"><dir name="Adminhtml"><dir name="Affinityitems"><file name="Grid.php" hash="de34b472132fc34610da4b2257f17176"/></dir><file name="Affinityitems.php" hash="ae8d3d49bc84ade4ab253ce9bff305d2"/><file name="Affinityitemsbackend.php" hash="40aa694ef6ee2f256f202cf1a144ce0b"/></dir><file name="Index.php" hash="
|
50 |
<compatible/>
|
51 |
<dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
|
52 |
</package>
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>Affinity_Items</name>
|
4 |
+
<version>1.1.0</version>
|
5 |
<stability>stable</stability>
|
6 |
<license uri="http://opensource.org/licenses/osl-3.0.php">OSL v3</license>
|
7 |
<channel>community</channel>
|
42 |
Developers
|
43 |

|
44 |
Affinity items Magento extension is also downloadable from our developer platform: http://developer.affinity-engine.fr/affinityitems/magento/wikis/master/en-home</description>
|
45 |
+
<notes>- updated dashboard and translations
|
46 |
+
- improved product synchronization for email retargeting)
|
47 |
+
- added language on register
|
48 |
+
- removed A/B testing implementation</notes>
|
49 |
<authors><author><name>Mathieu</name><user>BARAN</user><email>mathieu@affinity-engine.fr</email></author></authors>
|
50 |
+
<date>2015-06-12</date>
|
51 |
+
<time>15:47:46</time>
|
52 |
+
<contents><target name="magelocal"><dir name="AffinityEngine"><dir name="AffinityItems"><dir name="Block"><dir name="Adminhtml"><dir name="Affinityitems"><file name="Grid.php" hash="de34b472132fc34610da4b2257f17176"/></dir><file name="Affinityitems.php" hash="ae8d3d49bc84ade4ab253ce9bff305d2"/><file name="Affinityitemsbackend.php" hash="40aa694ef6ee2f256f202cf1a144ce0b"/></dir><file name="Index.php" hash="0149583572d9d455c4bb3cf78336d2af"/><dir name="Renderer"><dir name="Config"><file name="Classes.php" hash="8c3d39529ef95c439b8e679a3912d9be"/><file name="Imagesize.php" hash="1a1bdd54722e5cf9ecb0318655b5f6db"/><file name="Ipblacklist.php" hash="645526f7fc6ad0ca8835f027d3a8c5f9"/><file name="Serverlist.php" hash="5c0f647a50a9444cde02909bcc164c6f"/><file name="Siteinfo.php" hash="baed3f0f265f0e93537d75ed988c871b"/><file name="Version.php" hash="48fe7d204de5dbc4194b54b6c3df41e9"/></dir></dir></dir><dir name="Helper"><file name="Aeadapter.php" hash="3a5d399727da2e0e1cdd6158535d9374"/><file name="Data.php" hash="17c33a6fcc14bf27ff4dda7326eedb86"/></dir><dir name="Model"><file name="Action.php" hash="2eb81ffd225b596d389c63f158818809"/><file name="Cart.php" hash="31c04d90e49fce5cc7e89f8892fc772c"/><file name="CatProdRepo.php" hash="a96f30305035b6bb82483199e3b731cc"/><file name="Config.php" hash="484d6fd84ca1a2322e6300aad22e82aa"/><file name="Cron.php" hash="0ca61c06a2ec49ac4f603ad5945bb890"/><file name="Log.php" hash="b86d41197ebcfa96acd1ef9da14b1595"/><file name="Observer.php" hash="c7865f97a2bc07aa579c065f66cb1866"/><dir name="Resource"><dir name="Action"><file name="Collection.php" hash="326d82fe39153680f99defdb1e846476"/></dir><file name="Action.php" hash="6cd9f6a6d4b87e220c3bbf271a24810d"/><dir name="Cart"><file name="Collection.php" hash="9a8c23023645f9170102980ce56bc193"/></dir><file name="Cart.php" hash="8bb395c3ebfc043326c6001d623270a4"/><dir name="CatProdRepo"><file name="Collection.php" hash="bf98be72eae2c0859046142ed2d7fb4c"/></dir><file name="CatProdRepo.php" hash="4781a985d1b889633ed28d98b28378bf"/><dir name="Log"><file name="Collection.php" hash="935eae91b74f30c4a960b1c18f373050"/></dir><file name="Log.php" hash="bc36af5602145cc1fc094fa17289eb1a"/><dir name="Syncrotate"><file name="Collection.php" hash="66bd261226b6865c5a52ef28e9b064ea"/></dir><file name="Syncrotate.php" hash="0d3b60d41d19f49c8dc673fd61007de5"/></dir><dir name="Sdk"><dir name="Abtesting"><file name="Abtesting.php" hash="59ae987fa1fd1d75a0263ccf7c86d10d"/></dir><dir name="Core"><file name="AbstractRequest.php" hash="d92ec4494b9cee5fa1343594024336fd"/><file name="Curl.php" hash="e620ba54fc00bf974adbb8ae0e0ffe95"/></dir><dir name="Recommendation"><file name="Recommendation.php" hash="64929784b877e32281705eee0c056533"/></dir><dir name="Request"><file name="ActionRequest.php" hash="a4128a5365d69a19e72ed9d7fe357514"/><file name="CategoryRequest.php" hash="31db44e9f404ee80a29939424a1a3596"/><file name="CustomerRequest.php" hash="3f1a0758034a2865e5bdf0e439694212"/><file name="DisableRequest.php" hash="9eeb721518be067c57eb8ce58df3d270"/><file name="GuestRequest.php" hash="78dd970ae4d0612853ddcdafd4de8ec4"/><file name="HostRequest.php" hash="8df4275aaf02019d9228ee14b395abe5"/><file name="LinkGuestToMemberRequest.php" hash="499c3986c89b09942c424542375d4d58"/><file name="MemberRequest.php" hash="74747f67cca8cccad5e6e346cfc157b0"/><file name="NotificationRequest.php" hash="3758c90470a9a32bafc8395a30127490"/><file name="OrderRequest.php" hash="590c8d40c2202f0becd50ec9a97c6885"/><file name="ProductRequest.php" hash="ad20d6f489728b5863867bd6bfaca753"/><file name="RecommendationRequest.php" hash="dc4e986ed4b224cbc1f36464e8610a43"/><file name="ResynchronizeRequest.php" hash="5d534d27011644ba14aa58bd935394bd"/><file name="SiteRequest.php" hash="42029a530971606fd2a2fd4cdb23b8b3"/></dir></dir><dir name="Source"><file name="Enviroment.php" hash="099b2a345377ceb795674a5d4d30a6a7"/><file name="Imagesize.php" hash="fa63ae1460a85dae21b0c6a3aabd6e35"/><file name="Loglevel.php" hash="2f9f20c2aff9f645cab10d1c1ff35af1"/><file name="Recoconfig.php" hash="cc99f674dd147f270969d05f02c615a6"/></dir><dir name="Sync"><file name="ActionSync.php" hash="9a159b5a9737e8219ca797780d9e281b"/><file name="CartActionSync.php" hash="00ffa3870ffab842261b771e80b89c3a"/><file name="CategorySync.php" hash="1119c45f88925a5453fdad4fd4f87650"/><file name="MemberSync.php" hash="aae843752f2f6e93efa8a63699970318"/><file name="OrderSync.php" hash="01aefd33bfd7802038e9e5658c628901"/><file name="ProductSync.php" hash="1b89f0aab8d612b81531ac653d156a67"/><file name="Sync.php" hash="327a17e217ab58208aa4066864a20f1f"/></dir><file name="Syncrotate.php" hash="5685bf909244da8a8d9e2bf65bb1e2e3"/></dir><dir name="bin"><file name="manual-run.php" hash="cb2223d194aea92cf5626000c4ddfde8"/></dir><dir name="controllers"><file name="ActionController.php" hash="bc93bfa952b2451ec71e9dc60d32ce00"/><dir name="Adminhtml"><file name="AffinityitemsbackendController.php" hash="a1f7026fd8ac2def3b25826a11b41f0a"/><file name="AffinityitemslogController.php" hash="398ca37dfc8a48f88ac8cadf7a471ec8"/><file name="AjaxController.php" hash="7cdee5c9f004056b9334735b740a42a9"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="3db0abc036764375bece30c5bb5dc976"/><file name="config.xml" hash="93fe94cdccb4152c8c8873da28ff8b37"/><file name="system.xml" hash="7ba74daf91f77f38ce0652674b0c6c1a"/></dir><dir name="sql"><dir name="affinityitems_setup"><file name="mysql4-install-1.0.0.php" hash="9e46074b6078dd5b444b41984756c4c6"/></dir></dir><file name="uninstall.sql" hash="73cb0928320f6f5325c6d21a87bf49eb"/></dir></dir></target><target name="mageetc"><dir name="modules"><file name="AffinityEngine_AffinityItems.xml" hash="204ebb541724e767ec5eb67916c39c6b"/></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="affinityitems.xml" hash="32d45a407463b4e76b5e30dab765b965"/></dir><dir name="template"><dir name="affinityitems"><file name="affinityitems_login.phtml" hash="7bc103a9720d13c20f55373c29f4f59e"/><file name="affinityitems_sync.phtml" hash="156b03a8b01441322094b9951f81810c"/></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><dir name="affinityengine"><file name="affinityitems.xml" hash="9a2c254e32f5d69deef0e3d74f007905"/></dir></dir><dir name="template"><dir name="affinityengine"><file name="ae_css.phtml" hash="828164eb0fcf039ac670c432d2d56c0d"/><file name="ae_js.phtml" hash="dbf7ae914bbcbde55cd0855a9c58119e"/><file name="horizontal.phtml" hash="a6a009c11dba12f3811ec6f2db8228dd"/><file name="pricehtml.phtml" hash="a4c2c740d9119fb016c8e005ed5ad7ca"/><file name="vertical.phtml" hash="3dd66bb879bc2f2044b945831145e920"/></dir></dir></dir></dir></dir></target><target name="mageskin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="css"><dir name="affinityitems"><file name="affinityitems.css" hash="ecb8e40e67270c872e53b18f46a42671"/></dir></dir><dir name="js"><dir name="affinityitems"><file name="affinityitems.js" hash="b240ad85e3a8d41745acbfefc3b5f2fc"/><file name="jquery-noconflict.js" hash="1f3b8801b59144eeaee27caa7c5c15db"/></dir></dir></dir></dir></dir><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="affinityengine"><dir name="img"><file name="aeboard.jpg" hash="9481a712582bcac6bdc2727a9cf52b3b"/><file name="aemoney.jpg" hash="6dc4d7612be1efe77784c622fa73985d"/><file name="aestart.jpg" hash="277c540ae19974133f473a731145f33d"/><file name="ailogo.png" hash="df2799c4ee9e68bd793cb85149fea2e7"/><file name="checked.png" hash="d4122f013483f59be79719385405a0de"/><file name="disabled.png" hash="fd56b078b4c3423735c667358285dc06"/><file name="enabled.png" hash="2499c302772cacbaf5d3c85427f2e7c5"/><file name="error.png" hash="bc87cd99143fc930408e379d5c3aa0f0"/><file name="index.php" hash="931175008efa4be6a17827fefd16937d"/><file name="loading.gif" hash="30d8e72bfdae694b1938658e1b087df0"/><file name="logo.png" hash="af48761d7b17a4e5115b8f16aaf634b6"/><file name="pdf.png" hash="95b561422892384337eb2eabb968a558"/><file name="unchecked.png" hash="0f5ec71a07abf89590209349c85b58ff"/></dir><file name="jquery-noconflict.js" hash="3d8c3103282467d2cd94031dbf4a75b6"/><file name="main.css" hash="58cbab2fcea443ea9dad70bb0cd4dad8"/></dir></dir></dir></dir></target><target name="magelocale"><dir name="fr_FR"><file name="AffinityEngine_AffinityItems.csv" hash="e8531b7ad38442694a0091c4daf586d4"/></dir></target></contents>
|
53 |
<compatible/>
|
54 |
<dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
|
55 |
</package>
|
skin/adminhtml/default/default/affinityengine/main.css
CHANGED
@@ -6,7 +6,7 @@
|
|
6 |
|
7 |
.aelogo {
|
8 |
background: url(img/logo.png) no-repeat;
|
9 |
-
width:
|
10 |
height: 80px;
|
11 |
margin-left: 10px;
|
12 |
position: absolute;
|
@@ -1884,4 +1884,9 @@
|
|
1884 |
|
1885 |
.items-box-description {
|
1886 |
text-align: center;
|
|
|
|
|
|
|
|
|
|
|
1887 |
}
|
6 |
|
7 |
.aelogo {
|
8 |
background: url(img/logo.png) no-repeat;
|
9 |
+
width: 108px;
|
10 |
height: 80px;
|
11 |
margin-left: 10px;
|
12 |
position: absolute;
|
1884 |
|
1885 |
.items-box-description {
|
1886 |
text-align: center;
|
1887 |
+
}
|
1888 |
+
|
1889 |
+
.items-box-content {
|
1890 |
+
display: block;
|
1891 |
+
margin: 2px auto;
|
1892 |
}
|