Leaderboard
Popular Content
Showing content with the highest reputation on 03/22/2011 in all areas
-
на сколько я помню...удаляете вот этот участок кода <div class="div5"> <div class="left"></div> <div class="right"></div> <div class="center"> <div id="search"> <div class="div8"><?php echo $entry_search; ?> </div> <div class="div9"> <?php if ($keyword) { ?> <input type="text" value="<?php echo $keyword; ?>" id="filter_keyword" /> <?php } else { ?> <input type="text" value="<?php echo $text_keyword; ?>" id="filter_keyword" onclick="this.value = '';" onkeydown="this.style.color = '#000000'" style="color: #999;" /> <?php } ?> <select id="filter_category_id"> <option value="0"><?php echo $text_category; ?></option> <?php foreach ($categories as $category) { ?> <?php if ($category['category_id'] == $category_id) { ?> <option value="<?php echo $category['category_id']; ?>" selected="selected"><?php echo $category['name']; ?></option> <?php } else { ?> <option value="<?php echo $category['category_id']; ?>"><?php echo $category['name']; ?></option> <?php } ?> <?php } ?> </select> </div> <div class="div10"> <a onclick="moduleSearch();" class="button"><span><?php echo $button_go; ?></span></a> <a href="<?php echo str_replace('&', '&', $advanced); ?>"><?php echo $text_advanced; ?></a></div> </div> </div> </div> </div>файл catalog>view>theme>ваша_тема>template>common>header.tplтак как виртуальная машина сейчас недоступна...писал по памяти...))) с уважением fantasm...)) P.S.в зависимости от шаблона...код может отличатся... но думаю вы поняли где вам надо копать и что искать...)))1 point
-
Спасибо за адаптирование данного скрипта к Опенкарту. Ничего абсолютно не нужно инициализировать , переменная title в описании скрипта имеет общий смысл и в разных CMS она может иметь разное значение. Нам ведь нужно что - чтобы мы сообщили друзьям в соц.сети о понравившемся товаре , а именно название . Поэтому всё очень просто. Делаем так : Первую строку скрипта переносите в header.tpl в раздел <head> после строки <script type="text/javascript" src="catalog/view/javascript/jquery/jquery-1.3.2.min.js"></script>Вторую строку ставите на страницу товара в нужное место и вместо $title ставите <?php echo $heading_title; ?> (т.е. название товара открытой страницы).У меня всё получилось даже без изменения CSS . Пример www.mirfredericm.ru Тестировал на "Вконтакте" - в результате товар с картинкой и описанием сохранился на доске или как она там называется. Но когда я зашёл на сам сайт , то картинка в записи на доске не появилась (возможно формат большой). Есть название товара и ссылка. При наведении мышки на ссылку - открывается текст описания и ссылка на товар. PS хорошо бы понять какое изображение отправляется . И нужно сделать так чтобы оно было по размерам как для боковых модулей (маленькое). !!! Выяснился косяк - при переходе "Вконтакт" , непосредственное изображение товара не подключается , а дается выбор изображений со всего сайта и из боковых модулей. Скорее всего нужно изменять вторую скриптовую строку.1 point
-
1 point
-
В общем при переустановке ничего не изменилось: импорт не проходит. Думается мне все дело в хостинге. Но при общении с их ТП ничего внятного объяснить и внятно понять не могу. =) Может кто возмется помочь за отдельную плату? https://opencartforum.com/public/style_emoticons/default/dry.gif На всяк случай пишу как всё ставил: 1. Скачал в главной страницы ocStore v0.1.7 (OpenCart 1.4.9.3) выпущена 5-го Января, 2011 и opencart-1-4-9-18-export-import.zip из страницы дополнений. 2. Установил магазин (дал атрибуты чтения, MySql, пароли на админку.) и снес /install 3. Из распакованного import скопировал с заменой в соотв. папки все файлы. 4. Переместил с заменой файлы импорта из language/english в language russian 5. Из-за ошибки при экспорте удалил строчку set_time_limit(); из ...tool\export.php :huh: Экспорт идет нормально. Импорт вообще ничего делает. В логе хостинга пишет что не может создать временный файл в Unknown line 0. Хостинг Masterhost. Вот что прочитал у них на сайте: Нужно учитывать, что на работу PHP налагаются некоторые ограничения. По соображениям безопасности мы запретили использование следующих команд: dl shell_exec exec system passthru popen proc_open proc_nice proc_get_status proc_close proc_terminate posix_mkfifo set_time_limit В случае, если какие-то из этих команд все же однозначно вам необходимы, можно собрать собственный бинарный файл PHP и использовать его в cgi-режиме. Если же на самом деле вы хотите использовать функции вроде exec для выполнения периодических заданий вроде бэкапа баз MySQL, пожалуйста, используйте для этого cron. Если же нужно разово выполнить какую-то команду, можно использовать для этого UNIX shell.1 point
-
Добавьте этот код: $("a.thickbox").fancybox({ 'speedIn' : 600, 'speedOut' : 500, 'transitionIn': 'elastic', 'transitionOut': 'elastic', 'easingIn' : 'easeOutBack', 'easingOut' : 'easeInBack', 'autoDimensions': false, 'width': 800, 'height': 480, 'hideOnContentClick': true, 'titleShow': false }); Тогда и "Политика безопасности" (Privacy Policy) будет открываться так же - как и изображения товара.Пример: Что то, я на этом сайте, вообще FancyBox не вижу. ;)1 point
-
Админка- Дополнения- Доставка Доставка без фиксированной оплаты -> установить В поле ИТОГО указываем сумму порога. статус включить и регионы для которых действует. собственно все OC v 0.181 point
-
Менять надо не только в этом файле, а во всех вышеперечисленных. Т.к., если поменять только в том файле, что вы предлагаете - изменится только одна форма: "Регистрация Личного Кабинета". А как же покупатели без регистрации? А редактирование персональных данных? Там тоже надо менять эти названия.Если так уж сильно лень делать изменения в стольких файлах - можно файлы из папки admin/... не править, т.к. их будет только админ магазина видеть. А вышеперечисленные файлы из папки catalog/... таки надо все править.1 point
-
1 point
-
- это дубль контента. Имеется ввиду, что, например, на странице, скажем, категорий, имеется фильтр - по умолчанию, по алфавиту, по цене и т.п. Вот робот и получает по нескольку раз одно и то-же. Тут гдето поднималась тема, юзайте поиск насчет "дубль контента". Плюс канонические страницы - замечательная шняга. Нужно идти в ногу со временем. Завтра весь интернет будет в канонических страницах ;)С уважением. :lol: :lol: :lol: :lol: чей-то я перепутал. В выдаче МЕНЬШЕ, чем нужно)))) Извините, заработался, спать хотел)1 point
-
https://opencartforum.com/files/file/15-news-letter-module/1 point
-
сейчас напишу, как сделать. UPD решение для товаров, которые входят только в одну категорию Обновление от 2011.02.08 - 12:01 Всем, кто использовал мой метод, настоятельно рекомендую заменить старый код на новый. + исправлена ошибка проявляющаяся при большой вложенности категорий; + исправлено формирование ссылок на категории в "крошках". 1. Открываем файл catalog/controller/product/product.phpменяем if (isset($this->request->get['path'])) { $path = ''; foreach (explode('_', $this->request->get['path']) as $path_id) { $category_info = $this->model_catalog_category->getCategory($path_id); if (!$path) { $path = $path_id; } else { $path .= '_' . $path_id; } if ($category_info) { $this->document->breadcrumbs[] = array( 'href' => $this->model_tool_seo_url->rewrite(HTTP_SERVER . 'index.php?route=product/category&path=' . $path), 'text' => $category_info['name'], 'separator' => $this->language->get('text_separator') ); } } }на /* webme - fix for product breadcrumbs - part_#1 - start */ $wRestoreBreadcrumbs = "0"; /* webme - fix for product breadcrumbs - part_#1 - end */ if (isset($this->request->get['path'])) { $path = ''; foreach (explode('_', $this->request->get['path']) as $path_id) { $category_info = $this->model_catalog_category->getCategory($path_id); if (!$path) { $path = $path_id; } else { $path .= '_' . $path_id; } if ($category_info) { $this->document->breadcrumbs[] = array( 'href' => $this->model_tool_seo_url->rewrite(HTTP_SERVER . 'index.php?route=product/category&path=' . $path), 'text' => $category_info['name'], 'separator' => $this->language->get('text_separator') ); } } } else { /* webme - fix for product breadcrumbs - part_#2 - start */ $wRestoreBreadcrumbs = "1"; } /* webme - fix for product breadcrumbs - part_#2 - end */мотаем ниже.перед $product_info = $this->model_catalog_product->getProduct($product_id);вставляем /* webme - fix for product breadcrumbs - part_#3 - start */ if ($wRestoreBreadcrumbs == "1") { $wcat = $this->model_catalog_product->getCategories($product_id); if (count($wcat) == 1) { $w_category_id = $wcat['0']['category_id']; $w_BreadCrumbs = $this->model_catalog_product->wbm_getPath($w_category_id); $w_totalCrumbs = count($w_BreadCrumbs); foreach ($w_BreadCrumbs as $pos => $w_BreadCrumb) { $w_BreadCrumb_href = ""; $w_i = 0; for($w_i = 0; $w_i <= $pos; $w_i++) { if (empty($w_BreadCrumb_href)) { $w_BreadCrumb_href .= $w_BreadCrumbs[$w_i]["category_id"]; } else { $w_BreadCrumb_href .= "_".$w_BreadCrumbs[$w_i]["category_id"]; } } $this->document->breadcrumbs[] = array( 'href' => $this->model_tool_seo_url->rewrite(HTTP_SERVER . 'index.php?route=product/category&path=' . $w_BreadCrumb_href), 'text' => $w_BreadCrumb['name'], 'separator' => $this->language->get('text_separator') ); } } } /* webme - fix for product breadcrumbs - part_#3 - end */сохраняем, закрываем.2. Открываем файл catalog/model/catalog/product.phpв конец файла, перед } ?>вставляем /* webme - fix for product breadcrumbs - part_#1 - start */ public function wbm_getPath($category_id) { $productPath = array(); $result = $this->wbm_getProductCategoryInfo($category_id); $productPath2 = array(); if ($result['parent_id'] > 0) { $productPath2 = $this->wbm_getPath($result['parent_id']); foreach ($productPath2 as $productPath2_item) { array_push($productPath, $productPath2_item); } } array_push($productPath, $result); return $productPath; } public function wbm_getProductCategoryInfo($catID) { $sql = "SELECT DISTINCT c.category_id as category_id, c.parent_id as parent_id, cd.name as name FROM " . DB_PREFIX . "category c LEFT JOIN " . DB_PREFIX . "category_description cd ON (c.category_id = cd.category_id) LEFT JOIN " . DB_PREFIX . "category_to_store c2s ON (c.category_id = c2s.category_id) WHERE c.category_id = '" . (int)$catID . "' AND cd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND c.status = '1'"; $query = $this->db->query($sql); return $query->row; } public function wbm_getParentCategory($catID) { $sql = "SELECT DISTINCT c.parent_id as parent_id, cd.name as name FROM " . DB_PREFIX . "category c LEFT JOIN " . DB_PREFIX . "category_description cd ON (c.parent_id = cd.category_id) LEFT JOIN " . DB_PREFIX . "category_to_store c2s ON (c.category_id = c2s.category_id) WHERE c.category_id = '" . (int)$catID . "' AND cd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND c.status = '1'"; $query = $this->db->query($sql); return $query->row; } /* webme - fix for product breadcrumbs - part_#1 - end */сохраняем, закрываем.3. Пользуемся :) Возможно в модель запихнул лишнюю функцию (которая не используется). Однако ужасно устал, поэтому принимайте "как есть".1 point
-
Тут же я. Извиняюсь за опоздание, но я решил сделать полноценный модуль и не с фиксированными опциями, как у меня в примерах, а изменяемыми / дополняемыми из админки. При чем в базу данных для этого лезть не надо. Всё автоматизированно. И еще, сюда же включил AJAX листалку в категории и AJAX сортировку. Всё это активируется после первого изменения параметров фильтра со стороны пользователя за время нахождения в категории. Опишу ф-ции модуля Opencart Product Filter 1.0 :-) : добавление опций фильтра и значений к ним указание сортировки опций указание одной или нескольких категорий, в которых будет действовать данная опция поддержка мультиязычности указание опций фильтра на странице редактирования товара. В зависимости от выбранных категорий, во вкладку Опции фильтра будут подгружаться на лету опции этой категории. AJAX подгрузка товаров категории при изменении состояния фильтра. Индикатор активности фильтра (громко сказано, просто jQuery анимация при любых действиях с input'ами фильтра). Если что, пишите в асю, сюда редко захожу. Буду рад выслушать замечания или предложения. В следующей версии хочу сделать еще несколько типов полей фильтра: слайдер, слайдер-диапазон, текстовое поле. Перейдем к установке: Если у вас чистая система и вы еще ничего в её коде не изменяли, то качайте архив Openstore_module_product_filter_1.0_(clean_install).rar и просто извлеките файлы в корень с заменой и выполните запрос в базу данных CREATE TABLE IF NOT EXISTS `category_option` ( `option_id` int(10) NOT NULL AUTO_INCREMENT, `type` int(1) DEFAULT '0', `sort_order` int(10) DEFAULT '0', PRIMARY KEY (`option_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;CREATE TABLE IF NOT EXISTS `category_option_description` ( `option_id` int(10) NOT NULL DEFAULT '0', `language_id` int(10) NOT NULL DEFAULT '0', `name` varchar(127) DEFAULT NULL, PRIMARY KEY (`option_id`,`language_id`), KEY `name` (`name`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;CREATE TABLE IF NOT EXISTS `category_option_to_category` ( `option_id` int(11) NOT NULL, `category_id` int(11) NOT NULL, PRIMARY KEY (`category_id`,`option_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;CREATE TABLE IF NOT EXISTS `category_option_value` ( `value_id` int(10) NOT NULL AUTO_INCREMENT, `option_id` int(10) DEFAULT '0', PRIMARY KEY (`value_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;CREATE TABLE IF NOT EXISTS `category_option_value_description` ( `value_id` int(10) NOT NULL DEFAULT '0', `language_id` int(10) NOT NULL DEFAULT '0', `option_id` int(10) NOT NULL DEFAULT '0', `name` varchar(127) DEFAULT NULL, PRIMARY KEY (`value_id`,`language_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;CREATE TABLE IF NOT EXISTS `product_to_value` ( `product_id` int(11) NOT NULL, `value_id` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`product_id`,`value_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;Если нет, то установка "вручную", или на систему, которая уже подвергалась изменениям в коде:1) Делаем запрос в базу данных CREATE TABLE IF NOT EXISTS `category_option` ( `option_id` int(10) NOT NULL AUTO_INCREMENT, `type` int(1) DEFAULT '0', `sort_order` int(10) DEFAULT '0', PRIMARY KEY (`option_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;CREATE TABLE IF NOT EXISTS `category_option_description` ( `option_id` int(10) NOT NULL DEFAULT '0', `language_id` int(10) NOT NULL DEFAULT '0', `name` varchar(127) DEFAULT NULL, PRIMARY KEY (`option_id`,`language_id`), KEY `name` (`name`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;CREATE TABLE IF NOT EXISTS `category_option_to_category` ( `option_id` int(11) NOT NULL, `category_id` int(11) NOT NULL, PRIMARY KEY (`category_id`,`option_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;CREATE TABLE IF NOT EXISTS `category_option_value` ( `value_id` int(10) NOT NULL AUTO_INCREMENT, `option_id` int(10) DEFAULT '0', PRIMARY KEY (`value_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;CREATE TABLE IF NOT EXISTS `category_option_value_description` ( `value_id` int(10) NOT NULL DEFAULT '0', `language_id` int(10) NOT NULL DEFAULT '0', `option_id` int(10) NOT NULL DEFAULT '0', `name` varchar(127) DEFAULT NULL, PRIMARY KEY (`value_id`,`language_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;CREATE TABLE IF NOT EXISTS `product_to_value` ( `product_id` int(11) NOT NULL, `value_id` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`product_id`,`value_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8; 2) В файле adminviewtemplatecatalogproduct_form.tplПосле <a tab="#tab_links"><?php echo $tab_links; ?></a>Вставляем <a tab="#tab_filter">Опции фильтра</a>После блока <div id="tab_general"></div>Вставляем <!-- Start tab filter--> <div id="tab_filter"> Сначала необходимо выбрать категории товара </div> <!-- End tab filter-->Теперь идем в конец файла, ДО <?php echo $footer; ?>Вставляем <script type="text/javascript"><!--$.tabs('#tabs a'); $.tabs('#languages a'); //--></script><script type="text/javascript"><!--$('input[name=product_category[]]').live('change', function() { getOptions();});<?php if (isset($this->request->get['product_id'])) { ?> <?php $if_product_id = '&product_id=' . $this->request->get['product_id']; ?> getOptions();<?php } else { ?> <?php $if_product_id = ''; ?><?php } ?>function getOptions() { var loadUrl = ''; var fields = $("input[name=product_category[]]").serializeArray(); jQuery.each(fields, function(i, field){ if (i == 0) { loadUrl += field.value; } else { loadUrl += '_' + field.value; } }); $('#tab_filter').load('index.php?route=catalog/product/filter&token=<?php echo $token; ?><?php echo $if_product_id; ?>&path=' + loadUrl); }//--></script>Сохраняем и закрываем.3) Открываем файл adminmodelcatalogproduct.php После блока (метод addProduct) if (isset($data['product_store'])) { foreach ($data['product_store'] as $store_id) { $this->db->query("INSERT INTO " . DB_PREFIX . "product_to_store SET product_id = '" . (int)$product_id . "', store_id = '" . (int)$store_id . "'"); } }Вставляем // Start Filter if (isset($data['product_to_value_id'])) { foreach ($data['product_to_value_id'] as $value_id) { $this->db->query("INSERT INTO " . DB_PREFIX . "product_to_value SET product_id = '" . (int)$product_id . "', value_id = '" . (int)$value_id . "'"); } } // End filterПосле блока (метод updateProduct) $this->db->query("DELETE FROM " . DB_PREFIX . "product_to_store WHERE product_id = '" . (int)$product_id . "'"); if (isset($data['product_store'])) { foreach ($data['product_store'] as $store_id) { $this->db->query("INSERT INTO " . DB_PREFIX . "product_to_store SET product_id = '" . (int)$product_id . "', store_id = '" . (int)$store_id . "'"); } }Вставляем // Start filter $this->db->query("DELETE FROM " . DB_PREFIX . "product_to_value WHERE product_id = '" . (int)$product_id . "'"); if (isset($data['product_to_value_id'])) { foreach ($data['product_to_value_id'] as $value_id) { $this->db->query("INSERT INTO " . DB_PREFIX . "product_to_value SET product_id = '" . (int)$product_id . "', value_id = '" . (int)$value_id . "'"); } } // End filterПосле (метод copyProduct) $data = array_merge($data, array('product_store' => $this->getProductStores($product_id)));Вставляем // Start filter $data = array_merge($data, array('product_to_value_id' => $this->getProductValues($product_id))); // End filterПосле (метод deleteProduct) $this->db->query("DELETE FROM " . DB_PREFIX . "product_to_store WHERE product_id = '" . (int)$product_id . "'");Вставляем // Start filter $this->db->query("DELETE FROM " . DB_PREFIX . "product_to_value WHERE product_id = '" . (int)$product_id . "'"); // End filterИдем в конец файла, до закрытия класса вставляем // Start filter public function getProductValues($product_id) { $values_id = array(); $query = $this->db->query("SELECT " . DB_PREFIX . "p2v.value_id AS value_id FROM " . DB_PREFIX . "product_to_value p2v WHERE p2v.product_id = '" . (int)$product_id . "'"); foreach ($query->rows as $result) { $values_id[] = $result['value_id']; } return $values_id; } // End filterСохраняем и закрываем4) Открываем admincontrollercatalogproduct.php и идем в конец файла, до закрытия класса вставляем // Start filter public function filter() { $this->load->model('catalog/filter'); $this->load->model('catalog/product'); $this->data['category_options'] = array(); if (isset($this->request->get['path']) && $this->request->get['path'] != '') { $parts = explode('_', $this->request->get['path']); $results = $this->model_catalog_filter->getOptionByCategoriesId($parts); if ($results) { foreach($results as $option) { $this->data['category_options'][] = array( 'option_id' => $option['option_id'], 'name' => $option['name'], 'type' => $option['type'], 'category_option_values' => $this->model_catalog_filter->getOptionValues($option['option_id']) ); } } else { $this->data['message'] = 'Этой категории товаров не присвоен ниодин фильтр'; } } else { $this->data['message'] = 'Сначала выберите категорию товаров'; } if (isset($this->request->get['product_id'])) { $product_id = $this->request->get['product_id']; } else { $product_id = 0; } $product_info = $this->model_catalog_product->getProductValues($product_id); if (isset($this->request->post['product_to_value_id'])) { $this->data['product_to_value_id'] = $this->request->post['product_to_value_id']; } elseif (isset($product_info)) { $this->data['product_to_value_id'] = $this->model_catalog_product->getProductValues($product_id); } else { $this->data['product_to_value_id'] = array(); } $this->data['language_id'] = $this->config->get('config_language_id'); $this->template = 'catalog/get_ajax_options.tpl'; $this->response->setOutput($this->render(TRUE), $this->config->get('config_compression')); } // End filterСохраняем и закрываем.5) Открываем catalogmodelcatalogproduct.php Заменяем public function getProductsByCategoryId($category_id, $sort = 'p.sort_order', $order = 'ASC', $start = 0, $limit = 20) {На public function getProductsByCategoryId($category_id, $values, $sort = 'p.sort_order', $order = 'ASC', $start = 0, $limit = 20) {До блока $sort_data = array( 'pd.name', 'p.sort_order', 'special', 'rating', 'p.price', 'p.model' );Вставляем // Start filter if (isset($values) && $values != '') { $data = array(); foreach (explode('_', $values) as $value_id) { $data[] = "value_id = '" . (int)$value_id . "'"; } $sql .= " AND p.product_id IN (SELECT " . DB_PREFIX . "product_id FROM " . DB_PREFIX . "product_to_value WHERE " . implode(" OR ", $data) . ")"; } // End filterЗаменяем весь метод public function getTotalProductsByCategoryId На public function getTotalProductsByCategoryId($category_id = 0, $values) { $sql = "SELECT COUNT(*) AS total FROM " . DB_PREFIX . "product_to_category p2c LEFT JOIN " . DB_PREFIX . "product p ON (p2c.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND p2c.category_id = '" . (int)$category_id . "'"; // Start filter if (isset($values) && $values != '') { $data = array(); foreach (explode('_', $values) as $value_id) { $data[] = "value_id = '" . (int)$value_id . "'"; } $sql .= " AND p.product_id IN (SELECT product_id FROM " . DB_PREFIX . "product_to_value WHERE " . implode(" OR ", $data) . ")"; } // End filter $query = $this->db->query($sql); return $query->row['total']; }В этом же методе, до $query = $this->db->query($sql); Вставляем // Start filter if (isset($values) && $values != '') { $data = array(); foreach (explode('_', $values) as $value_id) { $data[] = "value_id = '" . (int)$value_id . "'"; } $sql .= " AND p.product_id IN (SELECT product_id FROM " . DB_PREFIX . "product_to_value WHERE " . implode(" OR ", $data) . ")"; } // End filterСохраняем, закрываем.6) Открываем catalogcontrollerproductcategory.php Заменяем $product_total = $this->model_catalog_product->getTotalProductsByCategoryId($category_id);На $product_total = $this->model_catalog_product->getTotalProductsByCategoryId($category_id, $values = NULL);Заменяем $results = $this->model_catalog_product->getProductsByCategoryId($category_id, $sort, $order, ($page - 1) * $this->config->get('config_catalog_limit'), $this->config->get('config_catalog_limit'));На $results = $this->model_catalog_product->getProductsByCategoryId($category_id, $values = NULL, $sort, $order, ($page - 1) * $this->config->get('config_catalog_limit'), $this->config->get('config_catalog_limit')); 7) Качаем архив Openstore_module_product_filter_1.0_(manual_install).rar и извлекаем в корень сайта с заменой.8) Идем в админку -> дополнения и включаем фильтр. Дальше думаю всё ясно.1 point