Version Notes
refactoring and bugfixes
- Moved plugin from local to community pool to support custom overrides.
- Adding support for URL export in Magento EE.
- Improving handling of missing/empty images in the autocompletion.
- Refactoring and improving facet block.
- Exclude catalog only items in the search.
- Fixing regressions in the customer synchronization.
- Correcting order total calculation in tracking.
Download this release
Release Info
| Developer | Szymon Nosal |
| Extension | boxalino_plugin |
| Version | 2.10.0 |
| Comparing to | |
| See all releases | |
Code changes from version 2.9.0 to 2.10.0
- app/code/{local → community}/Boxalino/CemSearch/Block/Abstract.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Block/Autocomplete.php +16 -23
- app/code/{local → community}/Boxalino/CemSearch/Block/Cart/Crosssell.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Block/Facets.php +161 -157
- app/code/{local → community}/Boxalino/CemSearch/Block/Product/List.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Block/Product/List/Recommendation.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Block/Product/List/Related.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Block/Product/List/Upsell.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Block/Script.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/CatalogSearch/Helper/Data.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Helper/Data.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Helper/P13n/Adapter.php +5 -1
- app/code/{local → community}/Boxalino/CemSearch/Helper/P13n/Config.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Helper/P13n/Recommendation.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Helper/P13n/Sort.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Lib/AbstractThrift.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Lib/P13nService.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Lib/Types.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Base/TBase.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/ClassLoader/ThriftClassLoader.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Exception/TApplicationException.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Exception/TException.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Exception/TProtocolException.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Exception/TTransportException.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Factory/TBinaryProtocolFactory.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Factory/TCompactProtocolFactory.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Factory/TJSONProtocolFactory.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Factory/TProtocolFactory.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Factory/TStringFuncFactory.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Factory/TTransportFactory.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/HttpP13n.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Protocol/JSON/BaseContext.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Protocol/JSON/ListContext.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Protocol/JSON/LookaheadReader.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Protocol/JSON/PairContext.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Protocol/TBinaryProtocol.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Protocol/TBinaryProtocolAccelerated.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Protocol/TCompactProtocol.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Protocol/TJSONProtocol.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Protocol/TProtocol.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Serializer/TBinarySerializer.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Server/TForkingServer.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Server/TServer.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Server/TServerSocket.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Server/TServerTransport.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Server/TSimpleServer.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/StringFunc/Core.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/StringFunc/Mbstring.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/StringFunc/TStringFunc.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Transport/P13nTCurlClient.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Transport/P13nTHttpClient.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Transport/TBufferedTransport.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Transport/TCurlClient.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Transport/TFramedTransport.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Transport/THttpClient.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Transport/TMemoryBuffer.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Transport/TNullTransport.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Transport/TPhpStream.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Transport/TSocket.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Transport/TSocketPool.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Transport/TTransport.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Type/TMessageType.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Type/TType.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Model/Advanced.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Model/Category.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Model/Logger.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Model/Observer.php +1 -1
- app/code/{local → community}/Boxalino/CemSearch/Model/Resource/Advanced.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Model/Resource/Advanced/Collection.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Model/Resource/Fulltext.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/Model/Session.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/controllers/AdvancedController.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/controllers/AjaxController.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/controllers/IndexController.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/controllers/ResultController.php +0 -0
- app/code/{local → community}/Boxalino/CemSearch/etc/adminhtml.xml +0 -0
- app/code/{local → community}/Boxalino/CemSearch/etc/config.xml +1 -1
- app/code/{local → community}/Boxalino/CemSearch/etc/system.xml +0 -0
- app/code/{local → community}/Boxalino/Exporter/Helper/Data.php +2 -7
- app/code/{local → community}/Boxalino/Exporter/Model/Delta.php +0 -0
- app/code/{local → community}/Boxalino/Exporter/Model/Indexer.php +0 -0
- app/code/{local → community}/Boxalino/Exporter/Model/Mysql4/Exporter/Delta.php +0 -0
- app/code/{local → community}/Boxalino/Exporter/Model/Mysql4/Exporter/Indexer.php +0 -0
- app/code/{local → community}/Boxalino/Exporter/Model/Mysql4/Indexer.php +48 -31
- app/code/{local → community}/Boxalino/Exporter/etc/adminhtml.xml +0 -0
- app/code/{local → community}/Boxalino/Exporter/etc/config.xml +2 -1
- app/code/{local → community}/Boxalino/Exporter/etc/system.xml +0 -0
- app/etc/modules/Boxalino_CemSearch.xml +1 -2
- app/etc/modules/Boxalino_Exporter.xml +2 -1
- package.xml +14 -7
app/code/{local → community}/Boxalino/CemSearch/Block/Abstract.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Block/Autocomplete.php
RENAMED
|
@@ -32,15 +32,14 @@ require_once "Mage/CatalogSearch/Block/Autocomplete.php";
|
|
| 32 |
|
| 33 |
class Boxalino_CemSearch_Block_Autocomplete extends Mage_CatalogSearch_Block_Autocomplete
|
| 34 |
{
|
| 35 |
-
protected $_suggestData =
|
| 36 |
-
protected $_suggestDataProducts =
|
| 37 |
protected $_order = array();
|
| 38 |
protected $_first = null;
|
| 39 |
|
| 40 |
protected function _toHtml()
|
| 41 |
{
|
| 42 |
-
|
| 43 |
-
if (Mage::getStoreConfig('Boxalino_General/general/enabled') == '0') {
|
| 44 |
return null;
|
| 45 |
}
|
| 46 |
|
|
@@ -118,11 +117,11 @@ class Boxalino_CemSearch_Block_Autocomplete extends Mage_CatalogSearch_Block_Aut
|
|
| 118 |
$product = Mage::getModel('catalog/product')->load($prod['id']);
|
| 119 |
if ($prod['hash'] == $this->_first || empty($this->_first)) {
|
| 120 |
$html .= '<li data-word="' . $prod['hash'] . '" class="product-autocomplete" title="' . $this->escapeHtml($product->getName()) . '">';
|
| 121 |
-
} else{
|
| 122 |
$html .= '<li style="display:none" data-word="' . $prod['hash'] . '" class="product-autocomplete" title="' . $this->escapeHtml($product->getName()) . '">';
|
| 123 |
}
|
| 124 |
$html .= '<a href="' . $product->getProductUrl() . '" >';
|
| 125 |
-
$html .= '<div class="product-image"><img src="' . $product->getThumbnailUrl() . '" alt="' . $product->getName() . '"
|
| 126 |
$html .= '<div class="product-title"><span>' . $product->getName() . '</span></div>';
|
| 127 |
$html .= '</a>';
|
| 128 |
$html .= '</li>';
|
|
@@ -136,17 +135,15 @@ class Boxalino_CemSearch_Block_Autocomplete extends Mage_CatalogSearch_Block_Aut
|
|
| 136 |
$html .= '</ul>';
|
| 137 |
|
| 138 |
return $html;
|
| 139 |
-
|
| 140 |
}
|
| 141 |
|
| 142 |
-
|
| 143 |
{
|
| 144 |
-
|
| 145 |
$html = '';
|
| 146 |
|
| 147 |
if ($product['hash'] == $this->_first || empty($this->_first)) {
|
| 148 |
$html .= '<li style="display:block" data-word="' . $product['hash'] . '" class="product-autocomplete" title="' . $this->escapeHtml($product['title']) . '">';
|
| 149 |
-
} else{
|
| 150 |
$html .= '<li style="display:none" data-word="' . $product['hash'] . '" class="product-autocomplete" title="' . $this->escapeHtml($product['title']) . '">';
|
| 151 |
}
|
| 152 |
|
|
@@ -155,10 +152,10 @@ class Boxalino_CemSearch_Block_Autocomplete extends Mage_CatalogSearch_Block_Aut
|
|
| 155 |
unset($product['hash']);
|
| 156 |
unset($product[Mage::getStoreConfig('Boxalino_General/search/entity_id')]);
|
| 157 |
|
| 158 |
-
foreach($this->_order as $f) {
|
| 159 |
-
if ($f == 'image') {
|
| 160 |
-
$html .= '<div class="product-' . $f . '"><img src="' . $product[$f] . '" alt="' . $product['title'] . '" style="max-height:75px; max-width:75px;"
|
| 161 |
-
} elseif (isset($product[$f])) {
|
| 162 |
$html .= '<div class="product-' . $f . '"><span>' . $product[$f] . '</span></div>';
|
| 163 |
}
|
| 164 |
}
|
|
@@ -167,8 +164,6 @@ class Boxalino_CemSearch_Block_Autocomplete extends Mage_CatalogSearch_Block_Aut
|
|
| 167 |
$html .= '</li>';
|
| 168 |
|
| 169 |
return $html;
|
| 170 |
-
|
| 171 |
-
|
| 172 |
}
|
| 173 |
|
| 174 |
public function getSuggestData()
|
|
@@ -195,11 +190,11 @@ class Boxalino_CemSearch_Block_Autocomplete extends Mage_CatalogSearch_Block_Aut
|
|
| 195 |
if ($query) {
|
| 196 |
if ($htmlConfig['enabled'] == '1') {
|
| 197 |
$fields = array($generalConfig['entity_id'], 'title', 'score');
|
| 198 |
-
} else{
|
| 199 |
$fields = array($generalConfig['entity_id']);
|
| 200 |
$map = array($generalConfig['entity_id'] => $generalConfig['entity_id']);
|
| 201 |
$fi = explode(',', $htmlConfig['items']);
|
| 202 |
-
foreach($fi as $f) {
|
| 203 |
list($attribute, $fieldname) = explode(':', $f);
|
| 204 |
$fields[] = $fieldname;
|
| 205 |
$map[$fieldname] = $attribute;
|
|
@@ -238,15 +233,13 @@ class Boxalino_CemSearch_Block_Autocomplete extends Mage_CatalogSearch_Block_Aut
|
|
| 238 |
}
|
| 239 |
|
| 240 |
$this->_suggestData = $data;
|
|
|
|
| 241 |
if ($htmlConfig['enabled'] == '1') {
|
| 242 |
-
$this->_suggestDataProducts = $p13n->getAutocompleteProducts($
|
| 243 |
} else {
|
| 244 |
-
$this->_suggestDataProducts = $p13n->getAutocompleteProducts($
|
| 245 |
}
|
| 246 |
}
|
| 247 |
return $this->_suggestData;
|
| 248 |
}
|
| 249 |
-
/*
|
| 250 |
-
*
|
| 251 |
-
*/
|
| 252 |
}
|
| 32 |
|
| 33 |
class Boxalino_CemSearch_Block_Autocomplete extends Mage_CatalogSearch_Block_Autocomplete
|
| 34 |
{
|
| 35 |
+
protected $_suggestData = array();
|
| 36 |
+
protected $_suggestDataProducts = array();
|
| 37 |
protected $_order = array();
|
| 38 |
protected $_first = null;
|
| 39 |
|
| 40 |
protected function _toHtml()
|
| 41 |
{
|
| 42 |
+
if (!Mage::getStoreConfig('Boxalino_General/general/enabled')) {
|
|
|
|
| 43 |
return null;
|
| 44 |
}
|
| 45 |
|
| 117 |
$product = Mage::getModel('catalog/product')->load($prod['id']);
|
| 118 |
if ($prod['hash'] == $this->_first || empty($this->_first)) {
|
| 119 |
$html .= '<li data-word="' . $prod['hash'] . '" class="product-autocomplete" title="' . $this->escapeHtml($product->getName()) . '">';
|
| 120 |
+
} else {
|
| 121 |
$html .= '<li style="display:none" data-word="' . $prod['hash'] . '" class="product-autocomplete" title="' . $this->escapeHtml($product->getName()) . '">';
|
| 122 |
}
|
| 123 |
$html .= '<a href="' . $product->getProductUrl() . '" >';
|
| 124 |
+
$html .= '<div class="product-image"><img src="' . $product->getThumbnailUrl() . '" alt="' . $product->getName() . '"></div>';
|
| 125 |
$html .= '<div class="product-title"><span>' . $product->getName() . '</span></div>';
|
| 126 |
$html .= '</a>';
|
| 127 |
$html .= '</li>';
|
| 135 |
$html .= '</ul>';
|
| 136 |
|
| 137 |
return $html;
|
|
|
|
| 138 |
}
|
| 139 |
|
| 140 |
+
protected function prepareProductView($product)
|
| 141 |
{
|
|
|
|
| 142 |
$html = '';
|
| 143 |
|
| 144 |
if ($product['hash'] == $this->_first || empty($this->_first)) {
|
| 145 |
$html .= '<li style="display:block" data-word="' . $product['hash'] . '" class="product-autocomplete" title="' . $this->escapeHtml($product['title']) . '">';
|
| 146 |
+
} else {
|
| 147 |
$html .= '<li style="display:none" data-word="' . $product['hash'] . '" class="product-autocomplete" title="' . $this->escapeHtml($product['title']) . '">';
|
| 148 |
}
|
| 149 |
|
| 152 |
unset($product['hash']);
|
| 153 |
unset($product[Mage::getStoreConfig('Boxalino_General/search/entity_id')]);
|
| 154 |
|
| 155 |
+
foreach ($this->_order as $f) {
|
| 156 |
+
if ($f == 'image' && isset($product[$f]) && !empty($product[$f])) {
|
| 157 |
+
$html .= '<div class="product-' . $f . '"><img src="' . $product[$f] . '" alt="' . $product['title'] . '" style="max-height:75px; max-width:75px;"></div>';
|
| 158 |
+
} elseif (isset($product[$f]) && !empty($product[$f])) {
|
| 159 |
$html .= '<div class="product-' . $f . '"><span>' . $product[$f] . '</span></div>';
|
| 160 |
}
|
| 161 |
}
|
| 164 |
$html .= '</li>';
|
| 165 |
|
| 166 |
return $html;
|
|
|
|
|
|
|
| 167 |
}
|
| 168 |
|
| 169 |
public function getSuggestData()
|
| 190 |
if ($query) {
|
| 191 |
if ($htmlConfig['enabled'] == '1') {
|
| 192 |
$fields = array($generalConfig['entity_id'], 'title', 'score');
|
| 193 |
+
} else {
|
| 194 |
$fields = array($generalConfig['entity_id']);
|
| 195 |
$map = array($generalConfig['entity_id'] => $generalConfig['entity_id']);
|
| 196 |
$fi = explode(',', $htmlConfig['items']);
|
| 197 |
+
foreach ($fi as $f) {
|
| 198 |
list($attribute, $fieldname) = explode(':', $f);
|
| 199 |
$fields[] = $fieldname;
|
| 200 |
$map[$fieldname] = $attribute;
|
| 233 |
}
|
| 234 |
|
| 235 |
$this->_suggestData = $data;
|
| 236 |
+
$facets = array_key_exists(0, $data) && is_array($data[0]['facets']) ? $data[0]['facets'] : array();
|
| 237 |
if ($htmlConfig['enabled'] == '1') {
|
| 238 |
+
$this->_suggestDataProducts = $p13n->getAutocompleteProducts($facets);
|
| 239 |
} else {
|
| 240 |
+
$this->_suggestDataProducts = $p13n->getAutocompleteProducts($facets, $map, $fields);
|
| 241 |
}
|
| 242 |
}
|
| 243 |
return $this->_suggestData;
|
| 244 |
}
|
|
|
|
|
|
|
|
|
|
| 245 |
}
|
app/code/{local → community}/Boxalino/CemSearch/Block/Cart/Crosssell.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Block/Facets.php
RENAMED
|
@@ -56,18 +56,20 @@ class Boxalino_CemSearch_Block_Facets extends Mage_Core_Block_Template
|
|
| 56 |
public function getTopFilters()
|
| 57 |
{
|
| 58 |
$filters = array();
|
| 59 |
-
$
|
| 60 |
-
$
|
|
|
|
| 61 |
$i = 0;
|
| 62 |
$allFilters = $this->_allFilters;
|
| 63 |
foreach ($topFilters as $filter) {
|
|
|
|
| 64 |
if (isset($allFilters[$filter])) {
|
| 65 |
foreach ($allFilters[$filter] as $key => $values) {
|
| 66 |
-
$yes = strtolower($values['stringValue']) == 'yes'
|
| 67 |
if ($values['stringValue'] == 1 || $yes) {
|
| 68 |
$filters[$filter] = $allFilters[$filter][$key];
|
| 69 |
$filters[$filter]['title'] = $titles[$i];
|
| 70 |
-
$filters[$filter]['url'] = $this->
|
| 71 |
$filters[$filter]['selected'] = $allFilters[$filter][$key]['selected'];
|
| 72 |
}
|
| 73 |
}
|
|
@@ -77,34 +79,6 @@ class Boxalino_CemSearch_Block_Facets extends Mage_Core_Block_Template
|
|
| 77 |
return $filters;
|
| 78 |
}
|
| 79 |
|
| 80 |
-
private function getTopFilterUrl($name, $value, $selected)
|
| 81 |
-
{
|
| 82 |
-
$multioption = Mage::getStoreConfig('Boxalino_General/filter/top_filters_multioption');
|
| 83 |
-
$currentUrl = urldecode(Mage::helper('core/url')->getCurrentUrl());
|
| 84 |
-
if (strpos($currentUrl, '?') === FALSE) {
|
| 85 |
-
$currentUrl .= '?';
|
| 86 |
-
}
|
| 87 |
-
if ($multioption == true) {
|
| 88 |
-
if ($selected === false) {
|
| 89 |
-
$url = $currentUrl . '&bx_' . $name . '[0]' . '=' . $value;
|
| 90 |
-
} else {
|
| 91 |
-
$url = str_replace('&bx_' . $name . '[0]' . '=' . $value, '', $currentUrl);
|
| 92 |
-
}
|
| 93 |
-
} else {
|
| 94 |
-
$topFilters = explode(',', Mage::getStoreConfig('Boxalino_General/filter/top_filters'));
|
| 95 |
-
if ($selected === false) {
|
| 96 |
-
foreach ($topFilters as $filter) {
|
| 97 |
-
$currentUrl = str_replace('&bx_' . $filter . '[0]' . '=' . $value, '', $currentUrl);
|
| 98 |
-
}
|
| 99 |
-
$url = $currentUrl . '&bx_' . $name . '[0]' . '=' . urlencode($value);
|
| 100 |
-
} else {
|
| 101 |
-
$url = str_replace('&bx_' . $name . '[0]' . '=' . urlencode($value), '', $currentUrl);
|
| 102 |
-
}
|
| 103 |
-
}
|
| 104 |
-
|
| 105 |
-
return $url;
|
| 106 |
-
}
|
| 107 |
-
|
| 108 |
public function getLeftFilters()
|
| 109 |
{
|
| 110 |
$filters = array();
|
|
@@ -118,10 +92,10 @@ class Boxalino_CemSearch_Block_Facets extends Mage_Core_Block_Template
|
|
| 118 |
$filters[$filter[0]] = array('title' => $leftFiltersTitles[$i], 'values' => array());
|
| 119 |
if (isset($allFilters[$filter[0]])) {
|
| 120 |
if ($filter[1] == 'hierarchical') {
|
| 121 |
-
$filters[$filter[0]]['values'] = $this->
|
| 122 |
} else {
|
| 123 |
foreach ($allFilters[$filter[0]] as $key => $values) {
|
| 124 |
-
$filters[$filter[0]]['values'][] = $this->
|
| 125 |
$position++;
|
| 126 |
}
|
| 127 |
}
|
|
@@ -134,141 +108,123 @@ class Boxalino_CemSearch_Block_Facets extends Mage_Core_Block_Template
|
|
| 134 |
return $filters;
|
| 135 |
}
|
| 136 |
|
| 137 |
-
|
| 138 |
{
|
| 139 |
-
$
|
| 140 |
-
$
|
| 141 |
-
|
| 142 |
-
|
| 143 |
-
|
| 144 |
-
|
| 145 |
-
} else {
|
| 146 |
-
$highestChild = array();
|
| 147 |
-
$level = $parents['display']['level'];
|
| 148 |
-
$parentId = 0;
|
| 149 |
-
if (isset($parents['values'][$level])) {
|
| 150 |
-
$highestLevelCount = count($parents['values'][$level]);
|
| 151 |
-
foreach ($parents['values'][$level] as $value) {
|
| 152 |
-
$parentId = $parents['display']['parentId'];
|
| 153 |
-
if ($value['parentId'] == $parentId) {
|
| 154 |
-
if ($highestLevelCount == 1) {
|
| 155 |
-
$value['selected'] = true;
|
| 156 |
-
}
|
| 157 |
-
$value['level'] = $level;
|
| 158 |
-
$highestChild[] = $value;
|
| 159 |
-
}
|
| 160 |
-
}
|
| 161 |
-
} else {
|
| 162 |
-
$level = $level - 1;
|
| 163 |
-
foreach ($parents['values'][$level] as $value) {
|
| 164 |
-
if ($value['selected'] == true) {
|
| 165 |
-
$parentId = $value['parentId'];
|
| 166 |
-
$value['level'] = $level;
|
| 167 |
-
$highestChild[] = $value;
|
| 168 |
-
}
|
| 169 |
-
}
|
| 170 |
-
|
| 171 |
-
foreach ($parents['values'][$level] as $value) {
|
| 172 |
-
if ($parentId == $value['parentId'] && $value['selected'] == false) {
|
| 173 |
-
$value['level'] = $level;
|
| 174 |
-
$highestChild[] = $value;
|
| 175 |
-
}
|
| 176 |
}
|
| 177 |
}
|
| 178 |
-
|
| 179 |
-
for ($i = $level - 1; $i >= 2; $i--) {
|
| 180 |
-
$parents['values'][$i][$parentId]['selected'] = true;
|
| 181 |
-
$parents['values'][$i][$parentId]['level'] = $i;
|
| 182 |
-
$results[] = $parents['values'][$i][$parentId];
|
| 183 |
-
$parentId = $parents['values'][$i][$parentId]['parentId'];
|
| 184 |
-
}
|
| 185 |
-
$results = array_reverse($results);
|
| 186 |
-
|
| 187 |
-
|
| 188 |
}
|
| 189 |
-
|
| 190 |
-
$this->setMaxLevel($filter, $level);
|
| 191 |
-
return $results;
|
| 192 |
}
|
| 193 |
|
| 194 |
-
|
| 195 |
{
|
| 196 |
-
$
|
| 197 |
-
$
|
| 198 |
-
$
|
|
|
|
| 199 |
|
| 200 |
-
|
| 201 |
-
|
| 202 |
-
|
| 203 |
-
|
| 204 |
-
if ($parentLevel < count($values[$j]['hierarchy'])) {
|
| 205 |
-
$level = count($values[$j]['hierarchy']);
|
| 206 |
-
$childId = $values[$j]['hierarchyId'];
|
| 207 |
-
$parents[$level][$childId] = array(
|
| 208 |
-
'stringValue' => end($values[$j]['hierarchy']),
|
| 209 |
-
'hitCount' => $values[$j]['hitCount'],
|
| 210 |
-
'parentId' => $values[$i]['hierarchyId'],
|
| 211 |
-
'url' => $this->getFilterUrl($filter, $values[$j]['stringValue'], $values[$j]['selected'], false, 0),
|
| 212 |
-
'selected' => $values[$j]['selected']
|
| 213 |
-
);
|
| 214 |
-
if ($values[$j]['selected'] === true) {
|
| 215 |
-
$whatToDisplay = array('level' => $level + 1, 'parentId' => $values[$j]['hierarchyId']);
|
| 216 |
-
}
|
| 217 |
-
continue;
|
| 218 |
-
}
|
| 219 |
-
if (count($values[$i]['hierarchy']) == count($values[$j]['hierarchy'])) {
|
| 220 |
-
break;
|
| 221 |
-
}
|
| 222 |
-
}
|
| 223 |
}
|
| 224 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 225 |
}
|
| 226 |
|
| 227 |
-
|
| 228 |
{
|
| 229 |
$multioption = Mage::getStoreConfig('Boxalino_General/filter/left_filters_multioption');
|
| 230 |
-
$currentUrl =
|
| 231 |
-
if (strpos($currentUrl, '?') === FALSE) {
|
| 232 |
-
$currentUrl .= '?';
|
| 233 |
-
}
|
| 234 |
if (!$ranged) {
|
| 235 |
if ($multioption == true && $hierarchical == null) {
|
| 236 |
if ($selected === false) {
|
| 237 |
-
$url = $currentUrl
|
| 238 |
} else {
|
| 239 |
-
$url =
|
| 240 |
}
|
| 241 |
} else {
|
| 242 |
$position = 0;
|
| 243 |
if ($selected === false) {
|
| 244 |
-
if (
|
| 245 |
foreach ($_REQUEST['bx_' . $name] as $val) {
|
| 246 |
-
$currentUrl =
|
| 247 |
}
|
| 248 |
}
|
| 249 |
-
$url = $currentUrl
|
| 250 |
} else {
|
| 251 |
-
$url =
|
| 252 |
}
|
| 253 |
}
|
| 254 |
} else {
|
| 255 |
if ($selected === false) {
|
| 256 |
-
$url = $currentUrl
|
| 257 |
} else {
|
| 258 |
-
$url =
|
| 259 |
}
|
| 260 |
}
|
| 261 |
return $url;
|
| 262 |
}
|
| 263 |
|
| 264 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 265 |
{
|
| 266 |
$data = array();
|
| 267 |
if ($option == 'ranged') {
|
| 268 |
$data['stringValue'] = array('min' => $values['rangeFromInclusive'], 'max' => $values['rangeToExclusive']);
|
| 269 |
-
$data['url'] = $this->
|
| 270 |
} else {
|
| 271 |
-
$data['url'] = $this->
|
| 272 |
$data['stringValue'] = $values['stringValue'];
|
| 273 |
}
|
| 274 |
$data['hitCount'] = $values['hitCount'];
|
|
@@ -276,44 +232,92 @@ class Boxalino_CemSearch_Block_Facets extends Mage_Core_Block_Template
|
|
| 276 |
return $data;
|
| 277 |
}
|
| 278 |
|
| 279 |
-
|
| 280 |
{
|
| 281 |
-
|
| 282 |
-
|
| 283 |
-
|
| 284 |
-
if ($key !== false) {
|
| 285 |
-
$filterKey = 'bx_' . $filter . '[' . $key . ']';
|
| 286 |
-
|
| 287 |
-
// remove filter from url
|
| 288 |
-
$url = str_replace($filterKey . '=' . $vals[$key], '', $url);
|
| 289 |
-
$url = str_replace(urlencode($filterKey) . '=' . urlencode($vals[$key]), '', $url);
|
| 290 |
|
| 291 |
-
|
| 292 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 293 |
}
|
| 294 |
}
|
| 295 |
}
|
| 296 |
-
return $
|
| 297 |
}
|
| 298 |
|
| 299 |
-
|
| 300 |
{
|
| 301 |
-
$
|
| 302 |
-
$
|
| 303 |
-
|
| 304 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 305 |
|
| 306 |
-
|
| 307 |
-
|
| 308 |
-
|
| 309 |
-
|
|
|
|
|
|
|
|
|
|
| 310 |
|
| 311 |
-
|
| 312 |
-
|
| 313 |
-
|
| 314 |
-
|
| 315 |
-
|
|
|
|
|
|
|
| 316 |
|
| 317 |
-
|
|
|
|
|
|
|
|
|
|
| 318 |
}
|
| 319 |
}
|
| 56 |
public function getTopFilters()
|
| 57 |
{
|
| 58 |
$filters = array();
|
| 59 |
+
$filterOptions = Mage::getStoreConfig('Boxalino_General/filter');
|
| 60 |
+
$topFilters = explode(',', $filterOptions['top_filters']);
|
| 61 |
+
$titles = explode(',', $filterOptions['top_filters_title']);
|
| 62 |
$i = 0;
|
| 63 |
$allFilters = $this->_allFilters;
|
| 64 |
foreach ($topFilters as $filter) {
|
| 65 |
+
$filter = trim($filter);
|
| 66 |
if (isset($allFilters[$filter])) {
|
| 67 |
foreach ($allFilters[$filter] as $key => $values) {
|
| 68 |
+
$yes = (strtolower($values['stringValue']) == 'yes');
|
| 69 |
if ($values['stringValue'] == 1 || $yes) {
|
| 70 |
$filters[$filter] = $allFilters[$filter][$key];
|
| 71 |
$filters[$filter]['title'] = $titles[$i];
|
| 72 |
+
$filters[$filter]['url'] = $this->_getTopFilterUrl($filter, $yes?$values['stringValue']:'1', $allFilters[$filter][$key]['selected']);
|
| 73 |
$filters[$filter]['selected'] = $allFilters[$filter][$key]['selected'];
|
| 74 |
}
|
| 75 |
}
|
| 79 |
return $filters;
|
| 80 |
}
|
| 81 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 82 |
public function getLeftFilters()
|
| 83 |
{
|
| 84 |
$filters = array();
|
| 92 |
$filters[$filter[0]] = array('title' => $leftFiltersTitles[$i], 'values' => array());
|
| 93 |
if (isset($allFilters[$filter[0]])) {
|
| 94 |
if ($filter[1] == 'hierarchical') {
|
| 95 |
+
$filters[$filter[0]]['values'] = $this->_returnTree($filter[0]);
|
| 96 |
} else {
|
| 97 |
foreach ($allFilters[$filter[0]] as $key => $values) {
|
| 98 |
+
$filters[$filter[0]]['values'][] = $this->_returnImportantValues($values, $filter[1], $filter[0], $position);
|
| 99 |
$position++;
|
| 100 |
}
|
| 101 |
}
|
| 108 |
return $filters;
|
| 109 |
}
|
| 110 |
|
| 111 |
+
public function removeFilterFromUrl($url, $filter, $vals)
|
| 112 |
{
|
| 113 |
+
$key = 'bx_' . $filter;
|
| 114 |
+
if (array_key_exists($key, $_REQUEST) && is_array($_REQUEST[$key])) {
|
| 115 |
+
foreach ($vals as $val) {
|
| 116 |
+
$position = array_search($val, $_REQUEST[$key]);
|
| 117 |
+
if ($position !== false) {
|
| 118 |
+
$url = $this->_removeFilterFromUrl($url, $filter, $val, $position);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 119 |
}
|
| 120 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 121 |
}
|
| 122 |
+
return $url;
|
|
|
|
|
|
|
| 123 |
}
|
| 124 |
|
| 125 |
+
public function getMinMaxValues($values)
|
| 126 |
{
|
| 127 |
+
$first = $values[0];
|
| 128 |
+
$last = end($values);
|
| 129 |
+
return array('min' => round(floor($first['stringValue']['min']), -2), 'max' => round(ceil($last['stringValue']['max'])), 1);
|
| 130 |
+
}
|
| 131 |
|
| 132 |
+
public function getMaxLevel($filter)
|
| 133 |
+
{
|
| 134 |
+
if (isset($this->maxLevel[$filter])) {
|
| 135 |
+
return $this->maxLevel[$filter];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 136 |
}
|
| 137 |
+
|
| 138 |
+
return 0;
|
| 139 |
+
}
|
| 140 |
+
|
| 141 |
+
protected function _addFilterToUrl($url, $filter, $value, $position = 0)
|
| 142 |
+
{
|
| 143 |
+
return $url . (strpos($url, '?') === FALSE ? '?' : '&') .
|
| 144 |
+
'bx_' . $filter . '[' . $position . ']=' . urlencode($value);
|
| 145 |
}
|
| 146 |
|
| 147 |
+
protected function _getFilterUrl($name, $value, $selected, $ranged = false, $position = 0, $hierarchical = null)
|
| 148 |
{
|
| 149 |
$multioption = Mage::getStoreConfig('Boxalino_General/filter/left_filters_multioption');
|
| 150 |
+
$currentUrl = Mage::helper('core/url')->getCurrentUrl();
|
|
|
|
|
|
|
|
|
|
| 151 |
if (!$ranged) {
|
| 152 |
if ($multioption == true && $hierarchical == null) {
|
| 153 |
if ($selected === false) {
|
| 154 |
+
$url = $this->_addFilterToUrl($currentUrl, $name, $value, $position);
|
| 155 |
} else {
|
| 156 |
+
$url = $this->_removeFilterFromUrl($currentUrl, $name, $value, $position);
|
| 157 |
}
|
| 158 |
} else {
|
| 159 |
$position = 0;
|
| 160 |
if ($selected === false) {
|
| 161 |
+
if (array_key_exists('bx_' . $name, $_REQUEST) && is_array($_REQUEST['bx_' . $name])) {
|
| 162 |
foreach ($_REQUEST['bx_' . $name] as $val) {
|
| 163 |
+
$currentUrl = $this->_removeFilterFromUrl($currentUrl, $name, $val, $position);
|
| 164 |
}
|
| 165 |
}
|
| 166 |
+
$url = $this->_addFilterToUrl($currentUrl, $name, $value, $position);
|
| 167 |
} else {
|
| 168 |
+
$url = $this->_removeFilterFromUrl($currentUrl, $name, $value, $position);
|
| 169 |
}
|
| 170 |
}
|
| 171 |
} else {
|
| 172 |
if ($selected === false) {
|
| 173 |
+
$url = $this->_addFilterToUrl($currentUrl, $name, $value['from'] . '-' . $value['to'], $position);
|
| 174 |
} else {
|
| 175 |
+
$url = $this->_removeFilterFromUrl($currentUrl, $name, $value['from'] . '-' . $value['to'], $position);
|
| 176 |
}
|
| 177 |
}
|
| 178 |
return $url;
|
| 179 |
}
|
| 180 |
|
| 181 |
+
protected function _getTopFilterUrl($name, $value, $selected)
|
| 182 |
+
{
|
| 183 |
+
$filterOptions = Mage::getStoreConfig('Boxalino_General/filter');
|
| 184 |
+
$multioption = $filterOptions['top_filters_multioption'];
|
| 185 |
+
$currentUrl = Mage::helper('core/url')->getCurrentUrl();
|
| 186 |
+
if ($multioption == true) {
|
| 187 |
+
if ($selected === false) {
|
| 188 |
+
$url = $this->_addFilterToUrl($currentUrl, $name, $value);
|
| 189 |
+
} else {
|
| 190 |
+
$url = $this->_removeFilterFromUrl($currentUrl, $name, $value);
|
| 191 |
+
}
|
| 192 |
+
} else {
|
| 193 |
+
if ($selected === false) {
|
| 194 |
+
$topFilters = explode(',', $filterOptions['top_filters']);
|
| 195 |
+
foreach ($topFilters as $filter) {
|
| 196 |
+
$filter = trim($filter);
|
| 197 |
+
$currentUrl = $this->_removeFilterFromUrl($currentUrl, $filter, $value);
|
| 198 |
+
}
|
| 199 |
+
$url = $this->_addFilterToUrl($currentUrl, $name, $value);
|
| 200 |
+
} else {
|
| 201 |
+
$url = $this->_removeFilterFromUrl($currentUrl, $name, $value);
|
| 202 |
+
}
|
| 203 |
+
}
|
| 204 |
+
|
| 205 |
+
return $url;
|
| 206 |
+
}
|
| 207 |
+
|
| 208 |
+
protected function _removeFilterFromUrl($url, $filter, $value, $position = 0)
|
| 209 |
+
{
|
| 210 |
+
$filter = urlencode($filter);
|
| 211 |
+
$value = urlencode($value);
|
| 212 |
+
return str_replace(
|
| 213 |
+
array(
|
| 214 |
+
'&bx_' . $filter . '[' . $position . ']=' . $value,
|
| 215 |
+
'?bx_' . $filter . '[' . $position . ']=' . $value,
|
| 216 |
+
), '', $url
|
| 217 |
+
);
|
| 218 |
+
}
|
| 219 |
+
|
| 220 |
+
protected function _returnImportantValues($values, $option, $filter, $position)
|
| 221 |
{
|
| 222 |
$data = array();
|
| 223 |
if ($option == 'ranged') {
|
| 224 |
$data['stringValue'] = array('min' => $values['rangeFromInclusive'], 'max' => $values['rangeToExclusive']);
|
| 225 |
+
$data['url'] = $this->_getFilterUrl($filter, array('from' => $values['rangeFromInclusive'], 'to' => $values['rangeToExclusive']), $values['selected'], true, $position);
|
| 226 |
} else {
|
| 227 |
+
$data['url'] = $this->_getFilterUrl($filter, $values['stringValue'], $values['selected'], false, $position);
|
| 228 |
$data['stringValue'] = $values['stringValue'];
|
| 229 |
}
|
| 230 |
$data['hitCount'] = $values['hitCount'];
|
| 232 |
return $data;
|
| 233 |
}
|
| 234 |
|
| 235 |
+
protected function _returnHierarchy($filter)
|
| 236 |
{
|
| 237 |
+
$whatToDisplay = array('level' => 2, 'parentId' => '');
|
| 238 |
+
$parents = array();
|
| 239 |
+
$values = $this->_allFilters[$filter];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 240 |
|
| 241 |
+
$amount = count($values);
|
| 242 |
+
for ($i = 0; $i < $amount; $i++) {
|
| 243 |
+
$parentLevel = count($values[$i]['hierarchy']);
|
| 244 |
+
for ($j = $i + 1; $j < $amount; $j++) {
|
| 245 |
+
if ($parentLevel < count($values[$j]['hierarchy'])) {
|
| 246 |
+
$level = count($values[$j]['hierarchy']);
|
| 247 |
+
$childId = $values[$j]['hierarchyId'];
|
| 248 |
+
$parents[$level][$childId] = array(
|
| 249 |
+
'stringValue' => end($values[$j]['hierarchy']),
|
| 250 |
+
'hitCount' => $values[$j]['hitCount'],
|
| 251 |
+
'parentId' => $values[$i]['hierarchyId'],
|
| 252 |
+
'url' => $this->_getFilterUrl($filter, $values[$j]['stringValue'], $values[$j]['selected'], false, 0),
|
| 253 |
+
'selected' => $values[$j]['selected']
|
| 254 |
+
);
|
| 255 |
+
if ($values[$j]['selected'] === true) {
|
| 256 |
+
$whatToDisplay = array('level' => $level + 1, 'parentId' => $values[$j]['hierarchyId']);
|
| 257 |
+
}
|
| 258 |
+
continue;
|
| 259 |
+
}
|
| 260 |
+
if (count($values[$i]['hierarchy']) == count($values[$j]['hierarchy'])) {
|
| 261 |
+
break;
|
| 262 |
}
|
| 263 |
}
|
| 264 |
}
|
| 265 |
+
return array('values' => $parents, 'display' => $whatToDisplay);
|
| 266 |
}
|
| 267 |
|
| 268 |
+
protected function _returnTree($filter)
|
| 269 |
{
|
| 270 |
+
$results = array();
|
| 271 |
+
$parents = $this->_returnHierarchy($filter);
|
| 272 |
+
$level = 0;
|
| 273 |
+
if ($parents['display']['level'] == 2) {
|
| 274 |
+
$results = $parents['values'][$parents['display']['level']];
|
| 275 |
+
return $results;
|
| 276 |
+
} else {
|
| 277 |
+
$highestChild = array();
|
| 278 |
+
$level = $parents['display']['level'];
|
| 279 |
+
$parentId = 0;
|
| 280 |
+
if (isset($parents['values'][$level])) {
|
| 281 |
+
$highestLevelCount = count($parents['values'][$level]);
|
| 282 |
+
foreach ($parents['values'][$level] as $value) {
|
| 283 |
+
$parentId = $parents['display']['parentId'];
|
| 284 |
+
if ($value['parentId'] == $parentId) {
|
| 285 |
+
if ($highestLevelCount == 1) {
|
| 286 |
+
$value['selected'] = true;
|
| 287 |
+
}
|
| 288 |
+
$value['level'] = $level;
|
| 289 |
+
$highestChild[] = $value;
|
| 290 |
+
}
|
| 291 |
+
}
|
| 292 |
+
} else {
|
| 293 |
+
$level = $level - 1;
|
| 294 |
+
foreach ($parents['values'][$level] as $value) {
|
| 295 |
+
if ($value['selected'] == true) {
|
| 296 |
+
$parentId = $value['parentId'];
|
| 297 |
+
$value['level'] = $level;
|
| 298 |
+
$highestChild[] = $value;
|
| 299 |
+
}
|
| 300 |
+
}
|
| 301 |
|
| 302 |
+
foreach ($parents['values'][$level] as $value) {
|
| 303 |
+
if ($parentId == $value['parentId'] && $value['selected'] == false) {
|
| 304 |
+
$value['level'] = $level;
|
| 305 |
+
$highestChild[] = $value;
|
| 306 |
+
}
|
| 307 |
+
}
|
| 308 |
+
}
|
| 309 |
|
| 310 |
+
for ($i = $level - 1; $i >= 2; $i--) {
|
| 311 |
+
$parents['values'][$i][$parentId]['selected'] = true;
|
| 312 |
+
$parents['values'][$i][$parentId]['level'] = $i;
|
| 313 |
+
$results[] = $parents['values'][$i][$parentId];
|
| 314 |
+
$parentId = $parents['values'][$i][$parentId]['parentId'];
|
| 315 |
+
}
|
| 316 |
+
$results = array_reverse($results);
|
| 317 |
|
| 318 |
+
}
|
| 319 |
+
$results = array_merge($results, $highestChild);
|
| 320 |
+
$this->maxLevel[$filter] = $level;
|
| 321 |
+
return $results;
|
| 322 |
}
|
| 323 |
}
|
app/code/{local → community}/Boxalino/CemSearch/Block/Product/List.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Block/Product/List/Recommendation.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Block/Product/List/Related.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Block/Product/List/Upsell.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Block/Script.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/CatalogSearch/Helper/Data.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Helper/Data.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Helper/P13n/Adapter.php
RENAMED
|
@@ -386,7 +386,7 @@ class Boxalino_CemSearch_Helper_P13n_Adapter
|
|
| 386 |
$filter = new \com\boxalino\p13n\api\thrift\Filter();
|
| 387 |
$filter->fieldName = 'products_visibility';
|
| 388 |
$filter->negative = true;
|
| 389 |
-
$filter->stringValues = array(Mage_Catalog_Model_Product_Visibility::VISIBILITY_NOT_VISIBLE);
|
| 390 |
return $filter;
|
| 391 |
}
|
| 392 |
|
|
@@ -428,6 +428,10 @@ class Boxalino_CemSearch_Helper_P13n_Adapter
|
|
| 428 |
|
| 429 |
public function getAutocompleteProducts($facets, $map = null, $fields = null)
|
| 430 |
{
|
|
|
|
|
|
|
|
|
|
|
|
|
| 431 |
$fs = array();
|
| 432 |
foreach($facets as $f) {
|
| 433 |
$fs[] = $f['id'];
|
| 386 |
$filter = new \com\boxalino\p13n\api\thrift\Filter();
|
| 387 |
$filter->fieldName = 'products_visibility';
|
| 388 |
$filter->negative = true;
|
| 389 |
+
$filter->stringValues = array(Mage_Catalog_Model_Product_Visibility::VISIBILITY_NOT_VISIBLE, Mage_Catalog_Model_Product_Visibility::VISIBILITY_IN_CATALOG);
|
| 390 |
return $filter;
|
| 391 |
}
|
| 392 |
|
| 428 |
|
| 429 |
public function getAutocompleteProducts($facets, $map = null, $fields = null)
|
| 430 |
{
|
| 431 |
+
if (!is_array($facets)) {
|
| 432 |
+
$facets = array();
|
| 433 |
+
}
|
| 434 |
+
|
| 435 |
$fs = array();
|
| 436 |
foreach($facets as $f) {
|
| 437 |
$fs[] = $f['id'];
|
app/code/{local → community}/Boxalino/CemSearch/Helper/P13n/Config.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Helper/P13n/Recommendation.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Helper/P13n/Sort.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Lib/AbstractThrift.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Lib/P13nService.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Lib/Types.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Base/TBase.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/ClassLoader/ThriftClassLoader.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Exception/TApplicationException.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Exception/TException.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Exception/TProtocolException.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Exception/TTransportException.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Factory/TBinaryProtocolFactory.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Factory/TCompactProtocolFactory.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Factory/TJSONProtocolFactory.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Factory/TProtocolFactory.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Factory/TStringFuncFactory.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Factory/TTransportFactory.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/HttpP13n.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Protocol/JSON/BaseContext.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Protocol/JSON/ListContext.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Protocol/JSON/LookaheadReader.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Protocol/JSON/PairContext.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Protocol/TBinaryProtocol.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Protocol/TBinaryProtocolAccelerated.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Protocol/TCompactProtocol.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Protocol/TJSONProtocol.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Protocol/TProtocol.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Serializer/TBinarySerializer.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Server/TForkingServer.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Server/TServer.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Server/TServerSocket.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Server/TServerTransport.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Server/TSimpleServer.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/StringFunc/Core.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/StringFunc/Mbstring.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/StringFunc/TStringFunc.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Transport/P13nTCurlClient.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Transport/P13nTHttpClient.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Transport/TBufferedTransport.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Transport/TCurlClient.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Transport/TFramedTransport.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Transport/THttpClient.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Transport/TMemoryBuffer.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Transport/TNullTransport.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Transport/TPhpStream.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Transport/TSocket.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Transport/TSocketPool.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Transport/TTransport.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Type/TMessageType.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Type/TType.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Model/Advanced.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Model/Category.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Model/Logger.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Model/Observer.php
RENAMED
|
@@ -45,7 +45,7 @@ class Boxalino_CemSearch_Model_Observer
|
|
| 45 |
'quantity' => $item->getData('qty_ordered'),
|
| 46 |
'price' => $item->getPrice()
|
| 47 |
);
|
| 48 |
-
$fullPrice
|
| 49 |
}
|
| 50 |
}
|
| 51 |
$script = Mage::helper('Boxalino_CemSearch')->reportPurchase($products, $transactionId, $fullPrice, Mage::app()->getStore()->getCurrentCurrencyCode());
|
| 45 |
'quantity' => $item->getData('qty_ordered'),
|
| 46 |
'price' => $item->getPrice()
|
| 47 |
);
|
| 48 |
+
$fullPrice += $item->getPrice() * $item->getData('qty_ordered');
|
| 49 |
}
|
| 50 |
}
|
| 51 |
$script = Mage::helper('Boxalino_CemSearch')->reportPurchase($products, $transactionId, $fullPrice, Mage::app()->getStore()->getCurrentCurrencyCode());
|
app/code/{local → community}/Boxalino/CemSearch/Model/Resource/Advanced.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Model/Resource/Advanced/Collection.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Model/Resource/Fulltext.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/Model/Session.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/controllers/AdvancedController.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/controllers/AjaxController.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/controllers/IndexController.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/controllers/ResultController.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/etc/adminhtml.xml
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/CemSearch/etc/config.xml
RENAMED
|
@@ -2,7 +2,7 @@
|
|
| 2 |
<config>
|
| 3 |
<modules>
|
| 4 |
<Boxalino_CemSearch>
|
| 5 |
-
<version>
|
| 6 |
</Boxalino_CemSearch>
|
| 7 |
</modules>
|
| 8 |
<frontend>
|
| 2 |
<config>
|
| 3 |
<modules>
|
| 4 |
<Boxalino_CemSearch>
|
| 5 |
+
<version>2.10</version>
|
| 6 |
</Boxalino_CemSearch>
|
| 7 |
</modules>
|
| 8 |
<frontend>
|
app/code/{local → community}/Boxalino/CemSearch/etc/system.xml
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/Exporter/Helper/Data.php
RENAMED
|
@@ -194,16 +194,11 @@ class Boxalino_Exporter_Helper_Data extends Mage_Core_Helper_Data
|
|
| 194 |
return rmdir($dir);
|
| 195 |
}
|
| 196 |
|
| 197 |
-
public function rewrittenProductUrl($productId, $
|
| 198 |
{
|
| 199 |
$coreUrl = Mage::getModel('core/url_rewrite');
|
| 200 |
-
$idPath = sprintf('product/%d', $productId);
|
| 201 |
-
if ($categoryId) {
|
| 202 |
-
$idPath = sprintf('%s/%d', $idPath, $categoryId);
|
| 203 |
-
}
|
| 204 |
$coreUrl->setStoreId($storeId);
|
| 205 |
-
$coreUrl->loadByIdPath($
|
| 206 |
-
|
| 207 |
return $coreUrl->getRequestPath();
|
| 208 |
}
|
| 209 |
|
| 194 |
return rmdir($dir);
|
| 195 |
}
|
| 196 |
|
| 197 |
+
public function rewrittenProductUrl($productId, $storeId)
|
| 198 |
{
|
| 199 |
$coreUrl = Mage::getModel('core/url_rewrite');
|
|
|
|
|
|
|
|
|
|
|
|
|
| 200 |
$coreUrl->setStoreId($storeId);
|
| 201 |
+
$coreUrl->loadByIdPath(sprintf('product/%d', $productId));
|
|
|
|
| 202 |
return $coreUrl->getRequestPath();
|
| 203 |
}
|
| 204 |
|
app/code/{local → community}/Boxalino/Exporter/Model/Delta.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/Exporter/Model/Indexer.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/Exporter/Model/Mysql4/Exporter/Delta.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/Exporter/Model/Mysql4/Exporter/Indexer.php
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/Exporter/Model/Mysql4/Indexer.php
RENAMED
|
@@ -232,8 +232,8 @@ abstract class Boxalino_Exporter_Model_Mysql4_Indexer extends Mage_Core_Model_My
|
|
| 232 |
'special_price',
|
| 233 |
'special_from_date',
|
| 234 |
'special_to_date',
|
| 235 |
-
'visibility',
|
| 236 |
'category_ids',
|
|
|
|
| 237 |
'status'
|
| 238 |
);
|
| 239 |
|
|
@@ -279,7 +279,7 @@ abstract class Boxalino_Exporter_Model_Mysql4_Indexer extends Mage_Core_Model_My
|
|
| 279 |
if (!in_array($field, $this->_customerAttributes)) {
|
| 280 |
Mage::throwException("Customer attribute \"$field\" doesn't exist, please update your additional_customer_attributes setting in the Boxalino Exporter settings!");
|
| 281 |
}
|
| 282 |
-
if ($field != null && strlen($field) > 0 && !in_array($field, $
|
| 283 |
$attributes[] = $field;
|
| 284 |
}
|
| 285 |
}
|
|
@@ -536,6 +536,7 @@ abstract class Boxalino_Exporter_Model_Mysql4_Indexer extends Mage_Core_Model_My
|
|
| 536 |
$count++;
|
| 537 |
}
|
| 538 |
|
|
|
|
| 539 |
self::logMem('Products - get attributes - before');
|
| 540 |
$columns = array(
|
| 541 |
'entity_id',
|
|
@@ -605,11 +606,10 @@ abstract class Boxalino_Exporter_Model_Mysql4_Indexer extends Mage_Core_Model_My
|
|
| 605 |
)
|
| 606 |
->where('t_d.attribute_id IN(?)', $attrsFromDb['datetime']);
|
| 607 |
|
| 608 |
-
$select = $db->select()
|
| 609 |
-
|
| 610 |
-
|
| 611 |
-
|
| 612 |
-
);
|
| 613 |
|
| 614 |
$select1 = null;
|
| 615 |
$select2 = null;
|
|
@@ -678,13 +678,33 @@ abstract class Boxalino_Exporter_Model_Mysql4_Indexer extends Mage_Core_Model_My
|
|
| 678 |
)
|
| 679 |
)
|
| 680 |
->where('product_id IN(?)', $ids);
|
| 681 |
-
$ids = null;
|
| 682 |
foreach ($db->fetchAll($select) as $r) {
|
| 683 |
$products[$r['product_id']]['categories'][] = $r['category_id'];
|
| 684 |
}
|
| 685 |
$select = null;
|
| 686 |
self::logMem('Products - get categories - after');
|
| 687 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 688 |
foreach ($products as $product) {
|
| 689 |
self::logMem('Products - start transform');
|
| 690 |
|
|
@@ -694,7 +714,6 @@ abstract class Boxalino_Exporter_Model_Mysql4_Indexer extends Mage_Core_Model_My
|
|
| 694 |
}
|
| 695 |
|
| 696 |
$id = $product['entity_id'];
|
| 697 |
-
|
| 698 |
$productParam = array();
|
| 699 |
$haveParent = false;
|
| 700 |
|
|
@@ -748,9 +767,7 @@ abstract class Boxalino_Exporter_Model_Mysql4_Indexer extends Mage_Core_Model_My
|
|
| 748 |
fputcsv($filesMtM[$attr], array($id, $val), $this->_helperExporter->XML_DELIMITER, $this->_helperExporter->XML_ENCLOSURE);
|
| 749 |
}
|
| 750 |
|
| 751 |
-
|
| 752 |
$val = null;
|
| 753 |
-
|
| 754 |
continue;
|
| 755 |
}
|
| 756 |
|
|
@@ -803,10 +820,7 @@ abstract class Boxalino_Exporter_Model_Mysql4_Indexer extends Mage_Core_Model_My
|
|
| 803 |
$this->_count++;
|
| 804 |
$localeCount++;
|
| 805 |
|
| 806 |
-
|
| 807 |
-
* Add special fields
|
| 808 |
-
*/
|
| 809 |
-
//Add url to image cache
|
| 810 |
if ($this->_storeConfig['export_product_images']) {
|
| 811 |
$_product = Mage::getModel('catalog/product')->load($id);
|
| 812 |
$media_gallery = $_product->getMediaGallery();
|
|
@@ -823,17 +837,21 @@ abstract class Boxalino_Exporter_Model_Mysql4_Indexer extends Mage_Core_Model_My
|
|
| 823 |
$this->_transformedProducts['products'][$id] = array_merge($this->_transformedProducts['products'][$id], $productParam);
|
| 824 |
}
|
| 825 |
|
| 826 |
-
|
| 827 |
-
* Add url to product for each languages
|
| 828 |
-
*/
|
| 829 |
if ($this->_storeConfig['export_product_url']) {
|
| 830 |
-
|
| 831 |
-
|
| 832 |
-
|
| 833 |
-
|
| 834 |
-
|
| 835 |
-
)
|
| 836 |
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 837 |
}
|
| 838 |
|
| 839 |
$productParam = null;
|
|
@@ -841,7 +859,6 @@ abstract class Boxalino_Exporter_Model_Mysql4_Indexer extends Mage_Core_Model_My
|
|
| 841 |
|
| 842 |
ksort($this->_transformedProducts['products'][$id]);
|
| 843 |
self::logMem('Products - end transform');
|
| 844 |
-
|
| 845 |
}
|
| 846 |
}
|
| 847 |
|
|
@@ -1579,7 +1596,7 @@ abstract class Boxalino_Exporter_Model_Mysql4_Indexer extends Mage_Core_Model_My
|
|
| 1579 |
|
| 1580 |
//customer source
|
| 1581 |
$source = $sources->addChild('source');
|
| 1582 |
-
$source->addAttribute('id', '
|
| 1583 |
$source->addAttribute('type', 'item_data_file');
|
| 1584 |
|
| 1585 |
$source->addChild('file')->addAttribute('value', 'customers.csv');
|
|
@@ -1637,7 +1654,7 @@ abstract class Boxalino_Exporter_Model_Mysql4_Indexer extends Mage_Core_Model_My
|
|
| 1637 |
$source->addChild('file')->addAttribute('value', 'transactions.csv');
|
| 1638 |
$source->addChild('orderIdColumn')->addAttribute('value', 'order_id');
|
| 1639 |
$customerIdColumn = $source->addChild('customerIdColumn');
|
| 1640 |
-
$customerIdColumn->addAttribute('value', '
|
| 1641 |
$customerIdColumn->addAttribute('customer_property_id', 'customer_id');
|
| 1642 |
$productIdColumn = $source->addChild('productIdColumn');
|
| 1643 |
$productIdColumn->addAttribute('value', 'entity_id');
|
|
@@ -1692,9 +1709,10 @@ abstract class Boxalino_Exporter_Model_Mysql4_Indexer extends Mage_Core_Model_My
|
|
| 1692 |
}
|
| 1693 |
|
| 1694 |
foreach ($attrs as $attr) {
|
| 1695 |
-
$ptype = 'string';
|
| 1696 |
// set property type
|
| 1697 |
switch ($attr) {
|
|
|
|
|
|
|
| 1698 |
case 'name':
|
| 1699 |
$ptype = 'title';
|
| 1700 |
break;
|
|
@@ -1722,6 +1740,8 @@ abstract class Boxalino_Exporter_Model_Mysql4_Indexer extends Mage_Core_Model_My
|
|
| 1722 |
case 'length':
|
| 1723 |
$ptype = 'number';
|
| 1724 |
break;
|
|
|
|
|
|
|
| 1725 |
}
|
| 1726 |
|
| 1727 |
if (isset($this->_attributesValuesByName[$attr]) && $attr != 'visibility' && $attr != 'status') {
|
|
@@ -1734,8 +1754,6 @@ abstract class Boxalino_Exporter_Model_Mysql4_Indexer extends Mage_Core_Model_My
|
|
| 1734 |
'has_lang' => false,
|
| 1735 |
'reference' => $attr
|
| 1736 |
);
|
| 1737 |
-
} elseif ($attr == 'category_ids') {
|
| 1738 |
-
continue;
|
| 1739 |
} else {
|
| 1740 |
$ref = null;
|
| 1741 |
$type = 'direct';
|
|
@@ -1751,7 +1769,6 @@ abstract class Boxalino_Exporter_Model_Mysql4_Indexer extends Mage_Core_Model_My
|
|
| 1751 |
break;
|
| 1752 |
default:
|
| 1753 |
$lang = false;
|
| 1754 |
-
break;
|
| 1755 |
}
|
| 1756 |
$properties[] = array(
|
| 1757 |
'id' => $attr,
|
| 232 |
'special_price',
|
| 233 |
'special_from_date',
|
| 234 |
'special_to_date',
|
|
|
|
| 235 |
'category_ids',
|
| 236 |
+
'visibility',
|
| 237 |
'status'
|
| 238 |
);
|
| 239 |
|
| 279 |
if (!in_array($field, $this->_customerAttributes)) {
|
| 280 |
Mage::throwException("Customer attribute \"$field\" doesn't exist, please update your additional_customer_attributes setting in the Boxalino Exporter settings!");
|
| 281 |
}
|
| 282 |
+
if ($field != null && strlen($field) > 0 && !in_array($field, $attributes)) {
|
| 283 |
$attributes[] = $field;
|
| 284 |
}
|
| 285 |
}
|
| 536 |
$count++;
|
| 537 |
}
|
| 538 |
|
| 539 |
+
// we have to check for settings on the different levels: Store(View) & Global
|
| 540 |
self::logMem('Products - get attributes - before');
|
| 541 |
$columns = array(
|
| 542 |
'entity_id',
|
| 606 |
)
|
| 607 |
->where('t_d.attribute_id IN(?)', $attrsFromDb['datetime']);
|
| 608 |
|
| 609 |
+
$select = $db->select()->union(
|
| 610 |
+
array($select1, $select2, $select3, $select4, $select5),
|
| 611 |
+
Zend_Db_Select::SQL_UNION_ALL
|
| 612 |
+
);
|
|
|
|
| 613 |
|
| 614 |
$select1 = null;
|
| 615 |
$select2 = null;
|
| 678 |
)
|
| 679 |
)
|
| 680 |
->where('product_id IN(?)', $ids);
|
|
|
|
| 681 |
foreach ($db->fetchAll($select) as $r) {
|
| 682 |
$products[$r['product_id']]['categories'][] = $r['category_id'];
|
| 683 |
}
|
| 684 |
$select = null;
|
| 685 |
self::logMem('Products - get categories - after');
|
| 686 |
|
| 687 |
+
if (Mage::getEdition() == Mage::EDITION_ENTERPRISE) {
|
| 688 |
+
self::logMem('Products - get EE URL key - before');
|
| 689 |
+
$select = $db->select()
|
| 690 |
+
->from(
|
| 691 |
+
array('t_g' => $this->_prefix . 'catalog_product_entity_url_key'),
|
| 692 |
+
array('entity_id')
|
| 693 |
+
)
|
| 694 |
+
->joinLeft(
|
| 695 |
+
array('t_s' => $this->_prefix . 'catalog_product_entity_url_key'),
|
| 696 |
+
$db->quoteInto('t_s.attribute_id = t_g.attribute_id AND t_s.entity_id = t_g.entity_id AND t_s.store_id = ?', $storeId),
|
| 697 |
+
array('value' => 'IF(t_s.store_id IS NULL, t_g.value, t_s.value)')
|
| 698 |
+
)
|
| 699 |
+
->where('t_g.store_id = ?', 0)
|
| 700 |
+
->where('t_g.entity_id IN(?)', $ids);
|
| 701 |
+
foreach ($db->fetchAll($select) as $r) {
|
| 702 |
+
$products[$r['entity_id']]['url_key'] = $r['value'];
|
| 703 |
+
}
|
| 704 |
+
self::logMem('Products - get EE URL key - after');
|
| 705 |
+
}
|
| 706 |
+
$ids = null;
|
| 707 |
+
|
| 708 |
foreach ($products as $product) {
|
| 709 |
self::logMem('Products - start transform');
|
| 710 |
|
| 714 |
}
|
| 715 |
|
| 716 |
$id = $product['entity_id'];
|
|
|
|
| 717 |
$productParam = array();
|
| 718 |
$haveParent = false;
|
| 719 |
|
| 767 |
fputcsv($filesMtM[$attr], array($id, $val), $this->_helperExporter->XML_DELIMITER, $this->_helperExporter->XML_ENCLOSURE);
|
| 768 |
}
|
| 769 |
|
|
|
|
| 770 |
$val = null;
|
|
|
|
| 771 |
continue;
|
| 772 |
}
|
| 773 |
|
| 820 |
$this->_count++;
|
| 821 |
$localeCount++;
|
| 822 |
|
| 823 |
+
// Add url to image cache
|
|
|
|
|
|
|
|
|
|
| 824 |
if ($this->_storeConfig['export_product_images']) {
|
| 825 |
$_product = Mage::getModel('catalog/product')->load($id);
|
| 826 |
$media_gallery = $_product->getMediaGallery();
|
| 837 |
$this->_transformedProducts['products'][$id] = array_merge($this->_transformedProducts['products'][$id], $productParam);
|
| 838 |
}
|
| 839 |
|
| 840 |
+
// Add url to product for each languages
|
|
|
|
|
|
|
| 841 |
if ($this->_storeConfig['export_product_url']) {
|
| 842 |
+
if (array_key_exists('url_key', $product)) {
|
| 843 |
+
$url_path = $product['url_key'] . '.html';
|
| 844 |
+
} else {
|
| 845 |
+
$url_path = $this->_helperExporter->rewrittenProductUrl(
|
| 846 |
+
$id, $storeId
|
|
|
|
| 847 |
);
|
| 848 |
+
}
|
| 849 |
+
$this->_transformedProducts['products'][$id] = array_merge(
|
| 850 |
+
$this->_transformedProducts['products'][$id],
|
| 851 |
+
array('default_url_' . $lang => (
|
| 852 |
+
$storeBaseUrl . $url_path . '?___store=' . $storeCode
|
| 853 |
+
))
|
| 854 |
+
);
|
| 855 |
}
|
| 856 |
|
| 857 |
$productParam = null;
|
| 859 |
|
| 860 |
ksort($this->_transformedProducts['products'][$id]);
|
| 861 |
self::logMem('Products - end transform');
|
|
|
|
| 862 |
}
|
| 863 |
}
|
| 864 |
|
| 1596 |
|
| 1597 |
//customer source
|
| 1598 |
$source = $sources->addChild('source');
|
| 1599 |
+
$source->addAttribute('id', 'customer_vals');
|
| 1600 |
$source->addAttribute('type', 'item_data_file');
|
| 1601 |
|
| 1602 |
$source->addChild('file')->addAttribute('value', 'customers.csv');
|
| 1654 |
$source->addChild('file')->addAttribute('value', 'transactions.csv');
|
| 1655 |
$source->addChild('orderIdColumn')->addAttribute('value', 'order_id');
|
| 1656 |
$customerIdColumn = $source->addChild('customerIdColumn');
|
| 1657 |
+
$customerIdColumn->addAttribute('value', 'customer_id');
|
| 1658 |
$customerIdColumn->addAttribute('customer_property_id', 'customer_id');
|
| 1659 |
$productIdColumn = $source->addChild('productIdColumn');
|
| 1660 |
$productIdColumn->addAttribute('value', 'entity_id');
|
| 1709 |
}
|
| 1710 |
|
| 1711 |
foreach ($attrs as $attr) {
|
|
|
|
| 1712 |
// set property type
|
| 1713 |
switch ($attr) {
|
| 1714 |
+
case 'category_ids':
|
| 1715 |
+
continue 2;
|
| 1716 |
case 'name':
|
| 1717 |
$ptype = 'title';
|
| 1718 |
break;
|
| 1740 |
case 'length':
|
| 1741 |
$ptype = 'number';
|
| 1742 |
break;
|
| 1743 |
+
default:
|
| 1744 |
+
$ptype = 'string';
|
| 1745 |
}
|
| 1746 |
|
| 1747 |
if (isset($this->_attributesValuesByName[$attr]) && $attr != 'visibility' && $attr != 'status') {
|
| 1754 |
'has_lang' => false,
|
| 1755 |
'reference' => $attr
|
| 1756 |
);
|
|
|
|
|
|
|
| 1757 |
} else {
|
| 1758 |
$ref = null;
|
| 1759 |
$type = 'direct';
|
| 1769 |
break;
|
| 1770 |
default:
|
| 1771 |
$lang = false;
|
|
|
|
| 1772 |
}
|
| 1773 |
$properties[] = array(
|
| 1774 |
'id' => $attr,
|
app/code/{local → community}/Boxalino/Exporter/etc/adminhtml.xml
RENAMED
|
File without changes
|
app/code/{local → community}/Boxalino/Exporter/etc/config.xml
RENAMED
|
@@ -1,7 +1,8 @@
|
|
|
|
|
| 1 |
<config>
|
| 2 |
<modules>
|
| 3 |
<Boxalino_Exporter>
|
| 4 |
-
<version>
|
| 5 |
</Boxalino_Exporter>
|
| 6 |
</modules>
|
| 7 |
<global>
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
<config>
|
| 3 |
<modules>
|
| 4 |
<Boxalino_Exporter>
|
| 5 |
+
<version>2.10</version>
|
| 6 |
</Boxalino_Exporter>
|
| 7 |
</modules>
|
| 8 |
<global>
|
app/code/{local → community}/Boxalino/Exporter/etc/system.xml
RENAMED
|
File without changes
|
app/etc/modules/Boxalino_CemSearch.xml
CHANGED
|
@@ -1,10 +1,9 @@
|
|
| 1 |
<?xml version="1.0"?>
|
| 2 |
-
|
| 3 |
<config>
|
| 4 |
<modules>
|
| 5 |
<Boxalino_CemSearch>
|
| 6 |
<active>true</active>
|
| 7 |
-
<codePool>
|
| 8 |
</Boxalino_CemSearch>
|
| 9 |
</modules>
|
| 10 |
</config>
|
| 1 |
<?xml version="1.0"?>
|
|
|
|
| 2 |
<config>
|
| 3 |
<modules>
|
| 4 |
<Boxalino_CemSearch>
|
| 5 |
<active>true</active>
|
| 6 |
+
<codePool>community</codePool>
|
| 7 |
</Boxalino_CemSearch>
|
| 8 |
</modules>
|
| 9 |
</config>
|
app/etc/modules/Boxalino_Exporter.xml
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
|
|
| 1 |
<config>
|
| 2 |
<modules>
|
| 3 |
<Boxalino_Exporter>
|
| 4 |
<active>true</active>
|
| 5 |
-
<codePool>
|
| 6 |
</Boxalino_Exporter>
|
| 7 |
</modules>
|
| 8 |
</config>
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
<config>
|
| 3 |
<modules>
|
| 4 |
<Boxalino_Exporter>
|
| 5 |
<active>true</active>
|
| 6 |
+
<codePool>community</codePool>
|
| 7 |
</Boxalino_Exporter>
|
| 8 |
</modules>
|
| 9 |
</config>
|
package.xml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
| 1 |
<?xml version="1.0"?>
|
| 2 |
<package>
|
| 3 |
<name>boxalino_plugin</name>
|
| 4 |
-
<version>2.
|
| 5 |
<stability>stable</stability>
|
| 6 |
<license uri="http://www.boxalino.com">boxalino Plugin</license>
|
| 7 |
<channel>community</channel>
|
|
@@ -16,13 +16,20 @@ Boxalino increases the online success of e-commerce companies on the mobile and
|
|
| 16 |
Boxalino is the best solution for Conversion Optimization on the market that integrates Testing, AI and Reporting in a way that is really usable for E-Commerce Teams.
|
| 17 |

|
| 18 |
Check out www.boxalino.com for details or give us a shout at sales@boxalino.com.</description>
|
| 19 |
-
<notes>
|
| 20 |

|
| 21 |
-
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 22 |
<authors><author><name>Szymon Nosal</name><user>szymonnosal</user><email>szymon.nosal@boxalino.com</email></author><author><name>Simon Rupf</name><user>simonrupf</user><email>simon.rupf@boxalino.com</email></author></authors>
|
| 23 |
-
<date>2015-
|
| 24 |
-
<time>14:
|
| 25 |
-
<contents><target name="
|
| 26 |
<compatible/>
|
| 27 |
-
<dependencies><required><php><min>5.2.0</min><max>5.
|
| 28 |
</package>
|
| 1 |
<?xml version="1.0"?>
|
| 2 |
<package>
|
| 3 |
<name>boxalino_plugin</name>
|
| 4 |
+
<version>2.10.0</version>
|
| 5 |
<stability>stable</stability>
|
| 6 |
<license uri="http://www.boxalino.com">boxalino Plugin</license>
|
| 7 |
<channel>community</channel>
|
| 16 |
Boxalino is the best solution for Conversion Optimization on the market that integrates Testing, AI and Reporting in a way that is really usable for E-Commerce Teams.
|
| 17 |

|
| 18 |
Check out www.boxalino.com for details or give us a shout at sales@boxalino.com.</description>
|
| 19 |
+
<notes>refactoring and bugfixes
|
| 20 |

|
| 21 |
+
- Moved plugin from local to community pool to support custom overrides.
|
| 22 |
+
- Adding support for URL export in Magento EE.
|
| 23 |
+
- Improving handling of missing/empty images in the autocompletion.
|
| 24 |
+
- Refactoring and improving facet block.
|
| 25 |
+
- Exclude catalog only items in the search.
|
| 26 |
+
- Fixing regressions in the customer synchronization.
|
| 27 |
+
- Correcting order total calculation in tracking.
|
| 28 |
+
</notes>
|
| 29 |
<authors><author><name>Szymon Nosal</name><user>szymonnosal</user><email>szymon.nosal@boxalino.com</email></author><author><name>Simon Rupf</name><user>simonrupf</user><email>simon.rupf@boxalino.com</email></author></authors>
|
| 30 |
+
<date>2015-08-17</date>
|
| 31 |
+
<time>14:35:15</time>
|
| 32 |
+
<contents><target name="magecommunity"><dir name="Boxalino"><dir name="CemSearch"><dir name="Block"><file name="Abstract.php" hash="45253ec10623b07c67cd623c626ad5f4"/><file name="Autocomplete.php" hash="a2218ee667aa6ee4c488a77fc4a1338f"/><dir name="Cart"><file name="Crosssell.php" hash="cea7a2d6f5b65db2a2f645a1603b4f8d"/></dir><file name="Facets.php" hash="27dfddf4b68367ab52c3a24a49edff66"/><dir name="Product"><dir name="List"><file name="Recommendation.php" hash="a6a6458eb55c017aca0a6ab5d6576386"/><file name="Related.php" hash="e7586fbc5cab975bc159ea946f367a87"/><file name="Upsell.php" hash="49e506c72b059348d6edab2a56050ec8"/></dir><file name="List.php" hash="2ae8fde63ab299c4ec7a6cff0c31edbc"/></dir><file name="Script.php" hash="a1d73dbf9a6fee9b3146a852072c95bf"/></dir><dir name="CatalogSearch"><dir name="Helper"><file name="Data.php" hash="9257d32c8f117e727333f4f1b4b5ef35"/></dir></dir><dir name="Helper"><file name="Data.php" hash="da6294c7560e3643dd312809cf7fd539"/><dir name="P13n"><file name="Adapter.php" hash="940d05652c3bc6959dbd116ee53baea3"/><file name="Config.php" hash="82597fa7e5fc6695137ad2f96267378a"/><file name="Recommendation.php" hash="32a664921b31680dca74335885b61a54"/><file name="Sort.php" hash="f40c0e1472ed4c75b2dbafc14cc5608c"/></dir></dir><dir name="Lib"><file name="AbstractThrift.php" hash="d6c88b8524dbd810d51ca9b568ca64ee"/><file name="P13nService.php" hash="96bae2ed236b56c93c69c043d61bb1fa"/><file name="Types.php" hash="3b56e03fe225e986511a7abfaab0a84c"/><dir name="vendor"><dir name="Thrift"><dir name="Base"><file name="TBase.php" hash="b383bf43ac76a57e3b1168cfacffbf22"/></dir><dir name="ClassLoader"><file name="ThriftClassLoader.php" hash="13159566c8b2dcc5b260ef9a0844167e"/></dir><dir name="Exception"><file name="TApplicationException.php" hash="1ee65cc5fb3dc82550a85cc18a31850c"/><file name="TException.php" hash="756e6a847c9e6bd1560c24b9a7373d2c"/><file name="TProtocolException.php" hash="148ebd5d8eba2587cd6e039cf70e04ab"/><file name="TTransportException.php" hash="aca39eea001fcbfd452db9ca7d5c218c"/></dir><dir name="Factory"><file name="TBinaryProtocolFactory.php" hash="bcd6e0555d6e2670a3bc7dd39ff3dbaf"/><file name="TCompactProtocolFactory.php" hash="0118b6363e09080548de3c6daf153290"/><file name="TJSONProtocolFactory.php" hash="28af1d10b4133df7f8ad8022ca39d703"/><file name="TProtocolFactory.php" hash="300bf2d805fa4a227cc3dc2b6ed0200c"/><file name="TStringFuncFactory.php" hash="242f32ade732f9c0d9b62a81b6901cd4"/><file name="TTransportFactory.php" hash="8347271458aea0453e774170a5b3e9fd"/></dir><file name="HttpP13n.php" hash="8ab6f5e997fae57430e9634b753fdd46"/><dir name="Protocol"><dir name="JSON"><file name="BaseContext.php" hash="ed1d83fba59a1d04c07416094ece8ee1"/><file name="ListContext.php" hash="9c8a970f54c30be1299c2d38da60ed56"/><file name="LookaheadReader.php" hash="315a96446f0f530ed1b0b1350b37f58d"/><file name="PairContext.php" hash="3fa06b3f7c9698642aefe00cd322f68b"/></dir><file name="TBinaryProtocol.php" hash="933d2be5503504cddd544992a4af0ee3"/><file name="TBinaryProtocolAccelerated.php" hash="444ba8026d73b83fbcf303d9a550cb70"/><file name="TCompactProtocol.php" hash="57b31bf77c29c1e0d1417f018a239505"/><file name="TJSONProtocol.php" hash="fac76e10fbc711cbfbcf6bdbc0b60191"/><file name="TProtocol.php" hash="d9c9a8105ad160bf0b87e8053d4b9d7c"/></dir><dir name="Serializer"><file name="TBinarySerializer.php" hash="e1fef75686b1fbadc28242b7f3697397"/></dir><dir name="Server"><file name="TForkingServer.php" hash="6e319d0d7f45350a03e387fc2f22473d"/><file name="TServer.php" hash="dc87f6a299fb4fb9ab76206f3b6bec72"/><file name="TServerSocket.php" hash="468fc875e7a5e4899e502e95f823455d"/><file name="TServerTransport.php" hash="ca2ab3e25a0760d37eb3538274dfaccb"/><file name="TSimpleServer.php" hash="38d5685001585a0d9f31b9d8c46656d2"/></dir><dir name="StringFunc"><file name="Core.php" hash="4493a096c73f5922316d95cc2c5fb687"/><file name="Mbstring.php" hash="b5ee27dd6bdceee0f2133df01c8d4fcd"/><file name="TStringFunc.php" hash="89fd7900f1b258391e4d4fdc924bc0f0"/></dir><dir name="Transport"><file name="P13nTCurlClient.php" hash="aaa63d036b6920b57e0777f90c08064f"/><file name="P13nTHttpClient.php" hash="8223e00845b717bb55981649d9ce6616"/><file name="TBufferedTransport.php" hash="7ace771173641cf47b3b11ca0bfebcfa"/><file name="TCurlClient.php" hash="16b14d5f643b20c872468dc96218708d"/><file name="TFramedTransport.php" hash="c6fc032e990e4cf3507741ef1d5b83b2"/><file name="THttpClient.php" hash="b299d30eecc318d7dde4d012ebe8a512"/><file name="TMemoryBuffer.php" hash="7367faa512ec8d25489819ca2ed8848f"/><file name="TNullTransport.php" hash="82d683d7d76ef2938fad1c58878f45e5"/><file name="TPhpStream.php" hash="44769e5da4709a4b6c2025137e4898b3"/><file name="TSocket.php" hash="d689b1f877eda19f7caaa9cb46788f96"/><file name="TSocketPool.php" hash="73d86dbd017130fe2aa0778132b42b26"/><file name="TTransport.php" hash="9185e82d3a440d1db97c6983573bd1ab"/></dir><dir name="Type"><file name="TMessageType.php" hash="20a9fb9a1de1ffe03bfac3057c913101"/><file name="TType.php" hash="261cc40ce2573ebf414c0ec06a2ee093"/></dir></dir></dir></dir><dir name="Model"><file name="Advanced.php" hash="d22f70b7cc2a9e599e5b45fbea541750"/><file name="Category.php" hash="37a225843c7ce20966f130480075aa5d"/><file name="Logger.php" hash="a75219dc447c1ebdd41ad312b2ef7f40"/><file name="Observer.php" hash="769d825a8547191d22d20cdf638b8921"/><dir name="Resource"><dir name="Advanced"><file name="Collection.php" hash="8814272ed16bc3c895bf3320633c0d24"/></dir><file name="Advanced.php" hash="572af318b61552c006b32ce5f5d9eb7e"/><file name="Fulltext.php" hash="cb2dc7ab7e243ea12a5595cfd77dc60a"/></dir><file name="Session.php" hash="f5f6948355cfc10882dd7a4f80e2713f"/></dir><dir name="controllers"><file name="AdvancedController.php" hash="7b22f7b4ffdf1a59448218eb79fca4ad"/><file name="AjaxController.php" hash="8331416b6beee0fb635da991790b8f40"/><file name="IndexController.php" hash="0f9ba5d1ee9bf4d7f9d6868a502738cd"/><file name="ResultController.php" hash="e43539a5921da7db3364b8e70dac2bdc"/></dir><dir name="etc"><file name="adminhtml.xml" hash="13af90d012dc3871c9af59c804d3588f"/><file name="config.xml" hash="890e172d0691b24cdc43083e1cf92a91"/><file name="system.xml" hash="96d9966e52f500a359822e3bb40946a0"/></dir></dir><dir name="Exporter"><dir name="Helper"><file name="Data.php" hash="68de11db65d7b0f091ee001d6b5a443c"/></dir><dir name="Model"><file name="Delta.php" hash="664b8a733751dd7e85169f3c9d99322f"/><file name="Indexer.php" hash="d9c10401971e9544992fbf34594fb600"/><dir name="Mysql4"><dir name="Exporter"><file name="Delta.php" hash="f4175abe070a035fd16399d3dbda1509"/><file name="Indexer.php" hash="bc1524bba09adc0c796872c718d5b6c1"/></dir><file name="Indexer.php" hash="2056705d63f3d44f0765db76b73c8850"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="57e26697c6d9b55a58f6da88b5a8d822"/><file name="config.xml" hash="9a3ac9b7ce890e8685bde7e6ba299516"/><file name="system.xml" hash="3c8e345e2ed5c2c1e01b0b37c9d62f10"/></dir></dir></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="boxalino.xml" hash="94bdcfdcff2210386d329f396f16b55a"/></dir><dir name="template"><dir name="boxalino"><dir name="catalogsearch"><file name="form.mini.phtml" hash="ac78368a3d53a36f912b5f9ceae4b566"/><file name="relaxation_products.phtml" hash="257908262463f380f098f0158c628899"/><file name="result.phtml" hash="8764361c966bdc64557aee6af4e8e336"/></dir><file name="left_filters.phtml" hash="d49cfedbc38298a1556cdca86b03a192"/><file name="relaxation_suggestion.phtml" hash="2344e747549eb399c219459b842569a0"/><file name="script.phtml" hash="9d5dc83f66114026208446fb0993b004"/><file name="top_filters.phtml" hash="588185dc46825a1415124f84b90ef6c3"/></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Boxalino_CemSearch.xml" hash="4c040e0f79d861c68c6cb036d7f58947"/><file name="Boxalino_Exporter.xml" hash="76a7a0be8d1c8caf84247b3ef0beb166"/></dir></target><target name="magelocale"><dir name="de_DE"><file name="Boxalino.csv" hash="898a7e741c385f6de40705755c7dbac7"/></dir><dir name="en_US"><file name="Boxalino.csv" hash="2fa5b37fa965c1c60e60609918cc953a"/></dir><dir name="fr_FR"><file name="Boxalino.csv" hash="07fc6c55708c4986f21f3196af74a4a3"/></dir></target><target name="mageskin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="css"><file name="boxalinoCemSearch.css" hash="aa5e2a4ae7f048bc8dc96cc3b15f827d"/></dir><dir name="js"><file name="boxalinoAutocomplete.js" hash="b26c8a5e419c7f2e8da9c0e6efbe04a2"/><file name="jquery-1.10.2.min.js" hash="628072e7212db1e8cdacb22b21752cda"/><file name="jquery-noConflict.js" hash="10bdc1b7f2effa529e5baae786007688"/></dir></dir></dir></dir></target></contents>
|
| 33 |
<compatible/>
|
| 34 |
+
<dependencies><required><php><min>5.2.0</min><max>5.6.9</max></php></required></dependencies>
|
| 35 |
</package>
|
