Version Notes
Expertrec Recommendation plugin for magento sites.
Download this release
Release Info
Developer | melchi |
Extension | Expertrec_Recommendation |
Version | 1.1.7 |
Comparing to | |
See all releases |
Code changes from version 1.0.12 to 1.1.7
- app/code/community/Expertrec/Recommendation/Block/Api.php +1 -0
- app/code/community/Expertrec/Recommendation/Block/Product/List/Toolbar.php +46 -0
- app/code/community/Expertrec/Recommendation/Helper/Autocompletehelper.php +0 -128
- app/code/community/Expertrec/Recommendation/Helper/Data.php +14 -16
- app/code/community/Expertrec/Recommendation/Helper/Search/Layout.php +8 -447
- app/code/community/Expertrec/Recommendation/Helper/Searchhelper.php +224 -0
- app/code/community/Expertrec/Recommendation/Model/Catalogsearch/Layer.php +118 -0
- app/code/community/Expertrec/Recommendation/Model/Feed/Formatter.php +21 -6
- app/code/community/Expertrec/Recommendation/Model/Observer.php +2 -47
- app/code/community/Expertrec/Recommendation/Model/Translator/Category.php +44 -2
- app/code/community/Expertrec/Recommendation/Model/Validate.php +1 -8
- app/code/community/Expertrec/Recommendation/controllers/ApiController.php +3 -4
- app/code/community/Expertrec/Recommendation/controllers/CatalogSearch/ResultController.php +1 -10
- app/code/community/Expertrec/Recommendation/etc/config.xml +15 -16
- app/code/community/Expertrec/Recommendation/sql/expertrec_setup/{mysql4-install-1.0.12.php → mysql4-install-1.1.7.php} +8 -8
- app/code/community/Expertrec/Recommendation/sql/expertrec_setup/{mysql4-upgrade-1.0.11-1.0.12.php → mysql4-upgrade-1.1.6-1.1.7.php} +7 -7
- app/design/frontend/base/default/layout/expertrec/recommendation.xml +4 -33
- app/design/frontend/base/default/template/expertrec/recommendation/tracker.phtml +11 -1
- app/design/frontend/base/default/template/expertrec/search/custom.phtml +0 -2
- app/design/frontend/base/default/template/expertrec/search/list.phtml +0 -23
- app/design/frontend/base/default/template/expertrec/search/view.phtml +0 -16
- package.xml +4 -4
app/code/community/Expertrec/Recommendation/Block/Api.php
CHANGED
@@ -336,6 +336,7 @@ class Expertrec_Recommendation_Block_Api extends Mage_Core_Block_Template{
|
|
336 |
'expert_smallImage',
|
337 |
'expert_thumbnail',
|
338 |
'expert_category',
|
|
|
339 |
'expert_url',
|
340 |
'final_price',
|
341 |
'entity_id',
|
336 |
'expert_smallImage',
|
337 |
'expert_thumbnail',
|
338 |
'expert_category',
|
339 |
+
'expert_category_ids',
|
340 |
'expert_url',
|
341 |
'final_price',
|
342 |
'entity_id',
|
app/code/community/Expertrec/Recommendation/Block/Product/List/Toolbar.php
ADDED
@@ -0,0 +1,46 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class Expertrec_Recommendation_Block_Product_List_Toolbar extends Mage_Catalog_Block_Product_List_Toolbar {
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Set collection to pager, overriding this function
|
7 |
+
*To ignore relevance
|
8 |
+
*
|
9 |
+
* @param Varien_Data_Collection $collection
|
10 |
+
* @return Mage_Catalog_Block_Product_List_Toolbar
|
11 |
+
*/
|
12 |
+
public function setCollection($collection)
|
13 |
+
{
|
14 |
+
$searchEnable = Mage::helper('expertrec_recommendation/searchhelper')->getSearchEnable();
|
15 |
+
$pageIdentifier = Mage::app()->getFrontController()->getAction()->getFullActionName();
|
16 |
+
$isSearchPage = $pageIdentifier === 'catalogsearch_result_index' ||
|
17 |
+
$pageIdentifier === 'expertrec_result_index';
|
18 |
+
|
19 |
+
//Don't use the toolbar when it is not the search page or when the search is not enabled
|
20 |
+
if(!$isSearchPage || !(isset($searchEnable) && $searchEnable == "true"))
|
21 |
+
{
|
22 |
+
Mage::getSingleton('expertrec_recommendation/log')->log(" Default Toolbar call made ");
|
23 |
+
return parent::setCollection($collection);
|
24 |
+
}
|
25 |
+
|
26 |
+
$this->_collection = $collection;
|
27 |
+
$this->_collection->setCurPage($this->getCurrentPage());
|
28 |
+
|
29 |
+
// we need to set pagination only if passed value integer and more that 0
|
30 |
+
$limit = (int)$this->getLimit();
|
31 |
+
if ($limit) {
|
32 |
+
$this->_collection->setPageSize($limit);
|
33 |
+
}
|
34 |
+
if ($this->getCurrentOrder() != "relevance") {
|
35 |
+
|
36 |
+
Mage::getSingleton('expertrec_recommendation/log')->log(" I have received order from Magento ".print_r($this->getCurrentOrder(),1),null);
|
37 |
+
$this->_collection->setOrder($this->getCurrentOrder(), $this->getCurrentDirection());
|
38 |
+
|
39 |
+
}
|
40 |
+
|
41 |
+
return $this;
|
42 |
+
}
|
43 |
+
|
44 |
+
}
|
45 |
+
|
46 |
+
?>
|
app/code/community/Expertrec/Recommendation/Helper/Autocompletehelper.php
DELETED
@@ -1,128 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class Expertrec_Recommendation_Helper_Autocompletehelper extends Mage_Core_Helper_Abstract{
|
4 |
-
|
5 |
-
const SEARCH_LIST_API = 'search/api';
|
6 |
-
const SEARCH_FACET_LIST = 'search/facets_list';
|
7 |
-
const SEARCH_ITEMS_PER_PAGE = 'search/items_per_page';
|
8 |
-
|
9 |
-
protected $_facetList = array();
|
10 |
-
protected $_itemsPerPage = 20;
|
11 |
-
|
12 |
-
protected function getFormatUrl($url){
|
13 |
-
$splitedUrl = explode("?", $url);
|
14 |
-
$newUrl = preg_replace('/\/ajax/',"",$splitedUrl[0]);
|
15 |
-
if(count($splitedUrl) == 2){
|
16 |
-
$newUrl .= '?'.$splitedUrl[1];
|
17 |
-
}
|
18 |
-
return $newUrl;
|
19 |
-
}
|
20 |
-
|
21 |
-
protected function getSearchApi($confArray){
|
22 |
-
$searchApi = "";
|
23 |
-
try{
|
24 |
-
$itemsPerPage = Mage::helper('expertrec_recommendation')->getConfig(self::SEARCH_ITEMS_PER_PAGE);
|
25 |
-
$storeSearchApi = Mage::helper('expertrec_recommendation')->getConfig(self::SEARCH_LIST_API);
|
26 |
-
}catch(Exception $e){
|
27 |
-
Mage::getSingleton('expertrec_recommendation/log')->log('Autocompletehelper::getting searchApi exception: '.$e->getMessage());
|
28 |
-
}
|
29 |
-
if(!empty($itemsPerPage)){
|
30 |
-
$this->_itemsPerPage = $itemsPerPage;
|
31 |
-
}
|
32 |
-
|
33 |
-
if(!empty($storeSearchApi)){
|
34 |
-
$searchApi = $storeSearchApi;
|
35 |
-
$previous = $confArray["curPage"]-1;
|
36 |
-
$searchApi .= "?q=".urlencode($confArray["query"])."&page=".$previous."&size=".$this->_itemsPerPage;
|
37 |
-
$searchApi .= "&fq=order:".urlencode($confArray["order"]);
|
38 |
-
if(isset($confArray['filters'])){
|
39 |
-
$filters = $confArray['filters'];
|
40 |
-
foreach ($filters as $fkey => $fvalue) {
|
41 |
-
$searchApi .= "&fq=".$fkey.":".urlencode($fvalue);
|
42 |
-
}
|
43 |
-
}
|
44 |
-
}
|
45 |
-
|
46 |
-
return $searchApi;
|
47 |
-
}
|
48 |
-
|
49 |
-
public function getItemsPerPage(){
|
50 |
-
return (int)$this->_itemsPerPage;
|
51 |
-
}
|
52 |
-
|
53 |
-
public function prepareLayer($requestParams){
|
54 |
-
$confArray = array();
|
55 |
-
$filters = array();
|
56 |
-
$resultData = array();
|
57 |
-
try{
|
58 |
-
$confArray["url"] = $this->getFormatUrl(Mage::helper('core/url')->getCurrentUrl());
|
59 |
-
$confArray["query"] = htmlentities($requestParams['q'], ENT_QUOTES);
|
60 |
-
|
61 |
-
$confArray["curPage"] = isset($requestParams['p']) ? (int)$requestParams['p'] : 1;
|
62 |
-
|
63 |
-
$mode = isset($requestParams['mode']) ? $requestParams['mode'] : 'grid';
|
64 |
-
$confArray["mode"] = $mode == 'list' ? $mode : 'grid';
|
65 |
-
$confArray["order"] = isset($requestParams["order"]) ? $requestParams["order"] : 'relevance';
|
66 |
-
|
67 |
-
try{
|
68 |
-
$facetList = Mage::helper('expertrec_recommendation')->getConfig(self::SEARCH_FACET_LIST);
|
69 |
-
$this->_facetList = !empty($facetList) ? explode(",", $facetList) : $this->_facetList;
|
70 |
-
}catch(Exception $ex){
|
71 |
-
Mage::getSingleton('expertrec_recommendation/log')->log('Autocompletehelper::getting facetlist from db exception: '.$ex->getMessage());
|
72 |
-
}
|
73 |
-
|
74 |
-
if(count($this->_facetList) > 0){
|
75 |
-
foreach($this->_facetList as $facet){
|
76 |
-
$filter = isset($requestParams[$facet]) ? $requestParams[$facet] : '';
|
77 |
-
if(!empty($filter)){
|
78 |
-
$filters[$facet] = str_replace(" ","+",$filter);
|
79 |
-
}
|
80 |
-
}
|
81 |
-
$confArray['filters'] = $filters;
|
82 |
-
}
|
83 |
-
|
84 |
-
//setup search url
|
85 |
-
$searchApi = $this->getSearchApi($confArray);
|
86 |
-
//Mage::getSingleton('expertrec_recommendation/log')->log('search url: '.$searchApi);
|
87 |
-
|
88 |
-
if(!empty($searchApi)){
|
89 |
-
|
90 |
-
//sending request
|
91 |
-
$resp = Mage::helper('expertrec_recommendation')->sendCurl($searchApi);
|
92 |
-
$response_json = json_decode($resp,true);
|
93 |
-
|
94 |
-
if(isset($response_json["res"]) && isset($response_json["res"]["count"])){
|
95 |
-
$confArray["count"] = (int)$response_json["res"]["count"];
|
96 |
-
}
|
97 |
-
|
98 |
-
//Initiate search layout
|
99 |
-
$layoutHelper = Mage::helper('expertrec_recommendation/search_layout')->init($confArray);
|
100 |
-
|
101 |
-
$searchListData = $response_json["results"];
|
102 |
-
$searchListHtml = $layoutHelper->prepareLayout($searchListData);
|
103 |
-
|
104 |
-
if(isset($confArray['filters'])){
|
105 |
-
$facetData = $response_json["facets"];
|
106 |
-
$facetNavHtml = $layoutHelper->prepareFilterLayout($facetData);
|
107 |
-
}else{
|
108 |
-
$facetNavHtml = '';
|
109 |
-
}
|
110 |
-
|
111 |
-
$resultData["listHtml"] = $searchListHtml;
|
112 |
-
$resultData["facetHtml"] = $facetNavHtml;
|
113 |
-
|
114 |
-
|
115 |
-
}
|
116 |
-
|
117 |
-
}catch (Exception $e) {
|
118 |
-
Mage::getSingleton('expertrec_recommendation/log')->log('Autocompletehelper::prepareLayer exception: '.$e->getMessage());
|
119 |
-
$resultData["listHtml"] = '<div style="color:red;><span style="font-weight:bold;">Error: </span>Oops. Something went wrong. Please try again later.</div>';
|
120 |
-
$resultData["facetHtml"] = '';
|
121 |
-
}
|
122 |
-
|
123 |
-
return $resultData;
|
124 |
-
}
|
125 |
-
|
126 |
-
}
|
127 |
-
|
128 |
-
?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
app/code/community/Expertrec/Recommendation/Helper/Data.php
CHANGED
@@ -196,22 +196,6 @@ class Expertrec_Recommendation_Helper_Data extends Mage_Core_Helper_Abstract {
|
|
196 |
}
|
197 |
return '';
|
198 |
}
|
199 |
-
|
200 |
-
/*
|
201 |
-
Fetching number of products per store, per website
|
202 |
-
*/
|
203 |
-
public function getProductCount($wid,$sid)
|
204 |
-
{
|
205 |
-
$productcount = 0;
|
206 |
-
|
207 |
-
$collection = Mage::getResourceModel('catalog/product_collection');
|
208 |
-
$collection->addStoreFilter($sid);
|
209 |
-
$collection->addWebsiteFilter($wid);
|
210 |
-
// Retrieve product count in collection
|
211 |
-
$productcount = $collection->getSize();
|
212 |
-
|
213 |
-
return $productcount;
|
214 |
-
}
|
215 |
|
216 |
public function pushFeed($filepath){
|
217 |
try{
|
@@ -251,6 +235,20 @@ class Expertrec_Recommendation_Helper_Data extends Mage_Core_Helper_Abstract {
|
|
251 |
return true;
|
252 |
}
|
253 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
254 |
|
|
|
|
|
255 |
}
|
256 |
?>
|
196 |
}
|
197 |
return '';
|
198 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
199 |
|
200 |
public function pushFeed($filepath){
|
201 |
try{
|
235 |
return true;
|
236 |
}
|
237 |
|
238 |
+
/*
|
239 |
+
Fetching number of products per store, per website
|
240 |
+
*/
|
241 |
+
public function getProductCount($wid,$sid)
|
242 |
+
{
|
243 |
+
$productcount = 0;
|
244 |
+
|
245 |
+
$collection = Mage::getResourceModel('catalog/product_collection');
|
246 |
+
$collection->addStoreFilter($sid);
|
247 |
+
$collection->addWebsiteFilter($wid);
|
248 |
+
// Retrieve product count in collection
|
249 |
+
$productcount = $collection->getSize();
|
250 |
|
251 |
+
return $productcount;
|
252 |
+
}
|
253 |
}
|
254 |
?>
|
app/code/community/Expertrec/Recommendation/Helper/Search/Layout.php
CHANGED
@@ -4,16 +4,10 @@ class Expertrec_Recommendation_Helper_Search_Layout extends Mage_Core_Helper_Abs
|
|
4 |
|
5 |
const SEARCH_SINGLE_SELECT_FILTERS = 'search/single_select_filters';
|
6 |
const SEARCH_IS_AJAX = 'search/is_ajax';
|
7 |
-
|
8 |
-
const SEARCH_FETCH_PRICE = 'search/fetch_price';
|
9 |
-
const SEARCH_CONVERT_PRICE = 'search/convert_price';
|
10 |
-
|
11 |
-
protected $_itemsPerPage;
|
12 |
-
protected $_displayPages = 5;
|
13 |
protected $_isAjax = false;
|
14 |
protected $_confArray;
|
15 |
-
|
16 |
-
protected $_convertPrice = false;
|
17 |
protected $_singleSelectFilters = array();
|
18 |
|
19 |
public function init($confArray){
|
@@ -21,17 +15,11 @@ class Expertrec_Recommendation_Helper_Search_Layout extends Mage_Core_Helper_Abs
|
|
21 |
try{
|
22 |
$singleFilters = Mage::helper('expertrec_recommendation')->getConfig(self::SEARCH_SINGLE_SELECT_FILTERS);
|
23 |
$isAjax = Mage::helper('expertrec_recommendation')->getConfig(self::SEARCH_IS_AJAX);
|
24 |
-
|
25 |
-
$fetchPrice = Mage::helper('expertrec_recommendation')->getConfig(self::SEARCH_FETCH_PRICE);
|
26 |
-
$convertPrice = Mage::helper('expertrec_recommendation')->getConfig(self::SEARCH_CONVERT_PRICE);
|
27 |
|
28 |
$this->_singleSelectFilters = isset($singleFilters) ? explode(',', $singleFilters) : $this->_singleSelectFilters;
|
29 |
$this->_isAjax = isset($isAjax) && $isAjax == 'true' ? true : false;
|
30 |
-
|
31 |
-
$this->_convertPrice = isset($convertPrice) && $convertPrice == 'true' ? true : false;
|
32 |
-
$this->_displayPages = !empty($displayPages) ? (int)$displayPages : $this->_displayPages;
|
33 |
-
|
34 |
-
$this->_itemsPerPage = Mage::helper('expertrec_recommendation/autocompletehelper')->getItemsPerPage();
|
35 |
}catch (Exception $e) {
|
36 |
Mage::getSingleton('expertrec_recommendation/log')->log('Search Layout Helper::init exception: '.$e->getMessage());
|
37 |
}
|
@@ -48,268 +36,7 @@ class Expertrec_Recommendation_Helper_Search_Layout extends Mage_Core_Helper_Abs
|
|
48 |
return $finalUrl;
|
49 |
}
|
50 |
|
51 |
-
|
52 |
-
|
53 |
-
$result = '<div class="toolbar"><div class="sorter">';
|
54 |
-
$result .= '<p class="view-mode"><label>'.$this->__('View as').'</label>';
|
55 |
-
|
56 |
-
if($this->_confArray["mode"] == 'grid'){
|
57 |
-
$result .= '<strong title="Grid" class="grid">Grid</strong><a href="'.$this->removeRequestParam("mode").'&mode=list" title="List" class="list">List</a>';
|
58 |
-
}else{
|
59 |
-
$result .= '<a href= "'.$this->removeRequestParam("mode").'&mode=grid" title="Grid" class="grid">Grid</a><strong title="List" class="list">List</strong>';
|
60 |
-
}
|
61 |
-
|
62 |
-
$result .= '</p>';
|
63 |
-
$result .= '<div class="sort-by"><label>'.$this->__('Sort By').'</label>';
|
64 |
-
$result .= '<select onchange="setLocation(this.value)" title="'.$this->__('Sort By').'">';
|
65 |
-
|
66 |
-
//sort by
|
67 |
-
$orderArray = array("relevance"=>"Relevance", 'popularity'=>"Popularity", "price+asc"=>"Price - Low to High", "price+desc"=>"Price - High to Low");
|
68 |
-
foreach ($orderArray as $oKey => $oValue) {
|
69 |
-
if(urlencode($this->_confArray["order"]) == $oKey){
|
70 |
-
$result .= '<option value="'.$this->removeRequestParam("order").'&order='.$oKey.'" selected="selected">'.$this->__($oValue).'</option>';
|
71 |
-
}else{
|
72 |
-
$result .= '<option value="'.$this->removeRequestParam("order").'&order='.$oKey.'">'.$this->__($oValue).' </option>';
|
73 |
-
}
|
74 |
-
}
|
75 |
-
|
76 |
-
$result .= '</select>';
|
77 |
-
$result .= '</div></div>';//close sorter
|
78 |
-
|
79 |
-
$result .= '<div class="pager">';
|
80 |
-
$result .= '<div class="count-container">';
|
81 |
-
|
82 |
-
$totalNum = $this->_confArray["count"];
|
83 |
-
$totalPage = ceil($totalNum/$this->_itemsPerPage);
|
84 |
-
$previous = $this->_confArray["curPage"]-1;
|
85 |
-
$firstNum = $previous * $this->_itemsPerPage + 1;
|
86 |
-
$lastNum = min(($this->_confArray["curPage"] * $this->_itemsPerPage),$totalNum);
|
87 |
-
|
88 |
-
if($totalPage > 1){
|
89 |
-
$result .= '<p class="amount amount--has-pages">';
|
90 |
-
$result .= $this->__('Showing %s - %s of %s', $firstNum, $lastNum, $totalNum);
|
91 |
-
}else{
|
92 |
-
$result .= '<p class="amount amount--no-pages">';
|
93 |
-
$result .= '<strong>'.$this->__('Showing %s Item(s)', $totalNum) .'</strong>';
|
94 |
-
}
|
95 |
-
$result .= '</p>';
|
96 |
-
$result .= '</div>';//close count-container
|
97 |
-
|
98 |
-
$result .= '<div class="pages"><strong>Page:</strong>';
|
99 |
-
$result .= '<ol>';
|
100 |
-
|
101 |
-
//pager
|
102 |
-
if($previous >= 1){
|
103 |
-
$result .= '<li><a class="previous i-previous" href="'.$this->removeRequestParam("p").'&p='.(string)$previous.'" title="Previous">Prev</a></li>';
|
104 |
-
}
|
105 |
-
|
106 |
-
$pages = Mage::helper('expertrec_recommendation')
|
107 |
-
->getPages($this->_confArray["curPage"],$totalNum,$this->_displayPages,$this->_itemsPerPage);
|
108 |
-
if(count($pages) > 1){
|
109 |
-
foreach ($pages as $page){
|
110 |
-
if($page == $this->_confArray["curPage"]){
|
111 |
-
$result .= '<li class="current">'.(string)($this->_confArray["curPage"]).'</li>';
|
112 |
-
}else{
|
113 |
-
$result .= '<li><a href="'.$this->removeRequestParam("p").'&p='.(string)$page.'">'.(string)$page.'</a></li>';
|
114 |
-
}
|
115 |
-
}
|
116 |
-
}
|
117 |
-
|
118 |
-
$next = $this->_confArray["curPage"]+1;
|
119 |
-
if($next <= $totalPage){
|
120 |
-
$result .= '<li><a class="next i-next" href="'.$this->removeRequestParam("p").'&p='.(string)$next.'" title="Next">Next</a></li>';
|
121 |
-
}
|
122 |
-
|
123 |
-
$result .= '</ol>';
|
124 |
-
$result .= '</div>';//close pages
|
125 |
-
$result .= '</div>';//close pager
|
126 |
-
$result .= '</div>';//close toolbar
|
127 |
-
|
128 |
-
return $result;
|
129 |
-
}
|
130 |
-
|
131 |
-
protected function getGridProductsDiv($data){
|
132 |
-
$confArray = $this->_confArray;
|
133 |
-
|
134 |
-
$result = '<ul class="products-grid products-grid--max-3-col">';
|
135 |
-
|
136 |
-
foreach ($data as $item) {
|
137 |
-
if(!isset($item["entity_id"]) && !isset($item["title"]) && !isset($item["url"]) && !isset($item["image_url"])){
|
138 |
-
continue;
|
139 |
-
}
|
140 |
-
$msrp = "";
|
141 |
-
$price = "";
|
142 |
-
$compareUrl = Mage::helper('expertrec_recommendation')->getProductCompareUrl($item['entity_id']);
|
143 |
-
$wishlistUrl = Mage::helper('expertrec_recommendation')->getWishlistUrl($item['entity_id']);
|
144 |
-
$cartUrl = Mage::helper('expertrec_recommendation')->getAddToCartUrl($item['entity_id']);
|
145 |
-
|
146 |
-
if(!empty($item["msrp"]) && $item["msrp"] != "None" && $item["msrp"] != "0"){
|
147 |
-
$msrp =$item['msrp'];
|
148 |
-
}
|
149 |
-
if(!empty($item["price"]) && $item["price"] != "None" && $item["price"] != "0"){
|
150 |
-
$price = $item['price'];
|
151 |
-
}
|
152 |
-
|
153 |
-
if($this->_convertPrice){
|
154 |
-
$price = Mage::helper('expertrec_recommendation')->getFormatCurrency($price,$item['entity_id'],$this->_fetchPrice);
|
155 |
-
$msrp = Mage::helper('expertrec_recommendation')->getFormatCurrency($msrp,$item['entity_id'],$this->_fetchPrice);
|
156 |
-
}else{
|
157 |
-
$price = Mage::helper('expertrec_recommendation')->getFormatPrice($price);
|
158 |
-
$msrp = Mage::helper('expertrec_recommendation')->getFormatPrice($msrp);
|
159 |
-
}
|
160 |
-
|
161 |
-
$result .= '<li class="item last">';
|
162 |
-
$result .= '<a href="'.$item["url"].'" title="'.$item['title'].'" class="product-image">';
|
163 |
-
$result .= '<img id="product-collection-image-'.$item['entity_id'].'" src="'.$item['image_url'].'" alt="'.$item['title'].'">';
|
164 |
-
$result .= '</a>';
|
165 |
-
$result .= '<div class="product-info" style="padding-bottom: 75px; min-height: 133px;"><h2 class="product-name">';
|
166 |
-
$result .= '<a href="'.$item["url"].'" title="'.$item['title'].'">'.$item['title'].'</a>';
|
167 |
-
$result .= '</h2>';
|
168 |
-
$result .= '<div class="price-box">';
|
169 |
-
if(!empty($msrp)){
|
170 |
-
$result .= '<p class="old-price">';
|
171 |
-
$result .= '<span class="price-label">Regular Price:</span>';
|
172 |
-
$result .= '<span class="price" id="old-price-'.$item['entity_id'].'">'.$msrp.'</span>';
|
173 |
-
$result .= '</p>';
|
174 |
-
|
175 |
-
$result .= '<p class="special-price">';
|
176 |
-
$result .= '<span class="price-label">Special Price</span>';
|
177 |
-
$result .= '<span class="price" id="product-price-'.$item['entity_id'].'">'.$price.'</span>';
|
178 |
-
$result .= '</p>';
|
179 |
-
}else{
|
180 |
-
$result .= '<span class="regular-price" id="product-price-'.$item['entity_id'].'"><span class="price">'.$price.'</span></span>';
|
181 |
-
}
|
182 |
-
$result .= '</div>';
|
183 |
-
$result .= '<div class="actions">';
|
184 |
-
|
185 |
-
if(!empty($cartUrl)){
|
186 |
-
$result .= '<button type="button" title="Add to Cart" class="button btn-cart" onclick="setLocation(\''.$cartUrl.'\')">';
|
187 |
-
$result .= '<span><span>Add to Cart</span></span>';
|
188 |
-
$result .= '</button>';
|
189 |
-
}
|
190 |
-
$result .= '<ul class="add-to-links">';
|
191 |
-
|
192 |
-
if(!empty($wishlistUrl)){
|
193 |
-
$result .= '<li><a href="'.$wishlistUrl.'" class="link-wishlist"> <i class="fa fa-heart" aria-hidden="true"></i> Wishlist</a></li>';
|
194 |
-
}
|
195 |
-
if(!empty($compareUrl)){
|
196 |
-
$result .= '<li><span class="separator">|</span>';
|
197 |
-
$result .= '<a href="'.$compareUrl.'" class="link-compare"> <i class="fa fa-balance-scale" aria-hidden="true"></i> Compare</a>';
|
198 |
-
$result .= '</li>';
|
199 |
-
}
|
200 |
-
$result .= '</ul>'; //add to links
|
201 |
-
$result .= '</div>'; // actions div
|
202 |
-
$result .= '</div>'; //product-info div
|
203 |
-
$result .= '</li>';
|
204 |
-
|
205 |
-
}
|
206 |
-
$result .= '</ul>';
|
207 |
-
|
208 |
-
return $result;
|
209 |
-
}
|
210 |
-
|
211 |
-
protected function getListProductsDiv($data){
|
212 |
-
$confArray = $this->_confArray;
|
213 |
-
|
214 |
-
$result = '<ol class="products-list" id="products-list">';
|
215 |
-
$index = 1;
|
216 |
-
$data_size = count($data);
|
217 |
-
foreach ($data as $item) {
|
218 |
-
if(!isset($item["entity_id"]) && !isset($item["title"]) && !isset($item["url"]) && !isset($item["image_url"])){
|
219 |
-
continue;
|
220 |
-
}
|
221 |
-
$msrp = "";
|
222 |
-
$price = "";
|
223 |
-
$compareUrl = Mage::helper('expertrec_recommendation')->getProductCompareUrl($item['entity_id']);
|
224 |
-
$wishlistUrl = Mage::helper('expertrec_recommendation')->getWishlistUrl($item['entity_id']);
|
225 |
-
$cartUrl = Mage::helper('expertrec_recommendation')->getAddToCartUrl($item['entity_id']);
|
226 |
-
$description = isset($item['desc']) ? $item['desc'] : (Mage::helper('expertrec_recommendation')->getProductDescription($item['entity_id']));
|
227 |
-
|
228 |
-
if(!empty($item["msrp"]) && $item["msrp"] != "None" && $item["msrp"] != "0"){
|
229 |
-
$msrp =$item['msrp'];
|
230 |
-
}
|
231 |
-
if(!empty($item["price"]) && $item["price"] != "None" && $item["price"] != "0"){
|
232 |
-
$price = $item['price'];
|
233 |
-
}
|
234 |
-
|
235 |
-
if($this->_convertPrice){
|
236 |
-
$price = Mage::helper('expertrec_recommendation')->getFormatCurrency($price,$item['entity_id'],$this->_fetchPrice);
|
237 |
-
$msrp = Mage::helper('expertrec_recommendation')->getFormatCurrency($msrp,$item['entity_id'],$this->_fetchPrice);
|
238 |
-
}else{
|
239 |
-
$price = Mage::helper('expertrec_recommendation')->getFormatPrice($price);
|
240 |
-
$msrp = Mage::helper('expertrec_recommendation')->getFormatPrice($msrp);
|
241 |
-
}
|
242 |
-
|
243 |
-
$odd_even = $data_size == $index ? 'last ' : '';
|
244 |
-
|
245 |
-
$odd_even .= ($index % 2) == 0 ? 'even' : 'odd';
|
246 |
-
|
247 |
-
$result .= '<li class="item '.$odd_even.'">';
|
248 |
-
$result .= '<a href="'.$item["url"].'" title="'.$item['title'].'" class="product-image">';
|
249 |
-
$result .= '<img id="product-collection-image-'.$item['entity_id'].'" src="'.$item['image_url'].'" alt="'.$item['title'].'">';
|
250 |
-
$result .= '</a>';
|
251 |
-
$result .= '<div class="product-shop">';
|
252 |
-
$result .= '<div class="f-fix">';
|
253 |
-
$result .= '<div class="product-primary">';
|
254 |
-
$result .= '<h2 class="product-name">';
|
255 |
-
$result .= '<a href="'.$item["url"].'" title="'.$item['title'].'">'.$item['title'].'</a>';
|
256 |
-
$result .= '</h2>';
|
257 |
-
$result .= '</div>'; //product-primary
|
258 |
-
$result .= '<div class="product-secondary">';
|
259 |
-
$result .= '<div class="price-box">';
|
260 |
-
if(!empty($msrp)){
|
261 |
-
$result .= '<p class="old-price">';
|
262 |
-
$result .= '<span class="price-label">Regular Price:</span>';
|
263 |
-
$result .= '<span class="price" id="old-price-'.$item['entity_id'].'">'.$msrp.'</span>';
|
264 |
-
$result .= '</p>';
|
265 |
-
|
266 |
-
$result .= '<p class="special-price">';
|
267 |
-
$result .= '<span class="price-label">Special Price</span>';
|
268 |
-
$result .= '<span class="price" id="product-price-'.$item['entity_id'].'">'.$price.'</span>';
|
269 |
-
$result .= '</p>';
|
270 |
-
}else{
|
271 |
-
$result .= '<span class="regular-price" id="product-price-'.$item['entity_id'].'"><span class="price">'.$price.'</span></span>';
|
272 |
-
}
|
273 |
-
$result .= '</div>'; //price-box
|
274 |
-
$result .= '</div>'; //product-secondary
|
275 |
-
$result .= '<div class="product-secondary">';
|
276 |
-
$result .= '<p class="action">';
|
277 |
-
|
278 |
-
if(!empty($cartUrl)){
|
279 |
-
$result .= '<button type="button" title="Add to Cart" class="button btn-cart" onclick="setLocation(\''.$cartUrl.'\')">';
|
280 |
-
$result .= '<span><span>Add to Cart</span></span>';
|
281 |
-
$result .= '</button>';
|
282 |
-
}
|
283 |
-
|
284 |
-
$result .= '</p>';
|
285 |
-
$result .= '<ul class="add-to-links">';
|
286 |
-
|
287 |
-
if(!empty($wishlistUrl)){
|
288 |
-
$result .= '<li><a href="'.$wishlistUrl.'" class="link-wishlist"> <i class="fa fa-heart" aria-hidden="true"></i> Wishlist</a></li>';
|
289 |
-
}
|
290 |
-
if(!empty($compareUrl)){
|
291 |
-
$result .= '<li><span class="separator">|</span>';
|
292 |
-
$result .= '<a href="'.$compareUrl.'" class="link-compare"> <i class="fa fa-balance-scale" aria-hidden="true"></i> Compare</a>';
|
293 |
-
$result .= '</li>';
|
294 |
-
}
|
295 |
-
$result .= '</ul>'; //add to links
|
296 |
-
$result .= '</div>'; //product-secondary
|
297 |
-
$result .= '<div class="desc std">'.$description;
|
298 |
-
$result .= '<a href="'.$item["url"].'" title="'.$item['title'].'" class="link-learn">Learn More</a>';
|
299 |
-
$result .= '</div>'; //desc
|
300 |
-
$result .= '</div>'; // f-fix
|
301 |
-
$result .= '</div>'; //product-shop
|
302 |
-
$result .= '</li>';
|
303 |
-
|
304 |
-
$index = $index + 1;
|
305 |
-
}
|
306 |
-
|
307 |
-
$result .= '</ol>';
|
308 |
-
|
309 |
-
return $result;
|
310 |
-
}
|
311 |
-
|
312 |
-
/*
|
313 |
* @param string facet-header
|
314 |
* @param string facet-label
|
315 |
* @return string url
|
@@ -329,30 +56,8 @@ class Expertrec_Recommendation_Helper_Search_Layout extends Mage_Core_Helper_Abs
|
|
329 |
}else{
|
330 |
$url .= "&".str_replace(" ","_",$fhead).'='.$label;
|
331 |
}
|
332 |
-
return $url;
|
333 |
-
}
|
334 |
-
|
335 |
-
/*
|
336 |
-
* @param string facet-header
|
337 |
-
* @param string facet-label
|
338 |
-
* @return string class
|
339 |
-
*/
|
340 |
-
protected function getFacetClass($fhead,$facetLabel){
|
341 |
-
$confArray = $this->_confArray;
|
342 |
-
|
343 |
-
$class = $fhead == "category" ? "expertrec-filter-cat" : "expertrec-filter-attr";
|
344 |
-
$filter = isset($confArray["filters"][$fhead]) ? $confArray["filters"][$fhead] : '';
|
345 |
-
$label = str_replace(" ","+",$facetLabel);
|
346 |
-
|
347 |
-
if(!empty($filter)){
|
348 |
-
$att = preg_split('/(%2C|,)/', $filter);
|
349 |
-
if(in_array($label, $att)){
|
350 |
-
$class .= '-selected';
|
351 |
-
}
|
352 |
-
}
|
353 |
-
|
354 |
-
return $class;
|
355 |
-
}
|
356 |
|
357 |
/*
|
358 |
* @param filterkey string
|
@@ -364,151 +69,7 @@ class Expertrec_Recommendation_Helper_Search_Layout extends Mage_Core_Helper_Abs
|
|
364 |
$linkUrl = $baseUrl.'&'.str_replace(' ', '_', $fKey)."=".implode('%2C', $flist);
|
365 |
return $linkUrl;
|
366 |
}
|
367 |
-
|
368 |
-
protected function getNavigationState(){
|
369 |
-
$result = '';
|
370 |
-
$confArray = $this->_confArray;
|
371 |
-
|
372 |
-
try{
|
373 |
-
if(!empty($confArray["filters"])){
|
374 |
-
$filters = $confArray["filters"];
|
375 |
-
$result .= '<div class="currently">';
|
376 |
-
$result .= '<p class="block-subtitle">'.$this->__('Currently Shopping by:').'</p>';
|
377 |
-
$result .= '<ol>';
|
378 |
-
foreach ($filters as $fKey => $fValue){
|
379 |
-
$result .= '<li>';
|
380 |
-
$result .= '<span class="label">'.$this->__(str_replace('_', ' ', $fKey)).':</span>';
|
381 |
-
$listSubFilter = preg_split('/(%2C|,)/', $fValue);
|
382 |
-
|
383 |
-
if(in_array($fKey, $this->_singleSelectFilters) || count($listSubFilter) == 1){
|
384 |
-
$result .= '<span class="value">'.str_replace('+', ' ', $listSubFilter[0]).'</span>';
|
385 |
-
$result .= '<a class="btn-remove" href="'.$this->removeRequestParam($fKey).'" title="'.$this->__('Remove This Item').'"><i class="fa fa-times" aria-hidden="true"></i></a>';
|
386 |
-
}else{
|
387 |
-
foreach ($listSubFilter as $sfKey) {
|
388 |
-
$remainSubFilterList = array_diff($listSubFilter, array($sfKey));
|
389 |
-
|
390 |
-
$result .= '<span class="multivalue">'.str_replace('+', ' ', $sfKey).'</span>';
|
391 |
-
$result .= '<a class="btn-remove-inline" href="'.$this->getClearLinkUrl($fKey,$remainSubFilterList).'" title="'.$this->__('Remove This Item').'">';
|
392 |
-
$result .= '<i class="fa fa-times-circle" aria-hidden="true"></i>';
|
393 |
-
$result .= '</a>';
|
394 |
-
$result .= '</span>';
|
395 |
-
}
|
396 |
-
}
|
397 |
-
|
398 |
-
$result .= '</li>';
|
399 |
-
}
|
400 |
-
$result .= '</ol>';
|
401 |
-
$result .= '</div>';
|
402 |
-
$result .= '<div class="actions">';
|
403 |
-
$result .= '<a href="'.strtok($confArray["url"], '?').'?q='.$confArray["query"].'">'.$this->__('Clear All').'</a>';
|
404 |
-
$result .= '</div>';
|
405 |
-
}
|
406 |
-
}catch(Exception $e){
|
407 |
-
Mage::getSingleton('expertrec_recommendation/log')->log( "Error in getting navigation state: ".$e->getMessage());
|
408 |
-
}
|
409 |
-
|
410 |
-
return $result;
|
411 |
-
}
|
412 |
-
|
413 |
-
/*
|
414 |
-
* @param Array facetlist
|
415 |
-
* @return html string
|
416 |
-
*/
|
417 |
-
public function prepareFilterLayout($facets){
|
418 |
-
$result = '<div class="listing-filter">';
|
419 |
-
$result .= '<a href="javascript:;" onclick="erOpenFilter()">';
|
420 |
-
$result .= '<i class="fa fa-filter" aria-hidden="true"></i> Filter By </a>';
|
421 |
-
$result .= '</div>';
|
422 |
-
$result .= '<div id="er_Filteroption" class="overlay-filter">';
|
423 |
-
$result .= '<div class="block block-layered-nav expertrec-overflow-scroll-enabled">';
|
424 |
-
$result .= '<div class="block-title">';
|
425 |
-
$result .= '<strong><span>'.$this->__('Shop By').'</span></strong>';
|
426 |
-
$result .= '</div>';
|
427 |
-
$result .= '<div class="block-content toggle-content">';
|
428 |
-
$result .= '<div style="clear:both;"></div>';
|
429 |
-
$result .= '<p class="block-subtitle mobile-only"><i class="fa fa-filter" aria-hidden="true"></i> Filter By</p>';
|
430 |
-
$result .= '<dl id="narrow-by-list">';
|
431 |
-
|
432 |
-
foreach ($facets as $fKey => $fValue) {
|
433 |
-
if(count($fValue)){
|
434 |
-
|
435 |
-
$result .= '<dt>'.$fKey.'</dt>';
|
436 |
-
$result .= '<dd class="filter-search">';
|
437 |
-
|
438 |
-
$result .= '<ol>';
|
439 |
-
foreach ($fValue as $facetLabel => $facetCount) {
|
440 |
-
$result .= '<li class="'.$this->getFacetClass($fKey,$facetLabel).'">';
|
441 |
-
if($this->_isAjax){
|
442 |
-
$result .= '<a href="javascript:;">';
|
443 |
-
$result .= '<input class="ajaxUrl" type="hidden" value="'.$this->getFacetUrl($fKey,$facetLabel).'">';
|
444 |
-
}else{
|
445 |
-
$result .= '<a href="'.$this->getFacetUrl($fKey,$facetLabel).'">';
|
446 |
-
}
|
447 |
-
if(!in_array($fKey, $this->_singleSelectFilters)){
|
448 |
-
$result .= '<i class="fa fa-square-o" aria-hidden="true"></i>';
|
449 |
-
$result .= '<i class="fa fa-check-square-o" aria-hidden="true"></i>';
|
450 |
-
}
|
451 |
-
$result .= ' '.ucwords(strip_tags($facetLabel));
|
452 |
-
|
453 |
-
$result .= ' <span class="count">('.$facetCount.')</span>';
|
454 |
-
$result .= '</a>';
|
455 |
-
$result .= '</li>';
|
456 |
-
}
|
457 |
-
|
458 |
-
$result .= '</ol>';
|
459 |
-
$result .= '</dd>';
|
460 |
-
}
|
461 |
-
|
462 |
-
}
|
463 |
-
|
464 |
-
$result .= '</dl>';
|
465 |
-
$result .= '<script type="text/javascript">decorateDataList(\'narrow-by-list\')</script>';
|
466 |
-
$result .= '<div class="mobile-only mobile-filter-closer" onclick="erCloseFilter()"> <i class="fa fa-times" aria-hidden="true"></i> Close Filter </div>';
|
467 |
-
|
468 |
-
$result .= '</div>'; // block-content close
|
469 |
-
$result .= '</div>'; // block-layered-nav close
|
470 |
-
$result .= '</div>'; // er_Filteroption close
|
471 |
-
|
472 |
-
return $result;
|
473 |
-
}
|
474 |
-
|
475 |
-
|
476 |
-
/*
|
477 |
-
* @param list of products
|
478 |
-
* @return html string
|
479 |
-
*/
|
480 |
-
|
481 |
-
public function prepareLayout($data){
|
482 |
-
$confArray = $this->_confArray;
|
483 |
-
|
484 |
-
$finalResult = $this->getNavigationState();
|
485 |
-
|
486 |
-
if(!empty($confArray["count"])){
|
487 |
-
$toolbar = $this->getToolbarDiv();
|
488 |
-
$finalResult .= '<div class="category-products">';
|
489 |
-
|
490 |
-
$finalResult .= $toolbar;
|
491 |
-
|
492 |
-
if($confArray["mode"] == 'grid'){
|
493 |
-
$finalResult .= $this->getGridProductsDiv($data);
|
494 |
-
$finalResult .= '<script type="text/javascript">decorateGeneric($$("ul.products-grid"), ["odd","even","first","last"])</script>';
|
495 |
-
}else{
|
496 |
-
$finalResult .= $this->getListProductsDiv($data);
|
497 |
-
$finalResult .= '<script type="text/javascript">decorateList("products-list", "none-recursive")</script>';
|
498 |
-
}
|
499 |
-
|
500 |
-
$finalResult .= '<div class="toolbar-bottom">';
|
501 |
-
$finalResult .= $toolbar;
|
502 |
-
$finalResult .= '</div>';
|
503 |
-
$finalResult .= '</div>';
|
504 |
-
}else{
|
505 |
-
$noResult = $this->__('Your search returns no results.');
|
506 |
-
$finalResult .= '<p class="note-msg">'.$noResult.'</p>';
|
507 |
-
}
|
508 |
-
|
509 |
-
return $finalResult;
|
510 |
-
|
511 |
-
}
|
512 |
}
|
513 |
|
514 |
?>
|
4 |
|
5 |
const SEARCH_SINGLE_SELECT_FILTERS = 'search/single_select_filters';
|
6 |
const SEARCH_IS_AJAX = 'search/is_ajax';
|
7 |
+
|
|
|
|
|
|
|
|
|
|
|
8 |
protected $_isAjax = false;
|
9 |
protected $_confArray;
|
10 |
+
|
|
|
11 |
protected $_singleSelectFilters = array();
|
12 |
|
13 |
public function init($confArray){
|
15 |
try{
|
16 |
$singleFilters = Mage::helper('expertrec_recommendation')->getConfig(self::SEARCH_SINGLE_SELECT_FILTERS);
|
17 |
$isAjax = Mage::helper('expertrec_recommendation')->getConfig(self::SEARCH_IS_AJAX);
|
18 |
+
|
|
|
|
|
19 |
|
20 |
$this->_singleSelectFilters = isset($singleFilters) ? explode(',', $singleFilters) : $this->_singleSelectFilters;
|
21 |
$this->_isAjax = isset($isAjax) && $isAjax == 'true' ? true : false;
|
22 |
+
|
|
|
|
|
|
|
|
|
23 |
}catch (Exception $e) {
|
24 |
Mage::getSingleton('expertrec_recommendation/log')->log('Search Layout Helper::init exception: '.$e->getMessage());
|
25 |
}
|
36 |
return $finalUrl;
|
37 |
}
|
38 |
|
39 |
+
/**
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
40 |
* @param string facet-header
|
41 |
* @param string facet-label
|
42 |
* @return string url
|
56 |
}else{
|
57 |
$url .= "&".str_replace(" ","_",$fhead).'='.$label;
|
58 |
}
|
59 |
+
return rtrim($url,'&');
|
60 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
61 |
|
62 |
/*
|
63 |
* @param filterkey string
|
69 |
$linkUrl = $baseUrl.'&'.str_replace(' ', '_', $fKey)."=".implode('%2C', $flist);
|
70 |
return $linkUrl;
|
71 |
}
|
72 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
73 |
}
|
74 |
|
75 |
?>
|
app/code/community/Expertrec/Recommendation/Helper/Searchhelper.php
ADDED
@@ -0,0 +1,224 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class Expertrec_Recommendation_Helper_Searchhelper extends Mage_Core_Helper_Abstract{
|
4 |
+
|
5 |
+
const SEARCH_LIST_API = 'search/api';
|
6 |
+
const SEARCH_FACET_LIST = 'search/facets_list';
|
7 |
+
const SEARCH_LIST_ENABLE = 'search/enable';
|
8 |
+
|
9 |
+
protected $_facetList = array();
|
10 |
+
protected $_resultIds = array();
|
11 |
+
|
12 |
+
public function getResultIds(){
|
13 |
+
return $this->_resultIds;
|
14 |
+
}
|
15 |
+
|
16 |
+
protected function getFormatUrl($url){
|
17 |
+
$splitedUrl = explode("?", $url);
|
18 |
+
$newUrl = preg_replace('/\/ajax/',"",$splitedUrl[0]);
|
19 |
+
if(count($splitedUrl) == 2){
|
20 |
+
$newUrl .= '?'.$splitedUrl[1];
|
21 |
+
}
|
22 |
+
|
23 |
+
return $newUrl;
|
24 |
+
}
|
25 |
+
|
26 |
+
public function getSearchEnable(){
|
27 |
+
$searchEnable = Mage::helper('expertrec_recommendation')->getConfig(self::SEARCH_LIST_ENABLE);
|
28 |
+
return $searchEnable;
|
29 |
+
}
|
30 |
+
|
31 |
+
protected function getSearchApi($confArray){
|
32 |
+
|
33 |
+
$searchApi = "";
|
34 |
+
|
35 |
+
try{
|
36 |
+
$storeSearchApi = Mage::helper('expertrec_recommendation')->getConfig(self::SEARCH_LIST_API);
|
37 |
+
}catch(Exception $e){
|
38 |
+
Mage::getSingleton('expertrec_recommendation/log')->log('Searchhelper::getting searchApi exception: '.$e->getMessage());
|
39 |
+
}
|
40 |
+
|
41 |
+
if(!empty($storeSearchApi)){
|
42 |
+
$searchApi = $storeSearchApi;
|
43 |
+
|
44 |
+
// searching for cat and other facets
|
45 |
+
// if(isset($confArray["facetPortion"]))
|
46 |
+
// {
|
47 |
+
// // $confArray["cat"] is to add cat and facets in searchapi
|
48 |
+
// $searchApi .= "?q=".urlencode($confArray["query"]).$confArray["facetPortion"]."&page=0&src=magento";
|
49 |
+
// }
|
50 |
+
|
51 |
+
$searchApi .= "?q=".urlencode($confArray["query"])."&page=0&src=magento";
|
52 |
+
|
53 |
+
$splitedUrl = explode("?",html_entity_decode($confArray["url"]));
|
54 |
+
|
55 |
+
if(count($splitedUrl)==2)
|
56 |
+
{
|
57 |
+
$searchApi .= "&oq=".urlencode($splitedUrl[1]);
|
58 |
+
|
59 |
+
}
|
60 |
+
}
|
61 |
+
|
62 |
+
Mage::getSingleton('expertrec_recommendation/log')->log("The search URL sent to Expertrec BE is : ".print_r($searchApi,1),null);
|
63 |
+
|
64 |
+
//print_r($searchApi);
|
65 |
+
|
66 |
+
return $searchApi;
|
67 |
+
}
|
68 |
+
|
69 |
+
public function getNonQueryUrlParameters($searchUrl)
|
70 |
+
{
|
71 |
+
//checking for cat and facets
|
72 |
+
$facetPortion = "";
|
73 |
+
$limitQuery = "";
|
74 |
+
|
75 |
+
if(!strpos($searchUrl,"?q")){
|
76 |
+
|
77 |
+
$parsedUrl = parse_url($searchUrl);
|
78 |
+
$newQuery = array();
|
79 |
+
$categoryArr = array();
|
80 |
+
$query1 = "";
|
81 |
+
|
82 |
+
$getCategory = explode("&",html_entity_decode($parsedUrl["query"]));
|
83 |
+
|
84 |
+
// spliting queries
|
85 |
+
foreach ($getCategory as $key => $value) {
|
86 |
+
list($key1, $val) = explode('=', $value);
|
87 |
+
|
88 |
+
//Excluding query term and cifr from categories
|
89 |
+
if(!in_array($key1,array("q","cifr","limit","dir","order")))
|
90 |
+
{
|
91 |
+
$categoryArr[$key1] = $val;
|
92 |
+
}
|
93 |
+
|
94 |
+
}
|
95 |
+
|
96 |
+
// getting all attributes
|
97 |
+
$attributes = Mage::getModel('eav/entity_attribute_option')->getCollection()->setStoreFilter(0)->join('attribute','attribute.attribute_id=main_table.attribute_id', 'attribute_code');
|
98 |
+
|
99 |
+
// changing id to name for cat and facets
|
100 |
+
if(isset($categoryArr))
|
101 |
+
{
|
102 |
+
foreach ($categoryArr as $key => $value) {
|
103 |
+
|
104 |
+
if($key == 'cat')
|
105 |
+
{
|
106 |
+
$id = $value;
|
107 |
+
$cat = Mage::getModel('catalog/category')->load($id);
|
108 |
+
$newQuery['category'] = $cat->getName();
|
109 |
+
}
|
110 |
+
else
|
111 |
+
{
|
112 |
+
//For all attributes not under the sortables, use attribute table
|
113 |
+
if(!in_array($key,array("limit","order","dir")))
|
114 |
+
{
|
115 |
+
$attrMatched = false;
|
116 |
+
|
117 |
+
foreach ($attributes as $attribute) {
|
118 |
+
if ($attribute->getOptionId()==$value) {
|
119 |
+
$newQuery[$key] = $attribute->getValue();
|
120 |
+
$attrMatched = true;
|
121 |
+
}
|
122 |
+
}
|
123 |
+
|
124 |
+
//If the attribute is not a category and it is not matched, just pass it to BE.
|
125 |
+
if(!$attrMatched)
|
126 |
+
{
|
127 |
+
$newQuery[$key] = $value;
|
128 |
+
}
|
129 |
+
}
|
130 |
+
else if($key == 'limit')
|
131 |
+
{
|
132 |
+
$limitQuery = "size=".urlencode($value);
|
133 |
+
}
|
134 |
+
else if($key == 'order')
|
135 |
+
{
|
136 |
+
$newQuery[$key] = $value." ".$categoryArr["dir"];
|
137 |
+
}
|
138 |
+
}
|
139 |
+
}
|
140 |
+
|
141 |
+
// changing to normal array
|
142 |
+
foreach($newQuery as $k=>$v)
|
143 |
+
{
|
144 |
+
$finalQuery[] = $k.":".urlencode($v);
|
145 |
+
}
|
146 |
+
|
147 |
+
// implode with &fq as in url
|
148 |
+
if(isset($finalQuery))
|
149 |
+
{
|
150 |
+
$query1 = "&fq=".implode("&fq=",$finalQuery);
|
151 |
+
}
|
152 |
+
|
153 |
+
|
154 |
+
if(strlen($limitQuery) > 0)
|
155 |
+
{
|
156 |
+
$query1 .= "&".$limitQuery;
|
157 |
+
}
|
158 |
+
|
159 |
+
$facetPortion = $query1;
|
160 |
+
|
161 |
+
}
|
162 |
+
|
163 |
+
}
|
164 |
+
|
165 |
+
return $facetPortion;
|
166 |
+
}
|
167 |
+
|
168 |
+
public function prepareLayer($requestParams){
|
169 |
+
$confArray = array();
|
170 |
+
$filters = array();
|
171 |
+
|
172 |
+
try{
|
173 |
+
$confArray["url"] = $this->getFormatUrl(Mage::helper('core/url')->getCurrentUrl(),$confArray);
|
174 |
+
$confArray["query"] = $requestParams['q'];
|
175 |
+
//$confArray["facetPortion"] = $this->getNonQueryUrlParameters($confArray["url"]);
|
176 |
+
|
177 |
+
//setup search url, if search URL is not empty
|
178 |
+
$searchApi = $this->getSearchApi($confArray);
|
179 |
+
|
180 |
+
if(!empty($searchApi)){
|
181 |
+
|
182 |
+
//sending request
|
183 |
+
$resp = Mage::helper('expertrec_recommendation')->sendCurl($searchApi);
|
184 |
+
$response_json = json_decode($resp,true);
|
185 |
+
|
186 |
+
// checking for url-resp
|
187 |
+
if(isset($response_json["redirect"]) && isset($response_json["redirect_url"])){
|
188 |
+
Mage::app()->getResponse()->setRedirect($response_json["redirect_url"]);
|
189 |
+
|
190 |
+
}
|
191 |
+
else
|
192 |
+
{
|
193 |
+
if(isset($response_json["res"]) && isset($response_json["res"]["count"])){
|
194 |
+
$confArray["count"] = (int)$response_json["res"]["count"];
|
195 |
+
Mage::getSingleton('expertrec_recommendation/log')->log("The json data is valid");
|
196 |
+
}
|
197 |
+
|
198 |
+
//Initiate search layout
|
199 |
+
$layoutHelper = Mage::helper('expertrec_recommendation/search_layout')->init($confArray);
|
200 |
+
|
201 |
+
$searchListData = $response_json["results"];
|
202 |
+
$itemIds = array();
|
203 |
+
|
204 |
+
if(isset($searchListData))
|
205 |
+
{
|
206 |
+
Mage::getSingleton('expertrec_recommendation/log')->log("Number of items returned by Expertrec BE ".count($searchListData));
|
207 |
+
|
208 |
+
foreach ($searchListData as $item) {
|
209 |
+
$itemIds[] = $item['entity_id'];
|
210 |
+
}
|
211 |
+
}
|
212 |
+
|
213 |
+
$this->_resultIds = $itemIds;
|
214 |
+
}
|
215 |
+
}
|
216 |
+
|
217 |
+
}catch (Exception $e) {
|
218 |
+
Mage::getSingleton('expertrec_recommendation/log')->log('Searchhelper::prepareLayer exception: '.$e->getMessage());
|
219 |
+
|
220 |
+
}
|
221 |
+
}
|
222 |
+
|
223 |
+
}
|
224 |
+
?>
|
app/code/community/Expertrec/Recommendation/Model/Catalogsearch/Layer.php
ADDED
@@ -0,0 +1,118 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class Expertrec_Recommendation_Model_Catalogsearch_Layer extends Mage_CatalogSearch_Model_Layer{
|
4 |
+
|
5 |
+
var $searchEnable;
|
6 |
+
const SEARCH_LIST_ENABLE = 'search/enable';
|
7 |
+
const SEARCH_CUSTOM_TEMPLATE = 'search/custom_template';
|
8 |
+
|
9 |
+
private function setSearchEnable()
|
10 |
+
{
|
11 |
+
|
12 |
+
$this->searchEnable = Mage::helper('expertrec_recommendation')->getConfig(self::SEARCH_LIST_ENABLE);
|
13 |
+
}
|
14 |
+
|
15 |
+
private function setExpertrecSearchData(){
|
16 |
+
try
|
17 |
+
{
|
18 |
+
$app = Mage::app();
|
19 |
+
$pageIdentifier = $app->getFrontController()->getAction()->getFullActionName();
|
20 |
+
|
21 |
+
if ($pageIdentifier === 'catalogsearch_result_index' ||
|
22 |
+
$pageIdentifier === 'expertrec_result_index')
|
23 |
+
{
|
24 |
+
|
25 |
+
$customTemplate = Mage::helper('expertrec_recommendation')->getConfig(self::SEARCH_CUSTOM_TEMPLATE);
|
26 |
+
|
27 |
+
$requestParams = $app->getRequest()->getParams();
|
28 |
+
|
29 |
+
if( (isset($this->searchEnable) && $this->searchEnable == "true") ||
|
30 |
+
(isset($requestParams["expertrec"]) && $requestParams["expertrec"] == "search"))
|
31 |
+
{
|
32 |
+
if(isset($customTemplate) && $customTemplate == "true")
|
33 |
+
{
|
34 |
+
$observer->getLayout()
|
35 |
+
->getUpdate()
|
36 |
+
->addHandle('expertrec_custom_autocomplete');
|
37 |
+
}
|
38 |
+
else
|
39 |
+
{
|
40 |
+
//This sets the result IDs
|
41 |
+
Mage::getSingleton('expertrec_recommendation/log')->log(" Fetching search results from expertec ");
|
42 |
+
|
43 |
+
Mage::helper('expertrec_recommendation/searchhelper')->prepareLayer($requestParams);
|
44 |
+
|
45 |
+
}
|
46 |
+
}
|
47 |
+
}
|
48 |
+
}
|
49 |
+
catch (Exception $e)
|
50 |
+
{
|
51 |
+
Mage::getSingleton('expertrec_recommendation/log')->log('setExpertrecSearchData exception: '.$e->getMessage());
|
52 |
+
}
|
53 |
+
|
54 |
+
}
|
55 |
+
|
56 |
+
|
57 |
+
/**
|
58 |
+
* Prepare product collection
|
59 |
+
*
|
60 |
+
* @param Mage_Catalog_Model_Resource_Eav_Resource_Product_Collection $collection
|
61 |
+
* @return Mage_Catalog_Model_Layer
|
62 |
+
*/
|
63 |
+
public function prepareProductCollection($collection)
|
64 |
+
{
|
65 |
+
$this->setSearchEnable();
|
66 |
+
//A log line to ensure that our search is called
|
67 |
+
Mage::getSingleton('expertrec_recommendation/log')->log(" Calling expertrec search function with search: ".$this->searchEnable);
|
68 |
+
|
69 |
+
|
70 |
+
if(isset($this->searchEnable) && $this->searchEnable == "true")
|
71 |
+
{
|
72 |
+
//Setting product IDs
|
73 |
+
$this->setExpertrecSearchData();
|
74 |
+
$product_ids = Mage::helper('expertrec_recommendation/searchhelper')->getResultIds();
|
75 |
+
Mage::getSingleton('expertrec_recommendation/log')->log(" The expertrec result IDs are ".count($product_ids));
|
76 |
+
//Mage::log($product_ids);
|
77 |
+
$collection
|
78 |
+
->addAttributeToSelect(Mage::getSingleton('catalog/config')->getProductAttributes())
|
79 |
+
->addFieldToFilter('entity_id',array('in'=>$product_ids))
|
80 |
+
->setStore(Mage::app()->getStore())
|
81 |
+
->addMinimalPrice()
|
82 |
+
->addFinalPrice()
|
83 |
+
->addTaxPercents()
|
84 |
+
->addStoreFilter()
|
85 |
+
->addUrlRewrite();
|
86 |
+
//->getSelect()->order("find_in_set(e.entity_id, '" . implode(',', $product_ids)."') DESC");
|
87 |
+
$requestParams = Mage::app()->getRequest()->getParams();
|
88 |
+
|
89 |
+
$orderby = isset($requestParams["order"]) ? $requestParams["order"] : 'relevance';
|
90 |
+
$dir = isset($requestParams["dir"]) ? $requestParams["dir"] : 'desc';
|
91 |
+
|
92 |
+
if($orderby == "relevance") {
|
93 |
+
if($dir == 'desc'){
|
94 |
+
$collection->getSelect()->order("find_in_set(e.entity_id, '" . implode(',', $product_ids)."') ASC");
|
95 |
+
}
|
96 |
+
else {
|
97 |
+
$collection->getSelect()->order("find_in_set(e.entity_id, '" . implode(',', $product_ids)."') DESC");
|
98 |
+
}
|
99 |
+
}
|
100 |
+
|
101 |
+
Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($collection);
|
102 |
+
Mage::getSingleton('catalog/product_visibility')->addVisibleInSearchFilterToCollection($collection);
|
103 |
+
}
|
104 |
+
else
|
105 |
+
{
|
106 |
+
//Call parent function if search is not enabled
|
107 |
+
Mage::getSingleton('expertrec_recommendation/log')->log(" Default search returned products ");
|
108 |
+
return parent::prepareProductCollection($collection);
|
109 |
+
}
|
110 |
+
|
111 |
+
|
112 |
+
return $collection;
|
113 |
+
}
|
114 |
+
|
115 |
+
|
116 |
+
}
|
117 |
+
|
118 |
+
?>
|
app/code/community/Expertrec/Recommendation/Model/Feed/Formatter.php
CHANGED
@@ -36,8 +36,11 @@ class Expertrec_Recommendation_Model_Feed_Formatter {
|
|
36 |
$vValue = $this->_getImage($skey,$product);
|
37 |
break;
|
38 |
case 'expert_category':
|
39 |
-
$vValue = $this->_getCategories($product);
|
40 |
-
break;
|
|
|
|
|
|
|
41 |
case 'expert_url':
|
42 |
//$vValue=$product->getProductUrl();
|
43 |
//changing ProductUrl from /index.php/catalog/product/view/id/539/s/racer-back-maxi-dress/ to /index.php/racer-back-maxi-dress.html
|
@@ -57,8 +60,16 @@ class Expertrec_Recommendation_Model_Feed_Formatter {
|
|
57 |
$vValue = array(1,2,3,4);
|
58 |
break;
|
59 |
default:
|
60 |
-
$
|
61 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
62 |
}
|
63 |
|
64 |
if(empty($vValue)){
|
@@ -71,9 +82,13 @@ class Expertrec_Recommendation_Model_Feed_Formatter {
|
|
71 |
return $aFeedRow;
|
72 |
}
|
73 |
|
74 |
-
|
|
|
|
|
|
|
|
|
75 |
$path = Mage::getSingleton('expertrec_recommendation/translator_category')
|
76 |
-
->translate($product);
|
77 |
return $path;
|
78 |
}
|
79 |
|
36 |
$vValue = $this->_getImage($skey,$product);
|
37 |
break;
|
38 |
case 'expert_category':
|
39 |
+
$vValue = $this->_getCategories($product,0);
|
40 |
+
break;
|
41 |
+
case 'expert_category_ids':
|
42 |
+
$vValue = $this->_getCategories($product,1);
|
43 |
+
break;
|
44 |
case 'expert_url':
|
45 |
//$vValue=$product->getProductUrl();
|
46 |
//changing ProductUrl from /index.php/catalog/product/view/id/539/s/racer-back-maxi-dress/ to /index.php/racer-back-maxi-dress.html
|
60 |
$vValue = array(1,2,3,4);
|
61 |
break;
|
62 |
default:
|
63 |
+
$attributedata = Mage::getSingleton("eav/config")->getAttribute('catalog_product', $skey)->getData();
|
64 |
+
$vValue =$product->getData($skey);
|
65 |
+
//For multiselect attr, need to use attrText to retrieve label value
|
66 |
+
if(!empty($vValue) && array_key_exists('frontend_input',$attributedata)
|
67 |
+
&& (isset($attributedata['frontend_input']) && $attributedata['frontend_input'] == 'select'))
|
68 |
+
{
|
69 |
+
$vValue .= chr(4).$product->getAttributeText($skey);
|
70 |
+
//Mage::getSingleton('expertrec_recommendation/log')->log(" The select dropdown is : ".$attributedata['frontend_input']." key is : ".$skey);
|
71 |
+
}
|
72 |
+
break;
|
73 |
}
|
74 |
|
75 |
if(empty($vValue)){
|
82 |
return $aFeedRow;
|
83 |
}
|
84 |
|
85 |
+
|
86 |
+
/*
|
87 |
+
@idstr determines if this combination is called for categories, or for category ids
|
88 |
+
*/
|
89 |
+
protected function _getCategories($product,$idstr){
|
90 |
$path = Mage::getSingleton('expertrec_recommendation/translator_category')
|
91 |
+
->translate($product,$idstr);
|
92 |
return $path;
|
93 |
}
|
94 |
|
app/code/community/Expertrec/Recommendation/Model/Observer.php
CHANGED
@@ -313,51 +313,6 @@ class Expertrec_Recommendation_Model_Observer {
|
|
313 |
Mage::getSingleton('expertrec_recommendation/log')->log("Error in getting feed endpoint: ".$e->getMessage());
|
314 |
return '';
|
315 |
}
|
316 |
-
}
|
317 |
-
|
318 |
-
/**
|
319 |
-
* Load Expertrec Search.
|
320 |
-
*/
|
321 |
-
public function useExpertrecSearch(Varien_Event_Observer $observer){
|
322 |
-
try {
|
323 |
-
$app = Mage::app();
|
324 |
-
$pageIdentifier = $app->getFrontController()->getAction()->getFullActionName();
|
325 |
-
|
326 |
-
if ($pageIdentifier === 'catalogsearch_result_index' ||
|
327 |
-
$pageIdentifier === 'expertrec_result_index')
|
328 |
-
{
|
329 |
-
$searchEnable = Mage::helper('expertrec_recommendation')->getConfig(self::SEARCH_LIST_ENABLE);
|
330 |
-
$customTemplate = Mage::helper('expertrec_recommendation')->getConfig(self::SEARCH_CUSTOM_TEMPLATE);
|
331 |
-
|
332 |
-
$requestParams = $app->getRequest()->getParams();
|
333 |
-
if( (isset($searchEnable) && $searchEnable == "true") ||
|
334 |
-
(isset($requestParams["expertrec"]) && $requestParams["expertrec"] == "search")
|
335 |
-
){
|
336 |
-
if(isset($customTemplate) && $customTemplate == "true"){
|
337 |
-
$observer->getLayout()
|
338 |
-
->getUpdate()
|
339 |
-
->addHandle('expertrec_custom_autocomplete');
|
340 |
-
}else{
|
341 |
-
$resultData = Mage::helper('expertrec_recommendation/autocompletehelper')->prepareLayer($requestParams);
|
342 |
-
|
343 |
-
if(count($resultData) == 0 ){
|
344 |
-
throw new Exception("Either Search_api or facets_list has not configured.");
|
345 |
-
}
|
346 |
-
|
347 |
-
Mage::register('expertrec_search_navigation', $resultData["facetHtml"]);
|
348 |
-
Mage::register('expertrec_search_list', $resultData["listHtml"]);
|
349 |
-
|
350 |
-
$observer->getLayout()
|
351 |
-
->getUpdate()
|
352 |
-
->addHandle('expertrec_autocomplete');
|
353 |
-
}
|
354 |
-
}
|
355 |
-
}
|
356 |
-
}catch (Exception $e) {
|
357 |
-
Mage::getSingleton('expertrec_recommendation/log')->log('useExpertrecSearch exception: '.$e->getMessage());
|
358 |
-
}
|
359 |
-
return $this;
|
360 |
-
}
|
361 |
-
|
362 |
}
|
363 |
-
?>
|
313 |
Mage::getSingleton('expertrec_recommendation/log')->log("Error in getting feed endpoint: ".$e->getMessage());
|
314 |
return '';
|
315 |
}
|
316 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
317 |
}
|
318 |
+
?>
|
app/code/community/Expertrec/Recommendation/Model/Translator/Category.php
CHANGED
@@ -7,6 +7,7 @@
|
|
7 |
class Expertrec_Recommendation_Model_Translator_Category {
|
8 |
|
9 |
protected $_categoryPaths = array();
|
|
|
10 |
|
11 |
/**
|
12 |
* Translates a category id stored in the supplied field to a full category path.
|
@@ -14,16 +15,26 @@ class Expertrec_Recommendation_Model_Translator_Category {
|
|
14 |
* @param $product
|
15 |
* @return string
|
16 |
*/
|
17 |
-
public function translate($product) {
|
18 |
$categoryPathArray=array();
|
19 |
$categoryArray = array_unique($product->getCategoryIds());
|
20 |
foreach ($categoryArray as $category_id) {
|
21 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
22 |
if(!empty($curPath) && !in_array($curPath, $categoryPathArray)){
|
23 |
$categoryPathArray[] = $curPath;
|
24 |
}
|
25 |
}
|
26 |
|
|
|
27 |
return implode(chr(4),$categoryPathArray);
|
28 |
}
|
29 |
|
@@ -57,4 +68,35 @@ class Expertrec_Recommendation_Model_Translator_Category {
|
|
57 |
|
58 |
}
|
59 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
60 |
}
|
7 |
class Expertrec_Recommendation_Model_Translator_Category {
|
8 |
|
9 |
protected $_categoryPaths = array();
|
10 |
+
protected $_categoryIdPaths = array();
|
11 |
|
12 |
/**
|
13 |
* Translates a category id stored in the supplied field to a full category path.
|
15 |
* @param $product
|
16 |
* @return string
|
17 |
*/
|
18 |
+
public function translate($product,$idStr) {
|
19 |
$categoryPathArray=array();
|
20 |
$categoryArray = array_unique($product->getCategoryIds());
|
21 |
foreach ($categoryArray as $category_id) {
|
22 |
+
|
23 |
+
if($idStr == 0)
|
24 |
+
{
|
25 |
+
$curPath=$this->_getCategoryPath($category_id);
|
26 |
+
}
|
27 |
+
elseif ($idStr == 1)
|
28 |
+
{
|
29 |
+
$curPath=$this->_getCategoryIdPath($category_id);
|
30 |
+
}
|
31 |
+
|
32 |
if(!empty($curPath) && !in_array($curPath, $categoryPathArray)){
|
33 |
$categoryPathArray[] = $curPath;
|
34 |
}
|
35 |
}
|
36 |
|
37 |
+
//Mage::getSingleton('expertrec_recommendation/log')->log(" The categories are : ".implode(chr(4),$categoryPathArray));
|
38 |
return implode(chr(4),$categoryPathArray);
|
39 |
}
|
40 |
|
68 |
|
69 |
}
|
70 |
|
71 |
+
/**
|
72 |
+
* First check given category_id present in the global category_path Array or not. If not found then make a db call to
|
73 |
+
* fetch category path and set it to category_path array.
|
74 |
+
*
|
75 |
+
* @param category id
|
76 |
+
* @return category path
|
77 |
+
*/
|
78 |
+
protected function _getCategoryIdPath($categoryId) {
|
79 |
+
try{
|
80 |
+
if (!array_key_exists($categoryId, $this->_categoryIdPaths)) {
|
81 |
+
$category = Mage::getModel('catalog/category')->load($categoryId);
|
82 |
+
if ($category === null || !$category->getIsActive() || $category->getLevel() == 1){
|
83 |
+
$this->_categoryIdPaths[$categoryId] = '';
|
84 |
+
}else {
|
85 |
+
//Mage::getSingleton('expertrec_recommendation/log')->log("Inside category ID");
|
86 |
+
$parentCategoryPath = $this->_getCategoryIdPath($category->getParentId());
|
87 |
+
if ($parentCategoryPath == '') {
|
88 |
+
$this->_categoryIdPaths[$categoryId] = $categoryId;
|
89 |
+
}else {
|
90 |
+
$this->_categoryIdPaths[$categoryId] = $parentCategoryPath . chr(3) . $categoryId;
|
91 |
+
}
|
92 |
+
}
|
93 |
+
}
|
94 |
+
return $this->_categoryIdPaths[$categoryId];
|
95 |
+
}catch (Exception $e) {
|
96 |
+
Mage::getSingleton('expertrec_recommendation/log')->log("Error in getCategoryPath: ".$e->getMessage());
|
97 |
+
return '';
|
98 |
+
}
|
99 |
+
|
100 |
+
}
|
101 |
+
|
102 |
}
|
app/code/community/Expertrec/Recommendation/Model/Validate.php
CHANGED
@@ -25,14 +25,7 @@ class Expertrec_Recommendation_Model_Validate {
|
|
25 |
}
|
26 |
|
27 |
public function getPassword(){
|
28 |
-
$storedPwd = Mage::
|
29 |
-
|
30 |
-
if(empty($storedPwd)){
|
31 |
-
$storedPwd = base64_decode(Mage::getStoreConfig(self::CONFIG_SECRET));
|
32 |
-
Mage::getSingleton('expertrec_recommendation/feed_feedconfig')
|
33 |
-
->setSecret($storedPwd);
|
34 |
-
}
|
35 |
-
|
36 |
return $storedPwd;
|
37 |
}
|
38 |
|
25 |
}
|
26 |
|
27 |
public function getPassword(){
|
28 |
+
$storedPwd = base64_decode(Mage::getStoreConfig(self::CONFIG_SECRET));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
29 |
return $storedPwd;
|
30 |
}
|
31 |
|
app/code/community/Expertrec/Recommendation/controllers/ApiController.php
CHANGED
@@ -25,7 +25,7 @@ class Expertrec_Recommendation_ApiController extends Mage_Core_Controller_Front_
|
|
25 |
const MERCHANT_ID = 'expertrec/general/mid';
|
26 |
|
27 |
|
28 |
-
const BUILD_NO = "
|
29 |
private $_password;
|
30 |
|
31 |
//main function which loads the feed API
|
@@ -320,7 +320,7 @@ class Expertrec_Recommendation_ApiController extends Mage_Core_Controller_Front_
|
|
320 |
}
|
321 |
|
322 |
private function getAllAttributes(){
|
323 |
-
$attrArray = array('qty','is_in_stock','expert_image','expert_smallImage','expert_thumbnail','expert_category','expert_url','final_price','entity_id','attribute_set_id','type_id','entity_type_id','rating_summary');
|
324 |
$attributes = Mage::getResourceModel('catalog/product_attribute_collection')->getItems();
|
325 |
|
326 |
foreach ($attributes as $attribute) {
|
@@ -668,5 +668,4 @@ class Expertrec_Recommendation_ApiController extends Mage_Core_Controller_Front_
|
|
668 |
return $result;
|
669 |
}
|
670 |
|
671 |
-
}
|
672 |
-
?>
|
25 |
const MERCHANT_ID = 'expertrec/general/mid';
|
26 |
|
27 |
|
28 |
+
const BUILD_NO = "1487594388";
|
29 |
private $_password;
|
30 |
|
31 |
//main function which loads the feed API
|
320 |
}
|
321 |
|
322 |
private function getAllAttributes(){
|
323 |
+
$attrArray = array('qty','is_in_stock','expert_image','expert_smallImage','expert_thumbnail','expert_category','expert_category_ids','expert_url','final_price','entity_id','attribute_set_id','type_id','entity_type_id','rating_summary');
|
324 |
$attributes = Mage::getResourceModel('catalog/product_attribute_collection')->getItems();
|
325 |
|
326 |
foreach ($attributes as $attribute) {
|
668 |
return $result;
|
669 |
}
|
670 |
|
671 |
+
}
|
|
app/code/community/Expertrec/Recommendation/controllers/CatalogSearch/ResultController.php
CHANGED
@@ -4,19 +4,10 @@ require_once 'Mage/CatalogSearch/controllers/ResultController.php';
|
|
4 |
|
5 |
class Expertrec_Recommendation_CatalogSearch_ResultController extends Mage_CatalogSearch_ResultController
|
6 |
{
|
7 |
-
|
8 |
public function indexAction(){
|
9 |
$this->loadLayout();
|
10 |
$this->renderLayout();
|
11 |
-
}
|
12 |
-
|
13 |
-
public function ajaxAction(){
|
14 |
-
$requestParams = Mage::app()->getRequest()->getParams();
|
15 |
-
$resultData = Mage::helper('expertrec_recommendation/autocompletehelper')
|
16 |
-
->prepareLayer($requestParams);
|
17 |
-
header('Content-Type: application/json');
|
18 |
-
echo json_encode($resultData);
|
19 |
-
}
|
20 |
}
|
21 |
|
22 |
?>
|
4 |
|
5 |
class Expertrec_Recommendation_CatalogSearch_ResultController extends Mage_CatalogSearch_ResultController
|
6 |
{
|
|
|
7 |
public function indexAction(){
|
8 |
$this->loadLayout();
|
9 |
$this->renderLayout();
|
10 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11 |
}
|
12 |
|
13 |
?>
|
app/code/community/Expertrec/Recommendation/etc/config.xml
CHANGED
@@ -2,15 +2,20 @@
|
|
2 |
<config>
|
3 |
<modules>
|
4 |
<Expertrec_Recommendation>
|
5 |
-
<version>1.
|
6 |
</Expertrec_Recommendation>
|
7 |
</modules>
|
8 |
<global>
|
9 |
<models>
|
10 |
<expertrec_recommendation>
|
11 |
<class>Expertrec_Recommendation_Model</class>
|
12 |
-
</expertrec_recommendation>
|
13 |
-
|
|
|
|
|
|
|
|
|
|
|
14 |
<helpers>
|
15 |
<expertrec_recommendation>
|
16 |
<class>Expertrec_Recommendation_Helper</class>
|
@@ -19,7 +24,12 @@
|
|
19 |
<blocks>
|
20 |
<expertrec_recommendation>
|
21 |
<class>Expertrec_Recommendation_Block</class>
|
22 |
-
</expertrec_recommendation>
|
|
|
|
|
|
|
|
|
|
|
23 |
</blocks>
|
24 |
<resources>
|
25 |
<expertrec_setup>
|
@@ -120,17 +130,6 @@
|
|
120 |
<frontName>expertrec</frontName>
|
121 |
</args>
|
122 |
</expertrec>
|
123 |
-
</routers>
|
124 |
-
<events>
|
125 |
-
<controller_action_layout_load_before>
|
126 |
-
<observers>
|
127 |
-
<expertrec_search>
|
128 |
-
<type>singleton</type>
|
129 |
-
<class>expertrec_recommendation/observer</class>
|
130 |
-
<method>useExpertrecSearch</method>
|
131 |
-
</expertrec_search>
|
132 |
-
</observers>
|
133 |
-
</controller_action_layout_load_before>
|
134 |
-
</events>
|
135 |
</frontend>
|
136 |
</config>
|
2 |
<config>
|
3 |
<modules>
|
4 |
<Expertrec_Recommendation>
|
5 |
+
<version>1.1.7</version>
|
6 |
</Expertrec_Recommendation>
|
7 |
</modules>
|
8 |
<global>
|
9 |
<models>
|
10 |
<expertrec_recommendation>
|
11 |
<class>Expertrec_Recommendation_Model</class>
|
12 |
+
</expertrec_recommendation>
|
13 |
+
<catalogsearch>
|
14 |
+
<rewrite>
|
15 |
+
<layer>Expertrec_Recommendation_Model_Catalogsearch_Layer</layer>
|
16 |
+
</rewrite>
|
17 |
+
</catalogsearch>
|
18 |
+
</models>
|
19 |
<helpers>
|
20 |
<expertrec_recommendation>
|
21 |
<class>Expertrec_Recommendation_Helper</class>
|
24 |
<blocks>
|
25 |
<expertrec_recommendation>
|
26 |
<class>Expertrec_Recommendation_Block</class>
|
27 |
+
</expertrec_recommendation>
|
28 |
+
<catalog>
|
29 |
+
<rewrite>
|
30 |
+
<product_list_toolbar>Expertrec_Recommendation_Block_Product_List_Toolbar</product_list_toolbar>
|
31 |
+
</rewrite>
|
32 |
+
</catalog>
|
33 |
</blocks>
|
34 |
<resources>
|
35 |
<expertrec_setup>
|
130 |
<frontName>expertrec</frontName>
|
131 |
</args>
|
132 |
</expertrec>
|
133 |
+
</routers>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
134 |
</frontend>
|
135 |
</config>
|
app/code/community/Expertrec/Recommendation/sql/expertrec_setup/{mysql4-install-1.0.12.php → mysql4-install-1.1.7.php}
RENAMED
@@ -1,24 +1,24 @@
|
|
1 |
<?php
|
2 |
|
3 |
//echo 'Installing extension: '.get_class($this)."\n <br /> \n";
|
4 |
-
Mage::log("Installing magento : 1.
|
5 |
|
6 |
|
7 |
$installer = $this;
|
8 |
|
9 |
-
$host = $_SERVER['HTTP_HOST'];
|
10 |
-
$uri = $_SERVER['REQUEST_URI'];
|
|
|
11 |
|
12 |
$installer->startSetup();
|
13 |
|
14 |
$result =array();
|
15 |
|
16 |
-
//
|
17 |
$result['status'] = "Installed";
|
18 |
-
//Subdomain
|
19 |
-
$result['site_subdomain'] = $uri;
|
20 |
//hostname
|
21 |
$result['site_host'] = $host;
|
|
|
22 |
//selecting for site_details
|
23 |
$site_data = $installer->getConnection()->fetchAll("select * from {$this->getTable('core_config_data')} where `path` like '%trans_email%'");
|
24 |
//site name and email
|
@@ -56,7 +56,7 @@ $installer->run("
|
|
56 |
('default',0,'expertrec/general/mid','new_user'),
|
57 |
('default',0,'expertrec/general/secret','NTE5NTQ1Zjk4OGExYzYxOWFkOTkyN2Y3MDQ5MTQ3NTM='),
|
58 |
('default',0,'expertrec/general/log_endpoint','https://feed.expertrec.com/magento/9418bba77c3b75abd2842e93b8c52c4a'),
|
59 |
-
('default',0,'expertrec/general/headers','is_in_stock,expert_image,expert_thumbnail,expert_category,final_price,entity_id,rating_summary,expert_url,created_at,image,msrp,name,price,short_description,sku,small_image,special_price,category_ids'),
|
60 |
('default',0,'expertrec/general/expertrec_image_width',250),
|
61 |
('default',0,'expertrec/general/expertrec_image_height',250),
|
62 |
('default',0,'expertrec/general/expertrec_thumbnail_width',80),
|
@@ -66,4 +66,4 @@ $installer->run("
|
|
66 |
|
67 |
$installer->endSetup();
|
68 |
|
69 |
-
?>
|
1 |
<?php
|
2 |
|
3 |
//echo 'Installing extension: '.get_class($this)."\n <br /> \n";
|
4 |
+
Mage::log("Installing magento : 1.1.6 ");
|
5 |
|
6 |
|
7 |
$installer = $this;
|
8 |
|
9 |
+
$host = $_SERVER['HTTP_HOST'];
|
10 |
+
$uri = $_SERVER['REQUEST_URI'];
|
11 |
+
//$uuu = $_SERVER['PHP_SELF'];
|
12 |
|
13 |
$installer->startSetup();
|
14 |
|
15 |
$result =array();
|
16 |
|
17 |
+
//install/upgrade status
|
18 |
$result['status'] = "Installed";
|
|
|
|
|
19 |
//hostname
|
20 |
$result['site_host'] = $host;
|
21 |
+
$result['site_subdomain'] = $uri;
|
22 |
//selecting for site_details
|
23 |
$site_data = $installer->getConnection()->fetchAll("select * from {$this->getTable('core_config_data')} where `path` like '%trans_email%'");
|
24 |
//site name and email
|
56 |
('default',0,'expertrec/general/mid','new_user'),
|
57 |
('default',0,'expertrec/general/secret','NTE5NTQ1Zjk4OGExYzYxOWFkOTkyN2Y3MDQ5MTQ3NTM='),
|
58 |
('default',0,'expertrec/general/log_endpoint','https://feed.expertrec.com/magento/9418bba77c3b75abd2842e93b8c52c4a'),
|
59 |
+
('default',0,'expertrec/general/headers','is_in_stock,expert_image,expert_thumbnail,expert_category,expert_category_ids,final_price,entity_id,rating_summary,expert_url,created_at,image,msrp,name,price,short_description,sku,small_image,special_price,category_ids'),
|
60 |
('default',0,'expertrec/general/expertrec_image_width',250),
|
61 |
('default',0,'expertrec/general/expertrec_image_height',250),
|
62 |
('default',0,'expertrec/general/expertrec_thumbnail_width',80),
|
66 |
|
67 |
$installer->endSetup();
|
68 |
|
69 |
+
?>
|
app/code/community/Expertrec/Recommendation/sql/expertrec_setup/{mysql4-upgrade-1.0.11-1.0.12.php → mysql4-upgrade-1.1.6-1.1.7.php}
RENAMED
@@ -1,22 +1,22 @@
|
|
1 |
<?php
|
2 |
|
3 |
//echo 'Running The Upgrade from 1.1.5 to 1.1.6 : '.get_class($this)."\n <br /> \n";
|
4 |
-
Mage::log("Running The Upgrade from 1.
|
5 |
|
6 |
$installer = $this;
|
7 |
|
8 |
$host = $_SERVER['HTTP_HOST'];
|
9 |
-
$uri = $_SERVER['REQUEST_URI'];
|
10 |
-
|
11 |
|
12 |
$installer->startSetup();
|
13 |
|
14 |
$result =array();
|
15 |
-
|
|
|
16 |
$result['status'] = "Upgraded";
|
17 |
//hostname
|
18 |
$result['site_host'] = $host;
|
19 |
-
//Subdomain
|
20 |
$result['site_subdomain'] = $uri;
|
21 |
//selecting for site_details
|
22 |
$site_data = $installer->getConnection()->fetchAll("select * from {$this->getTable('core_config_data')} where `path` like '%trans_email%'");
|
@@ -55,7 +55,7 @@ $installer->run("
|
|
55 |
('default',0,'expertrec/general/mid','new_user'),
|
56 |
('default',0,'expertrec/general/secret','NTE5NTQ1Zjk4OGExYzYxOWFkOTkyN2Y3MDQ5MTQ3NTM='),
|
57 |
('default',0,'expertrec/general/log_endpoint','https://feed.expertrec.com/magento/9418bba77c3b75abd2842e93b8c52c4a'),
|
58 |
-
('default',0,'expertrec/general/headers','is_in_stock,expert_image,expert_thumbnail,expert_category,final_price,entity_id,rating_summary,expert_url,created_at,image,msrp,name,price,short_description,sku,small_image,special_price,category_ids'),
|
59 |
('default',0,'expertrec/general/expertrec_image_width',250),
|
60 |
('default',0,'expertrec/general/expertrec_image_height',250),
|
61 |
('default',0,'expertrec/general/expertrec_thumbnail_width',80),
|
@@ -65,4 +65,4 @@ $installer->run("
|
|
65 |
|
66 |
$installer->endSetup();
|
67 |
|
68 |
-
?>
|
1 |
<?php
|
2 |
|
3 |
//echo 'Running The Upgrade from 1.1.5 to 1.1.6 : '.get_class($this)."\n <br /> \n";
|
4 |
+
Mage::log("Running The Upgrade from 1.1.5 to 1.1.6 : ".get_class($this));
|
5 |
|
6 |
$installer = $this;
|
7 |
|
8 |
$host = $_SERVER['HTTP_HOST'];
|
9 |
+
$uri = $_SERVER['REQUEST_URI'];
|
10 |
+
//$uuu = $_SERVER['PHP_SELF'];
|
11 |
|
12 |
$installer->startSetup();
|
13 |
|
14 |
$result =array();
|
15 |
+
|
16 |
+
//install/upgrade status
|
17 |
$result['status'] = "Upgraded";
|
18 |
//hostname
|
19 |
$result['site_host'] = $host;
|
|
|
20 |
$result['site_subdomain'] = $uri;
|
21 |
//selecting for site_details
|
22 |
$site_data = $installer->getConnection()->fetchAll("select * from {$this->getTable('core_config_data')} where `path` like '%trans_email%'");
|
55 |
('default',0,'expertrec/general/mid','new_user'),
|
56 |
('default',0,'expertrec/general/secret','NTE5NTQ1Zjk4OGExYzYxOWFkOTkyN2Y3MDQ5MTQ3NTM='),
|
57 |
('default',0,'expertrec/general/log_endpoint','https://feed.expertrec.com/magento/9418bba77c3b75abd2842e93b8c52c4a'),
|
58 |
+
('default',0,'expertrec/general/headers','is_in_stock,expert_image,expert_thumbnail,expert_category,expert_category_ids,final_price,entity_id,rating_summary,expert_url,created_at,image,msrp,name,price,short_description,sku,small_image,special_price,category_ids'),
|
59 |
('default',0,'expertrec/general/expertrec_image_width',250),
|
60 |
('default',0,'expertrec/general/expertrec_image_height',250),
|
61 |
('default',0,'expertrec/general/expertrec_thumbnail_width',80),
|
65 |
|
66 |
$installer->endSetup();
|
67 |
|
68 |
+
?>
|
app/design/frontend/base/default/layout/expertrec/recommendation.xml
CHANGED
@@ -5,45 +5,16 @@
|
|
5 |
<reference name="head">
|
6 |
<block name="expertrec.rec.tracking" template="expertrec/recommendation/tracker.phtml" after="-" type="core/template"/>
|
7 |
</reference>
|
8 |
-
</default>
|
9 |
-
|
10 |
-
<catalog_product_view>
|
11 |
-
<reference name="before_body_end">
|
12 |
-
<block name="expertrec.rec.analytics.producttracking" template="expertrec/recommendation/tracking/product.phtml" after="-" type="core/template"/>
|
13 |
-
</reference>
|
14 |
-
</catalog_product_view>
|
15 |
-
|
16 |
-
<!-- Search -->
|
17 |
-
<expertrec_autocomplete>
|
18 |
-
<reference name="root">
|
19 |
-
<action method="setTemplate"><template>page/2columns-left.phtml</template></action>
|
20 |
-
</reference>
|
21 |
-
<reference name="catalogsearch.leftnav">
|
22 |
-
<action method="setTemplate">
|
23 |
-
<value>expertrec/search/view.phtml</value>
|
24 |
-
</action>
|
25 |
-
</reference>
|
26 |
-
<remove name="search.result"/>
|
27 |
-
<reference name="content">
|
28 |
-
<block type="core/template" name="search_result_list" template="expertrec/search/list.phtml"/>
|
29 |
-
</reference>
|
30 |
-
</expertrec_autocomplete>
|
31 |
<expertrec_custom_autocomplete>
|
32 |
<remove name="right"/>
|
33 |
<remove name="left"/>
|
34 |
<reference name="root">
|
35 |
<action method="setTemplate"><template>page/1column.phtml</template></action>
|
36 |
-
</reference>
|
37 |
-
<remove name="search.result"/>
|
38 |
-
<reference name="content">
|
39 |
-
<block type="core/template" name="expertrec_search_result" template="expertrec/search/custom.phtml"/>
|
40 |
-
</reference>
|
41 |
</expertrec_custom_autocomplete>
|
42 |
-
|
43 |
-
<reference name="left">
|
44 |
-
<block type="core/template" name="expertrec.leftnav" after="currency" template="expertrec/search/view.phtml"/>
|
45 |
-
</reference>
|
46 |
-
</expertrec_result_index>
|
47 |
<expertrec_recommendation_api_info>
|
48 |
<reference name="root">
|
49 |
<action method="setTemplate"><template>page/1column.phtml</template></action>
|
5 |
<reference name="head">
|
6 |
<block name="expertrec.rec.tracking" template="expertrec/recommendation/tracker.phtml" after="-" type="core/template"/>
|
7 |
</reference>
|
8 |
+
</default>
|
9 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
10 |
<expertrec_custom_autocomplete>
|
11 |
<remove name="right"/>
|
12 |
<remove name="left"/>
|
13 |
<reference name="root">
|
14 |
<action method="setTemplate"><template>page/1column.phtml</template></action>
|
15 |
+
</reference>
|
|
|
|
|
|
|
|
|
16 |
</expertrec_custom_autocomplete>
|
17 |
+
<!--route the infoAction function in ApiController to info.phtml, which can access Api.php block functions-->
|
|
|
|
|
|
|
|
|
18 |
<expertrec_recommendation_api_info>
|
19 |
<reference name="root">
|
20 |
<action method="setTemplate"><template>page/1column.phtml</template></action>
|
app/design/frontend/base/default/template/expertrec/recommendation/tracker.phtml
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
<?php $category = Mage::registry("current_category");?>
|
5 |
<?php
|
6 |
$formKey = '';
|
7 |
-
|
8 |
try{
|
9 |
$formkey_html = $this->getBlockHtml('formkey');
|
10 |
$pattern = '/.*form_key.*value=\"([^\"]+)\"/s';
|
@@ -13,6 +13,13 @@ try{
|
|
13 |
$formKey = $match[1];
|
14 |
}
|
15 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16 |
} catch (Exception $e){
|
17 |
Mage::logException($e);
|
18 |
}
|
@@ -26,6 +33,9 @@ if(typeof expertSiteConf == 'undefined' || expertSiteConf == null) {
|
|
26 |
<?php if (isset($category)) { ?>
|
27 |
,category:"<?php echo $category->getName(); ?>"
|
28 |
<?php } ?>
|
|
|
|
|
|
|
29 |
};
|
30 |
}
|
31 |
|
4 |
<?php $category = Mage::registry("current_category");?>
|
5 |
<?php
|
6 |
$formKey = '';
|
7 |
+
$currencyRates = array();
|
8 |
try{
|
9 |
$formkey_html = $this->getBlockHtml('formkey');
|
10 |
$pattern = '/.*form_key.*value=\"([^\"]+)\"/s';
|
13 |
$formKey = $match[1];
|
14 |
}
|
15 |
}
|
16 |
+
|
17 |
+
//currency rate
|
18 |
+
$baseCurrencyCode = Mage::app()->getBaseCurrencyCode();
|
19 |
+
$allowedCurrencies = Mage::getModel('directory/currency')->getConfigAllowCurrencies();
|
20 |
+
$currencyRates = Mage::getModel('directory/currency')
|
21 |
+
->getCurrencyRates($baseCurrencyCode, array_values($allowedCurrencies));
|
22 |
+
|
23 |
} catch (Exception $e){
|
24 |
Mage::logException($e);
|
25 |
}
|
33 |
<?php if (isset($category)) { ?>
|
34 |
,category:"<?php echo $category->getName(); ?>"
|
35 |
<?php } ?>
|
36 |
+
<?php if (!empty($currencyRates)) { ?>
|
37 |
+
,rates: <?php echo json_encode($currencyRates); ?>
|
38 |
+
<?php } ?>
|
39 |
};
|
40 |
}
|
41 |
|
app/design/frontend/base/default/template/expertrec/search/custom.phtml
DELETED
@@ -1,2 +0,0 @@
|
|
1 |
-
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.6.3/css/font-awesome.min.css">
|
2 |
-
<div id="expertrec_search_result_list"></div>
|
|
|
|
app/design/frontend/base/default/template/expertrec/search/list.phtml
DELETED
@@ -1,23 +0,0 @@
|
|
1 |
-
<div class="page-title">
|
2 |
-
<h1>
|
3 |
-
<?php echo ($this->getHeaderText() || $this->getHeaderText() === false) ? $this->getHeaderText() : $this->__("Search results for '%s'", $this->helper('catalogsearch')->getEscapedQueryText()) ?>
|
4 |
-
</h1>
|
5 |
-
</div>
|
6 |
-
|
7 |
-
<div id="expertrec_search_result_list">
|
8 |
-
<?php
|
9 |
-
echo Mage::registry('expertrec_search_list');
|
10 |
-
?>
|
11 |
-
</div>
|
12 |
-
|
13 |
-
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
|
14 |
-
<script type="text/javascript">
|
15 |
-
var erjq=jQuery.noConflict(true);function erOpenFilter(){erjq("#er_Filteroption").css("width","100%");erjq("body").css("overflow","hidden")}function erCloseFilter(){erjq("#er_Filteroption").css("width","0px");erjq("body").css("overflow","visible")}function erShowProduct(a){var c=a,d=c.listHtml||"",b=c.facetHtml||"";d&&erjq("#expertrec_search_result_list").html(d);b&&erjq("#expertrec_search_result_navigation").html(b);if(typeof erDisplayPriceFilter=="function"){erDisplayPriceFilter()}erjq("#expertrec-overlay").css("display","none");erAttachFilterEvent();erToggleNavigation()}function erMakeDealsCall(a){erjq.ajax({url:a,type:"GET",dataType:"json",success:erShowProduct,error:function(){erjq("#expertrec-overlay").css("display","none")}})}function erToggleNavigation(){erjq(".toggle-content").each(function(){var a=erjq(this);var c=a.hasClass("tabs");var g=a.hasClass("accordion");var e=a.hasClass("open");var j=a.children("dl:first");var d=j.children("dt");var l=j.children("dd");var b=new Array(d,l);if(c){var k=erjq('<ul class="toggle-tabs"></ul>');d.each(function(){var n=erjq(this);var i=erjq("<li></li>");i.html(n.html());k.append(i)});k.insertBefore(j);var m=k.children();b.push(m)}var f;for(f=0;f<b.length;f++){b[f].filter(":last").addClass("last")}function h(o,q){var n=q.index(o);var p;for(p=0;p<b.length;p++){b[p].removeClass("current");b[p].eq(n).addClass("current")}}d.on("click",function(i){if(erjq(this).hasClass("current")&&a.hasClass("accordion-open")){a.removeClass("accordion-open")}else{a.addClass("accordion-open")}h(erjq(this),d)});if(c){m.on("click",function(i){h(erjq(this),m)});m.eq(0).trigger("click")}if(e){d.eq(0).trigger("click")}})}erjq(document).ready(function(){var a=function(){if(erjq(window).width()<=771){erjq("#er_Filteroption").css("width","0px");erjq("#expertrec_search_result_navigation").prependTo(erjq("#expertrec_search_result_list"))}else{erjq("#er_Filteroption").css("width","100%");erjq(".col-left").first().prepend(erjq("#expertrec_search_result_navigation"))}};a();erjq(window).resize(function(){a()})});
|
16 |
-
|
17 |
-
<?php if(Mage::helper('expertrec_recommendation/search_layout')->getIsAjax()){ ?>
|
18 |
-
|
19 |
-
function erAttachFilterEvent(){erjq("#er_Filteroption .filter-search a").each(function(){var b=this,c="",e="",d=[],a=erjq(window).width();erjq(this).click(function(){if(a<771){erCloseFilter()}erjq("#expertrec-overlay").css("display","block");c=erjq(b).find("input").val();if(c){d=c.split("?");if(d.length==2){e=/\/$/.test(d[0])?d[0]+"ajax":d[0]+"/ajax";e+="?"+d[1];e=typeof erGetFilterPrice=="function"?erGetFilterPrice(e):e;erMakeDealsCall(e)}else{window.location.href=c}}})})}erjq(document).ready(function(){erAttachFilterEvent()});
|
20 |
-
|
21 |
-
<?php }?>
|
22 |
-
|
23 |
-
</script>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
app/design/frontend/base/default/template/expertrec/search/view.phtml
DELETED
@@ -1,16 +0,0 @@
|
|
1 |
-
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.6.3/css/font-awesome.min.css">
|
2 |
-
<style type="text/css">
|
3 |
-
#expertrec_search_result_list .note-msg {color:red;font-size:1.2em;}#er_Filteroption .no-display {display: block !important;}#expertrec_search_result_list .products-grid>li{position:relative;margin-bottom:20px;text-align:center}#expertrec_search_result_list .products-grid>li{float:left;width:47.72727%;}#expertrec_search_result_list .products-grid>li:nth-child(2n+1){clear:left}#expertrec_search_result_list .products-grid .product-image{margin-bottom:5px;text-align:center;margin-left:auto;margin-right:auto;display:block;width:100%}#expertrec_search_result_list .products-grid .product-info{min-height:inherit!important;padding-bottom:10px!important;position:relative}#expertrec_search_result_list .products-grid .product-name,#expertrec_search_result_list .products-list .product-name{text-transform:uppercase;margin-bottom:5px;font-size:14px;font-weight:normal;line-height:1.4;font-style:normal}#expertrec_search_result_list .products-grid .actions{position:relative;bottom:0;padding-top:10px;min-height:85px;width:100%;font-size:14px}#expertrec_search_result_list .add-to-links{margin:7px 0}#expertrec_search_result_list .add-to-links a{display:inline-block;padding:0 3px 3px}#expertrec_search_result_list .products-grid li.item button.btn-cart{width:100%}#expertrec_search_result_list .currently ol li .value,#expertrec_search_result_list .currently ol li .multivalue{padding:0 10px}#expertrec_search_result_list .currently ol li .label{text-transform:capitalize;font-weight:bold}#expertrec_search_result_list .currently ol li{margin-bottom:5px}#expertrec_search_result_list .currently ol li::after{content:'';display:table;clear:both}#expertrec_search_result_navigation .mobile-only,#expertrec_search_result_navigation p.mobile-only{display:none}#expertrec_search_result_navigation .listing-filter{display:none}#er_Filteroption .toggle-content .block-subtitle{float:none;text-align:center}#expertrec_search_result_navigation .block-layered-nav.expertrec-overflow-scroll-enabled .block-content>dl>dd{background:#fff}#expertrec_search_result_navigation .block-layered-nav.expertrec-overflow-scroll-enabled dl dd ol>li>a .count{color:#949494;font-size:12px}#expertrec_search_result_navigation .block-layered-nav.expertrec-overflow-scroll-enabled dl dd ol>li>a.expertrec-attr-selected{color:#5a647c}#expertrec_search_result_navigation .block-layered-nav.expertrec-overflow-scroll-enabled dl dd ol>li>a.expertrec-attr-selected:hover{text-decoration:none}#expertrec_search_result_navigation .block-layered-nav.expertrec-overflow-scroll-enabled .currently ol{padding-left:0;margin-bottom:10px}#expertrec_search_result_navigation #narrow-by-list{border-radius:3px;box-shadow:0 0 4px rgba(0,0,0,.2)}#expertrec_search_result_navigation .expertrec-overflow-scroll-enabled .block-content dl dd>ol{max-height:250px;overflow-y:auto}.expertrec-filter-attr .fa-square-o,.expertrec-filter-cat .fa-square-o{display:inline-block}.expertrec-filter-attr .fa-check-square-o,.expertrec-filter-cat .fa-check-square-o{display:none}.expertrec-filter-attr-selected .fa-square-o,.expertrec-filter-cat-selected .fa-square-o{display:none}.expertrec-filter-attr-selected .fa-check-square-o,.expertrec-filter-cat-selected .fa-check-square-o{display:inline-block}#expertrec-overlay{display:none;background-color:#000;height:100%;left:0;opacity:.7;filter:alpha(opacity= 50);position:fixed;top:0;width:100%;z-index:999}#expertrec-overlay img{top:45%;left:48%;display:block;position:fixed;z-index:900}#expertrec_search_result_list .products-grid .actions{position:relative;bottom:0}#expertrec_search_result_list .products-grid .product-info{min-height:inherit!important;padding-bottom:10px!important}#expertrec_search_result_list .products-grid .product-image img{width:100%;height:auto}@media only screen and (max-width:770px){#er_Filteroption .block-title{display:none}#expertrec_search_result_navigation .expertrec-overflow-scroll-enabled .block-content dl dd>ol{max-height:150px}#expertrec_search_result_navigation .mobile-only,#expertrec_search_result_navigation p.mobile-only{display:block}#expertrec_search_result_navigation .mobile-filter-closer{text-align:center;padding:10px 5px;background:#f04f25;color:#fff;width:99%;margin:10px auto;max-width:300px;clear:both;cursor:pointer}#expertrec_search_result_navigation .listing-filter{display:block;font-size:12px}#expertrec_search_result_navigation .listing-filter{display:block;border:1px solid #e7e7e7;text-align:center;margin-bottom:15px;width:80%;margin:0 auto 15px;padding:10px 5px;border-radius:5px}#expertrec_search_result_navigation .overlay-filter{height:100%;width:0;position:fixed;z-index:2000;top:0;left:0;background-color:#f3f3f3;overflow-x:hidden;transition:.5s}}@media only screen and (max-width:600px){#expertrec_search_result_list .products-list .desc{display:none}}@media only screen and (min-width:480px){#expertrec_search_result_list .products-grid>li:nth-child(odd){clear:none}#expertrec_search_result_list .products-grid>li:nth-child(even){margin-right:3.7037%}#expertrec_search_result_list .products-grid>li{width:30.8642%;margin-right:3.7037%}#expertrec_search_result_list .products-grid>li:nth-child(3n+1){clear:left}#expertrec_search_result_list .products-grid>li:nth-child(3n){margin-right:0}}
|
4 |
-
</style>
|
5 |
-
|
6 |
-
|
7 |
-
<div id="expertrec_search_result_navigation">
|
8 |
-
<?php
|
9 |
-
$expertrec_search_navigation = Mage::registry('expertrec_search_navigation');
|
10 |
-
echo $expertrec_search_navigation;
|
11 |
-
?>
|
12 |
-
</div>
|
13 |
-
|
14 |
-
<div id="expertrec-overlay">
|
15 |
-
<img src="//cdnjs.cloudflare.com/ajax/libs/semantic-ui/0.16.1/images/loader-large.gif">
|
16 |
-
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
package.xml
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>Expertrec_Recommendation</name>
|
4 |
-
<version>1.
|
5 |
<stability>stable</stability>
|
6 |
<license uri="http://opensource.org/licenses/osl-3.0.php">Open Software License (OSL)</license>
|
7 |
<channel>community</channel>
|
@@ -10,9 +10,9 @@
|
|
10 |
<description>Expertrec search extension helps you have complete control over your site search results. You will be able to add instant autocomplete, spell corrections that learn from the user behaviour on your site, and show product recommendations within the search user interface. It also adds search results pages with facets, sorting by different attributes.</description>
|
11 |
<notes>Expertrec Recommendation plugin for magento sites.</notes>
|
12 |
<authors><author><name>melchi</name><user>melchi</user><email>magento@cloudinfra.in</email></author><author><name>magento</name><user>magento</user><email>magento-team@cloudinfra.in</email></author></authors>
|
13 |
-
<date>2017-02-
|
14 |
-
<time>12:42:
|
15 |
-
<contents><target name="magecommunity"><dir name="Expertrec"><dir name="Recommendation"><dir name="Block"><file name="Api.php" hash="
|
16 |
<compatible/>
|
17 |
<dependencies><required><php><min>5.3.0</min><max>6.0.0</max></php></required></dependencies>
|
18 |
</package>
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>Expertrec_Recommendation</name>
|
4 |
+
<version>1.1.7</version>
|
5 |
<stability>stable</stability>
|
6 |
<license uri="http://opensource.org/licenses/osl-3.0.php">Open Software License (OSL)</license>
|
7 |
<channel>community</channel>
|
10 |
<description>Expertrec search extension helps you have complete control over your site search results. You will be able to add instant autocomplete, spell corrections that learn from the user behaviour on your site, and show product recommendations within the search user interface. It also adds search results pages with facets, sorting by different attributes.</description>
|
11 |
<notes>Expertrec Recommendation plugin for magento sites.</notes>
|
12 |
<authors><author><name>melchi</name><user>melchi</user><email>magento@cloudinfra.in</email></author><author><name>magento</name><user>magento</user><email>magento-team@cloudinfra.in</email></author></authors>
|
13 |
+
<date>2017-02-20</date>
|
14 |
+
<time>12:42:40</time>
|
15 |
+
<contents><target name="magecommunity"><dir name="Expertrec"><dir name="Recommendation"><dir name="Block"><file name="Api.php" hash="ce87654622f030c6e8b5a992713da5d8"/><dir name="Product"><dir name="List"><file name="Toolbar.php" hash="bd05a0d7473829c47662e6b763907ea6"/></dir></dir></dir><dir name="Helper"><file name="Data.php" hash="364ab05880bed5e6a02f20bcca1b993c"/><file name="Filehelper.php" hash="5ac956e12548398dc159a16eb1a03e8b"/><dir name="Search"><file name="Layout.php" hash="d7b7ec5f4bbd846dd063934f8a267d48"/></dir><file name="Searchhelper.php" hash="dfc4fc81fea519c15517f53645488c7a"/><file name="Suggestionhelper.php" hash="93f3aa295761a510f782856c0180a799"/></dir><dir name="Model"><dir name="Api"><file name="Request.php" hash="7df8b22d74b6a05de86da287687a6e96"/></dir><dir name="Catalogsearch"><file name="Layer.php" hash="bbfbad54d1c5688cc5627a6c25ba7d20"/></dir><dir name="Feed"><file name="Feedconfig.php" hash="013bd447dccc7cc4f073be5bd53a18c9"/><file name="Feedcreator.php" hash="fa6cf4590cf81073325b6717c8951486"/><file name="Feedfilter.php" hash="d7599a63a8d1f2033cb1e56204809c2d"/><file name="Formatter.php" hash="4c78f1f2eaa65a9a46f46d129f62f662"/></dir><file name="Feed.php" hash="ddac87d6a060bc77fb7718e7b19e1273"/><file name="Log.php" hash="27fcee49e67fe2be761b4af94aecff2b"/><file name="Observer.php" hash="4aa575eea33402932390f4e30625a67e"/><dir name="Resource"><dir name="Mysql4"><file name="Setup.php" hash="6b660487988035cd715fa3c51b2b58b6"/></dir></dir><dir name="Translator"><file name="Category.php" hash="0050de4918d73af310008aa8f49239d1"/></dir><file name="Validate.php" hash="7a5fd226b0055e39b725975113e42ee5"/><dir name="Writer"><file name="Abstract.php" hash="6b5153c0a09f8d4ee6fe4cedc5ec8a64"/><file name="Csv.php" hash="427fea44d988302f409e1860c18875b1"/></dir></dir><dir name="controllers"><dir name="Adminhtml"><file name="IndexController.php" hash="c4f80c214d11fd531496e71b4951b27f"/></dir><file name="ApiController.php" hash="7ead355ff1fb74ca8cdbdfb766225fe3"/><dir name="CatalogSearch"><file name="ResultController.php" hash="9cb1406e901701ea58e663433358a4c6"/></dir><file name="ConfigController.php" hash="0fd9a9686806c26635c7db0a57a0f4ab"/><file name="IndexController.php" hash="7bfaa867dfa9bed0c7b0ebd634d2e2bb"/></dir><dir name="etc"><file name="adminhtml.xml" hash="e86ff2b7aac4d09a4c359f0047b06ca3"/><file name="config.xml" hash="09b49197e59ef47c9adce7873d068c8a"/></dir><dir name="sql"><dir name="expertrec_setup"><file name="mysql4-install-1.1.7.php" hash="017dd7dc0c683db749f490a632481f05"/><file name="mysql4-upgrade-1.1.6-1.1.7.php" hash="87ed11c4a652d8493e4afb503e66a1d6"/></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Expertrec_Recommendation.xml" hash="c314465f907c89dfe912035be8d48e71"/></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><dir name="expertrec"><file name="recommendation.xml" hash="061b28ab9009ff2346977cebe2333cb8"/></dir></dir><dir name="template"><dir name="expertrec"><dir name="feed"><file name="info.phtml" hash="e386121a2d08b754ace87ab8a146e941"/></dir><dir name="recommendation"><file name="tracker.phtml" hash="c4da6289ad644d96d7dac9b5521ae3a1"/><dir name="tracking"><file name="product.phtml" hash="e02d3f870397cf351bc0ff7ca864c7e2"/></dir></dir></dir></dir></dir></dir></dir></target></contents>
|
16 |
<compatible/>
|
17 |
<dependencies><required><php><min>5.3.0</min><max>6.0.0</max></php></required></dependencies>
|
18 |
</package>
|