dotsent Опубліковано: 13 вересня 2010 Share Опубліковано: 13 вересня 2010 В виду того, что оперкарт не обладает большим функционалом, как например magento, захотелось сделать фильтры подобные magento и хочется поделиться с другими пользователями.Хочется получить совет по поводу какие фильтров, и стоит ли вообще выкладывать модуль ?Пока что реализованно фильтры по производителям в конкретной категории вот пример: http://chipollino.com.ua/igrushki.html. Какие фильтры планируется сделать:По производителям - уже есть (добавить возможность выбора нескольких производителей, список чекбоксов )По под категориям - список чекбоксов По цене от: до: + слайде jquery (http://jqueryui.com/demos/slider/#range) Жду ещё Ваших предложений по фильтрам и их функциональности ? 2 Надіслати Поділитися на інших сайтах More sharing options...
19th Опубліковано: 13 вересня 2010 Share Опубліковано: 13 вересня 2010 Хочется получить совет по поводу какие фильтров, и стоит ли вообще выкладывать модуль ?Разумеется стоит.Можно еще фильтрацию (множественную с чек-боксами) по состояниям на складе. Надіслати Поділитися на інших сайтах More sharing options...
fill Опубліковано: 8 жовтня 2010 Share Опубліковано: 8 жовтня 2010 Есть вот такой сервис http://www.sellector.com/en/references, не плохо было бы организовать что то похожее. Надіслати Поділитися на інших сайтах More sharing options...
3BEPb Опубліковано: 20 жовтня 2010 Share Опубліковано: 20 жовтня 2010 Был бы очень полезен такой модуль, не хватает его в OpenCart'e :) Надіслати Поділитися на інших сайтах More sharing options...
AlexFisher Опубліковано: 25 жовтня 2010 Share Опубліковано: 25 жовтня 2010 Уважаемый dotsent!Воюю уже четвертый день с чекбоксами производителей в категории.плз, если не затруднит - решение в студию, или укажите хоть, где рыть,ибо измучался весь =)С уважением. Надіслати Поділитися на інших сайтах More sharing options... 3 weeks later... Helixir Опубліковано: 11 листопада 2010 Share Опубліковано: 11 листопада 2010 В виду того, что оперкарт не обладает большим функционалом, как например magento, захотелось сделать фильтры подобные magento и хочется поделиться с другими пользователями.Хочется получить совет по поводу какие фильтров, и стоит ли вообще выкладывать модуль ?Пока что реализованно фильтры по производителям в конкретной категории вот пример: http://chipollino.com.ua/igrushki.html. Какие фильтры планируется сделать:По производителям - уже есть (добавить возможность выбора нескольких производителей, список чекбоксов )По под категориям - список чекбоксов По цене от: до: + слайде jquery (http://jqueryui.com/demos/slider/#range) Жду ещё Ваших предложений по фильтрам и их функциональности ?Доброй ночи, а где собственно Вы уважаемый делитесь данным модулем? :roll: очень нужен фильтр, только по-производителям. Судя как Вы написали, Вы уже его сделали. Можно исходник? Надіслати Поділитися на інших сайтах More sharing options... dotsent Опубліковано: 12 листопада 2010 Автор Share Опубліковано: 12 листопада 2010 В данный момент был занят, там не так просто его выложить, так как там правились шаблоны сам код модуля. Могу выложить свой шаблон и контроллер, без инструкция что исправить или исправить кому надо на сайте. Сам модуль постараюсь доделать в ближайшее время. Надіслати Поділитися на інших сайтах More sharing options... Helixir Опубліковано: 12 листопада 2010 Share Опубліковано: 12 листопада 2010 В данный момент был занят, там не так просто его выложить, так как там правились шаблоны сам код модуля. Могу выложить свой шаблон и контроллер, без инструкция что исправить или исправить кому надо на сайте. Сам модуль постараюсь доделать в ближайшее время.Было бы не плохо, посмотреть на сам измененный код (в нем есть Ваши комментарии, в плане "My modify"?)Если Вы его дорабатываете, сам магазин у себя можно оформлять полностью, а потом только добавить модуль и все будет отлично? или стоит ждать модуля, а потом уже наполнять/создавать магазин? :roll: И еще один вопрос: Сам модуль отображает всех полностью производителей или только производителей, которые есть в данной категории?Так что, если вам будет не сложно, поделитесь уже измененными файлами. :cry: Может быть и разберемся как его интегрировать с 0. Надіслати Поділитися на інших сайтах More sharing options... dotsent Опубліковано: 12 листопада 2010 Автор Share Опубліковано: 12 листопада 2010 > И еще один вопрос: Сам модуль отображает всех полностью производителей или только производителей, которые есть в данной категории?Только в данной категории, просто там правок у меня было много, я там добавил ещё сетку по сколько товаров выводить и так далее комментариев, к сожалению нет.Изменёнными файлами поделюсь завтра скорей всего, постараюсь добавить комментарии в код и шаблон, так как он отличается от стандартного.Пишите email в личку пришлю Вам изменения. Надіслати Поділитися на інших сайтах More sharing options... SooR Опубліковано: 16 листопада 2010 Share Опубліковано: 16 листопада 2010 Ну в общем с этим я тоже боролся. В итоге делаю пока примитивным дополнением таблицы product полями-критериями для конкретной задачи, а потом в модели и контроллере дописываю необходимые критерии. Вот что получилось в двух проектах http://svobodamusic.net/music (нажать на фильтр материала) и http://poliit.com.ua/index.php?route=product/category Оба c AJAX. В дальнейшем, хочу реализовать кастомное добавление опций и значений, при чем опции могут быть разных типов: чекбокс, радио, селект, слайдер и слайдер-диапазон. Можно еще текстовое поле с keyup, но есть поиск. Хотя если реализовать так фильтр, то нужда в поиске исчезнет. Теперь вот думаю, что же выбрать, добавление полей ALTER'ом, что уж совсем низко, или же value_to_product. 2 Надіслати Поділитися на інших сайтах More sharing options... sumolex Опубліковано: 17 листопада 2010 Share Опубліковано: 17 листопада 2010 Супер! Очень понравился модуль. Давно ищу решение. Поделитесь? Надіслати Поділитися на інших сайтах More sharing options... SooR Опубліковано: 17 листопада 2010 Share Опубліковано: 17 листопада 2010 Конечно. Здесь напишу пошагово, если администрация не против. Надіслати Поділитися на інших сайтах More sharing options... sumolex Опубліковано: 18 листопада 2010 Share Опубліковано: 18 листопада 2010 Супер! Я думаю, вряд-ли кто будет против. Наоборот Надіслати Поділитися на інших сайтах More sharing options... Helixir Опубліковано: 22 листопада 2010 Share Опубліковано: 22 листопада 2010 Ну в общем с этим я тоже боролся. В итоге делаю пока примитивным дополнением таблицы product полями-критериями для конкретной задачи, а потом в модели и контроллере дописываю необходимые критерии. Вот что получилось в двух проектах http://svobodamusic.net/music (нажать на фильтр материала) и http://poliit.com.ua/index.php?route=product/category Оба c AJAX. В дальнейшем, хочу реализовать кастомное добавление опций и значений, при чем опции могут быть разных типов: чекбокс, радио, селект, слайдер и слайдер-диапазон. Можно еще текстовое поле с keyup, но есть поиск. Хотя если реализовать так фильтр, то нужда в поиске исчезнет. Теперь вот думаю, что же выбрать, добавление полей ALTER'ом, что уж совсем низко, или же value_to_product. Очень не плохо. В первом проекте понравилось. эх.... когда - же кто-то допишет сие чудо полностью и выложит... Доцент не связался так и ( Надіслати Поділитися на інших сайтах More sharing options... SooR Опубліковано: 22 листопада 2010 Share Опубліковано: 22 листопада 2010 Та уже вот дописываю. 95% общий прогресс, осталось красоту навести и подправить js для моментального отображения добавленной опции.Ну, а так же собрать все файлы в кучу и написать порядок установки.Ждите, сегодня-завтра выложу. Надіслати Поділитися на інших сайтах More sharing options... sumolex Опубліковано: 22 листопада 2010 Share Опубліковано: 22 листопада 2010 Та уже вот дописываю. 95% общий прогресс, осталось красоту навести и подправить js для моментального отображения добавленной опции.Ну, а так же собрать все файлы в кучу и написать порядок установки.Ждите, сегодня-завтра выложу.Очень жду, спасибо! Этого модуля очень не хватает.. Надіслати Поділитися на інших сайтах More sharing options... Гість Опубліковано: 23 листопада 2010 Share Опубліковано: 23 листопада 2010 Я седня начал копать а тут уже готовое решение :) ждем Надіслати Поділитися на інших сайтах More sharing options... sumolex Опубліковано: 26 листопада 2010 Share Опубліковано: 26 листопада 2010 SooR, где же Вы? Надіслати Поділитися на інших сайтах More sharing options... SooR Опубліковано: 27 листопада 2010 Share Опубліковано: 27 листопада 2010 Тут же я. Извиняюсь за опоздание, но я решил сделать полноценный модуль и не с фиксированными опциями, как у меня в примерах, а изменяемыми / дополняемыми из админки. При чем в базу данных для этого лезть не надо. Всё автоматизированно. И еще, сюда же включил 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) Идем в админку -> дополнения и включаем фильтр. Дальше думаю всё ясно. 4 Надіслати Поділитися на інших сайтах More sharing options... IceCOOL Опубліковано: 27 листопада 2010 Share Опубліковано: 27 листопада 2010 Благодарю, уважаемый коллега)) Отпишусь, ка протестирую =)) Надіслати Поділитися на інших сайтах More sharing options... IceCOOL Опубліковано: 27 листопада 2010 Share Опубліковано: 27 листопада 2010 Странно, не добавляются опции в админке. пишет "опция сохранена" обновляю страничку, а список еще пуст....думаю, что то с наименованием таблиц... у меня префикс oc_ в базе... может из-за того.... Надіслати Поділитися на інших сайтах More sharing options... IceCOOL Опубліковано: 27 листопада 2010 Share Опубліковано: 27 листопада 2010 Сделал чистую установку без префиксов в бд. Опции стали добавляться, однако при заходе в категорию выдает вот такой код Warning: Missing argument 2 for ModelCatalogProduct::getTotalProductsByCategoryId(), called in Z:homelocalhostwww24catalogcontrollerproductcategory.php on line 101 and defined in Z:homelocalhostwww24catalogmodelcatalogproduct.php on line 64 Надіслати Поділитися на інших сайтах More sharing options... SooR Опубліковано: 27 листопада 2010 Share Опубліковано: 27 листопада 2010 Конечно! Забыл о префиксах, тогда запрос будет вида CREATE TABLE IF NOT EXISTS `oc_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 `oc_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 `oc_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 `oc_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 `oc_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 `oc_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 Надіслати Поділитися на інших сайтах More sharing options... SooR Опубліковано: 27 листопада 2010 Share Опубліковано: 27 листопада 2010 Сделал чистую установку без префиксов в бд. Опции стали добавляться, однако при заходе в категорию выдает вот такой код Warning: Missing argument 2 for ModelCatalogProduct::getTotalProductsByCategoryId(), called in Z:homelocalhostwww24catalogcontrollerproductcategory.php on line 101 and defined in Z:homelocalhostwww24catalogmodelcatalogproduct.php on line 64 Качните еще раз файл Openstore_module_product_filter_1.0_(clean_install).rar, я забыл добавить туда файл category.php, или же сделайте пункт №6 ручной установки. 1 Надіслати Поділитися на інших сайтах More sharing options... IceCOOL Опубліковано: 27 листопада 2010 Share Опубліковано: 27 листопада 2010 Спасибо, сейчас пробовать буду! Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 3 4 5 6 Вперед Сторінка 1 з 8 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Модулі та розширення Нужен ли модуль "фильтр в категории" ? Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich Промо банери в категоріях товарів Автор: IHOR1989 Trend - адаптивний універсальний шаблон Автор: DSV × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
Helixir Опубліковано: 11 листопада 2010 Share Опубліковано: 11 листопада 2010 В виду того, что оперкарт не обладает большим функционалом, как например magento, захотелось сделать фильтры подобные magento и хочется поделиться с другими пользователями.Хочется получить совет по поводу какие фильтров, и стоит ли вообще выкладывать модуль ?Пока что реализованно фильтры по производителям в конкретной категории вот пример: http://chipollino.com.ua/igrushki.html. Какие фильтры планируется сделать:По производителям - уже есть (добавить возможность выбора нескольких производителей, список чекбоксов )По под категориям - список чекбоксов По цене от: до: + слайде jquery (http://jqueryui.com/demos/slider/#range) Жду ещё Ваших предложений по фильтрам и их функциональности ?Доброй ночи, а где собственно Вы уважаемый делитесь данным модулем? :roll: очень нужен фильтр, только по-производителям. Судя как Вы написали, Вы уже его сделали. Можно исходник? Надіслати Поділитися на інших сайтах More sharing options...
dotsent Опубліковано: 12 листопада 2010 Автор Share Опубліковано: 12 листопада 2010 В данный момент был занят, там не так просто его выложить, так как там правились шаблоны сам код модуля. Могу выложить свой шаблон и контроллер, без инструкция что исправить или исправить кому надо на сайте. Сам модуль постараюсь доделать в ближайшее время. Надіслати Поділитися на інших сайтах More sharing options...
Helixir Опубліковано: 12 листопада 2010 Share Опубліковано: 12 листопада 2010 В данный момент был занят, там не так просто его выложить, так как там правились шаблоны сам код модуля. Могу выложить свой шаблон и контроллер, без инструкция что исправить или исправить кому надо на сайте. Сам модуль постараюсь доделать в ближайшее время.Было бы не плохо, посмотреть на сам измененный код (в нем есть Ваши комментарии, в плане "My modify"?)Если Вы его дорабатываете, сам магазин у себя можно оформлять полностью, а потом только добавить модуль и все будет отлично? или стоит ждать модуля, а потом уже наполнять/создавать магазин? :roll: И еще один вопрос: Сам модуль отображает всех полностью производителей или только производителей, которые есть в данной категории?Так что, если вам будет не сложно, поделитесь уже измененными файлами. :cry: Может быть и разберемся как его интегрировать с 0. Надіслати Поділитися на інших сайтах More sharing options...
dotsent Опубліковано: 12 листопада 2010 Автор Share Опубліковано: 12 листопада 2010 > И еще один вопрос: Сам модуль отображает всех полностью производителей или только производителей, которые есть в данной категории?Только в данной категории, просто там правок у меня было много, я там добавил ещё сетку по сколько товаров выводить и так далее комментариев, к сожалению нет.Изменёнными файлами поделюсь завтра скорей всего, постараюсь добавить комментарии в код и шаблон, так как он отличается от стандартного.Пишите email в личку пришлю Вам изменения. Надіслати Поділитися на інших сайтах More sharing options...
SooR Опубліковано: 16 листопада 2010 Share Опубліковано: 16 листопада 2010 Ну в общем с этим я тоже боролся. В итоге делаю пока примитивным дополнением таблицы product полями-критериями для конкретной задачи, а потом в модели и контроллере дописываю необходимые критерии. Вот что получилось в двух проектах http://svobodamusic.net/music (нажать на фильтр материала) и http://poliit.com.ua/index.php?route=product/category Оба c AJAX. В дальнейшем, хочу реализовать кастомное добавление опций и значений, при чем опции могут быть разных типов: чекбокс, радио, селект, слайдер и слайдер-диапазон. Можно еще текстовое поле с keyup, но есть поиск. Хотя если реализовать так фильтр, то нужда в поиске исчезнет. Теперь вот думаю, что же выбрать, добавление полей ALTER'ом, что уж совсем низко, или же value_to_product. 2 Надіслати Поділитися на інших сайтах More sharing options... sumolex Опубліковано: 17 листопада 2010 Share Опубліковано: 17 листопада 2010 Супер! Очень понравился модуль. Давно ищу решение. Поделитесь? Надіслати Поділитися на інших сайтах More sharing options... SooR Опубліковано: 17 листопада 2010 Share Опубліковано: 17 листопада 2010 Конечно. Здесь напишу пошагово, если администрация не против. Надіслати Поділитися на інших сайтах More sharing options... sumolex Опубліковано: 18 листопада 2010 Share Опубліковано: 18 листопада 2010 Супер! Я думаю, вряд-ли кто будет против. Наоборот Надіслати Поділитися на інших сайтах More sharing options... Helixir Опубліковано: 22 листопада 2010 Share Опубліковано: 22 листопада 2010 Ну в общем с этим я тоже боролся. В итоге делаю пока примитивным дополнением таблицы product полями-критериями для конкретной задачи, а потом в модели и контроллере дописываю необходимые критерии. Вот что получилось в двух проектах http://svobodamusic.net/music (нажать на фильтр материала) и http://poliit.com.ua/index.php?route=product/category Оба c AJAX. В дальнейшем, хочу реализовать кастомное добавление опций и значений, при чем опции могут быть разных типов: чекбокс, радио, селект, слайдер и слайдер-диапазон. Можно еще текстовое поле с keyup, но есть поиск. Хотя если реализовать так фильтр, то нужда в поиске исчезнет. Теперь вот думаю, что же выбрать, добавление полей ALTER'ом, что уж совсем низко, или же value_to_product. Очень не плохо. В первом проекте понравилось. эх.... когда - же кто-то допишет сие чудо полностью и выложит... Доцент не связался так и ( Надіслати Поділитися на інших сайтах More sharing options... SooR Опубліковано: 22 листопада 2010 Share Опубліковано: 22 листопада 2010 Та уже вот дописываю. 95% общий прогресс, осталось красоту навести и подправить js для моментального отображения добавленной опции.Ну, а так же собрать все файлы в кучу и написать порядок установки.Ждите, сегодня-завтра выложу. Надіслати Поділитися на інших сайтах More sharing options... sumolex Опубліковано: 22 листопада 2010 Share Опубліковано: 22 листопада 2010 Та уже вот дописываю. 95% общий прогресс, осталось красоту навести и подправить js для моментального отображения добавленной опции.Ну, а так же собрать все файлы в кучу и написать порядок установки.Ждите, сегодня-завтра выложу.Очень жду, спасибо! Этого модуля очень не хватает.. Надіслати Поділитися на інших сайтах More sharing options... Гість Опубліковано: 23 листопада 2010 Share Опубліковано: 23 листопада 2010 Я седня начал копать а тут уже готовое решение :) ждем Надіслати Поділитися на інших сайтах More sharing options... sumolex Опубліковано: 26 листопада 2010 Share Опубліковано: 26 листопада 2010 SooR, где же Вы? Надіслати Поділитися на інших сайтах More sharing options... SooR Опубліковано: 27 листопада 2010 Share Опубліковано: 27 листопада 2010 Тут же я. Извиняюсь за опоздание, но я решил сделать полноценный модуль и не с фиксированными опциями, как у меня в примерах, а изменяемыми / дополняемыми из админки. При чем в базу данных для этого лезть не надо. Всё автоматизированно. И еще, сюда же включил 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) Идем в админку -> дополнения и включаем фильтр. Дальше думаю всё ясно. 4 Надіслати Поділитися на інших сайтах More sharing options... IceCOOL Опубліковано: 27 листопада 2010 Share Опубліковано: 27 листопада 2010 Благодарю, уважаемый коллега)) Отпишусь, ка протестирую =)) Надіслати Поділитися на інших сайтах More sharing options... IceCOOL Опубліковано: 27 листопада 2010 Share Опубліковано: 27 листопада 2010 Странно, не добавляются опции в админке. пишет "опция сохранена" обновляю страничку, а список еще пуст....думаю, что то с наименованием таблиц... у меня префикс oc_ в базе... может из-за того.... Надіслати Поділитися на інших сайтах More sharing options... IceCOOL Опубліковано: 27 листопада 2010 Share Опубліковано: 27 листопада 2010 Сделал чистую установку без префиксов в бд. Опции стали добавляться, однако при заходе в категорию выдает вот такой код Warning: Missing argument 2 for ModelCatalogProduct::getTotalProductsByCategoryId(), called in Z:homelocalhostwww24catalogcontrollerproductcategory.php on line 101 and defined in Z:homelocalhostwww24catalogmodelcatalogproduct.php on line 64 Надіслати Поділитися на інших сайтах More sharing options... SooR Опубліковано: 27 листопада 2010 Share Опубліковано: 27 листопада 2010 Конечно! Забыл о префиксах, тогда запрос будет вида CREATE TABLE IF NOT EXISTS `oc_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 `oc_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 `oc_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 `oc_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 `oc_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 `oc_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 Надіслати Поділитися на інших сайтах More sharing options... SooR Опубліковано: 27 листопада 2010 Share Опубліковано: 27 листопада 2010 Сделал чистую установку без префиксов в бд. Опции стали добавляться, однако при заходе в категорию выдает вот такой код Warning: Missing argument 2 for ModelCatalogProduct::getTotalProductsByCategoryId(), called in Z:homelocalhostwww24catalogcontrollerproductcategory.php on line 101 and defined in Z:homelocalhostwww24catalogmodelcatalogproduct.php on line 64 Качните еще раз файл Openstore_module_product_filter_1.0_(clean_install).rar, я забыл добавить туда файл category.php, или же сделайте пункт №6 ручной установки. 1 Надіслати Поділитися на інших сайтах More sharing options... IceCOOL Опубліковано: 27 листопада 2010 Share Опубліковано: 27 листопада 2010 Спасибо, сейчас пробовать буду! Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 3 4 5 6 Вперед Сторінка 1 з 8 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Модулі та розширення Нужен ли модуль "фильтр в категории" ? Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich Промо банери в категоріях товарів Автор: IHOR1989 Trend - адаптивний універсальний шаблон Автор: DSV × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
sumolex Опубліковано: 17 листопада 2010 Share Опубліковано: 17 листопада 2010 Супер! Очень понравился модуль. Давно ищу решение. Поделитесь? Надіслати Поділитися на інших сайтах More sharing options...
SooR Опубліковано: 17 листопада 2010 Share Опубліковано: 17 листопада 2010 Конечно. Здесь напишу пошагово, если администрация не против. Надіслати Поділитися на інших сайтах More sharing options... sumolex Опубліковано: 18 листопада 2010 Share Опубліковано: 18 листопада 2010 Супер! Я думаю, вряд-ли кто будет против. Наоборот Надіслати Поділитися на інших сайтах More sharing options... Helixir Опубліковано: 22 листопада 2010 Share Опубліковано: 22 листопада 2010 Ну в общем с этим я тоже боролся. В итоге делаю пока примитивным дополнением таблицы product полями-критериями для конкретной задачи, а потом в модели и контроллере дописываю необходимые критерии. Вот что получилось в двух проектах http://svobodamusic.net/music (нажать на фильтр материала) и http://poliit.com.ua/index.php?route=product/category Оба c AJAX. В дальнейшем, хочу реализовать кастомное добавление опций и значений, при чем опции могут быть разных типов: чекбокс, радио, селект, слайдер и слайдер-диапазон. Можно еще текстовое поле с keyup, но есть поиск. Хотя если реализовать так фильтр, то нужда в поиске исчезнет. Теперь вот думаю, что же выбрать, добавление полей ALTER'ом, что уж совсем низко, или же value_to_product. Очень не плохо. В первом проекте понравилось. эх.... когда - же кто-то допишет сие чудо полностью и выложит... Доцент не связался так и ( Надіслати Поділитися на інших сайтах More sharing options... SooR Опубліковано: 22 листопада 2010 Share Опубліковано: 22 листопада 2010 Та уже вот дописываю. 95% общий прогресс, осталось красоту навести и подправить js для моментального отображения добавленной опции.Ну, а так же собрать все файлы в кучу и написать порядок установки.Ждите, сегодня-завтра выложу. Надіслати Поділитися на інших сайтах More sharing options... sumolex Опубліковано: 22 листопада 2010 Share Опубліковано: 22 листопада 2010 Та уже вот дописываю. 95% общий прогресс, осталось красоту навести и подправить js для моментального отображения добавленной опции.Ну, а так же собрать все файлы в кучу и написать порядок установки.Ждите, сегодня-завтра выложу.Очень жду, спасибо! Этого модуля очень не хватает.. Надіслати Поділитися на інших сайтах More sharing options... Гість Опубліковано: 23 листопада 2010 Share Опубліковано: 23 листопада 2010 Я седня начал копать а тут уже готовое решение :) ждем Надіслати Поділитися на інших сайтах More sharing options... sumolex Опубліковано: 26 листопада 2010 Share Опубліковано: 26 листопада 2010 SooR, где же Вы? Надіслати Поділитися на інших сайтах More sharing options... SooR Опубліковано: 27 листопада 2010 Share Опубліковано: 27 листопада 2010 Тут же я. Извиняюсь за опоздание, но я решил сделать полноценный модуль и не с фиксированными опциями, как у меня в примерах, а изменяемыми / дополняемыми из админки. При чем в базу данных для этого лезть не надо. Всё автоматизированно. И еще, сюда же включил 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) Идем в админку -> дополнения и включаем фильтр. Дальше думаю всё ясно. 4 Надіслати Поділитися на інших сайтах More sharing options... IceCOOL Опубліковано: 27 листопада 2010 Share Опубліковано: 27 листопада 2010 Благодарю, уважаемый коллега)) Отпишусь, ка протестирую =)) Надіслати Поділитися на інших сайтах More sharing options... IceCOOL Опубліковано: 27 листопада 2010 Share Опубліковано: 27 листопада 2010 Странно, не добавляются опции в админке. пишет "опция сохранена" обновляю страничку, а список еще пуст....думаю, что то с наименованием таблиц... у меня префикс oc_ в базе... может из-за того.... Надіслати Поділитися на інших сайтах More sharing options... IceCOOL Опубліковано: 27 листопада 2010 Share Опубліковано: 27 листопада 2010 Сделал чистую установку без префиксов в бд. Опции стали добавляться, однако при заходе в категорию выдает вот такой код Warning: Missing argument 2 for ModelCatalogProduct::getTotalProductsByCategoryId(), called in Z:homelocalhostwww24catalogcontrollerproductcategory.php on line 101 and defined in Z:homelocalhostwww24catalogmodelcatalogproduct.php on line 64 Надіслати Поділитися на інших сайтах More sharing options... SooR Опубліковано: 27 листопада 2010 Share Опубліковано: 27 листопада 2010 Конечно! Забыл о префиксах, тогда запрос будет вида CREATE TABLE IF NOT EXISTS `oc_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 `oc_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 `oc_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 `oc_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 `oc_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 `oc_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 Надіслати Поділитися на інших сайтах More sharing options... SooR Опубліковано: 27 листопада 2010 Share Опубліковано: 27 листопада 2010 Сделал чистую установку без префиксов в бд. Опции стали добавляться, однако при заходе в категорию выдает вот такой код Warning: Missing argument 2 for ModelCatalogProduct::getTotalProductsByCategoryId(), called in Z:homelocalhostwww24catalogcontrollerproductcategory.php on line 101 and defined in Z:homelocalhostwww24catalogmodelcatalogproduct.php on line 64 Качните еще раз файл Openstore_module_product_filter_1.0_(clean_install).rar, я забыл добавить туда файл category.php, или же сделайте пункт №6 ручной установки. 1 Надіслати Поділитися на інших сайтах More sharing options... IceCOOL Опубліковано: 27 листопада 2010 Share Опубліковано: 27 листопада 2010 Спасибо, сейчас пробовать буду! Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 3 4 5 6 Вперед Сторінка 1 з 8 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Модулі та розширення Нужен ли модуль "фильтр в категории" ? Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich Промо банери в категоріях товарів Автор: IHOR1989 Trend - адаптивний універсальний шаблон Автор: DSV × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
sumolex Опубліковано: 18 листопада 2010 Share Опубліковано: 18 листопада 2010 Супер! Я думаю, вряд-ли кто будет против. Наоборот Надіслати Поділитися на інших сайтах More sharing options...
Helixir Опубліковано: 22 листопада 2010 Share Опубліковано: 22 листопада 2010 Ну в общем с этим я тоже боролся. В итоге делаю пока примитивным дополнением таблицы product полями-критериями для конкретной задачи, а потом в модели и контроллере дописываю необходимые критерии. Вот что получилось в двух проектах http://svobodamusic.net/music (нажать на фильтр материала) и http://poliit.com.ua/index.php?route=product/category Оба c AJAX. В дальнейшем, хочу реализовать кастомное добавление опций и значений, при чем опции могут быть разных типов: чекбокс, радио, селект, слайдер и слайдер-диапазон. Можно еще текстовое поле с keyup, но есть поиск. Хотя если реализовать так фильтр, то нужда в поиске исчезнет. Теперь вот думаю, что же выбрать, добавление полей ALTER'ом, что уж совсем низко, или же value_to_product. Очень не плохо. В первом проекте понравилось. эх.... когда - же кто-то допишет сие чудо полностью и выложит... Доцент не связался так и ( Надіслати Поділитися на інших сайтах More sharing options...
SooR Опубліковано: 22 листопада 2010 Share Опубліковано: 22 листопада 2010 Та уже вот дописываю. 95% общий прогресс, осталось красоту навести и подправить js для моментального отображения добавленной опции.Ну, а так же собрать все файлы в кучу и написать порядок установки.Ждите, сегодня-завтра выложу. Надіслати Поділитися на інших сайтах More sharing options... sumolex Опубліковано: 22 листопада 2010 Share Опубліковано: 22 листопада 2010 Та уже вот дописываю. 95% общий прогресс, осталось красоту навести и подправить js для моментального отображения добавленной опции.Ну, а так же собрать все файлы в кучу и написать порядок установки.Ждите, сегодня-завтра выложу.Очень жду, спасибо! Этого модуля очень не хватает.. Надіслати Поділитися на інших сайтах More sharing options... Гість Опубліковано: 23 листопада 2010 Share Опубліковано: 23 листопада 2010 Я седня начал копать а тут уже готовое решение :) ждем Надіслати Поділитися на інших сайтах More sharing options... sumolex Опубліковано: 26 листопада 2010 Share Опубліковано: 26 листопада 2010 SooR, где же Вы? Надіслати Поділитися на інших сайтах More sharing options... SooR Опубліковано: 27 листопада 2010 Share Опубліковано: 27 листопада 2010 Тут же я. Извиняюсь за опоздание, но я решил сделать полноценный модуль и не с фиксированными опциями, как у меня в примерах, а изменяемыми / дополняемыми из админки. При чем в базу данных для этого лезть не надо. Всё автоматизированно. И еще, сюда же включил 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) Идем в админку -> дополнения и включаем фильтр. Дальше думаю всё ясно. 4 Надіслати Поділитися на інших сайтах More sharing options... IceCOOL Опубліковано: 27 листопада 2010 Share Опубліковано: 27 листопада 2010 Благодарю, уважаемый коллега)) Отпишусь, ка протестирую =)) Надіслати Поділитися на інших сайтах More sharing options... IceCOOL Опубліковано: 27 листопада 2010 Share Опубліковано: 27 листопада 2010 Странно, не добавляются опции в админке. пишет "опция сохранена" обновляю страничку, а список еще пуст....думаю, что то с наименованием таблиц... у меня префикс oc_ в базе... может из-за того.... Надіслати Поділитися на інших сайтах More sharing options... IceCOOL Опубліковано: 27 листопада 2010 Share Опубліковано: 27 листопада 2010 Сделал чистую установку без префиксов в бд. Опции стали добавляться, однако при заходе в категорию выдает вот такой код Warning: Missing argument 2 for ModelCatalogProduct::getTotalProductsByCategoryId(), called in Z:homelocalhostwww24catalogcontrollerproductcategory.php on line 101 and defined in Z:homelocalhostwww24catalogmodelcatalogproduct.php on line 64 Надіслати Поділитися на інших сайтах More sharing options... SooR Опубліковано: 27 листопада 2010 Share Опубліковано: 27 листопада 2010 Конечно! Забыл о префиксах, тогда запрос будет вида CREATE TABLE IF NOT EXISTS `oc_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 `oc_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 `oc_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 `oc_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 `oc_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 `oc_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 Надіслати Поділитися на інших сайтах More sharing options... SooR Опубліковано: 27 листопада 2010 Share Опубліковано: 27 листопада 2010 Сделал чистую установку без префиксов в бд. Опции стали добавляться, однако при заходе в категорию выдает вот такой код Warning: Missing argument 2 for ModelCatalogProduct::getTotalProductsByCategoryId(), called in Z:homelocalhostwww24catalogcontrollerproductcategory.php on line 101 and defined in Z:homelocalhostwww24catalogmodelcatalogproduct.php on line 64 Качните еще раз файл Openstore_module_product_filter_1.0_(clean_install).rar, я забыл добавить туда файл category.php, или же сделайте пункт №6 ручной установки. 1 Надіслати Поділитися на інших сайтах More sharing options... IceCOOL Опубліковано: 27 листопада 2010 Share Опубліковано: 27 листопада 2010 Спасибо, сейчас пробовать буду! Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 3 4 5 6 Вперед Сторінка 1 з 8 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Модулі та розширення Нужен ли модуль "фильтр в категории" ? Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich Промо банери в категоріях товарів Автор: IHOR1989 Trend - адаптивний універсальний шаблон Автор: DSV
sumolex Опубліковано: 22 листопада 2010 Share Опубліковано: 22 листопада 2010 Та уже вот дописываю. 95% общий прогресс, осталось красоту навести и подправить js для моментального отображения добавленной опции.Ну, а так же собрать все файлы в кучу и написать порядок установки.Ждите, сегодня-завтра выложу.Очень жду, спасибо! Этого модуля очень не хватает.. Надіслати Поділитися на інших сайтах More sharing options...
Гість Опубліковано: 23 листопада 2010 Share Опубліковано: 23 листопада 2010 Я седня начал копать а тут уже готовое решение :) ждем Надіслати Поділитися на інших сайтах More sharing options...
sumolex Опубліковано: 26 листопада 2010 Share Опубліковано: 26 листопада 2010 SooR, где же Вы? Надіслати Поділитися на інших сайтах More sharing options...
SooR Опубліковано: 27 листопада 2010 Share Опубліковано: 27 листопада 2010 Тут же я. Извиняюсь за опоздание, но я решил сделать полноценный модуль и не с фиксированными опциями, как у меня в примерах, а изменяемыми / дополняемыми из админки. При чем в базу данных для этого лезть не надо. Всё автоматизированно. И еще, сюда же включил 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) Идем в админку -> дополнения и включаем фильтр. Дальше думаю всё ясно. 4 Надіслати Поділитися на інших сайтах More sharing options... IceCOOL Опубліковано: 27 листопада 2010 Share Опубліковано: 27 листопада 2010 Благодарю, уважаемый коллега)) Отпишусь, ка протестирую =)) Надіслати Поділитися на інших сайтах More sharing options... IceCOOL Опубліковано: 27 листопада 2010 Share Опубліковано: 27 листопада 2010 Странно, не добавляются опции в админке. пишет "опция сохранена" обновляю страничку, а список еще пуст....думаю, что то с наименованием таблиц... у меня префикс oc_ в базе... может из-за того.... Надіслати Поділитися на інших сайтах More sharing options... IceCOOL Опубліковано: 27 листопада 2010 Share Опубліковано: 27 листопада 2010 Сделал чистую установку без префиксов в бд. Опции стали добавляться, однако при заходе в категорию выдает вот такой код Warning: Missing argument 2 for ModelCatalogProduct::getTotalProductsByCategoryId(), called in Z:homelocalhostwww24catalogcontrollerproductcategory.php on line 101 and defined in Z:homelocalhostwww24catalogmodelcatalogproduct.php on line 64 Надіслати Поділитися на інших сайтах More sharing options... SooR Опубліковано: 27 листопада 2010 Share Опубліковано: 27 листопада 2010 Конечно! Забыл о префиксах, тогда запрос будет вида CREATE TABLE IF NOT EXISTS `oc_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 `oc_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 `oc_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 `oc_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 `oc_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 `oc_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 Надіслати Поділитися на інших сайтах More sharing options... SooR Опубліковано: 27 листопада 2010 Share Опубліковано: 27 листопада 2010 Сделал чистую установку без префиксов в бд. Опции стали добавляться, однако при заходе в категорию выдает вот такой код Warning: Missing argument 2 for ModelCatalogProduct::getTotalProductsByCategoryId(), called in Z:homelocalhostwww24catalogcontrollerproductcategory.php on line 101 and defined in Z:homelocalhostwww24catalogmodelcatalogproduct.php on line 64 Качните еще раз файл Openstore_module_product_filter_1.0_(clean_install).rar, я забыл добавить туда файл category.php, или же сделайте пункт №6 ручной установки. 1 Надіслати Поділитися на інших сайтах More sharing options... IceCOOL Опубліковано: 27 листопада 2010 Share Опубліковано: 27 листопада 2010 Спасибо, сейчас пробовать буду! Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 3 4 5 6 Вперед Сторінка 1 з 8 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Модулі та розширення Нужен ли модуль "фильтр в категории" ?
IceCOOL Опубліковано: 27 листопада 2010 Share Опубліковано: 27 листопада 2010 Благодарю, уважаемый коллега)) Отпишусь, ка протестирую =)) Надіслати Поділитися на інших сайтах More sharing options...
IceCOOL Опубліковано: 27 листопада 2010 Share Опубліковано: 27 листопада 2010 Странно, не добавляются опции в админке. пишет "опция сохранена" обновляю страничку, а список еще пуст....думаю, что то с наименованием таблиц... у меня префикс oc_ в базе... может из-за того.... Надіслати Поділитися на інших сайтах More sharing options...
IceCOOL Опубліковано: 27 листопада 2010 Share Опубліковано: 27 листопада 2010 Сделал чистую установку без префиксов в бд. Опции стали добавляться, однако при заходе в категорию выдает вот такой код Warning: Missing argument 2 for ModelCatalogProduct::getTotalProductsByCategoryId(), called in Z:homelocalhostwww24catalogcontrollerproductcategory.php on line 101 and defined in Z:homelocalhostwww24catalogmodelcatalogproduct.php on line 64 Надіслати Поділитися на інших сайтах More sharing options...
SooR Опубліковано: 27 листопада 2010 Share Опубліковано: 27 листопада 2010 Конечно! Забыл о префиксах, тогда запрос будет вида CREATE TABLE IF NOT EXISTS `oc_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 `oc_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 `oc_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 `oc_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 `oc_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 `oc_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 Надіслати Поділитися на інших сайтах More sharing options... SooR Опубліковано: 27 листопада 2010 Share Опубліковано: 27 листопада 2010 Сделал чистую установку без префиксов в бд. Опции стали добавляться, однако при заходе в категорию выдает вот такой код Warning: Missing argument 2 for ModelCatalogProduct::getTotalProductsByCategoryId(), called in Z:homelocalhostwww24catalogcontrollerproductcategory.php on line 101 and defined in Z:homelocalhostwww24catalogmodelcatalogproduct.php on line 64 Качните еще раз файл Openstore_module_product_filter_1.0_(clean_install).rar, я забыл добавить туда файл category.php, или же сделайте пункт №6 ручной установки. 1 Надіслати Поділитися на інших сайтах More sharing options... IceCOOL Опубліковано: 27 листопада 2010 Share Опубліковано: 27 листопада 2010 Спасибо, сейчас пробовать буду! Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 3 4 5 6 Вперед Сторінка 1 з 8 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку
SooR Опубліковано: 27 листопада 2010 Share Опубліковано: 27 листопада 2010 Сделал чистую установку без префиксов в бд. Опции стали добавляться, однако при заходе в категорию выдает вот такой код Warning: Missing argument 2 for ModelCatalogProduct::getTotalProductsByCategoryId(), called in Z:homelocalhostwww24catalogcontrollerproductcategory.php on line 101 and defined in Z:homelocalhostwww24catalogmodelcatalogproduct.php on line 64 Качните еще раз файл Openstore_module_product_filter_1.0_(clean_install).rar, я забыл добавить туда файл category.php, или же сделайте пункт №6 ручной установки. 1 Надіслати Поділитися на інших сайтах More sharing options... IceCOOL Опубліковано: 27 листопада 2010 Share Опубліковано: 27 листопада 2010 Спасибо, сейчас пробовать буду! Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 3 4 5 6 Вперед Сторінка 1 з 8 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0
IceCOOL Опубліковано: 27 листопада 2010 Share Опубліковано: 27 листопада 2010 Спасибо, сейчас пробовать буду! Надіслати Поділитися на інших сайтах More sharing options...
Recommended Posts