Version Notes
The new version introduces the long-awaited tax-included prices, other new features and important fixes.
Features:
[+] Basic support for taxed prices added: taxes and prices are calculated as for a guest customer.
[+] If Searchanise is used for search and advanced search, all the "items per page" variants over 100 (including "All") are hidden.
[+] Sync method updated for better stability.
Fixes:
[!] Price filter step could be calculated incorrectly. Fixed.
[!] Server sync could stop if a product image was missing in the filesystem. Fixed.
[!] Server sync could stop if a product link contained the & character.
Other:
[-] The cron sync init method has been hidden from the Magento admin panel. It can only be enabled by manually editing the config file.
[~] Cron namespace changed from to
Release Info
Developer | Simbirsk Technologies, Ltd. |
Extension | Simtech_Searchanise |
Version | 1.1.4 |
Comparing to | |
See all releases |
Code changes from version 1.1.3 to 1.1.4
- app/code/community/Simtech/Searchanise/Block/Async.php +13 -10
- app/code/community/Simtech/Searchanise/Block/Product/List/Toolbar.php +25 -11
- app/code/community/Simtech/Searchanise/Helper/ApiSe.php +14 -14
- app/code/community/Simtech/Searchanise/Helper/ApiXML.php +56 -27
- app/code/community/Simtech/Searchanise/Helper/Data.php +39 -1
- app/code/community/Simtech/Searchanise/Model/Observer.php +2 -2
- app/code/community/Simtech/Searchanise/Model/Request.php +15 -17
- app/code/community/Simtech/Searchanise/controllers/AsyncController.php +11 -8
- app/code/community/Simtech/Searchanise/controllers/InfoController.php +32 -1
- app/code/community/Simtech/Searchanise/etc/config.xml +8 -7
- app/code/community/Simtech/Searchanise/etc/config_without_search.xml +8 -7
- app/code/community/Simtech/Searchanise/etc/system.xml +7 -3
- package.xml +20 -14
@@ -55,18 +55,21 @@ class Simtech_Searchanise_Block_Async extends Mage_Core_Block_Text
|
|
55 |
}
|
56 |
}
|
57 |
|
58 |
-
if (Mage::helper('searchanise/ApiSe')->
|
59 |
$asyncUrl = Mage::helper('searchanise/ApiSe')->getAsyncUrl(false);
|
60 |
-
$html .= "\n<object data=\"$asyncUrl\" width=\"0\" height=\"0\"></object>\n";
|
61 |
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
|
|
|
|
|
|
|
|
70 |
}
|
71 |
}
|
72 |
|
55 |
}
|
56 |
}
|
57 |
|
58 |
+
if (Mage::helper('searchanise/ApiSe')->checkStartAsync()) {
|
59 |
$asyncUrl = Mage::helper('searchanise/ApiSe')->getAsyncUrl(false);
|
|
|
60 |
|
61 |
+
if (Mage::helper('searchanise/ApiSe')->checkObjectAsync()) {
|
62 |
+
$html .= "\n<object data=\"$asyncUrl\" width=\"0\" height=\"0\"></object>\n";
|
63 |
+
}
|
64 |
+
|
65 |
+
if (Mage::helper('searchanise/ApiSe')->checkAjaxAsync()) {
|
66 |
+
$html .=
|
67 |
+
"<script type=\"text/javascript\">
|
68 |
+
//<![CDATA[
|
69 |
+
new Ajax.Request('$asyncUrl', {method: 'get', asynchronous: true});
|
70 |
+
//]]>
|
71 |
+
</script>";
|
72 |
+
}
|
73 |
}
|
74 |
}
|
75 |
|
@@ -22,21 +22,35 @@ class Simtech_Searchanise_Block_Product_List_Toolbar extends Mage_Catalog_Block_
|
|
22 |
public function getAvailableLimit()
|
23 |
{
|
24 |
$availableLimit = parent::getAvailableLimit();
|
|
|
25 |
|
26 |
-
if (
|
27 |
-
if (
|
28 |
-
unset($availableLimit['all']);
|
29 |
$maxPageSize = Mage::helper('searchanise/ApiSe')->getMaxPageSize();
|
30 |
-
if (!array_key_exists($maxPageSize, $availableLimit)) {
|
31 |
-
$availableLimit[$maxPageSize] = $maxPageSize;
|
32 |
-
}
|
33 |
|
34 |
-
|
35 |
-
|
36 |
-
$
|
37 |
-
} else {
|
38 |
-
$this->_defaultAvailableLimit = $availableLimit;
|
39 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
40 |
}
|
41 |
}
|
42 |
|
22 |
public function getAvailableLimit()
|
23 |
{
|
24 |
$availableLimit = parent::getAvailableLimit();
|
25 |
+
$flChange = false;
|
26 |
|
27 |
+
if (Mage::helper('searchanise')->checkSearchaniseIsRunning()) {
|
28 |
+
if ($availableLimit) {
|
|
|
29 |
$maxPageSize = Mage::helper('searchanise/ApiSe')->getMaxPageSize();
|
|
|
|
|
|
|
30 |
|
31 |
+
if (array_key_exists('all', $availableLimit)) {
|
32 |
+
unset($availableLimit['all']);
|
33 |
+
$flChange = true;
|
|
|
|
|
34 |
}
|
35 |
+
foreach ($availableLimit as $key => $value) {
|
36 |
+
if ($value > $maxPageSize) {
|
37 |
+
unset($availableLimit[$key]);
|
38 |
+
$flChange = true;
|
39 |
+
}
|
40 |
+
}
|
41 |
+
}
|
42 |
+
}
|
43 |
+
|
44 |
+
if ($flChange) {
|
45 |
+
if (!array_key_exists($maxPageSize, $availableLimit)) {
|
46 |
+
$availableLimit[$maxPageSize] = $maxPageSize;
|
47 |
+
}
|
48 |
+
|
49 |
+
$currentMode = $this->getCurrentMode();
|
50 |
+
if (in_array($currentMode, array('list', 'grid'))) {
|
51 |
+
$this->_availableLimit[$currentMode] = $availableLimit;
|
52 |
+
} else {
|
53 |
+
$this->_defaultAvailableLimit = $availableLimit;
|
54 |
}
|
55 |
}
|
56 |
|
@@ -83,29 +83,29 @@ class Simtech_Searchanise_Helper_ApiSe
|
|
83 |
return true;
|
84 |
}
|
85 |
|
86 |
-
public static function
|
87 |
{
|
88 |
-
return self::getSetting('
|
89 |
}
|
90 |
-
|
91 |
-
public static function
|
92 |
{
|
93 |
-
return self::getSetting('
|
94 |
}
|
95 |
|
96 |
-
public static function
|
97 |
{
|
98 |
-
return self::getSetting('
|
99 |
}
|
100 |
-
|
101 |
-
public static function
|
102 |
{
|
103 |
-
return self::getSetting('
|
104 |
}
|
105 |
|
106 |
-
public static function
|
107 |
{
|
108 |
-
return self::
|
109 |
}
|
110 |
|
111 |
public static function getLabelForPricesUsergroup() {
|
@@ -1787,11 +1787,11 @@ class Simtech_Searchanise_Helper_ApiSe
|
|
1787 |
public static function changeAmpersand($str = '')
|
1788 |
{
|
1789 |
if (!empty($str)) {
|
1790 |
-
if (strpos('&'
|
1791 |
return $str;
|
1792 |
}
|
1793 |
|
1794 |
-
if (strpos('&'
|
1795 |
return str_replace('&','&',$str);
|
1796 |
}
|
1797 |
}
|
83 |
return true;
|
84 |
}
|
85 |
|
86 |
+
public static function checkCronAsync()
|
87 |
{
|
88 |
+
return self::getSetting('cron_async_enabled');
|
89 |
}
|
90 |
+
|
91 |
+
public static function checkAjaxAsync()
|
92 |
{
|
93 |
+
return self::getSetting('ajax_async_enabled');
|
94 |
}
|
95 |
|
96 |
+
public static function checkObjectAsync()
|
97 |
{
|
98 |
+
return self::getSetting('object_async_enabled');
|
99 |
}
|
100 |
+
|
101 |
+
public static function getInputIdSearch()
|
102 |
{
|
103 |
+
return self::getSetting('input_id_search');
|
104 |
}
|
105 |
|
106 |
+
public static function getEnabledSearchaniseSearch()
|
107 |
{
|
108 |
+
return self::getSetting('enabled_searchanise_search');
|
109 |
}
|
110 |
|
111 |
public static function getLabelForPricesUsergroup() {
|
1787 |
public static function changeAmpersand($str = '')
|
1788 |
{
|
1789 |
if (!empty($str)) {
|
1790 |
+
if (strpos($str, '&') !== false) {
|
1791 |
return $str;
|
1792 |
}
|
1793 |
|
1794 |
+
if (strpos($str, '&') !== false) {
|
1795 |
return str_replace('&','&',$str);
|
1796 |
}
|
1797 |
}
|
@@ -80,12 +80,17 @@ class Simtech_Searchanise_Helper_ApiXML extends Mage_Core_Helper_Data
|
|
80 |
$smallImage = $product->getData('small_image');
|
81 |
|
82 |
if (!empty($smallImage) && $smallImage != 'no_selection') {
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
|
|
|
|
|
|
|
|
|
|
89 |
}
|
90 |
}
|
91 |
|
@@ -93,12 +98,17 @@ class Simtech_Searchanise_Helper_ApiXML extends Mage_Core_Helper_Data
|
|
93 |
$image = $product->getData('image');
|
94 |
|
95 |
if (!empty($image) && $image != 'no_selection') {
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
|
|
|
|
|
|
|
|
|
|
102 |
}
|
103 |
}
|
104 |
|
@@ -106,12 +116,17 @@ class Simtech_Searchanise_Helper_ApiXML extends Mage_Core_Helper_Data
|
|
106 |
$thumbnail = $product->getData('thumbnail');
|
107 |
|
108 |
if (!empty($thumbnail) && $thumbnail != 'no_selection') {
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
|
|
|
|
|
|
|
|
|
|
115 |
}
|
116 |
}
|
117 |
}
|
@@ -154,22 +169,25 @@ class Simtech_Searchanise_Helper_ApiXML extends Mage_Core_Helper_Data
|
|
154 |
// if CONFIGURABLE OR GROUPED OR BUNDLE
|
155 |
if (($product->getData('type_id') == Mage_Catalog_Model_Product_Type::TYPE_BUNDLE) ||
|
156 |
($product->isSuper())) {
|
157 |
-
$quantity = 1;
|
158 |
|
159 |
// fixme in the future
|
160 |
// maybe exist simple solution get `quantity` for TYPE_BUNDLE or TYPE_CONFIGURABLE product
|
161 |
if ($typeInstance = $product->getTypeInstance()) {
|
162 |
$requiredChildrenIds = $typeInstance->getChildrenIds($product->getId(), true);
|
163 |
if ($requiredChildrenIds) {
|
164 |
-
$quantity = 0;
|
165 |
$childrenIds = array();
|
|
|
|
|
166 |
foreach ($requiredChildrenIds as $groupedChildrenIds) {
|
167 |
$childrenIds = array_merge($childrenIds, $groupedChildrenIds);
|
168 |
}
|
169 |
-
|
170 |
-
|
|
|
|
|
171 |
|
172 |
if ($childrenProducts) {
|
|
|
173 |
foreach ($childrenProducts as $childrenProductsKey => $childrenProduct) {
|
174 |
if ($childrenProduct) {
|
175 |
$quantity += self::getProductQty($childrenProduct, $store, false);
|
@@ -189,7 +207,7 @@ class Simtech_Searchanise_Helper_ApiXML extends Mage_Core_Helper_Data
|
|
189 |
}
|
190 |
|
191 |
/**
|
192 |
-
*
|
193 |
*
|
194 |
* @param Mage_Catalog_Model_Product $product
|
195 |
* @param Mage_Core_Model_Store $store
|
@@ -198,12 +216,19 @@ class Simtech_Searchanise_Helper_ApiXML extends Mage_Core_Helper_Data
|
|
198 |
*/
|
199 |
private static function getProductMinimalPrice($product, $store, $flagWithChildrenProducts = true, $customerGroupId = null)
|
200 |
{
|
201 |
-
$minimalPrice =
|
|
|
|
|
202 |
|
203 |
if ($minimalPrice == '') {
|
204 |
$minimalPrice = $product->getFinalPrice();
|
205 |
}
|
206 |
|
|
|
|
|
|
|
|
|
|
|
207 |
if ($product->getTypeId() == Mage_Catalog_Model_Product_Type::TYPE_BUNDLE) {
|
208 |
$_priceModel = $product->getPriceModel();
|
209 |
if ($_priceModel) {
|
@@ -226,11 +251,15 @@ class Simtech_Searchanise_Helper_ApiXML extends Mage_Core_Helper_Data
|
|
226 |
$requiredChildrenIds = $typeInstance->getChildrenIds($product->getId(), true);
|
227 |
if ($requiredChildrenIds) {
|
228 |
$childrenIds = array();
|
|
|
|
|
229 |
foreach ($requiredChildrenIds as $groupedChildrenIds) {
|
230 |
$childrenIds = array_merge($childrenIds, $groupedChildrenIds);
|
231 |
}
|
232 |
-
|
233 |
-
|
|
|
|
|
234 |
|
235 |
if ($childrenProducts) {
|
236 |
$minimalPrice = '';
|
@@ -375,7 +404,7 @@ class Simtech_Searchanise_Helper_ApiXML extends Mage_Core_Helper_Data
|
|
375 |
|
376 |
} elseif ($attributeCode == 'price') {
|
377 |
// nothing
|
378 |
-
// defined in the '<cs:price>' field
|
379 |
|
380 |
} elseif ($attributeCode == 'group_price') {
|
381 |
// nothing
|
80 |
$smallImage = $product->getData('small_image');
|
81 |
|
82 |
if (!empty($smallImage) && $smallImage != 'no_selection') {
|
83 |
+
try {
|
84 |
+
$imageLink = Mage::helper('catalog/image')
|
85 |
+
->init($product, 'small_image')
|
86 |
+
->constrainOnly(true) // Guarantee, that image picture will not be bigger, than it was.
|
87 |
+
->keepAspectRatio(true) // Guarantee, that image picture width/height will not be distorted.
|
88 |
+
->keepFrame($flagKeepFrame) // Guarantee, that image will have dimensions, set in $width/$height
|
89 |
+
->resize($width, $height);
|
90 |
+
} catch (Exception $e) {
|
91 |
+
// image not exists
|
92 |
+
$imageLink = '';
|
93 |
+
}
|
94 |
}
|
95 |
}
|
96 |
|
98 |
$image = $product->getData('image');
|
99 |
|
100 |
if (!empty($image) && $image != 'no_selection') {
|
101 |
+
try {
|
102 |
+
$imageLink = Mage::helper('catalog/image')
|
103 |
+
->init($product, 'image')
|
104 |
+
->constrainOnly(true) // Guarantee, that image picture will not be bigger, than it was.
|
105 |
+
->keepAspectRatio(true) // Guarantee, that image picture width/height will not be distorted.
|
106 |
+
->keepFrame($flagKeepFrame) // Guarantee, that image will have dimensions, set in $width/$height
|
107 |
+
->resize($width, $height);
|
108 |
+
} catch (Exception $e) {
|
109 |
+
// image not exists
|
110 |
+
$imageLink = '';
|
111 |
+
}
|
112 |
}
|
113 |
}
|
114 |
|
116 |
$thumbnail = $product->getData('thumbnail');
|
117 |
|
118 |
if (!empty($thumbnail) && $thumbnail != 'no_selection') {
|
119 |
+
try {
|
120 |
+
$imageLink = Mage::helper('catalog/image')
|
121 |
+
->init($product, 'thumbnail')
|
122 |
+
->constrainOnly(true) // Guarantee, that image picture will not be bigger, than it was.
|
123 |
+
->keepAspectRatio(true) // Guarantee, that image picture width/height will not be distorted.
|
124 |
+
->keepFrame($flagKeepFrame) // Guarantee, that image will have dimensions, set in $width/$height
|
125 |
+
->resize($width, $height);
|
126 |
+
} catch (Exception $e) {
|
127 |
+
// image not exists
|
128 |
+
$imageLink = '';
|
129 |
+
}
|
130 |
}
|
131 |
}
|
132 |
}
|
169 |
// if CONFIGURABLE OR GROUPED OR BUNDLE
|
170 |
if (($product->getData('type_id') == Mage_Catalog_Model_Product_Type::TYPE_BUNDLE) ||
|
171 |
($product->isSuper())) {
|
|
|
172 |
|
173 |
// fixme in the future
|
174 |
// maybe exist simple solution get `quantity` for TYPE_BUNDLE or TYPE_CONFIGURABLE product
|
175 |
if ($typeInstance = $product->getTypeInstance()) {
|
176 |
$requiredChildrenIds = $typeInstance->getChildrenIds($product->getId(), true);
|
177 |
if ($requiredChildrenIds) {
|
|
|
178 |
$childrenIds = array();
|
179 |
+
$childrenProducts = null;
|
180 |
+
|
181 |
foreach ($requiredChildrenIds as $groupedChildrenIds) {
|
182 |
$childrenIds = array_merge($childrenIds, $groupedChildrenIds);
|
183 |
}
|
184 |
+
|
185 |
+
if ($childrenIds) {
|
186 |
+
$childrenProducts = self::getProducts($childrenIds, $store);
|
187 |
+
}
|
188 |
|
189 |
if ($childrenProducts) {
|
190 |
+
$quantity = 0;
|
191 |
foreach ($childrenProducts as $childrenProductsKey => $childrenProduct) {
|
192 |
if ($childrenProduct) {
|
193 |
$quantity += self::getProductQty($childrenProduct, $store, false);
|
207 |
}
|
208 |
|
209 |
/**
|
210 |
+
* Get product minimal price without "Tier Price" (quantity discount)
|
211 |
*
|
212 |
* @param Mage_Catalog_Model_Product $product
|
213 |
* @param Mage_Core_Model_Store $store
|
216 |
*/
|
217 |
private static function getProductMinimalPrice($product, $store, $flagWithChildrenProducts = true, $customerGroupId = null)
|
218 |
{
|
219 |
+
$minimalPrice = '';
|
220 |
+
// The "getMinimalPrice" function gets price with "Tier Price" (quantity discount)
|
221 |
+
// $minimalPrice = $product->getMinimalPrice();
|
222 |
|
223 |
if ($minimalPrice == '') {
|
224 |
$minimalPrice = $product->getFinalPrice();
|
225 |
}
|
226 |
|
227 |
+
$taxHelper = Mage::helper('tax');
|
228 |
+
|
229 |
+
$showPricesTax = ($taxHelper->displayPriceIncludingTax() || $taxHelper->displayBothPrices());
|
230 |
+
$minimalPrice = $taxHelper->getPrice($product, $product->getFinalPrice(), $showPricesTax);
|
231 |
+
|
232 |
if ($product->getTypeId() == Mage_Catalog_Model_Product_Type::TYPE_BUNDLE) {
|
233 |
$_priceModel = $product->getPriceModel();
|
234 |
if ($_priceModel) {
|
251 |
$requiredChildrenIds = $typeInstance->getChildrenIds($product->getId(), true);
|
252 |
if ($requiredChildrenIds) {
|
253 |
$childrenIds = array();
|
254 |
+
$childrenProducts = null;
|
255 |
+
|
256 |
foreach ($requiredChildrenIds as $groupedChildrenIds) {
|
257 |
$childrenIds = array_merge($childrenIds, $groupedChildrenIds);
|
258 |
}
|
259 |
+
|
260 |
+
if ($childrenIds) {
|
261 |
+
$childrenProducts = self::getProducts($childrenIds, $store, false, $customerGroupId);
|
262 |
+
}
|
263 |
|
264 |
if ($childrenProducts) {
|
265 |
$minimalPrice = '';
|
404 |
|
405 |
} elseif ($attributeCode == 'price') {
|
406 |
// nothing
|
407 |
+
// already defined in the '<cs:price>' field
|
408 |
|
409 |
} elseif ($attributeCode == 'group_price') {
|
410 |
// nothing
|
@@ -41,6 +41,8 @@ class Simtech_Searchanise_Helper_Data extends Mage_Core_Helper_Abstract
|
|
41 |
* @var Simtech_Searchanise_Model_Request
|
42 |
*/
|
43 |
protected $_searchaniseRequest = null;
|
|
|
|
|
44 |
|
45 |
public function initSearchaniseRequest()
|
46 |
{
|
@@ -48,7 +50,7 @@ class Simtech_Searchanise_Helper_Data extends Mage_Core_Helper_Abstract
|
|
48 |
|
49 |
return $this;
|
50 |
}
|
51 |
-
|
52 |
public function checkSearchaniseResult()
|
53 |
{
|
54 |
return Mage::helper('searchanise/ApiSe')->checkSearchaniseResult($this->_searchaniseRequest);
|
@@ -63,6 +65,16 @@ class Simtech_Searchanise_Helper_Data extends Mage_Core_Helper_Abstract
|
|
63 |
{
|
64 |
return $this->_searchaniseRequest;
|
65 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
66 |
|
67 |
public function getDisableText()
|
68 |
{
|
@@ -139,9 +151,34 @@ class Simtech_Searchanise_Helper_Data extends Mage_Core_Helper_Abstract
|
|
139 |
|
140 |
return Mage::getUrl('*/*/*', array('_current'=>true, '_use_rewrite'=>true, '_query'=>$query));
|
141 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
142 |
|
143 |
public function execute($type = null, $controller = null, $blockToolbar = null, $data = null)
|
144 |
{
|
|
|
145 |
if ((!$this->checkEnabled()) || (!Mage::helper('searchanise/ApiSe')->getEnabledSearchaniseSearch())) {
|
146 |
return;
|
147 |
}
|
@@ -151,6 +188,7 @@ class Simtech_Searchanise_Helper_Data extends Mage_Core_Helper_Abstract
|
|
151 |
return;
|
152 |
}
|
153 |
}
|
|
|
154 |
if (empty($params)) {
|
155 |
$params = array();
|
156 |
}
|
41 |
* @var Simtech_Searchanise_Model_Request
|
42 |
*/
|
43 |
protected $_searchaniseRequest = null;
|
44 |
+
|
45 |
+
protected $_searchaniseCurentType = null;
|
46 |
|
47 |
public function initSearchaniseRequest()
|
48 |
{
|
50 |
|
51 |
return $this;
|
52 |
}
|
53 |
+
|
54 |
public function checkSearchaniseResult()
|
55 |
{
|
56 |
return Mage::helper('searchanise/ApiSe')->checkSearchaniseResult($this->_searchaniseRequest);
|
65 |
{
|
66 |
return $this->_searchaniseRequest;
|
67 |
}
|
68 |
+
|
69 |
+
public function setSearchaniseCurentType($type = null)
|
70 |
+
{
|
71 |
+
$this->_searchaniseCurentType = $type;
|
72 |
+
}
|
73 |
+
|
74 |
+
public function getSearchaniseCurentType()
|
75 |
+
{
|
76 |
+
return $this->_searchaniseCurentType;
|
77 |
+
}
|
78 |
|
79 |
public function getDisableText()
|
80 |
{
|
151 |
|
152 |
return Mage::getUrl('*/*/*', array('_current'=>true, '_use_rewrite'=>true, '_query'=>$query));
|
153 |
}
|
154 |
+
|
155 |
+
/**
|
156 |
+
* Check for replace default functional (example getAvailableLimit in Simtech_Searchanise_Block_Product_List_Toolbar)
|
157 |
+
*
|
158 |
+
* @return boolean
|
159 |
+
*/
|
160 |
+
public function checkSearchaniseIsRunning()
|
161 |
+
{
|
162 |
+
$check = false;
|
163 |
+
|
164 |
+
$type = $this->getSearchaniseCurentType();
|
165 |
+
|
166 |
+
if ($type) {
|
167 |
+
if (Mage::helper('searchanise/ApiSe')->getUseNavigation()) {
|
168 |
+
$check = true;
|
169 |
+
} else {
|
170 |
+
if (($type == self::TEXT_FIND) || ($type == self::TEXT_ADVANCED_FIND)) {
|
171 |
+
$check = true;
|
172 |
+
}
|
173 |
+
}
|
174 |
+
}
|
175 |
+
|
176 |
+
return $check;
|
177 |
+
}
|
178 |
|
179 |
public function execute($type = null, $controller = null, $blockToolbar = null, $data = null)
|
180 |
{
|
181 |
+
$this->setSearchaniseCurentType(); // init value
|
182 |
if ((!$this->checkEnabled()) || (!Mage::helper('searchanise/ApiSe')->getEnabledSearchaniseSearch())) {
|
183 |
return;
|
184 |
}
|
188 |
return;
|
189 |
}
|
190 |
}
|
191 |
+
$this->setSearchaniseCurentType($type);
|
192 |
if (empty($params)) {
|
193 |
$params = array();
|
194 |
}
|
@@ -31,8 +31,8 @@ class Simtech_Searchanise_Model_Observer
|
|
31 |
Mage::helper('searchanise/ApiSe')->log('start cron autoSync', 'information');
|
32 |
|
33 |
// only run if set to
|
34 |
-
$
|
35 |
-
if ($
|
36 |
Mage::helper('searchanise/ApiSe')->log('cron is enabled', 'information');
|
37 |
$result = Mage::helper('searchanise/ApiSe')->async();
|
38 |
echo $result;
|
31 |
Mage::helper('searchanise/ApiSe')->log('start cron autoSync', 'information');
|
32 |
|
33 |
// only run if set to
|
34 |
+
$cronAsyncEnabled = Mage::helper('searchanise/ApiSe')->checkCronAsync();
|
35 |
+
if ($cronAsyncEnabled) {
|
36 |
Mage::helper('searchanise/ApiSe')->log('cron is enabled', 'information');
|
37 |
$result = Mage::helper('searchanise/ApiSe')->async();
|
38 |
echo $result;
|
@@ -436,9 +436,8 @@ class Simtech_Searchanise_Model_Request extends Mage_Core_Model_Abstract
|
|
436 |
return $ret;
|
437 |
}
|
438 |
|
439 |
-
|
440 |
-
|
441 |
-
if ($name == 'price') {
|
442 |
$label = 'price';
|
443 |
} else {
|
444 |
$label = 'attribute_' . $attribute->getId();
|
@@ -489,8 +488,13 @@ class Simtech_Searchanise_Model_Request extends Mage_Core_Model_Abstract
|
|
489 |
if (!$attribute) {
|
490 |
return $ret;
|
491 |
}
|
492 |
-
|
493 |
-
|
|
|
|
|
|
|
|
|
|
|
494 |
$vals = array();
|
495 |
$res = $this->getSearchResult();
|
496 |
|
@@ -525,26 +529,20 @@ class Simtech_Searchanise_Model_Request extends Mage_Core_Model_Abstract
|
|
525 |
|
526 |
$label = 'category' . $category->getId();
|
527 |
|
528 |
-
if (!$this->checkAttributesCountLabel($label))
|
529 |
-
{
|
530 |
$val = 0;
|
531 |
$res = $this->getSearchResult();
|
532 |
|
533 |
-
if (!empty($res['facets']))
|
534 |
-
{
|
535 |
// fixme in the future
|
536 |
// error calc count product in category
|
537 |
$arr_cat = null;
|
538 |
Mage::helper('searchanise/ApiSe')->getAllChildrenCategories($arr_cat, $category);
|
539 |
|
540 |
-
foreach ($res['facets'] as $facet)
|
541 |
-
|
542 |
-
|
543 |
-
|
544 |
-
if (!empty($facet['buckets']))
|
545 |
-
{
|
546 |
-
foreach ($facet['buckets'] as $bucket)
|
547 |
-
{
|
548 |
if (in_array($bucket['value'], $arr_cat)) {
|
549 |
$val += $bucket['count'];
|
550 |
}
|
436 |
return $ret;
|
437 |
}
|
438 |
|
439 |
+
// hook, it is need for 'union' and this attribute defined in the 'price' field
|
440 |
+
if ($attribute->getAttributeCode() == 'price') {
|
|
|
441 |
$label = 'price';
|
442 |
} else {
|
443 |
$label = 'attribute_' . $attribute->getId();
|
488 |
if (!$attribute) {
|
489 |
return $ret;
|
490 |
}
|
491 |
+
|
492 |
+
// hook, it is need for 'union' and this attribute defined in the 'price' field
|
493 |
+
if ($attribute->getAttributeCode() == 'price') {
|
494 |
+
$label = 'price';
|
495 |
+
} else {
|
496 |
+
$label = 'attribute_' . $attribute->getId();
|
497 |
+
}
|
498 |
$vals = array();
|
499 |
$res = $this->getSearchResult();
|
500 |
|
529 |
|
530 |
$label = 'category' . $category->getId();
|
531 |
|
532 |
+
if (!$this->checkAttributesCountLabel($label)) {
|
|
|
533 |
$val = 0;
|
534 |
$res = $this->getSearchResult();
|
535 |
|
536 |
+
if (!empty($res['facets'])) {
|
|
|
537 |
// fixme in the future
|
538 |
// error calc count product in category
|
539 |
$arr_cat = null;
|
540 |
Mage::helper('searchanise/ApiSe')->getAllChildrenCategories($arr_cat, $category);
|
541 |
|
542 |
+
foreach ($res['facets'] as $facet) {
|
543 |
+
if ($facet['attribute'] == 'categories') {
|
544 |
+
if (!empty($facet['buckets'])) {
|
545 |
+
foreach ($facet['buckets'] as $bucket) {
|
|
|
|
|
|
|
|
|
546 |
if (in_array($bucket['value'], $arr_cat)) {
|
547 |
$val += $bucket['count'];
|
548 |
}
|
@@ -46,6 +46,8 @@ class Simtech_Searchanise_AsyncController extends Mage_Core_Controller_Front_Act
|
|
46 |
$this->setFlag('', self::FLAG_NO_POST_DISPATCH, 1);
|
47 |
|
48 |
parent::preDispatch();
|
|
|
|
|
49 |
}
|
50 |
|
51 |
/*
|
@@ -54,14 +56,15 @@ class Simtech_Searchanise_AsyncController extends Mage_Core_Controller_Front_Act
|
|
54 |
public function indexAction()
|
55 |
{
|
56 |
if (Mage::helper('searchanise/ApiSe')->getStatusModule() == 'Y') {
|
57 |
-
|
58 |
-
Mage::
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
//
|
63 |
-
//
|
64 |
-
//
|
|
|
65 |
|
66 |
if ($check) {
|
67 |
@ignore_user_abort(true);
|
46 |
$this->setFlag('', self::FLAG_NO_POST_DISPATCH, 1);
|
47 |
|
48 |
parent::preDispatch();
|
49 |
+
|
50 |
+
return $this;
|
51 |
}
|
52 |
|
53 |
/*
|
56 |
public function indexAction()
|
57 |
{
|
58 |
if (Mage::helper('searchanise/ApiSe')->getStatusModule() == 'Y') {
|
59 |
+
// not need because it checked in the "Async.php" block
|
60 |
+
// if (Mage::helper('searchanise/ApiSe')->checkStartAsync()) {
|
61 |
+
if (true) {
|
62 |
+
$check = true;
|
63 |
+
// code if need use httprequest
|
64 |
+
// $check = $this->checkNotUseHttpRequest();
|
65 |
+
// Mage::app('admin')->setUseSessionInUrl(false);
|
66 |
+
// Mage::app('customer')->setUseSessionInUrl(false); // need check: sometimes not work properly (the async script will not start)
|
67 |
+
// end code
|
68 |
|
69 |
if ($check) {
|
70 |
@ignore_user_abort(true);
|
@@ -17,17 +17,46 @@ class Simtech_Searchanise_InfoController extends Mage_Core_Controller_Front_Acti
|
|
17 |
const RESYNC = 'resync';
|
18 |
const OUTPUT = 'visual';
|
19 |
const STORE_ID = 'store_id';
|
|
|
20 |
const PRODUCT_IDS = 'product_ids';
|
21 |
const PARENT_PRIVATE_KEY = 'parent_private_key';
|
22 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
23 |
public function indexAction()
|
24 |
{
|
25 |
$resync = $this->getRequest()->getParam(self::RESYNC);
|
26 |
$visual = $this->getRequest()->getParam(self::OUTPUT);
|
27 |
$storeId = $this->getRequest()->getParam(self::STORE_ID);
|
|
|
28 |
$productIds = $this->getRequest()->getParam(self::PRODUCT_IDS);
|
29 |
$parentPrivateKey = $this->getRequest()->getParam(self::PARENT_PRIVATE_KEY);
|
30 |
|
|
|
|
|
|
|
|
|
31 |
if ((empty($parentPrivateKey)) ||
|
32 |
(Mage::helper('searchanise/ApiSe')->getParentPrivateKey() !== $parentPrivateKey)) {
|
33 |
$_options = Mage::helper('searchanise/ApiSe')->getAddonOptions();
|
@@ -67,7 +96,9 @@ class Simtech_Searchanise_InfoController extends Mage_Core_Controller_Front_Acti
|
|
67 |
$options['next_queue'] = Mage::getModel('searchanise/queue')->getNextQueue();
|
68 |
$options['total_items_in_queue'] = Mage::getModel('searchanise/queue')->getTotalItems();
|
69 |
|
70 |
-
$options['
|
|
|
|
|
71 |
|
72 |
$options['max_execution_time'] = ini_get('max_execution_time');
|
73 |
@set_time_limit(0);
|
17 |
const RESYNC = 'resync';
|
18 |
const OUTPUT = 'visual';
|
19 |
const STORE_ID = 'store_id';
|
20 |
+
const PRODUCT_ID = 'product_id';
|
21 |
const PRODUCT_IDS = 'product_ids';
|
22 |
const PARENT_PRIVATE_KEY = 'parent_private_key';
|
23 |
|
24 |
+
/**
|
25 |
+
* Dispatch event before action
|
26 |
+
*
|
27 |
+
* @return void
|
28 |
+
*/
|
29 |
+
public function preDispatch()
|
30 |
+
{
|
31 |
+
// It is need if it will used the "generateProductsXML" function
|
32 |
+
|
33 |
+
// Do not start standart session
|
34 |
+
$this->setFlag('', self::FLAG_NO_START_SESSION, 1);
|
35 |
+
$this->setFlag('', self::FLAG_NO_CHECK_INSTALLATION, 1);
|
36 |
+
$this->setFlag('', self::FLAG_NO_COOKIES_REDIRECT, 0);
|
37 |
+
$this->setFlag('', self::FLAG_NO_PRE_DISPATCH, 1);
|
38 |
+
|
39 |
+
// Need for delete the "PDOExceptionPDOException" error
|
40 |
+
$this->setFlag('', self::FLAG_NO_POST_DISPATCH, 1);
|
41 |
+
|
42 |
+
parent::preDispatch();
|
43 |
+
|
44 |
+
return $this;
|
45 |
+
}
|
46 |
+
|
47 |
public function indexAction()
|
48 |
{
|
49 |
$resync = $this->getRequest()->getParam(self::RESYNC);
|
50 |
$visual = $this->getRequest()->getParam(self::OUTPUT);
|
51 |
$storeId = $this->getRequest()->getParam(self::STORE_ID);
|
52 |
+
$productId = $this->getRequest()->getParam(self::PRODUCT_ID);
|
53 |
$productIds = $this->getRequest()->getParam(self::PRODUCT_IDS);
|
54 |
$parentPrivateKey = $this->getRequest()->getParam(self::PARENT_PRIVATE_KEY);
|
55 |
|
56 |
+
if ($productId) {
|
57 |
+
$productIds = array($productId);
|
58 |
+
}
|
59 |
+
|
60 |
if ((empty($parentPrivateKey)) ||
|
61 |
(Mage::helper('searchanise/ApiSe')->getParentPrivateKey() !== $parentPrivateKey)) {
|
62 |
$_options = Mage::helper('searchanise/ApiSe')->getAddonOptions();
|
96 |
$options['next_queue'] = Mage::getModel('searchanise/queue')->getNextQueue();
|
97 |
$options['total_items_in_queue'] = Mage::getModel('searchanise/queue')->getTotalItems();
|
98 |
|
99 |
+
$options['cron_async_enabled'] = Mage::helper('searchanise/ApiSe')->checkCronAsync();
|
100 |
+
$options['ajax_async_enabled'] = Mage::helper('searchanise/ApiSe')->checkAjaxAsync();
|
101 |
+
$options['object_async_enabled'] = Mage::helper('searchanise/ApiSe')->checkObjectAsync();
|
102 |
|
103 |
$options['max_execution_time'] = ini_get('max_execution_time');
|
104 |
@set_time_limit(0);
|
@@ -15,7 +15,7 @@
|
|
15 |
<config>
|
16 |
<modules>
|
17 |
<Simtech_Searchanise>
|
18 |
-
<version>1.1.
|
19 |
</Simtech_Searchanise>
|
20 |
</modules>
|
21 |
<frontend>
|
@@ -559,27 +559,28 @@
|
|
559 |
<search_timeout>3</search_timeout>
|
560 |
<request_timeout>10</request_timeout>
|
561 |
<ajax_async_timeout>1</ajax_async_timeout>
|
562 |
-
<products_per_pass>
|
563 |
<max_error_count>25</max_error_count>
|
564 |
<max_processing_thread>3</max_processing_thread>
|
565 |
<max_processing_time>720</max_processing_time>
|
566 |
<max_search_request_length>8000</max_search_request_length>
|
567 |
<service_url>http://www.searchanise.com</service_url>
|
568 |
-
<
|
|
|
|
|
|
|
569 |
<input_id_search>search</input_id_search>
|
570 |
-
<!-- '2' - ajax -->
|
571 |
-
<type_async>2</type_async>
|
572 |
<enabled_searchanise_search>1</enabled_searchanise_search>
|
573 |
</config>
|
574 |
</searchanise>
|
575 |
</default>
|
576 |
<crontab>
|
577 |
<jobs>
|
578 |
-
<
|
579 |
<!-- runs every 1 minutes as below. Change to (0 1 * * *) to run every night at 1am -->
|
580 |
<schedule><cron_expr>*/1 * * * *</cron_expr></schedule>
|
581 |
<run><model>searchanise/observer::autoSync</model></run>
|
582 |
-
</
|
583 |
</jobs>
|
584 |
</crontab>
|
585 |
</config>
|
15 |
<config>
|
16 |
<modules>
|
17 |
<Simtech_Searchanise>
|
18 |
+
<version>1.1.4</version>
|
19 |
</Simtech_Searchanise>
|
20 |
</modules>
|
21 |
<frontend>
|
559 |
<search_timeout>3</search_timeout>
|
560 |
<request_timeout>10</request_timeout>
|
561 |
<ajax_async_timeout>1</ajax_async_timeout>
|
562 |
+
<products_per_pass>50</products_per_pass>
|
563 |
<max_error_count>25</max_error_count>
|
564 |
<max_processing_thread>3</max_processing_thread>
|
565 |
<max_processing_time>720</max_processing_time>
|
566 |
<max_search_request_length>8000</max_search_request_length>
|
567 |
<service_url>http://www.searchanise.com</service_url>
|
568 |
+
<cron_async_enabled>0</cron_async_enabled>
|
569 |
+
<ajax_async_enabled>0</ajax_async_enabled>
|
570 |
+
<!-- default sync init method -->
|
571 |
+
<object_async_enabled>1</object_async_enabled>
|
572 |
<input_id_search>search</input_id_search>
|
|
|
|
|
573 |
<enabled_searchanise_search>1</enabled_searchanise_search>
|
574 |
</config>
|
575 |
</searchanise>
|
576 |
</default>
|
577 |
<crontab>
|
578 |
<jobs>
|
579 |
+
<searchanise_indexer>
|
580 |
<!-- runs every 1 minutes as below. Change to (0 1 * * *) to run every night at 1am -->
|
581 |
<schedule><cron_expr>*/1 * * * *</cron_expr></schedule>
|
582 |
<run><model>searchanise/observer::autoSync</model></run>
|
583 |
+
</searchanise_indexer>
|
584 |
</jobs>
|
585 |
</crontab>
|
586 |
</config>
|
@@ -15,7 +15,7 @@
|
|
15 |
<config>
|
16 |
<modules>
|
17 |
<Simtech_Searchanise>
|
18 |
-
<version>1.1.
|
19 |
</Simtech_Searchanise>
|
20 |
</modules>
|
21 |
<frontend>
|
@@ -559,27 +559,28 @@
|
|
559 |
<search_timeout>3</search_timeout>
|
560 |
<request_timeout>10</request_timeout>
|
561 |
<ajax_async_timeout>1</ajax_async_timeout>
|
562 |
-
<products_per_pass>
|
563 |
<max_error_count>25</max_error_count>
|
564 |
<max_processing_thread>3</max_processing_thread>
|
565 |
<max_processing_time>720</max_processing_time>
|
566 |
<max_search_request_length>8000</max_search_request_length>
|
567 |
<service_url>http://www.searchanise.com</service_url>
|
568 |
-
<
|
|
|
|
|
|
|
569 |
<input_id_search>search</input_id_search>
|
570 |
-
<!-- '2' - ajax -->
|
571 |
-
<type_async>2</type_async>
|
572 |
<enabled_searchanise_search>1</enabled_searchanise_search>
|
573 |
</config>
|
574 |
</searchanise>
|
575 |
</default>
|
576 |
<crontab>
|
577 |
<jobs>
|
578 |
-
<
|
579 |
<!-- runs every 1 minutes as below. Change to (0 1 * * *) to run every night at 1am -->
|
580 |
<schedule><cron_expr>*/1 * * * *</cron_expr></schedule>
|
581 |
<run><model>searchanise/observer::autoSync</model></run>
|
582 |
-
</
|
583 |
</jobs>
|
584 |
</crontab>
|
585 |
</config>
|
15 |
<config>
|
16 |
<modules>
|
17 |
<Simtech_Searchanise>
|
18 |
+
<version>1.1.4</version>
|
19 |
</Simtech_Searchanise>
|
20 |
</modules>
|
21 |
<frontend>
|
559 |
<search_timeout>3</search_timeout>
|
560 |
<request_timeout>10</request_timeout>
|
561 |
<ajax_async_timeout>1</ajax_async_timeout>
|
562 |
+
<products_per_pass>50</products_per_pass>
|
563 |
<max_error_count>25</max_error_count>
|
564 |
<max_processing_thread>3</max_processing_thread>
|
565 |
<max_processing_time>720</max_processing_time>
|
566 |
<max_search_request_length>8000</max_search_request_length>
|
567 |
<service_url>http://www.searchanise.com</service_url>
|
568 |
+
<cron_async_enabled>0</cron_async_enabled>
|
569 |
+
<ajax_async_enabled>0</ajax_async_enabled>
|
570 |
+
<!-- default sync init method -->
|
571 |
+
<object_async_enabled>1</object_async_enabled>
|
572 |
<input_id_search>search</input_id_search>
|
|
|
|
|
573 |
<enabled_searchanise_search>1</enabled_searchanise_search>
|
574 |
</config>
|
575 |
</searchanise>
|
576 |
</default>
|
577 |
<crontab>
|
578 |
<jobs>
|
579 |
+
<searchanise_indexer>
|
580 |
<!-- runs every 1 minutes as below. Change to (0 1 * * *) to run every night at 1am -->
|
581 |
<schedule><cron_expr>*/1 * * * *</cron_expr></schedule>
|
582 |
<run><model>searchanise/observer::autoSync</model></run>
|
583 |
+
</searchanise_indexer>
|
584 |
</jobs>
|
585 |
</crontab>
|
586 |
</config>
|
@@ -46,9 +46,12 @@
|
|
46 |
<show_in_website>1</show_in_website>
|
47 |
<show_in_store>1</show_in_store>
|
48 |
</input_id_search>
|
49 |
-
|
|
|
|
|
50 |
<label><![CDATA[Sync Init Method]]></label>
|
51 |
-
<comment><![CDATA[
|
|
|
52 |
<strong>AJAX</strong>. Select this option if you want the database synchronization to be initialized everytime a page is visited in the customer area.
|
53 |
]]></comment>
|
54 |
<frontend_type>select</frontend_type>
|
@@ -57,7 +60,8 @@
|
|
57 |
<show_in_default>1</show_in_default>
|
58 |
<show_in_website>0</show_in_website>
|
59 |
<show_in_store>0</show_in_store>
|
60 |
-
</type_async>
|
|
|
61 |
<enabled_searchanise_search translate="labe comment">
|
62 |
<label><![CDATA[Use Searchanise for search and advanced search]]></label>
|
63 |
<comment><![CDATA[Disable in case of invalid search operation.<br>The instant search widget will <strong>remain active</strong>.]]></comment>
|
46 |
<show_in_website>1</show_in_website>
|
47 |
<show_in_store>1</show_in_store>
|
48 |
</input_id_search>
|
49 |
+
<!-- Hided the "Sync Init Method" option -->
|
50 |
+
<!--
|
51 |
+
<type_async translate="label comment">
|
52 |
<label><![CDATA[Sync Init Method]]></label>
|
53 |
+
<comment><![CDATA[
|
54 |
+
<strong>Cron</strong>. If cron service is set up and running, it is recommended to use this option. Database synchronization will be initialized according to the cron schedule.<br>
|
55 |
<strong>AJAX</strong>. Select this option if you want the database synchronization to be initialized everytime a page is visited in the customer area.
|
56 |
]]></comment>
|
57 |
<frontend_type>select</frontend_type>
|
60 |
<show_in_default>1</show_in_default>
|
61 |
<show_in_website>0</show_in_website>
|
62 |
<show_in_store>0</show_in_store>
|
63 |
+
</type_async>
|
64 |
+
-->
|
65 |
<enabled_searchanise_search translate="labe comment">
|
66 |
<label><![CDATA[Use Searchanise for search and advanced search]]></label>
|
67 |
<comment><![CDATA[Disable in case of invalid search operation.<br>The instant search widget will <strong>remain active</strong>.]]></comment>
|
@@ -1,28 +1,34 @@
|
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>Simtech_Searchanise</name>
|
4 |
-
<version>1.1.
|
5 |
<stability>stable</stability>
|
6 |
-
<license uri="
|
7 |
<channel>community</channel>
|
8 |
<extends/>
|
9 |
<summary>Searchanise Connector Add-on allows you to easily integrate Searchanise rapid search service in your online store. The add-on provides both an admin panel and a customer area widgets.</summary>
|
10 |
<description>Searchanise is a free SaaS solution providing fast and smart search for online stores. It provides rapid search results and instant search suggestions presented in a fancy and customizable widget.
|
11 |

|
12 |
With the help of Searchanise Connector Add-on you will be able to connect your store to the service and start using the search widget in no time. Power up your store right now!</description>
|
13 |
-
<notes>
|
14 |
-
|
15 |
-
|
16 |
-
[+]
|
17 |
-
[
|
18 |
-
[
|
19 |
-
|
20 |
-
|
21 |
-
[!]
|
|
|
|
|
|
|
|
|
|
|
|
|
22 |
<authors><author><name>Simbirsk Technologies, Ltd.</name><user>searchanise</user><email>sales@searchanise.com</email></author></authors>
|
23 |
-
<date>2013-07-
|
24 |
-
<time>
|
25 |
-
<contents><target name="magecommunity"><dir name="Simtech"><dir name="Searchanise"><dir name="Block"><file name="Async.php" hash="
|
26 |
<compatible/>
|
27 |
<dependencies><required><php><min>5.2.13</min><max>6.0.0</max></php></required></dependencies>
|
28 |
</package>
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>Simtech_Searchanise</name>
|
4 |
+
<version>1.1.4</version>
|
5 |
<stability>stable</stability>
|
6 |
+
<license uri="http://docs.searchanise.com/connector_addon/license_agreement.html">Commercial license: http://docs.searchanise.com/connector_addon/license_agreement.html</license>
|
7 |
<channel>community</channel>
|
8 |
<extends/>
|
9 |
<summary>Searchanise Connector Add-on allows you to easily integrate Searchanise rapid search service in your online store. The add-on provides both an admin panel and a customer area widgets.</summary>
|
10 |
<description>Searchanise is a free SaaS solution providing fast and smart search for online stores. It provides rapid search results and instant search suggestions presented in a fancy and customizable widget.
|
11 |

|
12 |
With the help of Searchanise Connector Add-on you will be able to connect your store to the service and start using the search widget in no time. Power up your store right now!</description>
|
13 |
+
<notes>The new version introduces the long-awaited tax-included prices, other new features and important fixes.<br />
|
14 |
+
<br />
|
15 |
+
Features:<br />
|
16 |
+
[+] Basic support for taxed prices added: taxes and prices are calculated as for a guest customer.<br />
|
17 |
+
[+] If Searchanise is used for search and advanced search, all the "items per page" variants over 100 (including "All") are hidden.<br />
|
18 |
+
[+] Sync method updated for better stability.<br />
|
19 |
+
<br />
|
20 |
+
Fixes:<br />
|
21 |
+
[!] Price filter step could be calculated incorrectly. Fixed.<br />
|
22 |
+
[!] Server sync could stop if a product image was missing in the filesystem. Fixed.<br />
|
23 |
+
[!] Server sync could stop if a product link contained the & character.<br />
|
24 |
+
<br />
|
25 |
+
Other:<br />
|
26 |
+
[-] The cron sync init method has been hidden from the Magento admin panel. It can only be enabled by manually editing the config file.<br />
|
27 |
+
[~] Cron namespace changed from <cronjob_name></cronjob_name> to <searchanise_indexer></searchanise_indexer></notes>
|
28 |
<authors><author><name>Simbirsk Technologies, Ltd.</name><user>searchanise</user><email>sales@searchanise.com</email></author></authors>
|
29 |
+
<date>2013-07-29</date>
|
30 |
+
<time>12:02:35</time>
|
31 |
+
<contents><target name="magecommunity"><dir name="Simtech"><dir name="Searchanise"><dir name="Block"><file name="Async.php" hash="e6b1951b34dbd7f158c7acb54b1d10dd"/><file name="Autocomplete.php" hash="efc89ac3f897be3bc307fba6a36778f0"/><file name="Jsinit.php" hash="44d40c5d699abc2ac75a6e172dedd84b"/><dir name="Product"><dir name="List"><file name="Toolbar.php" hash="73c06dbe5c5ca8778bb2488ed2b5b5ed"/></dir><file name="Result.php" hash="4e767e273ee21a38332ac226af878291"/></dir><file name="Result.php" hash="dec7b27ab9511c956680eb60eba9b95e"/></dir><dir name="Helper"><file name="ApiSe.php" hash="48092aef60145974d096c55085469875"/><file name="ApiXML.php" hash="d3ea232400c8c10683942fbf8abcc708"/><file name="Data.php" hash="53bbede2bf74a83521ee64240739f898"/></dir><dir name="Model"><file name="Advanced.php" hash="2a22ebcf7ac75b54681ef8a27bad2e47"/><dir name="Config"><file name="Data.php" hash="ddc558d22208f0ebc1e4378c9d050022"/></dir><file name="Config.php" hash="00ca3c7955f3ff2283c636a2074b6f03"/><dir name="Import"><dir name="Entity"><file name="Product.php" hash="4997af528b36f0f576d1c01402e14b03"/></dir></dir><dir name="Layer"><dir name="Filter"><file name="Category.php" hash="e290ab29f2d50e1acbbbb37496150ea4"/><file name="Price.php" hash="743887b32bf012274ad8a371fff96411"/></dir></dir><file name="Layer.php" hash="3e8c975d649ae6e20fcc69d35779c97c"/><file name="LayerCatalogSearch.php" hash="61728092fdb9cf42490afacdc4e731fd"/><dir name="Mysql4"><dir name="Advanced"><file name="Collection.php" hash="dd8c6f3cbb0621a5a7320f3104e68da6"/></dir><dir name="Config"><file name="Collection.php" hash="470218c1eb3f1cc1ca0e6d0e93e1b097"/></dir><file name="Config.php" hash="c95dc8ecd7ab4f955b6eaf4710ab960e"/><dir name="Fulltext"><file name="Collection.php" hash="5646955503a90020f87cfd861ac07e73"/></dir><dir name="Product"><file name="Collection.php" hash="28b478eb328502ce03e389404d9f54b5"/><file name="CollectionTag.php" hash="def509d1365374e6dede36be17e75bf3"/></dir><dir name="Queue"><file name="Collection.php" hash="30ca0f8640bdc443deb94cd2e71010c8"/></dir><file name="Queue.php" hash="286351623e8f011a21519f8d9c3e3151"/><file name="Store.php" hash="0126a4291d7dad6641bf59abb0f64cc4"/></dir><file name="Observer.php" hash="8d24a27713e1db605ef0c14862df8bf0"/><file name="Queue.php" hash="831f5ea7e57810f9c78d09659424e9a7"/><file name="Request.php" hash="af0f9a16a0dbc69ba76458eac802638b"/><dir name="Resource"><dir name="Advanced"><file name="Collection.php" hash="12933839daa74d17ac82fca89071bc0a"/></dir><dir name="Eav"><dir name="Mysql4"><dir name="Layer"><dir name="Filter"><file name="Attribute.php" hash="982b1960bec58522f1bd8b82f86452b4"/><file name="Price.php" hash="fc1ec55d6c2aa97558e06691e690e466"/></dir></dir><dir name="Product"><file name="Action.php" hash="006e3c8c775cf31a8b9c66fb934c9d2d"/></dir></dir></dir><dir name="Fulltext"><file name="Collection.php" hash="b9e2e4884a7ecee0000e6a41c0e6d3e2"/></dir><dir name="Layer"><dir name="Filter"><file name="Attribute.php" hash="0bfecbdff2458785a287c3f1de23ed56"/><file name="Price.php" hash="38d1acaa4478d678d4bb20704a81b760"/></dir></dir><dir name="Product"><file name="Collection.php" hash="6072bf2a7a4713f3db2fa96014e7453a"/><file name="CollectionTag.php" hash="e89307da7c26ee153c3f9dead94dcd13"/></dir><file name="Store.php" hash="8dd81bf57d38af2b4640bbf14063d3f8"/></dir><file name="Searchanise.php" hash="507813e92908000315aabc4256c5a05c"/><dir name="System"><dir name="Config"><dir name="Source"><dir name="Searchanise"><file name="TypeAsync.php" hash="11d1aa481094ccbeab365b1fed33440d"/></dir></dir></dir></dir><dir name="Tag"><file name="Relation.php" hash="598f81fd8b2ac77baf24211c2ed03e55"/></dir></dir><dir name="controllers"><file name="AdvancedController.php" hash="7500f6075382cd8a14816e424da2348f"/><file name="AsyncController.php" hash="7230f285e302910b3d8387da10cbcf3a"/><file name="CategoryController.php" hash="909f99c5cf7f85405fc76ebe976c2c8e"/><file name="IndexController.php" hash="e3234ca51a7669741e29ff7c38789989"/><file name="InfoController.php" hash="7a6010b6e3cfdce070f25e0b8136a9d7"/><file name="OptionsController.php" hash="56785c8ea24472c2047268b2d9e8e878"/><file name="ProductController.php" hash="6633fde99f35ffeaa05884f0e0d98da7"/><file name="ResultController.php" hash="4b00515cc47593704ea1178d7b44d48e"/><file name="ResyncController.php" hash="0612f929d375427326821dfc12186be8"/><file name="SignupController.php" hash="80f87a63d6272f98a068dde35f1d140e"/></dir><dir name="etc"><file name="config.xml" hash="4ffdb4cb4c99bc5176b2127f143cc08c"/><file name="config_without_search.xml" hash="fe5e574fbd8b027b2cefc55297c5205b"/><file name="system.xml" hash="a6b2e082fe45706b86b8da0fe02d4374"/></dir><dir name="sql"><dir name="searchanise_setup"><file name="mysql4-install-0.1.0.php" hash="754324c8783e9cc24de86396e1587e73"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="template"><dir name="searchanise"><file name="dashboard.phtml" hash="8b9793a009151951e1e1f8e4cecb4db2"/></dir></dir><dir name="layout"><file name="searchanise.xml" hash="68baa611d05db05f8816ea2a8260e961"/></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="searchanise.xml" hash="5e904fee02cbd42324a297d513b9f582"/></dir></dir></dir><dir name="default"><dir name="default"><dir name="template"><dir name="catalogsearch"><file name="form.mini.phtml" hash="fcf8e06e66801a36c96f20ca5d187123"/></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Simtech_Searchanise.xml" hash="04148681a6648bd370ab62140cbf2ad9"/></dir></target><target name="magelocale"><dir name="en_US"><file name="Simtech_Searchanise.csv" hash="1bdb7fddc596dac1460bc3054c425187"/></dir></target></contents>
|
32 |
<compatible/>
|
33 |
<dependencies><required><php><min>5.2.13</min><max>6.0.0</max></php></required></dependencies>
|
34 |
</package>
|