afwollis Опубліковано: 26 лютого 2011 Share Опубліковано: 26 лютого 2011 1. нет. 2. решение в теме есть Надіслати Поділитися на інших сайтах More sharing options... 2 weeks later... futadmytro Опубліковано: 7 березня 2011 Share Опубліковано: 7 березня 2011 SooR, так и думал =) но вернемся к нашим "баранам" - проблема с фильтром в IE. не работает ни в одной версии из тех, что я проверял ( https://opencartforum.com/public/style_emoticons/default/icon_arrow.gif https://opencartforum.com/viewtopic.php?f=21&t=876&start=60#p7780) похоже IE напрочь не понимает вот этого: $('#filters input, #filters select').live('change', function() { effects('', 'jump', 'icon', 200); //effects('in', 'fade', 'load', 300); alert("IE test _live change_"); // нет этого сообщения в IE loadContent(); });пойду потестирую еще.народ, кто пользуется фильтром, не проходите мимо проблемы :? UPD: пока писал сообщение - попутно тестил. вылечил проблему так: 1. закомментировал приведенный выше код; 2. добавил в вывод каждого элемента (у меня используются только checkbox`ы) onclick="markFilterOption();"в итоге получилось так:мой код корректно работает в: opera 10.10, iceweasel 3.5.14 (mozilla), gChrome 6.?, IE (7,8 tested) осталось "пофиксить навигацию". ибо если нет JS/AJAX (или вдруг сбой какой произошел после AJAX-получения списка категорий/товаров), то при переходе на какую-либо страницу видим "немного" не то, что хотелось бы :D на этом все. спасибо всем, кто не ответил - благодаря вам я смог сам найти и побороть проблему... UPD2 все здорово, фильтр работает во всех браузерах. только вот значения опций фильтра теперь не передаются :D а значит битва еще не окончена :? UPD3 ну йомайо. сколько можно провтыкивать такие моменты... :o проблема со сбором значений опций фильтра была в том, что я собирал input`ы с неправильными именами. переработал код вот так (сугубо под свои нужды): var $filter_options_fields = $("#filters input:checked").serializeArray(); jQuery.each($filter_options_fields, function(j, $filter_options_field){ if ($filter_options_field.name != "parent" && $filter_options_field.name != "subcatID[]") { //alert($filter_options_field.name); if (j == 0) { $filter_options_values += $filter_options_field.value; } else if ($filter_options_field.value == '') { $filter_options_values += ''; } else { if ($filter_options_values == '') { $filter_options_values += $filter_options_field.value; } else { $filter_options_values += '_' + $filter_options_field.value; } } } });отсюда, вобщем-то, вытекает вопрос:можно ли как-то так (более "элегантно" ИМХО) var $fields = $("#filters input[name='value_id[ТУТ_КАКОЕ_ТО_РЕГУЛЯРНОЕ_ВЫРАЖЕНИЕ]'], #filters select[name='value_id[ТУТ_КАКОЕ_ТО_РЕГУЛЯРНОЕ_ВЫРАЖЕНИЕ]']").serializeArray();организовать сбор данных input`ов (или каких других элементов) по именам.ушел в поиски регулярок в JS afwollis , большая просьба к Вам, подскажите в каких файлах ето все менять. Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 8 березня 2011 Share Опубліковано: 8 березня 2011 futadmytro, в файле catalog/view/theme/default/template/module/filter.tpl Надіслати Поділитися на інших сайтах More sharing options... futadmytro Опубліковано: 10 березня 2011 Share Опубліковано: 10 березня 2011 futadmytro, в файле catalog/view/theme/default/template/module/filter.tpl Спасибо!!! Работает) Еще вопрос: Можно ли реализовать фильтр , чтобы он собирал значение 1 , а потом значение 2 собирал уже с результатов значения 1, сложная выборка -ето чуть не то, или мой фильтр работает криво? Спасибо шаманам ОК )) Надіслати Поділитися на інших сайтах More sharing options... Гість Опубліковано: 10 березня 2011 Share Опубліковано: 10 березня 2011 Вопрос кто нить решил проблему с возравтром. например когда смотришь товар и нажимаешь назад, подргружалась старница с уже активными фильтрами Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 10 березня 2011 Share Опубліковано: 10 березня 2011 При использовании ajax "история" не сохраняется. Хотя можно сохранить выбранные опции в сессию и покрутить модуль с этой стороны. Однако опять же - "истории в браузере" не будет. Нужна будет кнопка-ссылка "Назад". Надіслати Поділитися на інших сайтах More sharing options... Гість Опубліковано: 11 березня 2011 Share Опубліковано: 11 березня 2011 можешь подсказать куда копать хотя бы с кнопкой назад)) Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 13 березня 2011 Share Опубліковано: 13 березня 2011 у меня от воспоминаний "разбора полетов" стресс начинается :o поэтому пока что к фильтру не хочется возвращаться. Надіслати Поділитися на інших сайтах More sharing options... gdemon Опубліковано: 14 березня 2011 Share Опубліковано: 14 березня 2011 Подскажите, можно ли сделать чтобы фильтр отфильтровывал не сразу при смене параметра, а при нажатии на добавленную кнопку "поиск"? Надіслати Поділитися на інших сайтах More sharing options... AndreyN Опубліковано: 17 березня 2011 Share Опубліковано: 17 березня 2011 Доброго дня. Прошу помочь понять следующий финт .., установил ocstore 0.1.8. Подвязал дизайн, установил фильтр с нуля. Добавил таблицы в SQL. Через модули установил фильтр, создал условия. Вроде все путем. Вхожу в товары, на вкладке Опции фильтра получаю сообщение Страница не найдена. Страница, которую Вы запрашиваете, не найдена. Если проблема будет повторяться, свяжитесь пожалуйста с администратором. И что с этим делать ума не приложу .. помогайте други. Спасибо. Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 18 березня 2011 Share Опубліковано: 18 березня 2011 (змінено) Доброго дня. Прошу помочь понять следующий финт .., установил ocstore 0.1.8. Подвязал дизайн, установил фильтр с нуля. Добавил таблицы в SQL. Через модули установил фильтр, создал условия. Вроде все путем. Вхожу в товары, на вкладке Опции фильтра получаю сообщение Страница не найдена. Страница, которую Вы запрашиваете, не найдена. Если проблема будет повторяться, свяжитесь пожалуйста с администратором. И что с этим делать ума не приложу .. помогайте други. скрин?все файлы залили? все изменения в файлах сделали? Змінено 18 березня 2011 користувачем afwollis Надіслати Поділитися на інших сайтах More sharing options... lampard Опубліковано: 19 березня 2011 Share Опубліковано: 19 березня 2011 Ребят, Доброго дня! Помогите пожалуйста! Установил, всё нормально, устанавливал вручную, несчитая мелких багов, которые исправятся, всё нормально, но вот странный нюанс, добавил опции фильтра для категории "Портативная техника->Нетбуки", захожу в настройки товара, который находится в этой категории, перехожу во вкладку "Опции фильтра", а мне пишит "Сначала необходимо выбрать категории товара", выбира уже и все категории всёравно одно и тоже пишит. Подскажите пожалуйста. Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 19 березня 2011 Share Опубліковано: 19 березня 2011 ссылку на сайт? Надіслати Поділитися на інших сайтах More sharing options... lvovich Опубліковано: 22 березня 2011 Share Опубліковано: 22 березня 2011 Отличный модуль. Большое спасибо авторам за труды. Но, великие гуру! Имеется проблема! Ставил на чистую OpenCart "1.4.9.3", всё работает отлично, за исключением одного: в админке не отображается цена в Каталоге товаров. В самом товаре и на сайте всё прекрасно, - цены есть. Я очень слабо ориентируюсь в php... очевидно, нужно править файл \admin\controller\catalog\product.php ? product.php Надіслати Поділитися на інших сайтах More sharing options... lvovich Опубліковано: 22 березня 2011 Share Опубліковано: 22 березня 2011 У кого-нибудь остался архив для инсталляции "вручную"? Прочитал всю тему дважды, нашел ссылку только на "чистую" инсталляцию. Если это поможет аццам русского кодинга, у меня есть 200RUR на вэбманях. На пару кружек доброго пива должно хватить. Надіслати Поділитися на інших сайтах More sharing options... roma4891 Опубліковано: 23 березня 2011 Share Опубліковано: 23 березня 2011 спасибо, заработал. Если вдруг кому то понадобится, я столкнулся с таким моментом: после установки на чистую систему, добавлении необходимых баз. Все запускается, но в админке есть ошибка в колонке с ценой, ругается на отсутствие переменных в строке 35 и 88 ..файла product_list.tpl. Я ее исправил добавив в product.php недостающие переменные (по аналогии с рабочей системой без этого модуля). При необходимости могу выложить файл с исправлениями. Еще раз, всем спасибо за оперативный ответ. Ошибку в 35 строке исправить удалось(добавил в 357 строке $this->data['column_price'] = $this->language->get('column_price');, и 413 $this->data['sort_price'] = HTTPS_SERVER . 'index.php?route=catalog/product&token=' . $this->session->data['token'] . '&sort=p.price' . $url;), а вот с 88 $product['price']; разобраться не могу... Надіслати Поділитися на інших сайтах More sharing options... lvovich Опубліковано: 23 березня 2011 Share Опубліковано: 23 березня 2011 а вот с 88 разобраться не могу...С помощью юзера AndreyN проблема частично решена. Большое ему человеческое спасибо. Теперь сайт отображает в админке цены, но поиск по цене не работает. Если кому-то актуально, напишу.Однако, уважаемые знатоки, - обнаружилась ещё следующая проблема: Модуль "[webme]_CategoryAtHomepage_v.0.3", который до установки "фильтра категорий" выводил на главной товары из избранных категорий, отказывается показывать товары. Видны лишь названия категорий. Также, вылезают ошибки: "Warning: Missing argument 2 for ModelCatalogProduct::getTotalProductsByCategoryId(), called in /home/t/technik2ru/public_html/catalog/controller/module/webme_categories_at_homepage.php on line 33 and defined in /home/t/technik2ru/public_html/catalog/model/catalog/product.php on line 64" Очевидно, проблема в отсутствии второго аргумента для getTotalProductsByCategoryId. Если подставить туда пустое поле, то картина повторяется, но ошибки не выдаются. Как исправить? Надіслати Поділитися на інших сайтах More sharing options... roma4891 Опубліковано: 23 березня 2011 Share Опубліковано: 23 березня 2011 С помощью юзера AndreyN проблема частично решена. Большое ему человеческое спасибо. Теперь сайт отображает в админке цены, но поиск по цене не работает. Если кому-то актуально, напишу. Однако, уважаемые знатоки, - обнаружилась ещё следующая проблема: Модуль "[webme]_CategoryAtHomepage_v.0.3", который до установки "фильтра категорий" выводил на главной товары из избранных категорий, отказывается показывать товары. Видны лишь названия категорий. Также, вылезают ошибки: "Warning: Missing argument 2 for ModelCatalogProduct::getTotalProductsByCategoryId(), called in /home/t/technik2ru/public_html/catalog/controller/module/webme_categories_at_homepage.php on line 33 and defined in /home/t/technik2ru/public_html/catalog/model/catalog/product.php on line 64" Очевидно, проблема в отсутствии второго аргумента для getTotalProductsByCategoryId. Если подставить туда пустое поле, то картина повторяется, но ошибки не выдаются. Как исправить? Актуально, хотя бы потому что место экономит в админке (я с ценами через экспорт/импорт работаю)Всёже как избавится от Notice: Undefined index: special in /.../admin/view/template/catalog/product_list.tpl on line 85 Notice: Undefined index: price in /.../admin/view/template/catalog/product_list.tpl on line 88 в списке товаров в админке? Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 23 березня 2011 Share Опубліковано: 23 березня 2011 lvovich, я конечно понимаю, что вы мучаете фильтр, но проблемы с другими модулями надо решать в их темах... Определенная категория на главной мыши плакали, кололись, но продолжали грызть кактус... Надіслати Поділитися на інших сайтах More sharing options... lvovich Опубліковано: 23 березня 2011 Share Опубліковано: 23 березня 2011 надо решать в их темах...Прошу прощения.2 roma4891 В общем, душа успокоилась вот чем: Открываем admin/controller/catalog/product.php Находим строку: 'quantity' => $result['quantity'],Выше добавляем: 'price' => $result['price'], Находим (триста какая-то строка): $this->data['products'][] = array(Добавляем перед этой строчкой вот это: $product_specials = $this->model_catalog_product->getProductSpecials($result['product_id']); if ($product_specials) { $special = reset($product_specials); if($special['date_start'] > date('Y-m-d') || $special['date_end'] < date('Y-m-d')) { $special = FALSE; } } else { $special = FALSE; } Затем по всему файлу ищем строки с "filter_model" и по аналогии вставляем после них то же самое, но с "filter_price". Сохраняем. Теперь открываем admin/view/template/catalog/product_list.tpl Ищем строку: <?php echo $$product_info['price']; ?>Меняем на: <?php echo $product['price']; ?> Вот такой квест... вроде, ничего не забыл. Теперь всё, кроме поиска по цене, работает. 1 Надіслати Поділитися на інших сайтах More sharing options... roma4891 Опубліковано: 24 березня 2011 Share Опубліковано: 24 березня 2011 Прошу прощения. 2 roma4891 В общем, душа успокоилась вот чем: Открываем admin/controller/catalog/product.php Находим строку: 'quantity' => $result['quantity'],Выше добавляем: 'price' => $result['price'], Находим (триста какая-то строка): $this->data['products'][] = array(Добавляем перед этой строчкой вот это: $product_specials = $this->model_catalog_product->getProductSpecials($result['product_id']); if ($product_specials) { $special = reset($product_specials); if($special['date_start'] > date('Y-m-d') || $special['date_end'] < date('Y-m-d')) { $special = FALSE; } } else { $special = FALSE; } Затем по всему файлу ищем строки с "filter_model" и по аналогии вставляем после них то же самое, но с "filter_price". Сохраняем. Теперь открываем admin/view/template/catalog/product_list.tpl Ищем строку: <?php echo $$product_info['price']; ?>Меняем на: <?php echo $product['price']; ?> Вот такой квест... вроде, ничего не забыл. Теперь всё, кроме поиска по цене, работает. Огромное спасибо, правда лучше всё делать вручную(удалось настроить пошагово), меньше боков вылазит, кстати удалось сделать более менее нормальную сборку для ручной установки, сейчас тестирую - потом выложу, если автор против не будет. Надіслати Поділитися на інших сайтах More sharing options... roma4891 Опубліковано: 25 березня 2011 Share Опубліковано: 25 березня 2011 Как и обещал сделал ручную сборку с мануалом по установке и с учётом большинства изменений(сразу,у меня 0.1.8), из того что помню: - устранена проблема с IE (пост #72, 4 стр. afwollis); - добавлено в админке checkbox "Выбрать все" для выбора всех категорий (спасибо berikiushi); - назначение товару нескольких свойств (спасибо afwollis - пост #53) при редактировании товара; - логическое И (и то, и то обязательно) при фильтрации в категории по свойствам товара (спасибо afwollis - пост #79) - ... может чтото ещё...непомню (собирал ночью) Начнём, 1) Делаем запрос в базу данных(у меня ПРЕФИКС oc_): 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; 2) В файле admin|view|template|catalog|product_form.tpl После <a tab="#tab_links"><?php echo $tab_links; ?></a>Вставляем<a tab="#tab_filter">Опции фильтра</a> Далее после блока <div id="tab_general"></div>, примерно 59 строка, перед <div id="tab_data">Вставляем <!-- Start tab filter--> <div id="tab_filter"> Сначала необходимо выбрать категории товара </div> <!-- End tab filter-->Теперь идем в конец файла, ДО <?php echo $footer; ?>Вставляем <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) Открываем файл admin|model|catalog|product.php После блока (метод addProduct) гдето 21 строка 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 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) Открываем admin|controller|catalog|product.php в районе 1100 строки, после foreach($results as $option) { $this->data['category_options'][] = array(Должно быть(если нет вставляем!) 'option_id' => $option['option_id'],в итоге должно быть: 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']) ); }и идем в конец файла, до закрытия класса вставляем // 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) Открываем catalog|model|catalog|product.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) {До блока 17 строка $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 product_id FROM " . DB_PREFIX . "product_to_value WHERE " . implode(" OR ", $data) . ")"; } */ if (isset($values) && $values != '') { $data = array(); $values_without_underline = ""; $values_for_IN = ""; foreach (explode('_', $values) as $value_id) { if (empty($values_for_IN)) { $values_for_IN = "'".$value_id."'"; } else { $values_for_IN .= ", '".$value_id."'"; } $values_without_underline .= $value_id; } // http://forums.mysql.com/read.php?78,354483,354598#msg-354598 //(SELECT GROUP_CONCAT(DISTINCT Tag_id ORDER BY Tag_id ASC SEPARATOR '') FROM Tag_has_Post WHERE Post_id=t.Post_id AND Tag_id IN (2,5))='25'; $sql .= " AND (SELECT GROUP_CONCAT(DISTINCT value_id SEPARATOR '') FROM oc_product_to_value WHERE product_id=p.product_id AND value_id IN (".$values_for_IN."))='".$values_without_underline."'"; } // End filterЗаменяем весь метод public function getTotalProductsByCategoryId (теперь гдето с 84 по 85 строку)На 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) . ")"; } */ if (isset($values) && $values != '') { $data = array(); $values_without_underline = ""; $values_for_IN = ""; foreach (explode('_', $values) as $value_id) { if (empty($values_for_IN)) { $values_for_IN = "'".$value_id."'"; } else { $values_for_IN .= ", '".$value_id."'"; } $values_without_underline .= $value_id; } // http://forums.mysql.com/read.php?78,354483,354598#msg-354598 //(SELECT GROUP_CONCAT(DISTINCT Tag_id ORDER BY Tag_id ASC SEPARATOR '') FROM Tag_has_Post WHERE Post_id=t.Post_id AND Tag_id IN (2,5))='25'; $sql .= " AND (SELECT GROUP_CONCAT(DISTINCT value_id SEPARATOR '') FROM oc_product_to_value WHERE product_id=p.product_id AND value_id IN (".$values_for_IN."))='".$values_without_underline."'"; } // End filter $query = $this->db->query($sql); return $query->row['total']; }Сохраняем, закрываем.6) Открываем catalog|controller|product|category.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) Качаем архив manual_Openstore_module_product.zip и извлекаем в корень сайта с заменой. 8) Идем в админку -> дополнения и включаем фильтр, добавляем опции. manual_Openstore_module_product.zip Надіслати Поділитися на інших сайтах More sharing options... roma4891 Опубліковано: 25 березня 2011 Share Опубліковано: 25 березня 2011 Помогите добавить в opencart-1-4-9-18-export-import.zip! Надіслати Поділитися на інших сайтах More sharing options... Googlah Опубліковано: 25 березня 2011 Share Опубліковано: 25 березня 2011 SooR, огромное спасибо за проделанную работу Надіслати Поділитися на інших сайтах More sharing options... lvovich Опубліковано: 26 березня 2011 Share Опубліковано: 26 березня 2011 В выше приведённой инсталляции "логическое И" не работает. Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 3 4 5 6 7 8 Вперед Сторінка 6 з 8 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Модулі та розширення Нужен ли модуль "фильтр в категории" ? Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
futadmytro Опубліковано: 7 березня 2011 Share Опубліковано: 7 березня 2011 SooR, так и думал =) но вернемся к нашим "баранам" - проблема с фильтром в IE. не работает ни в одной версии из тех, что я проверял ( https://opencartforum.com/public/style_emoticons/default/icon_arrow.gif https://opencartforum.com/viewtopic.php?f=21&t=876&start=60#p7780) похоже IE напрочь не понимает вот этого: $('#filters input, #filters select').live('change', function() { effects('', 'jump', 'icon', 200); //effects('in', 'fade', 'load', 300); alert("IE test _live change_"); // нет этого сообщения в IE loadContent(); });пойду потестирую еще.народ, кто пользуется фильтром, не проходите мимо проблемы :? UPD: пока писал сообщение - попутно тестил. вылечил проблему так: 1. закомментировал приведенный выше код; 2. добавил в вывод каждого элемента (у меня используются только checkbox`ы) onclick="markFilterOption();"в итоге получилось так:мой код корректно работает в: opera 10.10, iceweasel 3.5.14 (mozilla), gChrome 6.?, IE (7,8 tested) осталось "пофиксить навигацию". ибо если нет JS/AJAX (или вдруг сбой какой произошел после AJAX-получения списка категорий/товаров), то при переходе на какую-либо страницу видим "немного" не то, что хотелось бы :D на этом все. спасибо всем, кто не ответил - благодаря вам я смог сам найти и побороть проблему... UPD2 все здорово, фильтр работает во всех браузерах. только вот значения опций фильтра теперь не передаются :D а значит битва еще не окончена :? UPD3 ну йомайо. сколько можно провтыкивать такие моменты... :o проблема со сбором значений опций фильтра была в том, что я собирал input`ы с неправильными именами. переработал код вот так (сугубо под свои нужды): var $filter_options_fields = $("#filters input:checked").serializeArray(); jQuery.each($filter_options_fields, function(j, $filter_options_field){ if ($filter_options_field.name != "parent" && $filter_options_field.name != "subcatID[]") { //alert($filter_options_field.name); if (j == 0) { $filter_options_values += $filter_options_field.value; } else if ($filter_options_field.value == '') { $filter_options_values += ''; } else { if ($filter_options_values == '') { $filter_options_values += $filter_options_field.value; } else { $filter_options_values += '_' + $filter_options_field.value; } } } });отсюда, вобщем-то, вытекает вопрос:можно ли как-то так (более "элегантно" ИМХО) var $fields = $("#filters input[name='value_id[ТУТ_КАКОЕ_ТО_РЕГУЛЯРНОЕ_ВЫРАЖЕНИЕ]'], #filters select[name='value_id[ТУТ_КАКОЕ_ТО_РЕГУЛЯРНОЕ_ВЫРАЖЕНИЕ]']").serializeArray();организовать сбор данных input`ов (или каких других элементов) по именам.ушел в поиски регулярок в JS afwollis , большая просьба к Вам, подскажите в каких файлах ето все менять. Надіслати Поділитися на інших сайтах More sharing options...
afwollis Опубліковано: 8 березня 2011 Share Опубліковано: 8 березня 2011 futadmytro, в файле catalog/view/theme/default/template/module/filter.tpl Надіслати Поділитися на інших сайтах More sharing options... futadmytro Опубліковано: 10 березня 2011 Share Опубліковано: 10 березня 2011 futadmytro, в файле catalog/view/theme/default/template/module/filter.tpl Спасибо!!! Работает) Еще вопрос: Можно ли реализовать фильтр , чтобы он собирал значение 1 , а потом значение 2 собирал уже с результатов значения 1, сложная выборка -ето чуть не то, или мой фильтр работает криво? Спасибо шаманам ОК )) Надіслати Поділитися на інших сайтах More sharing options... Гість Опубліковано: 10 березня 2011 Share Опубліковано: 10 березня 2011 Вопрос кто нить решил проблему с возравтром. например когда смотришь товар и нажимаешь назад, подргружалась старница с уже активными фильтрами Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 10 березня 2011 Share Опубліковано: 10 березня 2011 При использовании ajax "история" не сохраняется. Хотя можно сохранить выбранные опции в сессию и покрутить модуль с этой стороны. Однако опять же - "истории в браузере" не будет. Нужна будет кнопка-ссылка "Назад". Надіслати Поділитися на інших сайтах More sharing options... Гість Опубліковано: 11 березня 2011 Share Опубліковано: 11 березня 2011 можешь подсказать куда копать хотя бы с кнопкой назад)) Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 13 березня 2011 Share Опубліковано: 13 березня 2011 у меня от воспоминаний "разбора полетов" стресс начинается :o поэтому пока что к фильтру не хочется возвращаться. Надіслати Поділитися на інших сайтах More sharing options... gdemon Опубліковано: 14 березня 2011 Share Опубліковано: 14 березня 2011 Подскажите, можно ли сделать чтобы фильтр отфильтровывал не сразу при смене параметра, а при нажатии на добавленную кнопку "поиск"? Надіслати Поділитися на інших сайтах More sharing options... AndreyN Опубліковано: 17 березня 2011 Share Опубліковано: 17 березня 2011 Доброго дня. Прошу помочь понять следующий финт .., установил ocstore 0.1.8. Подвязал дизайн, установил фильтр с нуля. Добавил таблицы в SQL. Через модули установил фильтр, создал условия. Вроде все путем. Вхожу в товары, на вкладке Опции фильтра получаю сообщение Страница не найдена. Страница, которую Вы запрашиваете, не найдена. Если проблема будет повторяться, свяжитесь пожалуйста с администратором. И что с этим делать ума не приложу .. помогайте други. Спасибо. Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 18 березня 2011 Share Опубліковано: 18 березня 2011 (змінено) Доброго дня. Прошу помочь понять следующий финт .., установил ocstore 0.1.8. Подвязал дизайн, установил фильтр с нуля. Добавил таблицы в SQL. Через модули установил фильтр, создал условия. Вроде все путем. Вхожу в товары, на вкладке Опции фильтра получаю сообщение Страница не найдена. Страница, которую Вы запрашиваете, не найдена. Если проблема будет повторяться, свяжитесь пожалуйста с администратором. И что с этим делать ума не приложу .. помогайте други. скрин?все файлы залили? все изменения в файлах сделали? Змінено 18 березня 2011 користувачем afwollis Надіслати Поділитися на інших сайтах More sharing options... lampard Опубліковано: 19 березня 2011 Share Опубліковано: 19 березня 2011 Ребят, Доброго дня! Помогите пожалуйста! Установил, всё нормально, устанавливал вручную, несчитая мелких багов, которые исправятся, всё нормально, но вот странный нюанс, добавил опции фильтра для категории "Портативная техника->Нетбуки", захожу в настройки товара, который находится в этой категории, перехожу во вкладку "Опции фильтра", а мне пишит "Сначала необходимо выбрать категории товара", выбира уже и все категории всёравно одно и тоже пишит. Подскажите пожалуйста. Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 19 березня 2011 Share Опубліковано: 19 березня 2011 ссылку на сайт? Надіслати Поділитися на інших сайтах More sharing options... lvovich Опубліковано: 22 березня 2011 Share Опубліковано: 22 березня 2011 Отличный модуль. Большое спасибо авторам за труды. Но, великие гуру! Имеется проблема! Ставил на чистую OpenCart "1.4.9.3", всё работает отлично, за исключением одного: в админке не отображается цена в Каталоге товаров. В самом товаре и на сайте всё прекрасно, - цены есть. Я очень слабо ориентируюсь в php... очевидно, нужно править файл \admin\controller\catalog\product.php ? product.php Надіслати Поділитися на інших сайтах More sharing options... lvovich Опубліковано: 22 березня 2011 Share Опубліковано: 22 березня 2011 У кого-нибудь остался архив для инсталляции "вручную"? Прочитал всю тему дважды, нашел ссылку только на "чистую" инсталляцию. Если это поможет аццам русского кодинга, у меня есть 200RUR на вэбманях. На пару кружек доброго пива должно хватить. Надіслати Поділитися на інших сайтах More sharing options... roma4891 Опубліковано: 23 березня 2011 Share Опубліковано: 23 березня 2011 спасибо, заработал. Если вдруг кому то понадобится, я столкнулся с таким моментом: после установки на чистую систему, добавлении необходимых баз. Все запускается, но в админке есть ошибка в колонке с ценой, ругается на отсутствие переменных в строке 35 и 88 ..файла product_list.tpl. Я ее исправил добавив в product.php недостающие переменные (по аналогии с рабочей системой без этого модуля). При необходимости могу выложить файл с исправлениями. Еще раз, всем спасибо за оперативный ответ. Ошибку в 35 строке исправить удалось(добавил в 357 строке $this->data['column_price'] = $this->language->get('column_price');, и 413 $this->data['sort_price'] = HTTPS_SERVER . 'index.php?route=catalog/product&token=' . $this->session->data['token'] . '&sort=p.price' . $url;), а вот с 88 $product['price']; разобраться не могу... Надіслати Поділитися на інших сайтах More sharing options... lvovich Опубліковано: 23 березня 2011 Share Опубліковано: 23 березня 2011 а вот с 88 разобраться не могу...С помощью юзера AndreyN проблема частично решена. Большое ему человеческое спасибо. Теперь сайт отображает в админке цены, но поиск по цене не работает. Если кому-то актуально, напишу.Однако, уважаемые знатоки, - обнаружилась ещё следующая проблема: Модуль "[webme]_CategoryAtHomepage_v.0.3", который до установки "фильтра категорий" выводил на главной товары из избранных категорий, отказывается показывать товары. Видны лишь названия категорий. Также, вылезают ошибки: "Warning: Missing argument 2 for ModelCatalogProduct::getTotalProductsByCategoryId(), called in /home/t/technik2ru/public_html/catalog/controller/module/webme_categories_at_homepage.php on line 33 and defined in /home/t/technik2ru/public_html/catalog/model/catalog/product.php on line 64" Очевидно, проблема в отсутствии второго аргумента для getTotalProductsByCategoryId. Если подставить туда пустое поле, то картина повторяется, но ошибки не выдаются. Как исправить? Надіслати Поділитися на інших сайтах More sharing options... roma4891 Опубліковано: 23 березня 2011 Share Опубліковано: 23 березня 2011 С помощью юзера AndreyN проблема частично решена. Большое ему человеческое спасибо. Теперь сайт отображает в админке цены, но поиск по цене не работает. Если кому-то актуально, напишу. Однако, уважаемые знатоки, - обнаружилась ещё следующая проблема: Модуль "[webme]_CategoryAtHomepage_v.0.3", который до установки "фильтра категорий" выводил на главной товары из избранных категорий, отказывается показывать товары. Видны лишь названия категорий. Также, вылезают ошибки: "Warning: Missing argument 2 for ModelCatalogProduct::getTotalProductsByCategoryId(), called in /home/t/technik2ru/public_html/catalog/controller/module/webme_categories_at_homepage.php on line 33 and defined in /home/t/technik2ru/public_html/catalog/model/catalog/product.php on line 64" Очевидно, проблема в отсутствии второго аргумента для getTotalProductsByCategoryId. Если подставить туда пустое поле, то картина повторяется, но ошибки не выдаются. Как исправить? Актуально, хотя бы потому что место экономит в админке (я с ценами через экспорт/импорт работаю)Всёже как избавится от Notice: Undefined index: special in /.../admin/view/template/catalog/product_list.tpl on line 85 Notice: Undefined index: price in /.../admin/view/template/catalog/product_list.tpl on line 88 в списке товаров в админке? Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 23 березня 2011 Share Опубліковано: 23 березня 2011 lvovich, я конечно понимаю, что вы мучаете фильтр, но проблемы с другими модулями надо решать в их темах... Определенная категория на главной мыши плакали, кололись, но продолжали грызть кактус... Надіслати Поділитися на інших сайтах More sharing options... lvovich Опубліковано: 23 березня 2011 Share Опубліковано: 23 березня 2011 надо решать в их темах...Прошу прощения.2 roma4891 В общем, душа успокоилась вот чем: Открываем admin/controller/catalog/product.php Находим строку: 'quantity' => $result['quantity'],Выше добавляем: 'price' => $result['price'], Находим (триста какая-то строка): $this->data['products'][] = array(Добавляем перед этой строчкой вот это: $product_specials = $this->model_catalog_product->getProductSpecials($result['product_id']); if ($product_specials) { $special = reset($product_specials); if($special['date_start'] > date('Y-m-d') || $special['date_end'] < date('Y-m-d')) { $special = FALSE; } } else { $special = FALSE; } Затем по всему файлу ищем строки с "filter_model" и по аналогии вставляем после них то же самое, но с "filter_price". Сохраняем. Теперь открываем admin/view/template/catalog/product_list.tpl Ищем строку: <?php echo $$product_info['price']; ?>Меняем на: <?php echo $product['price']; ?> Вот такой квест... вроде, ничего не забыл. Теперь всё, кроме поиска по цене, работает. 1 Надіслати Поділитися на інших сайтах More sharing options... roma4891 Опубліковано: 24 березня 2011 Share Опубліковано: 24 березня 2011 Прошу прощения. 2 roma4891 В общем, душа успокоилась вот чем: Открываем admin/controller/catalog/product.php Находим строку: 'quantity' => $result['quantity'],Выше добавляем: 'price' => $result['price'], Находим (триста какая-то строка): $this->data['products'][] = array(Добавляем перед этой строчкой вот это: $product_specials = $this->model_catalog_product->getProductSpecials($result['product_id']); if ($product_specials) { $special = reset($product_specials); if($special['date_start'] > date('Y-m-d') || $special['date_end'] < date('Y-m-d')) { $special = FALSE; } } else { $special = FALSE; } Затем по всему файлу ищем строки с "filter_model" и по аналогии вставляем после них то же самое, но с "filter_price". Сохраняем. Теперь открываем admin/view/template/catalog/product_list.tpl Ищем строку: <?php echo $$product_info['price']; ?>Меняем на: <?php echo $product['price']; ?> Вот такой квест... вроде, ничего не забыл. Теперь всё, кроме поиска по цене, работает. Огромное спасибо, правда лучше всё делать вручную(удалось настроить пошагово), меньше боков вылазит, кстати удалось сделать более менее нормальную сборку для ручной установки, сейчас тестирую - потом выложу, если автор против не будет. Надіслати Поділитися на інших сайтах More sharing options... roma4891 Опубліковано: 25 березня 2011 Share Опубліковано: 25 березня 2011 Как и обещал сделал ручную сборку с мануалом по установке и с учётом большинства изменений(сразу,у меня 0.1.8), из того что помню: - устранена проблема с IE (пост #72, 4 стр. afwollis); - добавлено в админке checkbox "Выбрать все" для выбора всех категорий (спасибо berikiushi); - назначение товару нескольких свойств (спасибо afwollis - пост #53) при редактировании товара; - логическое И (и то, и то обязательно) при фильтрации в категории по свойствам товара (спасибо afwollis - пост #79) - ... может чтото ещё...непомню (собирал ночью) Начнём, 1) Делаем запрос в базу данных(у меня ПРЕФИКС oc_): 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; 2) В файле admin|view|template|catalog|product_form.tpl После <a tab="#tab_links"><?php echo $tab_links; ?></a>Вставляем<a tab="#tab_filter">Опции фильтра</a> Далее после блока <div id="tab_general"></div>, примерно 59 строка, перед <div id="tab_data">Вставляем <!-- Start tab filter--> <div id="tab_filter"> Сначала необходимо выбрать категории товара </div> <!-- End tab filter-->Теперь идем в конец файла, ДО <?php echo $footer; ?>Вставляем <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) Открываем файл admin|model|catalog|product.php После блока (метод addProduct) гдето 21 строка 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 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) Открываем admin|controller|catalog|product.php в районе 1100 строки, после foreach($results as $option) { $this->data['category_options'][] = array(Должно быть(если нет вставляем!) 'option_id' => $option['option_id'],в итоге должно быть: 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']) ); }и идем в конец файла, до закрытия класса вставляем // 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) Открываем catalog|model|catalog|product.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) {До блока 17 строка $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 product_id FROM " . DB_PREFIX . "product_to_value WHERE " . implode(" OR ", $data) . ")"; } */ if (isset($values) && $values != '') { $data = array(); $values_without_underline = ""; $values_for_IN = ""; foreach (explode('_', $values) as $value_id) { if (empty($values_for_IN)) { $values_for_IN = "'".$value_id."'"; } else { $values_for_IN .= ", '".$value_id."'"; } $values_without_underline .= $value_id; } // http://forums.mysql.com/read.php?78,354483,354598#msg-354598 //(SELECT GROUP_CONCAT(DISTINCT Tag_id ORDER BY Tag_id ASC SEPARATOR '') FROM Tag_has_Post WHERE Post_id=t.Post_id AND Tag_id IN (2,5))='25'; $sql .= " AND (SELECT GROUP_CONCAT(DISTINCT value_id SEPARATOR '') FROM oc_product_to_value WHERE product_id=p.product_id AND value_id IN (".$values_for_IN."))='".$values_without_underline."'"; } // End filterЗаменяем весь метод public function getTotalProductsByCategoryId (теперь гдето с 84 по 85 строку)На 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) . ")"; } */ if (isset($values) && $values != '') { $data = array(); $values_without_underline = ""; $values_for_IN = ""; foreach (explode('_', $values) as $value_id) { if (empty($values_for_IN)) { $values_for_IN = "'".$value_id."'"; } else { $values_for_IN .= ", '".$value_id."'"; } $values_without_underline .= $value_id; } // http://forums.mysql.com/read.php?78,354483,354598#msg-354598 //(SELECT GROUP_CONCAT(DISTINCT Tag_id ORDER BY Tag_id ASC SEPARATOR '') FROM Tag_has_Post WHERE Post_id=t.Post_id AND Tag_id IN (2,5))='25'; $sql .= " AND (SELECT GROUP_CONCAT(DISTINCT value_id SEPARATOR '') FROM oc_product_to_value WHERE product_id=p.product_id AND value_id IN (".$values_for_IN."))='".$values_without_underline."'"; } // End filter $query = $this->db->query($sql); return $query->row['total']; }Сохраняем, закрываем.6) Открываем catalog|controller|product|category.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) Качаем архив manual_Openstore_module_product.zip и извлекаем в корень сайта с заменой. 8) Идем в админку -> дополнения и включаем фильтр, добавляем опции. manual_Openstore_module_product.zip Надіслати Поділитися на інших сайтах More sharing options... roma4891 Опубліковано: 25 березня 2011 Share Опубліковано: 25 березня 2011 Помогите добавить в opencart-1-4-9-18-export-import.zip! Надіслати Поділитися на інших сайтах More sharing options... Googlah Опубліковано: 25 березня 2011 Share Опубліковано: 25 березня 2011 SooR, огромное спасибо за проделанную работу Надіслати Поділитися на інших сайтах More sharing options... lvovich Опубліковано: 26 березня 2011 Share Опубліковано: 26 березня 2011 В выше приведённой инсталляции "логическое И" не работает. Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 3 4 5 6 7 8 Вперед Сторінка 6 з 8 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Модулі та розширення Нужен ли модуль "фильтр в категории" ? Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
futadmytro Опубліковано: 10 березня 2011 Share Опубліковано: 10 березня 2011 futadmytro, в файле catalog/view/theme/default/template/module/filter.tpl Спасибо!!! Работает) Еще вопрос: Можно ли реализовать фильтр , чтобы он собирал значение 1 , а потом значение 2 собирал уже с результатов значения 1, сложная выборка -ето чуть не то, или мой фильтр работает криво? Спасибо шаманам ОК )) Надіслати Поділитися на інших сайтах More sharing options...
Гість Опубліковано: 10 березня 2011 Share Опубліковано: 10 березня 2011 Вопрос кто нить решил проблему с возравтром. например когда смотришь товар и нажимаешь назад, подргружалась старница с уже активными фильтрами Надіслати Поділитися на інших сайтах More sharing options...
afwollis Опубліковано: 10 березня 2011 Share Опубліковано: 10 березня 2011 При использовании ajax "история" не сохраняется. Хотя можно сохранить выбранные опции в сессию и покрутить модуль с этой стороны. Однако опять же - "истории в браузере" не будет. Нужна будет кнопка-ссылка "Назад". Надіслати Поділитися на інших сайтах More sharing options... Гість Опубліковано: 11 березня 2011 Share Опубліковано: 11 березня 2011 можешь подсказать куда копать хотя бы с кнопкой назад)) Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 13 березня 2011 Share Опубліковано: 13 березня 2011 у меня от воспоминаний "разбора полетов" стресс начинается :o поэтому пока что к фильтру не хочется возвращаться. Надіслати Поділитися на інших сайтах More sharing options... gdemon Опубліковано: 14 березня 2011 Share Опубліковано: 14 березня 2011 Подскажите, можно ли сделать чтобы фильтр отфильтровывал не сразу при смене параметра, а при нажатии на добавленную кнопку "поиск"? Надіслати Поділитися на інших сайтах More sharing options... AndreyN Опубліковано: 17 березня 2011 Share Опубліковано: 17 березня 2011 Доброго дня. Прошу помочь понять следующий финт .., установил ocstore 0.1.8. Подвязал дизайн, установил фильтр с нуля. Добавил таблицы в SQL. Через модули установил фильтр, создал условия. Вроде все путем. Вхожу в товары, на вкладке Опции фильтра получаю сообщение Страница не найдена. Страница, которую Вы запрашиваете, не найдена. Если проблема будет повторяться, свяжитесь пожалуйста с администратором. И что с этим делать ума не приложу .. помогайте други. Спасибо. Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 18 березня 2011 Share Опубліковано: 18 березня 2011 (змінено) Доброго дня. Прошу помочь понять следующий финт .., установил ocstore 0.1.8. Подвязал дизайн, установил фильтр с нуля. Добавил таблицы в SQL. Через модули установил фильтр, создал условия. Вроде все путем. Вхожу в товары, на вкладке Опции фильтра получаю сообщение Страница не найдена. Страница, которую Вы запрашиваете, не найдена. Если проблема будет повторяться, свяжитесь пожалуйста с администратором. И что с этим делать ума не приложу .. помогайте други. скрин?все файлы залили? все изменения в файлах сделали? Змінено 18 березня 2011 користувачем afwollis Надіслати Поділитися на інших сайтах More sharing options... lampard Опубліковано: 19 березня 2011 Share Опубліковано: 19 березня 2011 Ребят, Доброго дня! Помогите пожалуйста! Установил, всё нормально, устанавливал вручную, несчитая мелких багов, которые исправятся, всё нормально, но вот странный нюанс, добавил опции фильтра для категории "Портативная техника->Нетбуки", захожу в настройки товара, который находится в этой категории, перехожу во вкладку "Опции фильтра", а мне пишит "Сначала необходимо выбрать категории товара", выбира уже и все категории всёравно одно и тоже пишит. Подскажите пожалуйста. Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 19 березня 2011 Share Опубліковано: 19 березня 2011 ссылку на сайт? Надіслати Поділитися на інших сайтах More sharing options... lvovich Опубліковано: 22 березня 2011 Share Опубліковано: 22 березня 2011 Отличный модуль. Большое спасибо авторам за труды. Но, великие гуру! Имеется проблема! Ставил на чистую OpenCart "1.4.9.3", всё работает отлично, за исключением одного: в админке не отображается цена в Каталоге товаров. В самом товаре и на сайте всё прекрасно, - цены есть. Я очень слабо ориентируюсь в php... очевидно, нужно править файл \admin\controller\catalog\product.php ? product.php Надіслати Поділитися на інших сайтах More sharing options... lvovich Опубліковано: 22 березня 2011 Share Опубліковано: 22 березня 2011 У кого-нибудь остался архив для инсталляции "вручную"? Прочитал всю тему дважды, нашел ссылку только на "чистую" инсталляцию. Если это поможет аццам русского кодинга, у меня есть 200RUR на вэбманях. На пару кружек доброго пива должно хватить. Надіслати Поділитися на інших сайтах More sharing options... roma4891 Опубліковано: 23 березня 2011 Share Опубліковано: 23 березня 2011 спасибо, заработал. Если вдруг кому то понадобится, я столкнулся с таким моментом: после установки на чистую систему, добавлении необходимых баз. Все запускается, но в админке есть ошибка в колонке с ценой, ругается на отсутствие переменных в строке 35 и 88 ..файла product_list.tpl. Я ее исправил добавив в product.php недостающие переменные (по аналогии с рабочей системой без этого модуля). При необходимости могу выложить файл с исправлениями. Еще раз, всем спасибо за оперативный ответ. Ошибку в 35 строке исправить удалось(добавил в 357 строке $this->data['column_price'] = $this->language->get('column_price');, и 413 $this->data['sort_price'] = HTTPS_SERVER . 'index.php?route=catalog/product&token=' . $this->session->data['token'] . '&sort=p.price' . $url;), а вот с 88 $product['price']; разобраться не могу... Надіслати Поділитися на інших сайтах More sharing options... lvovich Опубліковано: 23 березня 2011 Share Опубліковано: 23 березня 2011 а вот с 88 разобраться не могу...С помощью юзера AndreyN проблема частично решена. Большое ему человеческое спасибо. Теперь сайт отображает в админке цены, но поиск по цене не работает. Если кому-то актуально, напишу.Однако, уважаемые знатоки, - обнаружилась ещё следующая проблема: Модуль "[webme]_CategoryAtHomepage_v.0.3", который до установки "фильтра категорий" выводил на главной товары из избранных категорий, отказывается показывать товары. Видны лишь названия категорий. Также, вылезают ошибки: "Warning: Missing argument 2 for ModelCatalogProduct::getTotalProductsByCategoryId(), called in /home/t/technik2ru/public_html/catalog/controller/module/webme_categories_at_homepage.php on line 33 and defined in /home/t/technik2ru/public_html/catalog/model/catalog/product.php on line 64" Очевидно, проблема в отсутствии второго аргумента для getTotalProductsByCategoryId. Если подставить туда пустое поле, то картина повторяется, но ошибки не выдаются. Как исправить? Надіслати Поділитися на інших сайтах More sharing options... roma4891 Опубліковано: 23 березня 2011 Share Опубліковано: 23 березня 2011 С помощью юзера AndreyN проблема частично решена. Большое ему человеческое спасибо. Теперь сайт отображает в админке цены, но поиск по цене не работает. Если кому-то актуально, напишу. Однако, уважаемые знатоки, - обнаружилась ещё следующая проблема: Модуль "[webme]_CategoryAtHomepage_v.0.3", который до установки "фильтра категорий" выводил на главной товары из избранных категорий, отказывается показывать товары. Видны лишь названия категорий. Также, вылезают ошибки: "Warning: Missing argument 2 for ModelCatalogProduct::getTotalProductsByCategoryId(), called in /home/t/technik2ru/public_html/catalog/controller/module/webme_categories_at_homepage.php on line 33 and defined in /home/t/technik2ru/public_html/catalog/model/catalog/product.php on line 64" Очевидно, проблема в отсутствии второго аргумента для getTotalProductsByCategoryId. Если подставить туда пустое поле, то картина повторяется, но ошибки не выдаются. Как исправить? Актуально, хотя бы потому что место экономит в админке (я с ценами через экспорт/импорт работаю)Всёже как избавится от Notice: Undefined index: special in /.../admin/view/template/catalog/product_list.tpl on line 85 Notice: Undefined index: price in /.../admin/view/template/catalog/product_list.tpl on line 88 в списке товаров в админке? Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 23 березня 2011 Share Опубліковано: 23 березня 2011 lvovich, я конечно понимаю, что вы мучаете фильтр, но проблемы с другими модулями надо решать в их темах... Определенная категория на главной мыши плакали, кололись, но продолжали грызть кактус... Надіслати Поділитися на інших сайтах More sharing options... lvovich Опубліковано: 23 березня 2011 Share Опубліковано: 23 березня 2011 надо решать в их темах...Прошу прощения.2 roma4891 В общем, душа успокоилась вот чем: Открываем admin/controller/catalog/product.php Находим строку: 'quantity' => $result['quantity'],Выше добавляем: 'price' => $result['price'], Находим (триста какая-то строка): $this->data['products'][] = array(Добавляем перед этой строчкой вот это: $product_specials = $this->model_catalog_product->getProductSpecials($result['product_id']); if ($product_specials) { $special = reset($product_specials); if($special['date_start'] > date('Y-m-d') || $special['date_end'] < date('Y-m-d')) { $special = FALSE; } } else { $special = FALSE; } Затем по всему файлу ищем строки с "filter_model" и по аналогии вставляем после них то же самое, но с "filter_price". Сохраняем. Теперь открываем admin/view/template/catalog/product_list.tpl Ищем строку: <?php echo $$product_info['price']; ?>Меняем на: <?php echo $product['price']; ?> Вот такой квест... вроде, ничего не забыл. Теперь всё, кроме поиска по цене, работает. 1 Надіслати Поділитися на інших сайтах More sharing options... roma4891 Опубліковано: 24 березня 2011 Share Опубліковано: 24 березня 2011 Прошу прощения. 2 roma4891 В общем, душа успокоилась вот чем: Открываем admin/controller/catalog/product.php Находим строку: 'quantity' => $result['quantity'],Выше добавляем: 'price' => $result['price'], Находим (триста какая-то строка): $this->data['products'][] = array(Добавляем перед этой строчкой вот это: $product_specials = $this->model_catalog_product->getProductSpecials($result['product_id']); if ($product_specials) { $special = reset($product_specials); if($special['date_start'] > date('Y-m-d') || $special['date_end'] < date('Y-m-d')) { $special = FALSE; } } else { $special = FALSE; } Затем по всему файлу ищем строки с "filter_model" и по аналогии вставляем после них то же самое, но с "filter_price". Сохраняем. Теперь открываем admin/view/template/catalog/product_list.tpl Ищем строку: <?php echo $$product_info['price']; ?>Меняем на: <?php echo $product['price']; ?> Вот такой квест... вроде, ничего не забыл. Теперь всё, кроме поиска по цене, работает. Огромное спасибо, правда лучше всё делать вручную(удалось настроить пошагово), меньше боков вылазит, кстати удалось сделать более менее нормальную сборку для ручной установки, сейчас тестирую - потом выложу, если автор против не будет. Надіслати Поділитися на інших сайтах More sharing options... roma4891 Опубліковано: 25 березня 2011 Share Опубліковано: 25 березня 2011 Как и обещал сделал ручную сборку с мануалом по установке и с учётом большинства изменений(сразу,у меня 0.1.8), из того что помню: - устранена проблема с IE (пост #72, 4 стр. afwollis); - добавлено в админке checkbox "Выбрать все" для выбора всех категорий (спасибо berikiushi); - назначение товару нескольких свойств (спасибо afwollis - пост #53) при редактировании товара; - логическое И (и то, и то обязательно) при фильтрации в категории по свойствам товара (спасибо afwollis - пост #79) - ... может чтото ещё...непомню (собирал ночью) Начнём, 1) Делаем запрос в базу данных(у меня ПРЕФИКС oc_): 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; 2) В файле admin|view|template|catalog|product_form.tpl После <a tab="#tab_links"><?php echo $tab_links; ?></a>Вставляем<a tab="#tab_filter">Опции фильтра</a> Далее после блока <div id="tab_general"></div>, примерно 59 строка, перед <div id="tab_data">Вставляем <!-- Start tab filter--> <div id="tab_filter"> Сначала необходимо выбрать категории товара </div> <!-- End tab filter-->Теперь идем в конец файла, ДО <?php echo $footer; ?>Вставляем <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) Открываем файл admin|model|catalog|product.php После блока (метод addProduct) гдето 21 строка 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 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) Открываем admin|controller|catalog|product.php в районе 1100 строки, после foreach($results as $option) { $this->data['category_options'][] = array(Должно быть(если нет вставляем!) 'option_id' => $option['option_id'],в итоге должно быть: 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']) ); }и идем в конец файла, до закрытия класса вставляем // 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) Открываем catalog|model|catalog|product.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) {До блока 17 строка $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 product_id FROM " . DB_PREFIX . "product_to_value WHERE " . implode(" OR ", $data) . ")"; } */ if (isset($values) && $values != '') { $data = array(); $values_without_underline = ""; $values_for_IN = ""; foreach (explode('_', $values) as $value_id) { if (empty($values_for_IN)) { $values_for_IN = "'".$value_id."'"; } else { $values_for_IN .= ", '".$value_id."'"; } $values_without_underline .= $value_id; } // http://forums.mysql.com/read.php?78,354483,354598#msg-354598 //(SELECT GROUP_CONCAT(DISTINCT Tag_id ORDER BY Tag_id ASC SEPARATOR '') FROM Tag_has_Post WHERE Post_id=t.Post_id AND Tag_id IN (2,5))='25'; $sql .= " AND (SELECT GROUP_CONCAT(DISTINCT value_id SEPARATOR '') FROM oc_product_to_value WHERE product_id=p.product_id AND value_id IN (".$values_for_IN."))='".$values_without_underline."'"; } // End filterЗаменяем весь метод public function getTotalProductsByCategoryId (теперь гдето с 84 по 85 строку)На 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) . ")"; } */ if (isset($values) && $values != '') { $data = array(); $values_without_underline = ""; $values_for_IN = ""; foreach (explode('_', $values) as $value_id) { if (empty($values_for_IN)) { $values_for_IN = "'".$value_id."'"; } else { $values_for_IN .= ", '".$value_id."'"; } $values_without_underline .= $value_id; } // http://forums.mysql.com/read.php?78,354483,354598#msg-354598 //(SELECT GROUP_CONCAT(DISTINCT Tag_id ORDER BY Tag_id ASC SEPARATOR '') FROM Tag_has_Post WHERE Post_id=t.Post_id AND Tag_id IN (2,5))='25'; $sql .= " AND (SELECT GROUP_CONCAT(DISTINCT value_id SEPARATOR '') FROM oc_product_to_value WHERE product_id=p.product_id AND value_id IN (".$values_for_IN."))='".$values_without_underline."'"; } // End filter $query = $this->db->query($sql); return $query->row['total']; }Сохраняем, закрываем.6) Открываем catalog|controller|product|category.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) Качаем архив manual_Openstore_module_product.zip и извлекаем в корень сайта с заменой. 8) Идем в админку -> дополнения и включаем фильтр, добавляем опции. manual_Openstore_module_product.zip Надіслати Поділитися на інших сайтах More sharing options... roma4891 Опубліковано: 25 березня 2011 Share Опубліковано: 25 березня 2011 Помогите добавить в opencart-1-4-9-18-export-import.zip! Надіслати Поділитися на інших сайтах More sharing options... Googlah Опубліковано: 25 березня 2011 Share Опубліковано: 25 березня 2011 SooR, огромное спасибо за проделанную работу Надіслати Поділитися на інших сайтах More sharing options... lvovich Опубліковано: 26 березня 2011 Share Опубліковано: 26 березня 2011 В выше приведённой инсталляции "логическое И" не работает. Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 3 4 5 6 7 8 Вперед Сторінка 6 з 8 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Модулі та розширення Нужен ли модуль "фильтр в категории" ? Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
Гість Опубліковано: 11 березня 2011 Share Опубліковано: 11 березня 2011 можешь подсказать куда копать хотя бы с кнопкой назад)) Надіслати Поділитися на інших сайтах More sharing options...
afwollis Опубліковано: 13 березня 2011 Share Опубліковано: 13 березня 2011 у меня от воспоминаний "разбора полетов" стресс начинается :o поэтому пока что к фильтру не хочется возвращаться. Надіслати Поділитися на інших сайтах More sharing options... gdemon Опубліковано: 14 березня 2011 Share Опубліковано: 14 березня 2011 Подскажите, можно ли сделать чтобы фильтр отфильтровывал не сразу при смене параметра, а при нажатии на добавленную кнопку "поиск"? Надіслати Поділитися на інших сайтах More sharing options... AndreyN Опубліковано: 17 березня 2011 Share Опубліковано: 17 березня 2011 Доброго дня. Прошу помочь понять следующий финт .., установил ocstore 0.1.8. Подвязал дизайн, установил фильтр с нуля. Добавил таблицы в SQL. Через модули установил фильтр, создал условия. Вроде все путем. Вхожу в товары, на вкладке Опции фильтра получаю сообщение Страница не найдена. Страница, которую Вы запрашиваете, не найдена. Если проблема будет повторяться, свяжитесь пожалуйста с администратором. И что с этим делать ума не приложу .. помогайте други. Спасибо. Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 18 березня 2011 Share Опубліковано: 18 березня 2011 (змінено) Доброго дня. Прошу помочь понять следующий финт .., установил ocstore 0.1.8. Подвязал дизайн, установил фильтр с нуля. Добавил таблицы в SQL. Через модули установил фильтр, создал условия. Вроде все путем. Вхожу в товары, на вкладке Опции фильтра получаю сообщение Страница не найдена. Страница, которую Вы запрашиваете, не найдена. Если проблема будет повторяться, свяжитесь пожалуйста с администратором. И что с этим делать ума не приложу .. помогайте други. скрин?все файлы залили? все изменения в файлах сделали? Змінено 18 березня 2011 користувачем afwollis Надіслати Поділитися на інших сайтах More sharing options... lampard Опубліковано: 19 березня 2011 Share Опубліковано: 19 березня 2011 Ребят, Доброго дня! Помогите пожалуйста! Установил, всё нормально, устанавливал вручную, несчитая мелких багов, которые исправятся, всё нормально, но вот странный нюанс, добавил опции фильтра для категории "Портативная техника->Нетбуки", захожу в настройки товара, который находится в этой категории, перехожу во вкладку "Опции фильтра", а мне пишит "Сначала необходимо выбрать категории товара", выбира уже и все категории всёравно одно и тоже пишит. Подскажите пожалуйста. Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 19 березня 2011 Share Опубліковано: 19 березня 2011 ссылку на сайт? Надіслати Поділитися на інших сайтах More sharing options... lvovich Опубліковано: 22 березня 2011 Share Опубліковано: 22 березня 2011 Отличный модуль. Большое спасибо авторам за труды. Но, великие гуру! Имеется проблема! Ставил на чистую OpenCart "1.4.9.3", всё работает отлично, за исключением одного: в админке не отображается цена в Каталоге товаров. В самом товаре и на сайте всё прекрасно, - цены есть. Я очень слабо ориентируюсь в php... очевидно, нужно править файл \admin\controller\catalog\product.php ? product.php Надіслати Поділитися на інших сайтах More sharing options... lvovich Опубліковано: 22 березня 2011 Share Опубліковано: 22 березня 2011 У кого-нибудь остался архив для инсталляции "вручную"? Прочитал всю тему дважды, нашел ссылку только на "чистую" инсталляцию. Если это поможет аццам русского кодинга, у меня есть 200RUR на вэбманях. На пару кружек доброго пива должно хватить. Надіслати Поділитися на інших сайтах More sharing options... roma4891 Опубліковано: 23 березня 2011 Share Опубліковано: 23 березня 2011 спасибо, заработал. Если вдруг кому то понадобится, я столкнулся с таким моментом: после установки на чистую систему, добавлении необходимых баз. Все запускается, но в админке есть ошибка в колонке с ценой, ругается на отсутствие переменных в строке 35 и 88 ..файла product_list.tpl. Я ее исправил добавив в product.php недостающие переменные (по аналогии с рабочей системой без этого модуля). При необходимости могу выложить файл с исправлениями. Еще раз, всем спасибо за оперативный ответ. Ошибку в 35 строке исправить удалось(добавил в 357 строке $this->data['column_price'] = $this->language->get('column_price');, и 413 $this->data['sort_price'] = HTTPS_SERVER . 'index.php?route=catalog/product&token=' . $this->session->data['token'] . '&sort=p.price' . $url;), а вот с 88 $product['price']; разобраться не могу... Надіслати Поділитися на інших сайтах More sharing options... lvovich Опубліковано: 23 березня 2011 Share Опубліковано: 23 березня 2011 а вот с 88 разобраться не могу...С помощью юзера AndreyN проблема частично решена. Большое ему человеческое спасибо. Теперь сайт отображает в админке цены, но поиск по цене не работает. Если кому-то актуально, напишу.Однако, уважаемые знатоки, - обнаружилась ещё следующая проблема: Модуль "[webme]_CategoryAtHomepage_v.0.3", который до установки "фильтра категорий" выводил на главной товары из избранных категорий, отказывается показывать товары. Видны лишь названия категорий. Также, вылезают ошибки: "Warning: Missing argument 2 for ModelCatalogProduct::getTotalProductsByCategoryId(), called in /home/t/technik2ru/public_html/catalog/controller/module/webme_categories_at_homepage.php on line 33 and defined in /home/t/technik2ru/public_html/catalog/model/catalog/product.php on line 64" Очевидно, проблема в отсутствии второго аргумента для getTotalProductsByCategoryId. Если подставить туда пустое поле, то картина повторяется, но ошибки не выдаются. Как исправить? Надіслати Поділитися на інших сайтах More sharing options... roma4891 Опубліковано: 23 березня 2011 Share Опубліковано: 23 березня 2011 С помощью юзера AndreyN проблема частично решена. Большое ему человеческое спасибо. Теперь сайт отображает в админке цены, но поиск по цене не работает. Если кому-то актуально, напишу. Однако, уважаемые знатоки, - обнаружилась ещё следующая проблема: Модуль "[webme]_CategoryAtHomepage_v.0.3", который до установки "фильтра категорий" выводил на главной товары из избранных категорий, отказывается показывать товары. Видны лишь названия категорий. Также, вылезают ошибки: "Warning: Missing argument 2 for ModelCatalogProduct::getTotalProductsByCategoryId(), called in /home/t/technik2ru/public_html/catalog/controller/module/webme_categories_at_homepage.php on line 33 and defined in /home/t/technik2ru/public_html/catalog/model/catalog/product.php on line 64" Очевидно, проблема в отсутствии второго аргумента для getTotalProductsByCategoryId. Если подставить туда пустое поле, то картина повторяется, но ошибки не выдаются. Как исправить? Актуально, хотя бы потому что место экономит в админке (я с ценами через экспорт/импорт работаю)Всёже как избавится от Notice: Undefined index: special in /.../admin/view/template/catalog/product_list.tpl on line 85 Notice: Undefined index: price in /.../admin/view/template/catalog/product_list.tpl on line 88 в списке товаров в админке? Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 23 березня 2011 Share Опубліковано: 23 березня 2011 lvovich, я конечно понимаю, что вы мучаете фильтр, но проблемы с другими модулями надо решать в их темах... Определенная категория на главной мыши плакали, кололись, но продолжали грызть кактус... Надіслати Поділитися на інших сайтах More sharing options... lvovich Опубліковано: 23 березня 2011 Share Опубліковано: 23 березня 2011 надо решать в их темах...Прошу прощения.2 roma4891 В общем, душа успокоилась вот чем: Открываем admin/controller/catalog/product.php Находим строку: 'quantity' => $result['quantity'],Выше добавляем: 'price' => $result['price'], Находим (триста какая-то строка): $this->data['products'][] = array(Добавляем перед этой строчкой вот это: $product_specials = $this->model_catalog_product->getProductSpecials($result['product_id']); if ($product_specials) { $special = reset($product_specials); if($special['date_start'] > date('Y-m-d') || $special['date_end'] < date('Y-m-d')) { $special = FALSE; } } else { $special = FALSE; } Затем по всему файлу ищем строки с "filter_model" и по аналогии вставляем после них то же самое, но с "filter_price". Сохраняем. Теперь открываем admin/view/template/catalog/product_list.tpl Ищем строку: <?php echo $$product_info['price']; ?>Меняем на: <?php echo $product['price']; ?> Вот такой квест... вроде, ничего не забыл. Теперь всё, кроме поиска по цене, работает. 1 Надіслати Поділитися на інших сайтах More sharing options... roma4891 Опубліковано: 24 березня 2011 Share Опубліковано: 24 березня 2011 Прошу прощения. 2 roma4891 В общем, душа успокоилась вот чем: Открываем admin/controller/catalog/product.php Находим строку: 'quantity' => $result['quantity'],Выше добавляем: 'price' => $result['price'], Находим (триста какая-то строка): $this->data['products'][] = array(Добавляем перед этой строчкой вот это: $product_specials = $this->model_catalog_product->getProductSpecials($result['product_id']); if ($product_specials) { $special = reset($product_specials); if($special['date_start'] > date('Y-m-d') || $special['date_end'] < date('Y-m-d')) { $special = FALSE; } } else { $special = FALSE; } Затем по всему файлу ищем строки с "filter_model" и по аналогии вставляем после них то же самое, но с "filter_price". Сохраняем. Теперь открываем admin/view/template/catalog/product_list.tpl Ищем строку: <?php echo $$product_info['price']; ?>Меняем на: <?php echo $product['price']; ?> Вот такой квест... вроде, ничего не забыл. Теперь всё, кроме поиска по цене, работает. Огромное спасибо, правда лучше всё делать вручную(удалось настроить пошагово), меньше боков вылазит, кстати удалось сделать более менее нормальную сборку для ручной установки, сейчас тестирую - потом выложу, если автор против не будет. Надіслати Поділитися на інших сайтах More sharing options... roma4891 Опубліковано: 25 березня 2011 Share Опубліковано: 25 березня 2011 Как и обещал сделал ручную сборку с мануалом по установке и с учётом большинства изменений(сразу,у меня 0.1.8), из того что помню: - устранена проблема с IE (пост #72, 4 стр. afwollis); - добавлено в админке checkbox "Выбрать все" для выбора всех категорий (спасибо berikiushi); - назначение товару нескольких свойств (спасибо afwollis - пост #53) при редактировании товара; - логическое И (и то, и то обязательно) при фильтрации в категории по свойствам товара (спасибо afwollis - пост #79) - ... может чтото ещё...непомню (собирал ночью) Начнём, 1) Делаем запрос в базу данных(у меня ПРЕФИКС oc_): 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; 2) В файле admin|view|template|catalog|product_form.tpl После <a tab="#tab_links"><?php echo $tab_links; ?></a>Вставляем<a tab="#tab_filter">Опции фильтра</a> Далее после блока <div id="tab_general"></div>, примерно 59 строка, перед <div id="tab_data">Вставляем <!-- Start tab filter--> <div id="tab_filter"> Сначала необходимо выбрать категории товара </div> <!-- End tab filter-->Теперь идем в конец файла, ДО <?php echo $footer; ?>Вставляем <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) Открываем файл admin|model|catalog|product.php После блока (метод addProduct) гдето 21 строка 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 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) Открываем admin|controller|catalog|product.php в районе 1100 строки, после foreach($results as $option) { $this->data['category_options'][] = array(Должно быть(если нет вставляем!) 'option_id' => $option['option_id'],в итоге должно быть: 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']) ); }и идем в конец файла, до закрытия класса вставляем // 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) Открываем catalog|model|catalog|product.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) {До блока 17 строка $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 product_id FROM " . DB_PREFIX . "product_to_value WHERE " . implode(" OR ", $data) . ")"; } */ if (isset($values) && $values != '') { $data = array(); $values_without_underline = ""; $values_for_IN = ""; foreach (explode('_', $values) as $value_id) { if (empty($values_for_IN)) { $values_for_IN = "'".$value_id."'"; } else { $values_for_IN .= ", '".$value_id."'"; } $values_without_underline .= $value_id; } // http://forums.mysql.com/read.php?78,354483,354598#msg-354598 //(SELECT GROUP_CONCAT(DISTINCT Tag_id ORDER BY Tag_id ASC SEPARATOR '') FROM Tag_has_Post WHERE Post_id=t.Post_id AND Tag_id IN (2,5))='25'; $sql .= " AND (SELECT GROUP_CONCAT(DISTINCT value_id SEPARATOR '') FROM oc_product_to_value WHERE product_id=p.product_id AND value_id IN (".$values_for_IN."))='".$values_without_underline."'"; } // End filterЗаменяем весь метод public function getTotalProductsByCategoryId (теперь гдето с 84 по 85 строку)На 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) . ")"; } */ if (isset($values) && $values != '') { $data = array(); $values_without_underline = ""; $values_for_IN = ""; foreach (explode('_', $values) as $value_id) { if (empty($values_for_IN)) { $values_for_IN = "'".$value_id."'"; } else { $values_for_IN .= ", '".$value_id."'"; } $values_without_underline .= $value_id; } // http://forums.mysql.com/read.php?78,354483,354598#msg-354598 //(SELECT GROUP_CONCAT(DISTINCT Tag_id ORDER BY Tag_id ASC SEPARATOR '') FROM Tag_has_Post WHERE Post_id=t.Post_id AND Tag_id IN (2,5))='25'; $sql .= " AND (SELECT GROUP_CONCAT(DISTINCT value_id SEPARATOR '') FROM oc_product_to_value WHERE product_id=p.product_id AND value_id IN (".$values_for_IN."))='".$values_without_underline."'"; } // End filter $query = $this->db->query($sql); return $query->row['total']; }Сохраняем, закрываем.6) Открываем catalog|controller|product|category.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) Качаем архив manual_Openstore_module_product.zip и извлекаем в корень сайта с заменой. 8) Идем в админку -> дополнения и включаем фильтр, добавляем опции. manual_Openstore_module_product.zip Надіслати Поділитися на інших сайтах More sharing options... roma4891 Опубліковано: 25 березня 2011 Share Опубліковано: 25 березня 2011 Помогите добавить в opencart-1-4-9-18-export-import.zip! Надіслати Поділитися на інших сайтах More sharing options... Googlah Опубліковано: 25 березня 2011 Share Опубліковано: 25 березня 2011 SooR, огромное спасибо за проделанную работу Надіслати Поділитися на інших сайтах More sharing options... lvovich Опубліковано: 26 березня 2011 Share Опубліковано: 26 березня 2011 В выше приведённой инсталляции "логическое И" не работает. Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 3 4 5 6 7 8 Вперед Сторінка 6 з 8 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Модулі та розширення Нужен ли модуль "фильтр в категории" ? Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
gdemon Опубліковано: 14 березня 2011 Share Опубліковано: 14 березня 2011 Подскажите, можно ли сделать чтобы фильтр отфильтровывал не сразу при смене параметра, а при нажатии на добавленную кнопку "поиск"? Надіслати Поділитися на інших сайтах More sharing options... AndreyN Опубліковано: 17 березня 2011 Share Опубліковано: 17 березня 2011 Доброго дня. Прошу помочь понять следующий финт .., установил ocstore 0.1.8. Подвязал дизайн, установил фильтр с нуля. Добавил таблицы в SQL. Через модули установил фильтр, создал условия. Вроде все путем. Вхожу в товары, на вкладке Опции фильтра получаю сообщение Страница не найдена. Страница, которую Вы запрашиваете, не найдена. Если проблема будет повторяться, свяжитесь пожалуйста с администратором. И что с этим делать ума не приложу .. помогайте други. Спасибо. Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 18 березня 2011 Share Опубліковано: 18 березня 2011 (змінено) Доброго дня. Прошу помочь понять следующий финт .., установил ocstore 0.1.8. Подвязал дизайн, установил фильтр с нуля. Добавил таблицы в SQL. Через модули установил фильтр, создал условия. Вроде все путем. Вхожу в товары, на вкладке Опции фильтра получаю сообщение Страница не найдена. Страница, которую Вы запрашиваете, не найдена. Если проблема будет повторяться, свяжитесь пожалуйста с администратором. И что с этим делать ума не приложу .. помогайте други. скрин?все файлы залили? все изменения в файлах сделали? Змінено 18 березня 2011 користувачем afwollis Надіслати Поділитися на інших сайтах More sharing options... lampard Опубліковано: 19 березня 2011 Share Опубліковано: 19 березня 2011 Ребят, Доброго дня! Помогите пожалуйста! Установил, всё нормально, устанавливал вручную, несчитая мелких багов, которые исправятся, всё нормально, но вот странный нюанс, добавил опции фильтра для категории "Портативная техника->Нетбуки", захожу в настройки товара, который находится в этой категории, перехожу во вкладку "Опции фильтра", а мне пишит "Сначала необходимо выбрать категории товара", выбира уже и все категории всёравно одно и тоже пишит. Подскажите пожалуйста. Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 19 березня 2011 Share Опубліковано: 19 березня 2011 ссылку на сайт? Надіслати Поділитися на інших сайтах More sharing options... lvovich Опубліковано: 22 березня 2011 Share Опубліковано: 22 березня 2011 Отличный модуль. Большое спасибо авторам за труды. Но, великие гуру! Имеется проблема! Ставил на чистую OpenCart "1.4.9.3", всё работает отлично, за исключением одного: в админке не отображается цена в Каталоге товаров. В самом товаре и на сайте всё прекрасно, - цены есть. Я очень слабо ориентируюсь в php... очевидно, нужно править файл \admin\controller\catalog\product.php ? product.php Надіслати Поділитися на інших сайтах More sharing options... lvovich Опубліковано: 22 березня 2011 Share Опубліковано: 22 березня 2011 У кого-нибудь остался архив для инсталляции "вручную"? Прочитал всю тему дважды, нашел ссылку только на "чистую" инсталляцию. Если это поможет аццам русского кодинга, у меня есть 200RUR на вэбманях. На пару кружек доброго пива должно хватить. Надіслати Поділитися на інших сайтах More sharing options... roma4891 Опубліковано: 23 березня 2011 Share Опубліковано: 23 березня 2011 спасибо, заработал. Если вдруг кому то понадобится, я столкнулся с таким моментом: после установки на чистую систему, добавлении необходимых баз. Все запускается, но в админке есть ошибка в колонке с ценой, ругается на отсутствие переменных в строке 35 и 88 ..файла product_list.tpl. Я ее исправил добавив в product.php недостающие переменные (по аналогии с рабочей системой без этого модуля). При необходимости могу выложить файл с исправлениями. Еще раз, всем спасибо за оперативный ответ. Ошибку в 35 строке исправить удалось(добавил в 357 строке $this->data['column_price'] = $this->language->get('column_price');, и 413 $this->data['sort_price'] = HTTPS_SERVER . 'index.php?route=catalog/product&token=' . $this->session->data['token'] . '&sort=p.price' . $url;), а вот с 88 $product['price']; разобраться не могу... Надіслати Поділитися на інших сайтах More sharing options... lvovich Опубліковано: 23 березня 2011 Share Опубліковано: 23 березня 2011 а вот с 88 разобраться не могу...С помощью юзера AndreyN проблема частично решена. Большое ему человеческое спасибо. Теперь сайт отображает в админке цены, но поиск по цене не работает. Если кому-то актуально, напишу.Однако, уважаемые знатоки, - обнаружилась ещё следующая проблема: Модуль "[webme]_CategoryAtHomepage_v.0.3", который до установки "фильтра категорий" выводил на главной товары из избранных категорий, отказывается показывать товары. Видны лишь названия категорий. Также, вылезают ошибки: "Warning: Missing argument 2 for ModelCatalogProduct::getTotalProductsByCategoryId(), called in /home/t/technik2ru/public_html/catalog/controller/module/webme_categories_at_homepage.php on line 33 and defined in /home/t/technik2ru/public_html/catalog/model/catalog/product.php on line 64" Очевидно, проблема в отсутствии второго аргумента для getTotalProductsByCategoryId. Если подставить туда пустое поле, то картина повторяется, но ошибки не выдаются. Как исправить? Надіслати Поділитися на інших сайтах More sharing options... roma4891 Опубліковано: 23 березня 2011 Share Опубліковано: 23 березня 2011 С помощью юзера AndreyN проблема частично решена. Большое ему человеческое спасибо. Теперь сайт отображает в админке цены, но поиск по цене не работает. Если кому-то актуально, напишу. Однако, уважаемые знатоки, - обнаружилась ещё следующая проблема: Модуль "[webme]_CategoryAtHomepage_v.0.3", который до установки "фильтра категорий" выводил на главной товары из избранных категорий, отказывается показывать товары. Видны лишь названия категорий. Также, вылезают ошибки: "Warning: Missing argument 2 for ModelCatalogProduct::getTotalProductsByCategoryId(), called in /home/t/technik2ru/public_html/catalog/controller/module/webme_categories_at_homepage.php on line 33 and defined in /home/t/technik2ru/public_html/catalog/model/catalog/product.php on line 64" Очевидно, проблема в отсутствии второго аргумента для getTotalProductsByCategoryId. Если подставить туда пустое поле, то картина повторяется, но ошибки не выдаются. Как исправить? Актуально, хотя бы потому что место экономит в админке (я с ценами через экспорт/импорт работаю)Всёже как избавится от Notice: Undefined index: special in /.../admin/view/template/catalog/product_list.tpl on line 85 Notice: Undefined index: price in /.../admin/view/template/catalog/product_list.tpl on line 88 в списке товаров в админке? Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 23 березня 2011 Share Опубліковано: 23 березня 2011 lvovich, я конечно понимаю, что вы мучаете фильтр, но проблемы с другими модулями надо решать в их темах... Определенная категория на главной мыши плакали, кололись, но продолжали грызть кактус... Надіслати Поділитися на інших сайтах More sharing options... lvovich Опубліковано: 23 березня 2011 Share Опубліковано: 23 березня 2011 надо решать в их темах...Прошу прощения.2 roma4891 В общем, душа успокоилась вот чем: Открываем admin/controller/catalog/product.php Находим строку: 'quantity' => $result['quantity'],Выше добавляем: 'price' => $result['price'], Находим (триста какая-то строка): $this->data['products'][] = array(Добавляем перед этой строчкой вот это: $product_specials = $this->model_catalog_product->getProductSpecials($result['product_id']); if ($product_specials) { $special = reset($product_specials); if($special['date_start'] > date('Y-m-d') || $special['date_end'] < date('Y-m-d')) { $special = FALSE; } } else { $special = FALSE; } Затем по всему файлу ищем строки с "filter_model" и по аналогии вставляем после них то же самое, но с "filter_price". Сохраняем. Теперь открываем admin/view/template/catalog/product_list.tpl Ищем строку: <?php echo $$product_info['price']; ?>Меняем на: <?php echo $product['price']; ?> Вот такой квест... вроде, ничего не забыл. Теперь всё, кроме поиска по цене, работает. 1 Надіслати Поділитися на інших сайтах More sharing options... roma4891 Опубліковано: 24 березня 2011 Share Опубліковано: 24 березня 2011 Прошу прощения. 2 roma4891 В общем, душа успокоилась вот чем: Открываем admin/controller/catalog/product.php Находим строку: 'quantity' => $result['quantity'],Выше добавляем: 'price' => $result['price'], Находим (триста какая-то строка): $this->data['products'][] = array(Добавляем перед этой строчкой вот это: $product_specials = $this->model_catalog_product->getProductSpecials($result['product_id']); if ($product_specials) { $special = reset($product_specials); if($special['date_start'] > date('Y-m-d') || $special['date_end'] < date('Y-m-d')) { $special = FALSE; } } else { $special = FALSE; } Затем по всему файлу ищем строки с "filter_model" и по аналогии вставляем после них то же самое, но с "filter_price". Сохраняем. Теперь открываем admin/view/template/catalog/product_list.tpl Ищем строку: <?php echo $$product_info['price']; ?>Меняем на: <?php echo $product['price']; ?> Вот такой квест... вроде, ничего не забыл. Теперь всё, кроме поиска по цене, работает. Огромное спасибо, правда лучше всё делать вручную(удалось настроить пошагово), меньше боков вылазит, кстати удалось сделать более менее нормальную сборку для ручной установки, сейчас тестирую - потом выложу, если автор против не будет. Надіслати Поділитися на інших сайтах More sharing options... roma4891 Опубліковано: 25 березня 2011 Share Опубліковано: 25 березня 2011 Как и обещал сделал ручную сборку с мануалом по установке и с учётом большинства изменений(сразу,у меня 0.1.8), из того что помню: - устранена проблема с IE (пост #72, 4 стр. afwollis); - добавлено в админке checkbox "Выбрать все" для выбора всех категорий (спасибо berikiushi); - назначение товару нескольких свойств (спасибо afwollis - пост #53) при редактировании товара; - логическое И (и то, и то обязательно) при фильтрации в категории по свойствам товара (спасибо afwollis - пост #79) - ... может чтото ещё...непомню (собирал ночью) Начнём, 1) Делаем запрос в базу данных(у меня ПРЕФИКС oc_): 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; 2) В файле admin|view|template|catalog|product_form.tpl После <a tab="#tab_links"><?php echo $tab_links; ?></a>Вставляем<a tab="#tab_filter">Опции фильтра</a> Далее после блока <div id="tab_general"></div>, примерно 59 строка, перед <div id="tab_data">Вставляем <!-- Start tab filter--> <div id="tab_filter"> Сначала необходимо выбрать категории товара </div> <!-- End tab filter-->Теперь идем в конец файла, ДО <?php echo $footer; ?>Вставляем <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) Открываем файл admin|model|catalog|product.php После блока (метод addProduct) гдето 21 строка 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 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) Открываем admin|controller|catalog|product.php в районе 1100 строки, после foreach($results as $option) { $this->data['category_options'][] = array(Должно быть(если нет вставляем!) 'option_id' => $option['option_id'],в итоге должно быть: 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']) ); }и идем в конец файла, до закрытия класса вставляем // 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) Открываем catalog|model|catalog|product.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) {До блока 17 строка $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 product_id FROM " . DB_PREFIX . "product_to_value WHERE " . implode(" OR ", $data) . ")"; } */ if (isset($values) && $values != '') { $data = array(); $values_without_underline = ""; $values_for_IN = ""; foreach (explode('_', $values) as $value_id) { if (empty($values_for_IN)) { $values_for_IN = "'".$value_id."'"; } else { $values_for_IN .= ", '".$value_id."'"; } $values_without_underline .= $value_id; } // http://forums.mysql.com/read.php?78,354483,354598#msg-354598 //(SELECT GROUP_CONCAT(DISTINCT Tag_id ORDER BY Tag_id ASC SEPARATOR '') FROM Tag_has_Post WHERE Post_id=t.Post_id AND Tag_id IN (2,5))='25'; $sql .= " AND (SELECT GROUP_CONCAT(DISTINCT value_id SEPARATOR '') FROM oc_product_to_value WHERE product_id=p.product_id AND value_id IN (".$values_for_IN."))='".$values_without_underline."'"; } // End filterЗаменяем весь метод public function getTotalProductsByCategoryId (теперь гдето с 84 по 85 строку)На 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) . ")"; } */ if (isset($values) && $values != '') { $data = array(); $values_without_underline = ""; $values_for_IN = ""; foreach (explode('_', $values) as $value_id) { if (empty($values_for_IN)) { $values_for_IN = "'".$value_id."'"; } else { $values_for_IN .= ", '".$value_id."'"; } $values_without_underline .= $value_id; } // http://forums.mysql.com/read.php?78,354483,354598#msg-354598 //(SELECT GROUP_CONCAT(DISTINCT Tag_id ORDER BY Tag_id ASC SEPARATOR '') FROM Tag_has_Post WHERE Post_id=t.Post_id AND Tag_id IN (2,5))='25'; $sql .= " AND (SELECT GROUP_CONCAT(DISTINCT value_id SEPARATOR '') FROM oc_product_to_value WHERE product_id=p.product_id AND value_id IN (".$values_for_IN."))='".$values_without_underline."'"; } // End filter $query = $this->db->query($sql); return $query->row['total']; }Сохраняем, закрываем.6) Открываем catalog|controller|product|category.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) Качаем архив manual_Openstore_module_product.zip и извлекаем в корень сайта с заменой. 8) Идем в админку -> дополнения и включаем фильтр, добавляем опции. manual_Openstore_module_product.zip Надіслати Поділитися на інших сайтах More sharing options... roma4891 Опубліковано: 25 березня 2011 Share Опубліковано: 25 березня 2011 Помогите добавить в opencart-1-4-9-18-export-import.zip! Надіслати Поділитися на інших сайтах More sharing options... Googlah Опубліковано: 25 березня 2011 Share Опубліковано: 25 березня 2011 SooR, огромное спасибо за проделанную работу Надіслати Поділитися на інших сайтах More sharing options... lvovich Опубліковано: 26 березня 2011 Share Опубліковано: 26 березня 2011 В выше приведённой инсталляции "логическое И" не работает. Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 3 4 5 6 7 8 Вперед Сторінка 6 з 8 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Модулі та розширення Нужен ли модуль "фильтр в категории" ? Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich
AndreyN Опубліковано: 17 березня 2011 Share Опубліковано: 17 березня 2011 Доброго дня. Прошу помочь понять следующий финт .., установил ocstore 0.1.8. Подвязал дизайн, установил фильтр с нуля. Добавил таблицы в SQL. Через модули установил фильтр, создал условия. Вроде все путем. Вхожу в товары, на вкладке Опции фильтра получаю сообщение Страница не найдена. Страница, которую Вы запрашиваете, не найдена. Если проблема будет повторяться, свяжитесь пожалуйста с администратором. И что с этим делать ума не приложу .. помогайте други. Спасибо. Надіслати Поділитися на інших сайтах More sharing options...
afwollis Опубліковано: 18 березня 2011 Share Опубліковано: 18 березня 2011 (змінено) Доброго дня. Прошу помочь понять следующий финт .., установил ocstore 0.1.8. Подвязал дизайн, установил фильтр с нуля. Добавил таблицы в SQL. Через модули установил фильтр, создал условия. Вроде все путем. Вхожу в товары, на вкладке Опции фильтра получаю сообщение Страница не найдена. Страница, которую Вы запрашиваете, не найдена. Если проблема будет повторяться, свяжитесь пожалуйста с администратором. И что с этим делать ума не приложу .. помогайте други. скрин?все файлы залили? все изменения в файлах сделали? Змінено 18 березня 2011 користувачем afwollis Надіслати Поділитися на інших сайтах More sharing options... lampard Опубліковано: 19 березня 2011 Share Опубліковано: 19 березня 2011 Ребят, Доброго дня! Помогите пожалуйста! Установил, всё нормально, устанавливал вручную, несчитая мелких багов, которые исправятся, всё нормально, но вот странный нюанс, добавил опции фильтра для категории "Портативная техника->Нетбуки", захожу в настройки товара, который находится в этой категории, перехожу во вкладку "Опции фильтра", а мне пишит "Сначала необходимо выбрать категории товара", выбира уже и все категории всёравно одно и тоже пишит. Подскажите пожалуйста. Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 19 березня 2011 Share Опубліковано: 19 березня 2011 ссылку на сайт? Надіслати Поділитися на інших сайтах More sharing options... lvovich Опубліковано: 22 березня 2011 Share Опубліковано: 22 березня 2011 Отличный модуль. Большое спасибо авторам за труды. Но, великие гуру! Имеется проблема! Ставил на чистую OpenCart "1.4.9.3", всё работает отлично, за исключением одного: в админке не отображается цена в Каталоге товаров. В самом товаре и на сайте всё прекрасно, - цены есть. Я очень слабо ориентируюсь в php... очевидно, нужно править файл \admin\controller\catalog\product.php ? product.php Надіслати Поділитися на інших сайтах More sharing options... lvovich Опубліковано: 22 березня 2011 Share Опубліковано: 22 березня 2011 У кого-нибудь остался архив для инсталляции "вручную"? Прочитал всю тему дважды, нашел ссылку только на "чистую" инсталляцию. Если это поможет аццам русского кодинга, у меня есть 200RUR на вэбманях. На пару кружек доброго пива должно хватить. Надіслати Поділитися на інших сайтах More sharing options... roma4891 Опубліковано: 23 березня 2011 Share Опубліковано: 23 березня 2011 спасибо, заработал. Если вдруг кому то понадобится, я столкнулся с таким моментом: после установки на чистую систему, добавлении необходимых баз. Все запускается, но в админке есть ошибка в колонке с ценой, ругается на отсутствие переменных в строке 35 и 88 ..файла product_list.tpl. Я ее исправил добавив в product.php недостающие переменные (по аналогии с рабочей системой без этого модуля). При необходимости могу выложить файл с исправлениями. Еще раз, всем спасибо за оперативный ответ. Ошибку в 35 строке исправить удалось(добавил в 357 строке $this->data['column_price'] = $this->language->get('column_price');, и 413 $this->data['sort_price'] = HTTPS_SERVER . 'index.php?route=catalog/product&token=' . $this->session->data['token'] . '&sort=p.price' . $url;), а вот с 88 $product['price']; разобраться не могу... Надіслати Поділитися на інших сайтах More sharing options... lvovich Опубліковано: 23 березня 2011 Share Опубліковано: 23 березня 2011 а вот с 88 разобраться не могу...С помощью юзера AndreyN проблема частично решена. Большое ему человеческое спасибо. Теперь сайт отображает в админке цены, но поиск по цене не работает. Если кому-то актуально, напишу.Однако, уважаемые знатоки, - обнаружилась ещё следующая проблема: Модуль "[webme]_CategoryAtHomepage_v.0.3", который до установки "фильтра категорий" выводил на главной товары из избранных категорий, отказывается показывать товары. Видны лишь названия категорий. Также, вылезают ошибки: "Warning: Missing argument 2 for ModelCatalogProduct::getTotalProductsByCategoryId(), called in /home/t/technik2ru/public_html/catalog/controller/module/webme_categories_at_homepage.php on line 33 and defined in /home/t/technik2ru/public_html/catalog/model/catalog/product.php on line 64" Очевидно, проблема в отсутствии второго аргумента для getTotalProductsByCategoryId. Если подставить туда пустое поле, то картина повторяется, но ошибки не выдаются. Как исправить? Надіслати Поділитися на інших сайтах More sharing options... roma4891 Опубліковано: 23 березня 2011 Share Опубліковано: 23 березня 2011 С помощью юзера AndreyN проблема частично решена. Большое ему человеческое спасибо. Теперь сайт отображает в админке цены, но поиск по цене не работает. Если кому-то актуально, напишу. Однако, уважаемые знатоки, - обнаружилась ещё следующая проблема: Модуль "[webme]_CategoryAtHomepage_v.0.3", который до установки "фильтра категорий" выводил на главной товары из избранных категорий, отказывается показывать товары. Видны лишь названия категорий. Также, вылезают ошибки: "Warning: Missing argument 2 for ModelCatalogProduct::getTotalProductsByCategoryId(), called in /home/t/technik2ru/public_html/catalog/controller/module/webme_categories_at_homepage.php on line 33 and defined in /home/t/technik2ru/public_html/catalog/model/catalog/product.php on line 64" Очевидно, проблема в отсутствии второго аргумента для getTotalProductsByCategoryId. Если подставить туда пустое поле, то картина повторяется, но ошибки не выдаются. Как исправить? Актуально, хотя бы потому что место экономит в админке (я с ценами через экспорт/импорт работаю)Всёже как избавится от Notice: Undefined index: special in /.../admin/view/template/catalog/product_list.tpl on line 85 Notice: Undefined index: price in /.../admin/view/template/catalog/product_list.tpl on line 88 в списке товаров в админке? Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 23 березня 2011 Share Опубліковано: 23 березня 2011 lvovich, я конечно понимаю, что вы мучаете фильтр, но проблемы с другими модулями надо решать в их темах... Определенная категория на главной мыши плакали, кололись, но продолжали грызть кактус... Надіслати Поділитися на інших сайтах More sharing options... lvovich Опубліковано: 23 березня 2011 Share Опубліковано: 23 березня 2011 надо решать в их темах...Прошу прощения.2 roma4891 В общем, душа успокоилась вот чем: Открываем admin/controller/catalog/product.php Находим строку: 'quantity' => $result['quantity'],Выше добавляем: 'price' => $result['price'], Находим (триста какая-то строка): $this->data['products'][] = array(Добавляем перед этой строчкой вот это: $product_specials = $this->model_catalog_product->getProductSpecials($result['product_id']); if ($product_specials) { $special = reset($product_specials); if($special['date_start'] > date('Y-m-d') || $special['date_end'] < date('Y-m-d')) { $special = FALSE; } } else { $special = FALSE; } Затем по всему файлу ищем строки с "filter_model" и по аналогии вставляем после них то же самое, но с "filter_price". Сохраняем. Теперь открываем admin/view/template/catalog/product_list.tpl Ищем строку: <?php echo $$product_info['price']; ?>Меняем на: <?php echo $product['price']; ?> Вот такой квест... вроде, ничего не забыл. Теперь всё, кроме поиска по цене, работает. 1 Надіслати Поділитися на інших сайтах More sharing options... roma4891 Опубліковано: 24 березня 2011 Share Опубліковано: 24 березня 2011 Прошу прощения. 2 roma4891 В общем, душа успокоилась вот чем: Открываем admin/controller/catalog/product.php Находим строку: 'quantity' => $result['quantity'],Выше добавляем: 'price' => $result['price'], Находим (триста какая-то строка): $this->data['products'][] = array(Добавляем перед этой строчкой вот это: $product_specials = $this->model_catalog_product->getProductSpecials($result['product_id']); if ($product_specials) { $special = reset($product_specials); if($special['date_start'] > date('Y-m-d') || $special['date_end'] < date('Y-m-d')) { $special = FALSE; } } else { $special = FALSE; } Затем по всему файлу ищем строки с "filter_model" и по аналогии вставляем после них то же самое, но с "filter_price". Сохраняем. Теперь открываем admin/view/template/catalog/product_list.tpl Ищем строку: <?php echo $$product_info['price']; ?>Меняем на: <?php echo $product['price']; ?> Вот такой квест... вроде, ничего не забыл. Теперь всё, кроме поиска по цене, работает. Огромное спасибо, правда лучше всё делать вручную(удалось настроить пошагово), меньше боков вылазит, кстати удалось сделать более менее нормальную сборку для ручной установки, сейчас тестирую - потом выложу, если автор против не будет. Надіслати Поділитися на інших сайтах More sharing options... roma4891 Опубліковано: 25 березня 2011 Share Опубліковано: 25 березня 2011 Как и обещал сделал ручную сборку с мануалом по установке и с учётом большинства изменений(сразу,у меня 0.1.8), из того что помню: - устранена проблема с IE (пост #72, 4 стр. afwollis); - добавлено в админке checkbox "Выбрать все" для выбора всех категорий (спасибо berikiushi); - назначение товару нескольких свойств (спасибо afwollis - пост #53) при редактировании товара; - логическое И (и то, и то обязательно) при фильтрации в категории по свойствам товара (спасибо afwollis - пост #79) - ... может чтото ещё...непомню (собирал ночью) Начнём, 1) Делаем запрос в базу данных(у меня ПРЕФИКС oc_): 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; 2) В файле admin|view|template|catalog|product_form.tpl После <a tab="#tab_links"><?php echo $tab_links; ?></a>Вставляем<a tab="#tab_filter">Опции фильтра</a> Далее после блока <div id="tab_general"></div>, примерно 59 строка, перед <div id="tab_data">Вставляем <!-- Start tab filter--> <div id="tab_filter"> Сначала необходимо выбрать категории товара </div> <!-- End tab filter-->Теперь идем в конец файла, ДО <?php echo $footer; ?>Вставляем <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) Открываем файл admin|model|catalog|product.php После блока (метод addProduct) гдето 21 строка 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 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) Открываем admin|controller|catalog|product.php в районе 1100 строки, после foreach($results as $option) { $this->data['category_options'][] = array(Должно быть(если нет вставляем!) 'option_id' => $option['option_id'],в итоге должно быть: 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']) ); }и идем в конец файла, до закрытия класса вставляем // 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) Открываем catalog|model|catalog|product.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) {До блока 17 строка $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 product_id FROM " . DB_PREFIX . "product_to_value WHERE " . implode(" OR ", $data) . ")"; } */ if (isset($values) && $values != '') { $data = array(); $values_without_underline = ""; $values_for_IN = ""; foreach (explode('_', $values) as $value_id) { if (empty($values_for_IN)) { $values_for_IN = "'".$value_id."'"; } else { $values_for_IN .= ", '".$value_id."'"; } $values_without_underline .= $value_id; } // http://forums.mysql.com/read.php?78,354483,354598#msg-354598 //(SELECT GROUP_CONCAT(DISTINCT Tag_id ORDER BY Tag_id ASC SEPARATOR '') FROM Tag_has_Post WHERE Post_id=t.Post_id AND Tag_id IN (2,5))='25'; $sql .= " AND (SELECT GROUP_CONCAT(DISTINCT value_id SEPARATOR '') FROM oc_product_to_value WHERE product_id=p.product_id AND value_id IN (".$values_for_IN."))='".$values_without_underline."'"; } // End filterЗаменяем весь метод public function getTotalProductsByCategoryId (теперь гдето с 84 по 85 строку)На 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) . ")"; } */ if (isset($values) && $values != '') { $data = array(); $values_without_underline = ""; $values_for_IN = ""; foreach (explode('_', $values) as $value_id) { if (empty($values_for_IN)) { $values_for_IN = "'".$value_id."'"; } else { $values_for_IN .= ", '".$value_id."'"; } $values_without_underline .= $value_id; } // http://forums.mysql.com/read.php?78,354483,354598#msg-354598 //(SELECT GROUP_CONCAT(DISTINCT Tag_id ORDER BY Tag_id ASC SEPARATOR '') FROM Tag_has_Post WHERE Post_id=t.Post_id AND Tag_id IN (2,5))='25'; $sql .= " AND (SELECT GROUP_CONCAT(DISTINCT value_id SEPARATOR '') FROM oc_product_to_value WHERE product_id=p.product_id AND value_id IN (".$values_for_IN."))='".$values_without_underline."'"; } // End filter $query = $this->db->query($sql); return $query->row['total']; }Сохраняем, закрываем.6) Открываем catalog|controller|product|category.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) Качаем архив manual_Openstore_module_product.zip и извлекаем в корень сайта с заменой. 8) Идем в админку -> дополнения и включаем фильтр, добавляем опции. manual_Openstore_module_product.zip Надіслати Поділитися на інших сайтах More sharing options... roma4891 Опубліковано: 25 березня 2011 Share Опубліковано: 25 березня 2011 Помогите добавить в opencart-1-4-9-18-export-import.zip! Надіслати Поділитися на інших сайтах More sharing options... Googlah Опубліковано: 25 березня 2011 Share Опубліковано: 25 березня 2011 SooR, огромное спасибо за проделанную работу Надіслати Поділитися на інших сайтах More sharing options... lvovich Опубліковано: 26 березня 2011 Share Опубліковано: 26 березня 2011 В выше приведённой инсталляции "логическое И" не работает. Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 3 4 5 6 7 8 Вперед Сторінка 6 з 8 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Модулі та розширення Нужен ли модуль "фильтр в категории" ?
lampard Опубліковано: 19 березня 2011 Share Опубліковано: 19 березня 2011 Ребят, Доброго дня! Помогите пожалуйста! Установил, всё нормально, устанавливал вручную, несчитая мелких багов, которые исправятся, всё нормально, но вот странный нюанс, добавил опции фильтра для категории "Портативная техника->Нетбуки", захожу в настройки товара, который находится в этой категории, перехожу во вкладку "Опции фильтра", а мне пишит "Сначала необходимо выбрать категории товара", выбира уже и все категории всёравно одно и тоже пишит. Подскажите пожалуйста. Надіслати Поділитися на інших сайтах More sharing options...
afwollis Опубліковано: 19 березня 2011 Share Опубліковано: 19 березня 2011 ссылку на сайт? Надіслати Поділитися на інших сайтах More sharing options... lvovich Опубліковано: 22 березня 2011 Share Опубліковано: 22 березня 2011 Отличный модуль. Большое спасибо авторам за труды. Но, великие гуру! Имеется проблема! Ставил на чистую OpenCart "1.4.9.3", всё работает отлично, за исключением одного: в админке не отображается цена в Каталоге товаров. В самом товаре и на сайте всё прекрасно, - цены есть. Я очень слабо ориентируюсь в php... очевидно, нужно править файл \admin\controller\catalog\product.php ? product.php Надіслати Поділитися на інших сайтах More sharing options... lvovich Опубліковано: 22 березня 2011 Share Опубліковано: 22 березня 2011 У кого-нибудь остался архив для инсталляции "вручную"? Прочитал всю тему дважды, нашел ссылку только на "чистую" инсталляцию. Если это поможет аццам русского кодинга, у меня есть 200RUR на вэбманях. На пару кружек доброго пива должно хватить. Надіслати Поділитися на інших сайтах More sharing options... roma4891 Опубліковано: 23 березня 2011 Share Опубліковано: 23 березня 2011 спасибо, заработал. Если вдруг кому то понадобится, я столкнулся с таким моментом: после установки на чистую систему, добавлении необходимых баз. Все запускается, но в админке есть ошибка в колонке с ценой, ругается на отсутствие переменных в строке 35 и 88 ..файла product_list.tpl. Я ее исправил добавив в product.php недостающие переменные (по аналогии с рабочей системой без этого модуля). При необходимости могу выложить файл с исправлениями. Еще раз, всем спасибо за оперативный ответ. Ошибку в 35 строке исправить удалось(добавил в 357 строке $this->data['column_price'] = $this->language->get('column_price');, и 413 $this->data['sort_price'] = HTTPS_SERVER . 'index.php?route=catalog/product&token=' . $this->session->data['token'] . '&sort=p.price' . $url;), а вот с 88 $product['price']; разобраться не могу... Надіслати Поділитися на інших сайтах More sharing options... lvovich Опубліковано: 23 березня 2011 Share Опубліковано: 23 березня 2011 а вот с 88 разобраться не могу...С помощью юзера AndreyN проблема частично решена. Большое ему человеческое спасибо. Теперь сайт отображает в админке цены, но поиск по цене не работает. Если кому-то актуально, напишу.Однако, уважаемые знатоки, - обнаружилась ещё следующая проблема: Модуль "[webme]_CategoryAtHomepage_v.0.3", который до установки "фильтра категорий" выводил на главной товары из избранных категорий, отказывается показывать товары. Видны лишь названия категорий. Также, вылезают ошибки: "Warning: Missing argument 2 for ModelCatalogProduct::getTotalProductsByCategoryId(), called in /home/t/technik2ru/public_html/catalog/controller/module/webme_categories_at_homepage.php on line 33 and defined in /home/t/technik2ru/public_html/catalog/model/catalog/product.php on line 64" Очевидно, проблема в отсутствии второго аргумента для getTotalProductsByCategoryId. Если подставить туда пустое поле, то картина повторяется, но ошибки не выдаются. Как исправить? Надіслати Поділитися на інших сайтах More sharing options... roma4891 Опубліковано: 23 березня 2011 Share Опубліковано: 23 березня 2011 С помощью юзера AndreyN проблема частично решена. Большое ему человеческое спасибо. Теперь сайт отображает в админке цены, но поиск по цене не работает. Если кому-то актуально, напишу. Однако, уважаемые знатоки, - обнаружилась ещё следующая проблема: Модуль "[webme]_CategoryAtHomepage_v.0.3", который до установки "фильтра категорий" выводил на главной товары из избранных категорий, отказывается показывать товары. Видны лишь названия категорий. Также, вылезают ошибки: "Warning: Missing argument 2 for ModelCatalogProduct::getTotalProductsByCategoryId(), called in /home/t/technik2ru/public_html/catalog/controller/module/webme_categories_at_homepage.php on line 33 and defined in /home/t/technik2ru/public_html/catalog/model/catalog/product.php on line 64" Очевидно, проблема в отсутствии второго аргумента для getTotalProductsByCategoryId. Если подставить туда пустое поле, то картина повторяется, но ошибки не выдаются. Как исправить? Актуально, хотя бы потому что место экономит в админке (я с ценами через экспорт/импорт работаю)Всёже как избавится от Notice: Undefined index: special in /.../admin/view/template/catalog/product_list.tpl on line 85 Notice: Undefined index: price in /.../admin/view/template/catalog/product_list.tpl on line 88 в списке товаров в админке? Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 23 березня 2011 Share Опубліковано: 23 березня 2011 lvovich, я конечно понимаю, что вы мучаете фильтр, но проблемы с другими модулями надо решать в их темах... Определенная категория на главной мыши плакали, кололись, но продолжали грызть кактус... Надіслати Поділитися на інших сайтах More sharing options... lvovich Опубліковано: 23 березня 2011 Share Опубліковано: 23 березня 2011 надо решать в их темах...Прошу прощения.2 roma4891 В общем, душа успокоилась вот чем: Открываем admin/controller/catalog/product.php Находим строку: 'quantity' => $result['quantity'],Выше добавляем: 'price' => $result['price'], Находим (триста какая-то строка): $this->data['products'][] = array(Добавляем перед этой строчкой вот это: $product_specials = $this->model_catalog_product->getProductSpecials($result['product_id']); if ($product_specials) { $special = reset($product_specials); if($special['date_start'] > date('Y-m-d') || $special['date_end'] < date('Y-m-d')) { $special = FALSE; } } else { $special = FALSE; } Затем по всему файлу ищем строки с "filter_model" и по аналогии вставляем после них то же самое, но с "filter_price". Сохраняем. Теперь открываем admin/view/template/catalog/product_list.tpl Ищем строку: <?php echo $$product_info['price']; ?>Меняем на: <?php echo $product['price']; ?> Вот такой квест... вроде, ничего не забыл. Теперь всё, кроме поиска по цене, работает. 1 Надіслати Поділитися на інших сайтах More sharing options... roma4891 Опубліковано: 24 березня 2011 Share Опубліковано: 24 березня 2011 Прошу прощения. 2 roma4891 В общем, душа успокоилась вот чем: Открываем admin/controller/catalog/product.php Находим строку: 'quantity' => $result['quantity'],Выше добавляем: 'price' => $result['price'], Находим (триста какая-то строка): $this->data['products'][] = array(Добавляем перед этой строчкой вот это: $product_specials = $this->model_catalog_product->getProductSpecials($result['product_id']); if ($product_specials) { $special = reset($product_specials); if($special['date_start'] > date('Y-m-d') || $special['date_end'] < date('Y-m-d')) { $special = FALSE; } } else { $special = FALSE; } Затем по всему файлу ищем строки с "filter_model" и по аналогии вставляем после них то же самое, но с "filter_price". Сохраняем. Теперь открываем admin/view/template/catalog/product_list.tpl Ищем строку: <?php echo $$product_info['price']; ?>Меняем на: <?php echo $product['price']; ?> Вот такой квест... вроде, ничего не забыл. Теперь всё, кроме поиска по цене, работает. Огромное спасибо, правда лучше всё делать вручную(удалось настроить пошагово), меньше боков вылазит, кстати удалось сделать более менее нормальную сборку для ручной установки, сейчас тестирую - потом выложу, если автор против не будет. Надіслати Поділитися на інших сайтах More sharing options... roma4891 Опубліковано: 25 березня 2011 Share Опубліковано: 25 березня 2011 Как и обещал сделал ручную сборку с мануалом по установке и с учётом большинства изменений(сразу,у меня 0.1.8), из того что помню: - устранена проблема с IE (пост #72, 4 стр. afwollis); - добавлено в админке checkbox "Выбрать все" для выбора всех категорий (спасибо berikiushi); - назначение товару нескольких свойств (спасибо afwollis - пост #53) при редактировании товара; - логическое И (и то, и то обязательно) при фильтрации в категории по свойствам товара (спасибо afwollis - пост #79) - ... может чтото ещё...непомню (собирал ночью) Начнём, 1) Делаем запрос в базу данных(у меня ПРЕФИКС oc_): 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; 2) В файле admin|view|template|catalog|product_form.tpl После <a tab="#tab_links"><?php echo $tab_links; ?></a>Вставляем<a tab="#tab_filter">Опции фильтра</a> Далее после блока <div id="tab_general"></div>, примерно 59 строка, перед <div id="tab_data">Вставляем <!-- Start tab filter--> <div id="tab_filter"> Сначала необходимо выбрать категории товара </div> <!-- End tab filter-->Теперь идем в конец файла, ДО <?php echo $footer; ?>Вставляем <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) Открываем файл admin|model|catalog|product.php После блока (метод addProduct) гдето 21 строка 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 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) Открываем admin|controller|catalog|product.php в районе 1100 строки, после foreach($results as $option) { $this->data['category_options'][] = array(Должно быть(если нет вставляем!) 'option_id' => $option['option_id'],в итоге должно быть: 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']) ); }и идем в конец файла, до закрытия класса вставляем // 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) Открываем catalog|model|catalog|product.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) {До блока 17 строка $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 product_id FROM " . DB_PREFIX . "product_to_value WHERE " . implode(" OR ", $data) . ")"; } */ if (isset($values) && $values != '') { $data = array(); $values_without_underline = ""; $values_for_IN = ""; foreach (explode('_', $values) as $value_id) { if (empty($values_for_IN)) { $values_for_IN = "'".$value_id."'"; } else { $values_for_IN .= ", '".$value_id."'"; } $values_without_underline .= $value_id; } // http://forums.mysql.com/read.php?78,354483,354598#msg-354598 //(SELECT GROUP_CONCAT(DISTINCT Tag_id ORDER BY Tag_id ASC SEPARATOR '') FROM Tag_has_Post WHERE Post_id=t.Post_id AND Tag_id IN (2,5))='25'; $sql .= " AND (SELECT GROUP_CONCAT(DISTINCT value_id SEPARATOR '') FROM oc_product_to_value WHERE product_id=p.product_id AND value_id IN (".$values_for_IN."))='".$values_without_underline."'"; } // End filterЗаменяем весь метод public function getTotalProductsByCategoryId (теперь гдето с 84 по 85 строку)На 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) . ")"; } */ if (isset($values) && $values != '') { $data = array(); $values_without_underline = ""; $values_for_IN = ""; foreach (explode('_', $values) as $value_id) { if (empty($values_for_IN)) { $values_for_IN = "'".$value_id."'"; } else { $values_for_IN .= ", '".$value_id."'"; } $values_without_underline .= $value_id; } // http://forums.mysql.com/read.php?78,354483,354598#msg-354598 //(SELECT GROUP_CONCAT(DISTINCT Tag_id ORDER BY Tag_id ASC SEPARATOR '') FROM Tag_has_Post WHERE Post_id=t.Post_id AND Tag_id IN (2,5))='25'; $sql .= " AND (SELECT GROUP_CONCAT(DISTINCT value_id SEPARATOR '') FROM oc_product_to_value WHERE product_id=p.product_id AND value_id IN (".$values_for_IN."))='".$values_without_underline."'"; } // End filter $query = $this->db->query($sql); return $query->row['total']; }Сохраняем, закрываем.6) Открываем catalog|controller|product|category.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) Качаем архив manual_Openstore_module_product.zip и извлекаем в корень сайта с заменой. 8) Идем в админку -> дополнения и включаем фильтр, добавляем опции. manual_Openstore_module_product.zip Надіслати Поділитися на інших сайтах More sharing options... roma4891 Опубліковано: 25 березня 2011 Share Опубліковано: 25 березня 2011 Помогите добавить в opencart-1-4-9-18-export-import.zip! Надіслати Поділитися на інших сайтах More sharing options... Googlah Опубліковано: 25 березня 2011 Share Опубліковано: 25 березня 2011 SooR, огромное спасибо за проделанную работу Надіслати Поділитися на інших сайтах More sharing options... lvovich Опубліковано: 26 березня 2011 Share Опубліковано: 26 березня 2011 В выше приведённой инсталляции "логическое И" не работает. Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 3 4 5 6 7 8 Вперед Сторінка 6 з 8 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку
lvovich Опубліковано: 22 березня 2011 Share Опубліковано: 22 березня 2011 Отличный модуль. Большое спасибо авторам за труды. Но, великие гуру! Имеется проблема! Ставил на чистую OpenCart "1.4.9.3", всё работает отлично, за исключением одного: в админке не отображается цена в Каталоге товаров. В самом товаре и на сайте всё прекрасно, - цены есть. Я очень слабо ориентируюсь в php... очевидно, нужно править файл \admin\controller\catalog\product.php ? product.php Надіслати Поділитися на інших сайтах More sharing options...
lvovich Опубліковано: 22 березня 2011 Share Опубліковано: 22 березня 2011 У кого-нибудь остался архив для инсталляции "вручную"? Прочитал всю тему дважды, нашел ссылку только на "чистую" инсталляцию. Если это поможет аццам русского кодинга, у меня есть 200RUR на вэбманях. На пару кружек доброго пива должно хватить. Надіслати Поділитися на інших сайтах More sharing options...
roma4891 Опубліковано: 23 березня 2011 Share Опубліковано: 23 березня 2011 спасибо, заработал. Если вдруг кому то понадобится, я столкнулся с таким моментом: после установки на чистую систему, добавлении необходимых баз. Все запускается, но в админке есть ошибка в колонке с ценой, ругается на отсутствие переменных в строке 35 и 88 ..файла product_list.tpl. Я ее исправил добавив в product.php недостающие переменные (по аналогии с рабочей системой без этого модуля). При необходимости могу выложить файл с исправлениями. Еще раз, всем спасибо за оперативный ответ. Ошибку в 35 строке исправить удалось(добавил в 357 строке $this->data['column_price'] = $this->language->get('column_price');, и 413 $this->data['sort_price'] = HTTPS_SERVER . 'index.php?route=catalog/product&token=' . $this->session->data['token'] . '&sort=p.price' . $url;), а вот с 88 $product['price']; разобраться не могу... Надіслати Поділитися на інших сайтах More sharing options...
lvovich Опубліковано: 23 березня 2011 Share Опубліковано: 23 березня 2011 а вот с 88 разобраться не могу...С помощью юзера AndreyN проблема частично решена. Большое ему человеческое спасибо. Теперь сайт отображает в админке цены, но поиск по цене не работает. Если кому-то актуально, напишу.Однако, уважаемые знатоки, - обнаружилась ещё следующая проблема: Модуль "[webme]_CategoryAtHomepage_v.0.3", который до установки "фильтра категорий" выводил на главной товары из избранных категорий, отказывается показывать товары. Видны лишь названия категорий. Также, вылезают ошибки: "Warning: Missing argument 2 for ModelCatalogProduct::getTotalProductsByCategoryId(), called in /home/t/technik2ru/public_html/catalog/controller/module/webme_categories_at_homepage.php on line 33 and defined in /home/t/technik2ru/public_html/catalog/model/catalog/product.php on line 64" Очевидно, проблема в отсутствии второго аргумента для getTotalProductsByCategoryId. Если подставить туда пустое поле, то картина повторяется, но ошибки не выдаются. Как исправить? Надіслати Поділитися на інших сайтах More sharing options...
roma4891 Опубліковано: 23 березня 2011 Share Опубліковано: 23 березня 2011 С помощью юзера AndreyN проблема частично решена. Большое ему человеческое спасибо. Теперь сайт отображает в админке цены, но поиск по цене не работает. Если кому-то актуально, напишу. Однако, уважаемые знатоки, - обнаружилась ещё следующая проблема: Модуль "[webme]_CategoryAtHomepage_v.0.3", который до установки "фильтра категорий" выводил на главной товары из избранных категорий, отказывается показывать товары. Видны лишь названия категорий. Также, вылезают ошибки: "Warning: Missing argument 2 for ModelCatalogProduct::getTotalProductsByCategoryId(), called in /home/t/technik2ru/public_html/catalog/controller/module/webme_categories_at_homepage.php on line 33 and defined in /home/t/technik2ru/public_html/catalog/model/catalog/product.php on line 64" Очевидно, проблема в отсутствии второго аргумента для getTotalProductsByCategoryId. Если подставить туда пустое поле, то картина повторяется, но ошибки не выдаются. Как исправить? Актуально, хотя бы потому что место экономит в админке (я с ценами через экспорт/импорт работаю)Всёже как избавится от Notice: Undefined index: special in /.../admin/view/template/catalog/product_list.tpl on line 85 Notice: Undefined index: price in /.../admin/view/template/catalog/product_list.tpl on line 88 в списке товаров в админке? Надіслати Поділитися на інших сайтах More sharing options...
afwollis Опубліковано: 23 березня 2011 Share Опубліковано: 23 березня 2011 lvovich, я конечно понимаю, что вы мучаете фильтр, но проблемы с другими модулями надо решать в их темах... Определенная категория на главной мыши плакали, кололись, но продолжали грызть кактус... Надіслати Поділитися на інших сайтах More sharing options... lvovich Опубліковано: 23 березня 2011 Share Опубліковано: 23 березня 2011 надо решать в их темах...Прошу прощения.2 roma4891 В общем, душа успокоилась вот чем: Открываем admin/controller/catalog/product.php Находим строку: 'quantity' => $result['quantity'],Выше добавляем: 'price' => $result['price'], Находим (триста какая-то строка): $this->data['products'][] = array(Добавляем перед этой строчкой вот это: $product_specials = $this->model_catalog_product->getProductSpecials($result['product_id']); if ($product_specials) { $special = reset($product_specials); if($special['date_start'] > date('Y-m-d') || $special['date_end'] < date('Y-m-d')) { $special = FALSE; } } else { $special = FALSE; } Затем по всему файлу ищем строки с "filter_model" и по аналогии вставляем после них то же самое, но с "filter_price". Сохраняем. Теперь открываем admin/view/template/catalog/product_list.tpl Ищем строку: <?php echo $$product_info['price']; ?>Меняем на: <?php echo $product['price']; ?> Вот такой квест... вроде, ничего не забыл. Теперь всё, кроме поиска по цене, работает. 1 Надіслати Поділитися на інших сайтах More sharing options... roma4891 Опубліковано: 24 березня 2011 Share Опубліковано: 24 березня 2011 Прошу прощения. 2 roma4891 В общем, душа успокоилась вот чем: Открываем admin/controller/catalog/product.php Находим строку: 'quantity' => $result['quantity'],Выше добавляем: 'price' => $result['price'], Находим (триста какая-то строка): $this->data['products'][] = array(Добавляем перед этой строчкой вот это: $product_specials = $this->model_catalog_product->getProductSpecials($result['product_id']); if ($product_specials) { $special = reset($product_specials); if($special['date_start'] > date('Y-m-d') || $special['date_end'] < date('Y-m-d')) { $special = FALSE; } } else { $special = FALSE; } Затем по всему файлу ищем строки с "filter_model" и по аналогии вставляем после них то же самое, но с "filter_price". Сохраняем. Теперь открываем admin/view/template/catalog/product_list.tpl Ищем строку: <?php echo $$product_info['price']; ?>Меняем на: <?php echo $product['price']; ?> Вот такой квест... вроде, ничего не забыл. Теперь всё, кроме поиска по цене, работает. Огромное спасибо, правда лучше всё делать вручную(удалось настроить пошагово), меньше боков вылазит, кстати удалось сделать более менее нормальную сборку для ручной установки, сейчас тестирую - потом выложу, если автор против не будет. Надіслати Поділитися на інших сайтах More sharing options... roma4891 Опубліковано: 25 березня 2011 Share Опубліковано: 25 березня 2011 Как и обещал сделал ручную сборку с мануалом по установке и с учётом большинства изменений(сразу,у меня 0.1.8), из того что помню: - устранена проблема с IE (пост #72, 4 стр. afwollis); - добавлено в админке checkbox "Выбрать все" для выбора всех категорий (спасибо berikiushi); - назначение товару нескольких свойств (спасибо afwollis - пост #53) при редактировании товара; - логическое И (и то, и то обязательно) при фильтрации в категории по свойствам товара (спасибо afwollis - пост #79) - ... может чтото ещё...непомню (собирал ночью) Начнём, 1) Делаем запрос в базу данных(у меня ПРЕФИКС oc_): 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; 2) В файле admin|view|template|catalog|product_form.tpl После <a tab="#tab_links"><?php echo $tab_links; ?></a>Вставляем<a tab="#tab_filter">Опции фильтра</a> Далее после блока <div id="tab_general"></div>, примерно 59 строка, перед <div id="tab_data">Вставляем <!-- Start tab filter--> <div id="tab_filter"> Сначала необходимо выбрать категории товара </div> <!-- End tab filter-->Теперь идем в конец файла, ДО <?php echo $footer; ?>Вставляем <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) Открываем файл admin|model|catalog|product.php После блока (метод addProduct) гдето 21 строка 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 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) Открываем admin|controller|catalog|product.php в районе 1100 строки, после foreach($results as $option) { $this->data['category_options'][] = array(Должно быть(если нет вставляем!) 'option_id' => $option['option_id'],в итоге должно быть: 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']) ); }и идем в конец файла, до закрытия класса вставляем // 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) Открываем catalog|model|catalog|product.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) {До блока 17 строка $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 product_id FROM " . DB_PREFIX . "product_to_value WHERE " . implode(" OR ", $data) . ")"; } */ if (isset($values) && $values != '') { $data = array(); $values_without_underline = ""; $values_for_IN = ""; foreach (explode('_', $values) as $value_id) { if (empty($values_for_IN)) { $values_for_IN = "'".$value_id."'"; } else { $values_for_IN .= ", '".$value_id."'"; } $values_without_underline .= $value_id; } // http://forums.mysql.com/read.php?78,354483,354598#msg-354598 //(SELECT GROUP_CONCAT(DISTINCT Tag_id ORDER BY Tag_id ASC SEPARATOR '') FROM Tag_has_Post WHERE Post_id=t.Post_id AND Tag_id IN (2,5))='25'; $sql .= " AND (SELECT GROUP_CONCAT(DISTINCT value_id SEPARATOR '') FROM oc_product_to_value WHERE product_id=p.product_id AND value_id IN (".$values_for_IN."))='".$values_without_underline."'"; } // End filterЗаменяем весь метод public function getTotalProductsByCategoryId (теперь гдето с 84 по 85 строку)На 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) . ")"; } */ if (isset($values) && $values != '') { $data = array(); $values_without_underline = ""; $values_for_IN = ""; foreach (explode('_', $values) as $value_id) { if (empty($values_for_IN)) { $values_for_IN = "'".$value_id."'"; } else { $values_for_IN .= ", '".$value_id."'"; } $values_without_underline .= $value_id; } // http://forums.mysql.com/read.php?78,354483,354598#msg-354598 //(SELECT GROUP_CONCAT(DISTINCT Tag_id ORDER BY Tag_id ASC SEPARATOR '') FROM Tag_has_Post WHERE Post_id=t.Post_id AND Tag_id IN (2,5))='25'; $sql .= " AND (SELECT GROUP_CONCAT(DISTINCT value_id SEPARATOR '') FROM oc_product_to_value WHERE product_id=p.product_id AND value_id IN (".$values_for_IN."))='".$values_without_underline."'"; } // End filter $query = $this->db->query($sql); return $query->row['total']; }Сохраняем, закрываем.6) Открываем catalog|controller|product|category.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) Качаем архив manual_Openstore_module_product.zip и извлекаем в корень сайта с заменой. 8) Идем в админку -> дополнения и включаем фильтр, добавляем опции. manual_Openstore_module_product.zip Надіслати Поділитися на інших сайтах More sharing options... roma4891 Опубліковано: 25 березня 2011 Share Опубліковано: 25 березня 2011 Помогите добавить в opencart-1-4-9-18-export-import.zip! Надіслати Поділитися на інших сайтах More sharing options... Googlah Опубліковано: 25 березня 2011 Share Опубліковано: 25 березня 2011 SooR, огромное спасибо за проделанную работу Надіслати Поділитися на інших сайтах More sharing options... lvovich Опубліковано: 26 березня 2011 Share Опубліковано: 26 березня 2011 В выше приведённой инсталляции "логическое И" не работает. Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 3 4 5 6 7 8 Вперед Сторінка 6 з 8 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0
lvovich Опубліковано: 23 березня 2011 Share Опубліковано: 23 березня 2011 надо решать в их темах...Прошу прощения.2 roma4891 В общем, душа успокоилась вот чем: Открываем admin/controller/catalog/product.php Находим строку: 'quantity' => $result['quantity'],Выше добавляем: 'price' => $result['price'], Находим (триста какая-то строка): $this->data['products'][] = array(Добавляем перед этой строчкой вот это: $product_specials = $this->model_catalog_product->getProductSpecials($result['product_id']); if ($product_specials) { $special = reset($product_specials); if($special['date_start'] > date('Y-m-d') || $special['date_end'] < date('Y-m-d')) { $special = FALSE; } } else { $special = FALSE; } Затем по всему файлу ищем строки с "filter_model" и по аналогии вставляем после них то же самое, но с "filter_price". Сохраняем. Теперь открываем admin/view/template/catalog/product_list.tpl Ищем строку: <?php echo $$product_info['price']; ?>Меняем на: <?php echo $product['price']; ?> Вот такой квест... вроде, ничего не забыл. Теперь всё, кроме поиска по цене, работает. 1 Надіслати Поділитися на інших сайтах More sharing options...
roma4891 Опубліковано: 24 березня 2011 Share Опубліковано: 24 березня 2011 Прошу прощения. 2 roma4891 В общем, душа успокоилась вот чем: Открываем admin/controller/catalog/product.php Находим строку: 'quantity' => $result['quantity'],Выше добавляем: 'price' => $result['price'], Находим (триста какая-то строка): $this->data['products'][] = array(Добавляем перед этой строчкой вот это: $product_specials = $this->model_catalog_product->getProductSpecials($result['product_id']); if ($product_specials) { $special = reset($product_specials); if($special['date_start'] > date('Y-m-d') || $special['date_end'] < date('Y-m-d')) { $special = FALSE; } } else { $special = FALSE; } Затем по всему файлу ищем строки с "filter_model" и по аналогии вставляем после них то же самое, но с "filter_price". Сохраняем. Теперь открываем admin/view/template/catalog/product_list.tpl Ищем строку: <?php echo $$product_info['price']; ?>Меняем на: <?php echo $product['price']; ?> Вот такой квест... вроде, ничего не забыл. Теперь всё, кроме поиска по цене, работает. Огромное спасибо, правда лучше всё делать вручную(удалось настроить пошагово), меньше боков вылазит, кстати удалось сделать более менее нормальную сборку для ручной установки, сейчас тестирую - потом выложу, если автор против не будет. Надіслати Поділитися на інших сайтах More sharing options...
roma4891 Опубліковано: 25 березня 2011 Share Опубліковано: 25 березня 2011 Как и обещал сделал ручную сборку с мануалом по установке и с учётом большинства изменений(сразу,у меня 0.1.8), из того что помню: - устранена проблема с IE (пост #72, 4 стр. afwollis); - добавлено в админке checkbox "Выбрать все" для выбора всех категорий (спасибо berikiushi); - назначение товару нескольких свойств (спасибо afwollis - пост #53) при редактировании товара; - логическое И (и то, и то обязательно) при фильтрации в категории по свойствам товара (спасибо afwollis - пост #79) - ... может чтото ещё...непомню (собирал ночью) Начнём, 1) Делаем запрос в базу данных(у меня ПРЕФИКС oc_): 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; 2) В файле admin|view|template|catalog|product_form.tpl После <a tab="#tab_links"><?php echo $tab_links; ?></a>Вставляем<a tab="#tab_filter">Опции фильтра</a> Далее после блока <div id="tab_general"></div>, примерно 59 строка, перед <div id="tab_data">Вставляем <!-- Start tab filter--> <div id="tab_filter"> Сначала необходимо выбрать категории товара </div> <!-- End tab filter-->Теперь идем в конец файла, ДО <?php echo $footer; ?>Вставляем <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) Открываем файл admin|model|catalog|product.php После блока (метод addProduct) гдето 21 строка 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 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) Открываем admin|controller|catalog|product.php в районе 1100 строки, после foreach($results as $option) { $this->data['category_options'][] = array(Должно быть(если нет вставляем!) 'option_id' => $option['option_id'],в итоге должно быть: 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']) ); }и идем в конец файла, до закрытия класса вставляем // 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) Открываем catalog|model|catalog|product.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) {До блока 17 строка $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 product_id FROM " . DB_PREFIX . "product_to_value WHERE " . implode(" OR ", $data) . ")"; } */ if (isset($values) && $values != '') { $data = array(); $values_without_underline = ""; $values_for_IN = ""; foreach (explode('_', $values) as $value_id) { if (empty($values_for_IN)) { $values_for_IN = "'".$value_id."'"; } else { $values_for_IN .= ", '".$value_id."'"; } $values_without_underline .= $value_id; } // http://forums.mysql.com/read.php?78,354483,354598#msg-354598 //(SELECT GROUP_CONCAT(DISTINCT Tag_id ORDER BY Tag_id ASC SEPARATOR '') FROM Tag_has_Post WHERE Post_id=t.Post_id AND Tag_id IN (2,5))='25'; $sql .= " AND (SELECT GROUP_CONCAT(DISTINCT value_id SEPARATOR '') FROM oc_product_to_value WHERE product_id=p.product_id AND value_id IN (".$values_for_IN."))='".$values_without_underline."'"; } // End filterЗаменяем весь метод public function getTotalProductsByCategoryId (теперь гдето с 84 по 85 строку)На 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) . ")"; } */ if (isset($values) && $values != '') { $data = array(); $values_without_underline = ""; $values_for_IN = ""; foreach (explode('_', $values) as $value_id) { if (empty($values_for_IN)) { $values_for_IN = "'".$value_id."'"; } else { $values_for_IN .= ", '".$value_id."'"; } $values_without_underline .= $value_id; } // http://forums.mysql.com/read.php?78,354483,354598#msg-354598 //(SELECT GROUP_CONCAT(DISTINCT Tag_id ORDER BY Tag_id ASC SEPARATOR '') FROM Tag_has_Post WHERE Post_id=t.Post_id AND Tag_id IN (2,5))='25'; $sql .= " AND (SELECT GROUP_CONCAT(DISTINCT value_id SEPARATOR '') FROM oc_product_to_value WHERE product_id=p.product_id AND value_id IN (".$values_for_IN."))='".$values_without_underline."'"; } // End filter $query = $this->db->query($sql); return $query->row['total']; }Сохраняем, закрываем.6) Открываем catalog|controller|product|category.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) Качаем архив manual_Openstore_module_product.zip и извлекаем в корень сайта с заменой. 8) Идем в админку -> дополнения и включаем фильтр, добавляем опции. manual_Openstore_module_product.zip Надіслати Поділитися на інших сайтах More sharing options...
roma4891 Опубліковано: 25 березня 2011 Share Опубліковано: 25 березня 2011 Помогите добавить в opencart-1-4-9-18-export-import.zip! Надіслати Поділитися на інших сайтах More sharing options...
Googlah Опубліковано: 25 березня 2011 Share Опубліковано: 25 березня 2011 SooR, огромное спасибо за проделанную работу Надіслати Поділитися на інших сайтах More sharing options...
lvovich Опубліковано: 26 березня 2011 Share Опубліковано: 26 березня 2011 В выше приведённой инсталляции "логическое И" не работает. Надіслати Поділитися на інших сайтах More sharing options...
Recommended Posts