sumolex Опубліковано: 30 листопада 2010 Share Опубліковано: 30 листопада 2010 Тоже все без ошибок работает, кроме назначения товару определенных свойств. Но тут скорее внутренний конфликт. Если есть две группы фильтров, в которых используются radiobuttons, то товару прибивается только одно свойство, а не отдельное в каждой группе. Т.е. например есть: Фильтр 1 - зн1 - зн2 Фильтр 2 - зн3 - зн4 Товару нельзя выбрать зн1 и зн3 сразу. А только что-то одно. Или это уже поправили и мне стоит установить модуль заново? :roll: Надіслати Поділитися на інших сайтах More sharing options...
afwollis Опубліковано: 30 листопада 2010 Share Опубліковано: 30 листопада 2010 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']) ); } это есть в коде фильтра в каталоге :roll: хотя я "малость охренел" пока докопался до исходного кода страницы "вкладки опций фильтра" Надіслати Поділитися на інших сайтах More sharing options... Гість Опубліковано: 1 грудня 2010 Share Опубліковано: 1 грудня 2010 shoma, что-то вы, батенька, курите не то. у вас затык вот тут ... (SELECT oc_product_id FROM product_to_value WHERE value_id = '3') ORDER BY p.sort_order ASC LIMIT 0,20откуда оно там ?я залил файлы на свежую 1.4.9.1 и все нормально работает. вы явно делаете _что-то_ не так :) Делал все по инструкции. ос это префикс моей бд :roll: кстати там же эти же запросы есть без префикса. один фиг тоже самое. я ставил на оссторе 1,4 версию Надіслати Поділитися на інших сайтах More sharing options... sumolex Опубліковано: 1 грудня 2010 Share Опубліковано: 1 грудня 2010 Не смотря на некоторые неточности, хочу заметить, что модуль очень полезный. Большое спасибо автору. Надіслати Поділитися на інших сайтах More sharing options... supleader Опубліковано: 1 грудня 2010 Share Опубліковано: 1 грудня 2010 ос это префикс моей бдПричем тут префикс, если это название поля таблицы... Надіслати Поділитися на інших сайтах More sharing options... Гість Опубліковано: 1 грудня 2010 Share Опубліковано: 1 грудня 2010 ос это префикс моей бдПричем тут префикс, если это название поля таблицы...тогда вероятнее всего этот префикс в манули по установке. делал все по 2 странице. правда на оссторе Надіслати Поділитися на інших сайтах More sharing options... liftex Опубліковано: 1 грудня 2010 Share Опубліковано: 1 грудня 2010 Респект автору. Модуль незаменим! Огромное, человеческое спасибо! Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 2 грудня 2010 Share Опубліковано: 2 грудня 2010 shoma, спасибо за внимательность https://opencartforum.com/public/style_emoticons/default/icon_question.gif есть такое в пятом шаге: 5) Открываем catalogmodelcatalogproduct.php До блока $sort_data = array( 'pd.name', 'p.sort_order', 'special', 'rating', 'p.price', 'p.model' );Вставляем // Start filter if (isset($values) && $values != '') { $data = array(); foreach (explode('_', $values) as $value_id) { $data[] = "value_id = '" . (int)$value_id . "'"; } $sql .= " AND p.product_id IN (SELECT " . DB_PREFIX . "product_id FROM " . DB_PREFIX . "product_to_value WHERE " . implode(" OR ", $data) . ")"; } // End filter должно быть // Start filter if (isset($values) && $values != '') { $data = array(); foreach (explode('_', $values) as $value_id) { $data[] = "value_id = '" . (int)$value_id . "'"; } $sql .= " AND p.product_id IN (SELECT product_id FROM " . DB_PREFIX . "product_to_value WHERE " . implode(" OR ", $data) . ")"; } // End filter хочу обратить внимаение, что при "чистой установке" ...Если у вас чистая система и вы еще ничего в её коде не изменяли, то качайте архив Openstore_module_product_filter_1.0_(clean_install).rar и просто извлеките файлы в корень с заменой и выполните запрос в базу данных...такой проблемы не возникает. Надіслати Поділитися на інших сайтах More sharing options... SooR Опубліковано: 2 грудня 2010 Share Опубліковано: 2 грудня 2010 Ребята, подождите немного, сделаю установку таблиц через админку, и с префиксами проблем не будет. Сейчас разбираюсь с софтом в связи с заменой ос. Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 2 грудня 2010 Share Опубліковано: 2 грудня 2010 да у нас все отлично =) вы и так уже много сделали, отдав в паблик такой модуль. теперь можем "допиливать" его общими усилиями. имхо: не обязательно делать установку таблиц через админку. ...Сейчас разбираюсь с софтом в связи с заменой ос...что на что сменили, если не секрет? https://opencartforum.com/public/style_emoticons/default/icon_question.gif Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 3 грудня 2010 Share Опубліковано: 3 грудня 2010 "даешь IE" или "что-то не работает" XP SP3 7.0.5730.13 поставил кроме всего прочего IETester (http://www.my-debugbar.com/wiki/) - та же картина. кроме того, есть информация, что вобще ни в одной версии IE не работает. кто тестил? какие результаты? мысли? сейчас думаю чем искать причину. но, думаю, проблема в реализации $('#content').load('index.php?route=product/get_ajax_products&path=20&values=' + $values, function(response, status, xhr){ if (status == "error") { error(xhr.status + " " + xhr.statusText); } else { //effects('out', 'fade', 'load', 200); } });попробую переписать на что-то типа jQuery.ajax({ data: inputs.join('&'), url: "index.php?route=product/get_ajax_products&path=20&values=" + $values, timeout: 2000, error: function() { //console.log("Failed to submit"); alert("Failed to submit"); }, success: function(r) { //alert(r); $('#content').html(r); } }) // checkout http://jquery.com/api for more syntax and options on this method.ибо данный код исправно работает в четырех основных браузерах:opera 10.10, iceweasel 3.5.14 (mozilla), gChrome 6.?, IE (7,8 tested)... Надіслати Поділитися на інших сайтах More sharing options... deim Опубліковано: 3 грудня 2010 Share Опубліковано: 3 грудня 2010 отличный модуль :( и главное - очень вовремя :D ребят, предложение по улучшению функционала: сделать не только логическое ИЛИ (или то, или то), но и логическое И (и то, и то обязательно) при фильтрации в категории по свойствам товара. А опцию выбора И/ИЛИ внести в админку например :) мне кажется, что это будет очень полезной штукой Надіслати Поділитися на інших сайтах More sharing options... SooR Опубліковано: 3 грудня 2010 Share Опубліковано: 3 грудня 2010 да у нас все отлично =) вы и так уже много сделали, отдав в паблик такой модуль. теперь можем "допиливать" его общими усилиями. имхо: не обязательно делать установку таблиц через админку. ...Сейчас разбираюсь с софтом в связи с заменой ос...что на что сменили, если не секрет? :)Да на макось.Но начинаю понимать, что она в идеале подходит под медиа а коммуникации, общение, но не под веб девелоп, к сожалению Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 4 грудня 2010 Share Опубліковано: 4 грудня 2010 (змінено) 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();"в итоге получилось так: остатки оригинального кода <script type="text/javascript"><!-- /* $('#filters input, #filters select').live('change', function() { effects('', 'jump', 'icon', 200); loadContent(); alert("IE test _live change_"); markFilterOption(); }); */ // Handling inputs in filter and getting results /* function loadContent() { var $values = ''; var $fields = $("#filters input, #filters select").serializeArray(); jQuery.each($fields, function(i, $field){ if (i == 0) { $values += $field.value; } else if ($field.value == '') { $values += ''; } else { $values += '_' + $field.value; } }); $('#content').load('index.php?route=product/get_ajax_products&path=<?php echo $path; ?>&values=' + $values, function(response, status, xhr){ if (status == "error") { error(xhr.status + " " + xhr.statusText); } else { //effects('out', 'fade', 'load', 200); } }); } */ // Preloader Effects function effects(way, type, el, dur) { el = $('#' + el); el.parent().css({'position' : 'relative'}); if (type == 'fade') { if (way == 'in') { el.fadeIn(dur); } else { el.fadeOut(dur); } } if (type == 'jump') { el.css({'position' : 'relative'}); el.animate({top: '-=2px'}, dur).animate({top: '+=5px'}, dur).animate({top: '-=5px'}, dur).animate({top: '+=2px'}, dur); } } // If jQuery didn't loaded something function error(mess) { var msg = "Error loading: "; $("#filters").prepend(msg + mess); } //--></script> собсно код, который сейчас отвечает за работу фильтра (комментарии в коде "малость не отсюда", ибо этот код я взял на каком-то сайте, потом правил, потом использовал на локальном небольшом проекте и только потом впихнул в модуль фильтра :D ) <script type="text/javascript" charset="utf-8"> // let's start the jQuery while I wait. // step 1: onload - capture the submit event on the form. //$(function() { // onload...do function markFilterOption() { effects('', 'jump', 'icon', 200); $('#filters').submit(); } $(document).ready(function () { $('#filters').submit(function() { // now we're going to capture *all* the fields in the // form and submit it via ajax. // :input is a macro that grabs all input types, select boxes // textarea, etc. Then I'm using the context of the form from // the initial '#contactForm' to narrow down our selector var $values = ''; var $fields = $("#filters input[name='value_id[]'], #filters select[name='value_id[]']").serializeArray(); jQuery.each($fields, function(i, $field){ if (i == 0) { $values += $field.value; } else if ($field.value == '') { $values += ''; } else { $values += '_' + $field.value; } }); // now if I join our inputs using '&' we'll have a query string jQuery.ajax({ data: "", url: "/index.php?route=product/get_ajax_products&path=" + some_category_id_OR_path_goes_here + "&values=" + $values, timeout: 2000, error: function() { alert("Failed to submit"); }, success: function(r) { $('#content').html(r); } }) // checkout http://jquery.com/api for more syntax and options on this method. // re-test... // by default - we'll always return false so it doesn't redirect the user. return false; }) }) </script> мой код корректно работает в: 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 Змінено 7 січня 2011 користувачем afwollis Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 4 грудня 2010 Share Опубліковано: 4 грудня 2010 свой последний вопрос решил для себя таким образом: var $filter_options_fields = $("#filters input:checked").serializeArray(); jQuery.each($filter_options_fields, function(j, $filter_options_field){ if ($filter_options_field.name.match(/value_id[d*]/)) { //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; } } } });спасибо старой закладке (оказывается уже задавался подобным вопросом https://opencartforum.com/public/style_emoticons/default/icon_arrow.gif ) JavaScript Kit -> RegExp (regular expression) object http://www.javascriptkit.com/jsref/regexp.shtml Надіслати Поділитися на інших сайтах More sharing options... Гість Опубліковано: 4 грудня 2010 Share Опубліковано: 4 грудня 2010 А теперь можно выложить модуль с уже пофиксиными файлами и свежим манулом https://opencartforum.com/public/style_emoticons/default/icon_arrow.gif Заранее спасибо. Сам модуль пока у себя не активировал, много глюков наблюдается. Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 4 грудня 2010 Share Опубліковано: 4 грудня 2010 А теперь можно выложить модуль с уже пофиксиными файлами и свежим манулом...вот тут к сожалению помочь не могу :o ибо пиляю его под жесткие условия. ...Сам модуль пока у себя не активировал...значит не столкнулись еще с какими-либо сложностями.с чем я вас и могу поздравить :? все, нижеизложенное, является толстым "имхо`м" и не претендует на трактование оного, как единственно верного ответа лепить "наобум" новую альфу|бету|что-то_еще из имеющихся фиксов, мыслей, пожеланий - в данный момент - неразумно. если бы было больше информации от всех, кто использует этот модуль, тогда глядишь и подтянется новая|пофиксеная|улучшенная версия модуля|мануала... до тех пор, имхо, имеют место быть лишь ответы/апдейты на конкретные ошибки, у конкретных пользователей :? https://opencartforum.com/public/style_emoticons/default/icon_arrow.gif Надіслати Поділитися на інших сайтах More sharing options... liftex Опубліковано: 4 грудня 2010 Share Опубліковано: 4 грудня 2010 Исправил замеченные мной ошибки в скрипте: Делаем SQL запрос в БД при стандартном перфиксе 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; Распаковываем архив, заменяя файлы. (установка на чистый ocstore_v0.1.4) Из админки устанавливаем модуль "Фильтр товаров" и нажимаем "Изменить". Создаем опцию, добавляем значения и выбираем категорию товаров для данной опции. Сохраняем. Заходим в товары, выбираем товар из той категории которой мы присвоили опцию. И в появившейся закладке "Опции фильтра" выбираем необходимое значение. Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 5 грудня 2010 Share Опубліковано: 5 грудня 2010 ребят, предложение по улучшению функционала: сделать не только логическое ИЛИ (или то, или то), но и логическое И (и то, и то обязательно) при фильтрации в категории по свойствам товара. да, согласен надо бы переделать логику, чтобы выборка шла не сплошь по значениям опций, а как-то с группировкой опций: выбрать все продукты, у которых ( option_id_1 [value_id = 2 OR value_id = 3 OR value_id = 7] ) AND ( option_id_4 [value_id = 2 OR value_id = 4 OR value_id = 5] ) AND ( option_id_N [value_id = n OR value_id = n OR value_id = n] ) UPDдумаю стоит посмотреть в сторону UNION, но тут прийдется править вывод опций, сбор/отправку их значений и обработку далее в скриптах... :o А опцию выбора И/ИЛИ внести в админку например https://opencartforum.com/public/style_emoticons/default/icon_arrow.gif мне кажется, что это будет очень полезной штукой над этим можно задуматься позже - сначала надо попробовать реализовать такой функционал. Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 7 грудня 2010 Share Опубліковано: 7 грудня 2010 (змінено) Options Update BUG не знаю, почему не видел этот баг раньше, но вот столкнулся: исходные данные: - чистая установка OpenCart 1.4.9.1; - установленный вручную модуль. для дальнейшего усовершенствования модуля забиты такие опции: Действия: решил, что для "Phones & PDAs" маловато вариантов разрешения экрана и хотел было добавить дополнительный вариант "480 x 800". в итоге получил: Error: Duplicate entry '10' for key 1 Error No: 1062 INSERT INTO category_option_value SET option_id = '3', value_id = '10'на скрине ниже (над текстом ошибки) виден кусок вывода отладочной информации.уже поковырялся и добавил в admin / model / catalog / filter.php / public function updateOption($option_id, $data) {} print " <strong>public function updateOption($option_id, $data) {}</strong> <pre>"; print_r($data); print "</pre>"; в этой функции есть такой участок: $this->db->query("DELETE FROM " . DB_PREFIX . "category_option_value WHERE option_id = '" . (int)$option_id . "'"); $this->db->query("DELETE FROM " . DB_PREFIX . "category_option_value_description WHERE option_id = '" . (int)$option_id . "'"); if (isset($data['option_value'])) { foreach ($data['option_value'] as $value_id => $option_value) { $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value SET option_id = '" . (int)$option_id . "', value_id = '" . (int)$value_id . "'"); foreach ($option_value['language'] as $language_id => $language) { $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value_description SET value_id = '" . (int)$value_id . "', option_id = '" . (int)$option_id . "', language_id = '" . (int)$language_id . "', name = '" . $this->db->escape($language['name']) . "'"); } } }все, что находится здесь внутри условия if (isset($data['option_value'])) {и отдает нам указанную выше ошибку.однако корни проблемы растут малость из другого места... :? из строк <?php $option_value_row = 0; ?> ... <?php $option_value_row++; ?> ... <script type="text/javascript"><!-- ... var option_value_row = <?php echo $option_value_row; ?>; function addValue() { html = '<tr id="option_value' + option_value_row + '" class="option">'; html += '<td style="width: 170px;background-color: #F5EFD1;padding:4px;">'; <?php foreach ($languages as $language) { ?> html += '<input type="text" name="option_value[' + option_value_row + '][language][<?php echo $language['language_id']; ?>][name]" value="Значение ' + option_value_row + '" /> <img src="view/image/flags/<?php echo $language['image']; ?>" title="<?php echo $language['name']; ?>" /> '; <?php } ?> html += '</td>'; html += '<td align="center"><a onclick="removeValue(' + option_value_row + ');" class="button"><span>X</span></a></td>'; html += '</tr>'; $('#block_option').append(html); option_value_row++; } ... //--></script> в файле admin / view / template / module / filter_form.tpl .= = = Options Update FIX для себя решил проблему следующим образом: 1) файл admin / view / template / module / filter_form.tpl в функции function addValue() {} заменил строку html += '<input type="text" name="option_value[' + option_value_row + '][language][<?php echo $language['language_id']; ?>][name]" value="Значение ' + option_value_row + '" /> <img src="view/image/flags/<?php echo $language['image']; ?>" title="<?php echo $language['name']; ?>" /> ';на html += '<input type="text" name="option_value[' + option_value_row + '_new][language][<?php echo $language['language_id']; ?>][name]" value="Значение ' + option_value_row + '_new" /> <img src="view/image/flags/<?php echo $language['image']; ?>" title="<?php echo $language['name']; ?>" /> ';т.е. просто добавил "_new" в генерируемый для новых значений value_id2) файл admin / model / catalog / filter.php в функции public function updateOption($option_id, $data) {} заменил строку $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value SET option_id = '" . (int)$option_id . "', value_id = '" . (int)$value_id . "'");на $new_value_pos = strpos($value_id, "new"); if ($new_value_pos !== false) { $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value SET option_id = '" . (int)$option_id . "'"); $value_id = $this->db->getLastId(); } else { $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value SET option_id = '" . (int)$option_id . "', value_id = '" . (int)$value_id . "'"); } теперь у меня при сохранении значений опций проводится проверка значения "value_id" на предмет содержания текста "new".и если вхождение есть - то выполняем кусок кода, взятый из функции public function addOption($data) {} для вставки именно нового значения опции и получения value_id этого значения. иначе - используется существующий value_id, который, собсно, и был передан в функцию. = = = у кого есть такая проблема - попробуйте пофиксить моим способом :roll: у кого была такая проблема - поделитесь, пожалуйста, своим решением ;) у кого нет и небыло - вам можно только позавидовать :D Змінено 7 січня 2011 користувачем afwollis 1 Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 7 грудня 2010 Share Опубліковано: 7 грудня 2010 ...но вернемся к нашим "баранам" - проблема с фильтром в IE. не работает ни в одной версии из тех, что я проверял ( :roll: 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(); });... пересмотрел свою позицию насчет правки данного кода (: просто "разъединил" обработку действий $('#filters select').live('change', function() { effects('', 'jump', 'icon', 200); //effects('in', 'fade', 'load', 300); loadContent(); }); $('#filters input').live('click', function() { effects('', 'jump', 'icon', 200); //effects('in', 'fade', 'load', 300); loadContent(); });обратите внимание на $('#filters input').live('click', function() { UPD вот уж не знаю, что,где и когда провтыкал, но сейчас у меня IE (чтоб его ###) не работает с этим кодом /* $('#filters select').live('change', function() { effects('', 'jump', 'icon', 200); //effects('in', 'fade', 'load', 300); loadContent(); }); */поэтому я его закомментировал (у меня используются только checkbox`ы) :? = = = кто-нибудь думал над реализацией функционала, упомянутого в сообщении ;) https://opencartforum.com/viewtopic.php?f=21&t=876&start=60#p7846 Надіслати Поділитися на інших сайтах More sharing options... wowkas Опубліковано: 10 грудня 2010 Share Опубліковано: 10 грудня 2010 Тоже все без ошибок работает, кроме назначения товару определенных свойств. Но тут скорее внутренний конфликт. Если есть две группы фильтров, в которых используются radiobuttons, то товару прибивается только одно свойство, а не отдельное в каждой группе. Т.е. например есть: Фильтр 1 - зн1 - зн2 Фильтр 2 - зн3 - зн4 Товару нельзя выбрать зн1 и зн3 сразу. А только что-то одно. Или это уже поправили и мне стоит установить модуль заново? :D А кто решил вот эту проблему? у самого возникла, раньше как-то не замечал, а тут заметил... Или у всех работает выборка по двум фильтрам? Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 12 грудня 2010 Share Опубліковано: 12 грудня 2010 (змінено) Я решил эту проблему. Сразу после того, как её опубликовали: :) https://opencartforum.com/viewtopic.php?f=21&t=876&start=50#p7701 Змінено 7 січня 2011 користувачем afwollis Надіслати Поділитися на інших сайтах More sharing options... wowkas Опубліковано: 13 грудня 2010 Share Опубліковано: 13 грудня 2010 Я делал это действие, нечего не изменилось... Потому и спросил повторно... Кроме как просто заменить эти строчки, больше нечего не нужно делать? Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 13 грудня 2010 Share Опубліковано: 13 грудня 2010 (змінено) Я делал это действие, нечего не изменилось... wowkas, вот с этого и надо было начинать. Я вроде ничего больше не делал - теперь уже и не знаю =) Могу предложить два варианта: 1) проверьте на всякий случай файл admin/view/template/catalog/get_ajax_options.tpl тут про checkbox`ы ... <?php } else if ($category_option['type'] == 1) { ?> <?php if ($category_option['category_option_values']) { ?> <?php foreach ($category_option['category_option_values'] as $category_option_value) { ?> <?php if (in_array($category_option_value['value_id'], $product_to_value_id)) { ?> <label><input type="radio" name="product_to_value_id[<?php echo $category_option['option_id']; ?>]" value="<?php echo $category_option_value['value_id']; ?>" checked="checked" /> <?php echo $category_option_value['language'][$language_id]['name']; ?></label> <?php } else { ?> <label><input type="radio" name="product_to_value_id[<?php echo $category_option['option_id']; ?>]" value="<?php echo $category_option_value['value_id']; ?>" /> <?php echo $category_option_value['language'][$language_id]['name']; ?></label> <?php } ?> <?php } ?> <?php } ?> <?php } else if ($category_option['type'] == 2) { ?> ... тут про select имя radio-input`a обязательно должно быть вида name="product_to_value_id[<?php echo $category_option['option_id']; ?>]"именно благодаря <?php echo $category_option['option_id']; ?>имя становится уникальным - ведь у разных групп разные option_id. а "навигация" между radio-input`ами происходит как раз по имени.2) перекачать архив, поставить вручную и сделать FIX, который я предложил. Змінено 7 січня 2011 користувачем afwollis Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 3 4 5 6 7 8 Вперед Сторінка 3 з 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 і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
Гість Опубліковано: 1 грудня 2010 Share Опубліковано: 1 грудня 2010 shoma, что-то вы, батенька, курите не то. у вас затык вот тут ... (SELECT oc_product_id FROM product_to_value WHERE value_id = '3') ORDER BY p.sort_order ASC LIMIT 0,20откуда оно там ?я залил файлы на свежую 1.4.9.1 и все нормально работает. вы явно делаете _что-то_ не так :) Делал все по инструкции. ос это префикс моей бд :roll: кстати там же эти же запросы есть без префикса. один фиг тоже самое. я ставил на оссторе 1,4 версию Надіслати Поділитися на інших сайтах More sharing options...
sumolex Опубліковано: 1 грудня 2010 Share Опубліковано: 1 грудня 2010 Не смотря на некоторые неточности, хочу заметить, что модуль очень полезный. Большое спасибо автору. Надіслати Поділитися на інших сайтах More sharing options...
supleader Опубліковано: 1 грудня 2010 Share Опубліковано: 1 грудня 2010 ос это префикс моей бдПричем тут префикс, если это название поля таблицы... Надіслати Поділитися на інших сайтах More sharing options...
Гість Опубліковано: 1 грудня 2010 Share Опубліковано: 1 грудня 2010 ос это префикс моей бдПричем тут префикс, если это название поля таблицы...тогда вероятнее всего этот префикс в манули по установке. делал все по 2 странице. правда на оссторе Надіслати Поділитися на інших сайтах More sharing options...
liftex Опубліковано: 1 грудня 2010 Share Опубліковано: 1 грудня 2010 Респект автору. Модуль незаменим! Огромное, человеческое спасибо! Надіслати Поділитися на інших сайтах More sharing options...
afwollis Опубліковано: 2 грудня 2010 Share Опубліковано: 2 грудня 2010 shoma, спасибо за внимательность https://opencartforum.com/public/style_emoticons/default/icon_question.gif есть такое в пятом шаге: 5) Открываем catalogmodelcatalogproduct.php До блока $sort_data = array( 'pd.name', 'p.sort_order', 'special', 'rating', 'p.price', 'p.model' );Вставляем // Start filter if (isset($values) && $values != '') { $data = array(); foreach (explode('_', $values) as $value_id) { $data[] = "value_id = '" . (int)$value_id . "'"; } $sql .= " AND p.product_id IN (SELECT " . DB_PREFIX . "product_id FROM " . DB_PREFIX . "product_to_value WHERE " . implode(" OR ", $data) . ")"; } // End filter должно быть // Start filter if (isset($values) && $values != '') { $data = array(); foreach (explode('_', $values) as $value_id) { $data[] = "value_id = '" . (int)$value_id . "'"; } $sql .= " AND p.product_id IN (SELECT product_id FROM " . DB_PREFIX . "product_to_value WHERE " . implode(" OR ", $data) . ")"; } // End filter хочу обратить внимаение, что при "чистой установке" ...Если у вас чистая система и вы еще ничего в её коде не изменяли, то качайте архив Openstore_module_product_filter_1.0_(clean_install).rar и просто извлеките файлы в корень с заменой и выполните запрос в базу данных...такой проблемы не возникает. Надіслати Поділитися на інших сайтах More sharing options... SooR Опубліковано: 2 грудня 2010 Share Опубліковано: 2 грудня 2010 Ребята, подождите немного, сделаю установку таблиц через админку, и с префиксами проблем не будет. Сейчас разбираюсь с софтом в связи с заменой ос. Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 2 грудня 2010 Share Опубліковано: 2 грудня 2010 да у нас все отлично =) вы и так уже много сделали, отдав в паблик такой модуль. теперь можем "допиливать" его общими усилиями. имхо: не обязательно делать установку таблиц через админку. ...Сейчас разбираюсь с софтом в связи с заменой ос...что на что сменили, если не секрет? https://opencartforum.com/public/style_emoticons/default/icon_question.gif Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 3 грудня 2010 Share Опубліковано: 3 грудня 2010 "даешь IE" или "что-то не работает" XP SP3 7.0.5730.13 поставил кроме всего прочего IETester (http://www.my-debugbar.com/wiki/) - та же картина. кроме того, есть информация, что вобще ни в одной версии IE не работает. кто тестил? какие результаты? мысли? сейчас думаю чем искать причину. но, думаю, проблема в реализации $('#content').load('index.php?route=product/get_ajax_products&path=20&values=' + $values, function(response, status, xhr){ if (status == "error") { error(xhr.status + " " + xhr.statusText); } else { //effects('out', 'fade', 'load', 200); } });попробую переписать на что-то типа jQuery.ajax({ data: inputs.join('&'), url: "index.php?route=product/get_ajax_products&path=20&values=" + $values, timeout: 2000, error: function() { //console.log("Failed to submit"); alert("Failed to submit"); }, success: function(r) { //alert(r); $('#content').html(r); } }) // checkout http://jquery.com/api for more syntax and options on this method.ибо данный код исправно работает в четырех основных браузерах:opera 10.10, iceweasel 3.5.14 (mozilla), gChrome 6.?, IE (7,8 tested)... Надіслати Поділитися на інших сайтах More sharing options... deim Опубліковано: 3 грудня 2010 Share Опубліковано: 3 грудня 2010 отличный модуль :( и главное - очень вовремя :D ребят, предложение по улучшению функционала: сделать не только логическое ИЛИ (или то, или то), но и логическое И (и то, и то обязательно) при фильтрации в категории по свойствам товара. А опцию выбора И/ИЛИ внести в админку например :) мне кажется, что это будет очень полезной штукой Надіслати Поділитися на інших сайтах More sharing options... SooR Опубліковано: 3 грудня 2010 Share Опубліковано: 3 грудня 2010 да у нас все отлично =) вы и так уже много сделали, отдав в паблик такой модуль. теперь можем "допиливать" его общими усилиями. имхо: не обязательно делать установку таблиц через админку. ...Сейчас разбираюсь с софтом в связи с заменой ос...что на что сменили, если не секрет? :)Да на макось.Но начинаю понимать, что она в идеале подходит под медиа а коммуникации, общение, но не под веб девелоп, к сожалению Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 4 грудня 2010 Share Опубліковано: 4 грудня 2010 (змінено) 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();"в итоге получилось так: остатки оригинального кода <script type="text/javascript"><!-- /* $('#filters input, #filters select').live('change', function() { effects('', 'jump', 'icon', 200); loadContent(); alert("IE test _live change_"); markFilterOption(); }); */ // Handling inputs in filter and getting results /* function loadContent() { var $values = ''; var $fields = $("#filters input, #filters select").serializeArray(); jQuery.each($fields, function(i, $field){ if (i == 0) { $values += $field.value; } else if ($field.value == '') { $values += ''; } else { $values += '_' + $field.value; } }); $('#content').load('index.php?route=product/get_ajax_products&path=<?php echo $path; ?>&values=' + $values, function(response, status, xhr){ if (status == "error") { error(xhr.status + " " + xhr.statusText); } else { //effects('out', 'fade', 'load', 200); } }); } */ // Preloader Effects function effects(way, type, el, dur) { el = $('#' + el); el.parent().css({'position' : 'relative'}); if (type == 'fade') { if (way == 'in') { el.fadeIn(dur); } else { el.fadeOut(dur); } } if (type == 'jump') { el.css({'position' : 'relative'}); el.animate({top: '-=2px'}, dur).animate({top: '+=5px'}, dur).animate({top: '-=5px'}, dur).animate({top: '+=2px'}, dur); } } // If jQuery didn't loaded something function error(mess) { var msg = "Error loading: "; $("#filters").prepend(msg + mess); } //--></script> собсно код, который сейчас отвечает за работу фильтра (комментарии в коде "малость не отсюда", ибо этот код я взял на каком-то сайте, потом правил, потом использовал на локальном небольшом проекте и только потом впихнул в модуль фильтра :D ) <script type="text/javascript" charset="utf-8"> // let's start the jQuery while I wait. // step 1: onload - capture the submit event on the form. //$(function() { // onload...do function markFilterOption() { effects('', 'jump', 'icon', 200); $('#filters').submit(); } $(document).ready(function () { $('#filters').submit(function() { // now we're going to capture *all* the fields in the // form and submit it via ajax. // :input is a macro that grabs all input types, select boxes // textarea, etc. Then I'm using the context of the form from // the initial '#contactForm' to narrow down our selector var $values = ''; var $fields = $("#filters input[name='value_id[]'], #filters select[name='value_id[]']").serializeArray(); jQuery.each($fields, function(i, $field){ if (i == 0) { $values += $field.value; } else if ($field.value == '') { $values += ''; } else { $values += '_' + $field.value; } }); // now if I join our inputs using '&' we'll have a query string jQuery.ajax({ data: "", url: "/index.php?route=product/get_ajax_products&path=" + some_category_id_OR_path_goes_here + "&values=" + $values, timeout: 2000, error: function() { alert("Failed to submit"); }, success: function(r) { $('#content').html(r); } }) // checkout http://jquery.com/api for more syntax and options on this method. // re-test... // by default - we'll always return false so it doesn't redirect the user. return false; }) }) </script> мой код корректно работает в: 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 Змінено 7 січня 2011 користувачем afwollis Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 4 грудня 2010 Share Опубліковано: 4 грудня 2010 свой последний вопрос решил для себя таким образом: var $filter_options_fields = $("#filters input:checked").serializeArray(); jQuery.each($filter_options_fields, function(j, $filter_options_field){ if ($filter_options_field.name.match(/value_id[d*]/)) { //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; } } } });спасибо старой закладке (оказывается уже задавался подобным вопросом https://opencartforum.com/public/style_emoticons/default/icon_arrow.gif ) JavaScript Kit -> RegExp (regular expression) object http://www.javascriptkit.com/jsref/regexp.shtml Надіслати Поділитися на інших сайтах More sharing options... Гість Опубліковано: 4 грудня 2010 Share Опубліковано: 4 грудня 2010 А теперь можно выложить модуль с уже пофиксиными файлами и свежим манулом https://opencartforum.com/public/style_emoticons/default/icon_arrow.gif Заранее спасибо. Сам модуль пока у себя не активировал, много глюков наблюдается. Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 4 грудня 2010 Share Опубліковано: 4 грудня 2010 А теперь можно выложить модуль с уже пофиксиными файлами и свежим манулом...вот тут к сожалению помочь не могу :o ибо пиляю его под жесткие условия. ...Сам модуль пока у себя не активировал...значит не столкнулись еще с какими-либо сложностями.с чем я вас и могу поздравить :? все, нижеизложенное, является толстым "имхо`м" и не претендует на трактование оного, как единственно верного ответа лепить "наобум" новую альфу|бету|что-то_еще из имеющихся фиксов, мыслей, пожеланий - в данный момент - неразумно. если бы было больше информации от всех, кто использует этот модуль, тогда глядишь и подтянется новая|пофиксеная|улучшенная версия модуля|мануала... до тех пор, имхо, имеют место быть лишь ответы/апдейты на конкретные ошибки, у конкретных пользователей :? https://opencartforum.com/public/style_emoticons/default/icon_arrow.gif Надіслати Поділитися на інших сайтах More sharing options... liftex Опубліковано: 4 грудня 2010 Share Опубліковано: 4 грудня 2010 Исправил замеченные мной ошибки в скрипте: Делаем SQL запрос в БД при стандартном перфиксе 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; Распаковываем архив, заменяя файлы. (установка на чистый ocstore_v0.1.4) Из админки устанавливаем модуль "Фильтр товаров" и нажимаем "Изменить". Создаем опцию, добавляем значения и выбираем категорию товаров для данной опции. Сохраняем. Заходим в товары, выбираем товар из той категории которой мы присвоили опцию. И в появившейся закладке "Опции фильтра" выбираем необходимое значение. Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 5 грудня 2010 Share Опубліковано: 5 грудня 2010 ребят, предложение по улучшению функционала: сделать не только логическое ИЛИ (или то, или то), но и логическое И (и то, и то обязательно) при фильтрации в категории по свойствам товара. да, согласен надо бы переделать логику, чтобы выборка шла не сплошь по значениям опций, а как-то с группировкой опций: выбрать все продукты, у которых ( option_id_1 [value_id = 2 OR value_id = 3 OR value_id = 7] ) AND ( option_id_4 [value_id = 2 OR value_id = 4 OR value_id = 5] ) AND ( option_id_N [value_id = n OR value_id = n OR value_id = n] ) UPDдумаю стоит посмотреть в сторону UNION, но тут прийдется править вывод опций, сбор/отправку их значений и обработку далее в скриптах... :o А опцию выбора И/ИЛИ внести в админку например https://opencartforum.com/public/style_emoticons/default/icon_arrow.gif мне кажется, что это будет очень полезной штукой над этим можно задуматься позже - сначала надо попробовать реализовать такой функционал. Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 7 грудня 2010 Share Опубліковано: 7 грудня 2010 (змінено) Options Update BUG не знаю, почему не видел этот баг раньше, но вот столкнулся: исходные данные: - чистая установка OpenCart 1.4.9.1; - установленный вручную модуль. для дальнейшего усовершенствования модуля забиты такие опции: Действия: решил, что для "Phones & PDAs" маловато вариантов разрешения экрана и хотел было добавить дополнительный вариант "480 x 800". в итоге получил: Error: Duplicate entry '10' for key 1 Error No: 1062 INSERT INTO category_option_value SET option_id = '3', value_id = '10'на скрине ниже (над текстом ошибки) виден кусок вывода отладочной информации.уже поковырялся и добавил в admin / model / catalog / filter.php / public function updateOption($option_id, $data) {} print " <strong>public function updateOption($option_id, $data) {}</strong> <pre>"; print_r($data); print "</pre>"; в этой функции есть такой участок: $this->db->query("DELETE FROM " . DB_PREFIX . "category_option_value WHERE option_id = '" . (int)$option_id . "'"); $this->db->query("DELETE FROM " . DB_PREFIX . "category_option_value_description WHERE option_id = '" . (int)$option_id . "'"); if (isset($data['option_value'])) { foreach ($data['option_value'] as $value_id => $option_value) { $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value SET option_id = '" . (int)$option_id . "', value_id = '" . (int)$value_id . "'"); foreach ($option_value['language'] as $language_id => $language) { $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value_description SET value_id = '" . (int)$value_id . "', option_id = '" . (int)$option_id . "', language_id = '" . (int)$language_id . "', name = '" . $this->db->escape($language['name']) . "'"); } } }все, что находится здесь внутри условия if (isset($data['option_value'])) {и отдает нам указанную выше ошибку.однако корни проблемы растут малость из другого места... :? из строк <?php $option_value_row = 0; ?> ... <?php $option_value_row++; ?> ... <script type="text/javascript"><!-- ... var option_value_row = <?php echo $option_value_row; ?>; function addValue() { html = '<tr id="option_value' + option_value_row + '" class="option">'; html += '<td style="width: 170px;background-color: #F5EFD1;padding:4px;">'; <?php foreach ($languages as $language) { ?> html += '<input type="text" name="option_value[' + option_value_row + '][language][<?php echo $language['language_id']; ?>][name]" value="Значение ' + option_value_row + '" /> <img src="view/image/flags/<?php echo $language['image']; ?>" title="<?php echo $language['name']; ?>" /> '; <?php } ?> html += '</td>'; html += '<td align="center"><a onclick="removeValue(' + option_value_row + ');" class="button"><span>X</span></a></td>'; html += '</tr>'; $('#block_option').append(html); option_value_row++; } ... //--></script> в файле admin / view / template / module / filter_form.tpl .= = = Options Update FIX для себя решил проблему следующим образом: 1) файл admin / view / template / module / filter_form.tpl в функции function addValue() {} заменил строку html += '<input type="text" name="option_value[' + option_value_row + '][language][<?php echo $language['language_id']; ?>][name]" value="Значение ' + option_value_row + '" /> <img src="view/image/flags/<?php echo $language['image']; ?>" title="<?php echo $language['name']; ?>" /> ';на html += '<input type="text" name="option_value[' + option_value_row + '_new][language][<?php echo $language['language_id']; ?>][name]" value="Значение ' + option_value_row + '_new" /> <img src="view/image/flags/<?php echo $language['image']; ?>" title="<?php echo $language['name']; ?>" /> ';т.е. просто добавил "_new" в генерируемый для новых значений value_id2) файл admin / model / catalog / filter.php в функции public function updateOption($option_id, $data) {} заменил строку $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value SET option_id = '" . (int)$option_id . "', value_id = '" . (int)$value_id . "'");на $new_value_pos = strpos($value_id, "new"); if ($new_value_pos !== false) { $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value SET option_id = '" . (int)$option_id . "'"); $value_id = $this->db->getLastId(); } else { $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value SET option_id = '" . (int)$option_id . "', value_id = '" . (int)$value_id . "'"); } теперь у меня при сохранении значений опций проводится проверка значения "value_id" на предмет содержания текста "new".и если вхождение есть - то выполняем кусок кода, взятый из функции public function addOption($data) {} для вставки именно нового значения опции и получения value_id этого значения. иначе - используется существующий value_id, который, собсно, и был передан в функцию. = = = у кого есть такая проблема - попробуйте пофиксить моим способом :roll: у кого была такая проблема - поделитесь, пожалуйста, своим решением ;) у кого нет и небыло - вам можно только позавидовать :D Змінено 7 січня 2011 користувачем afwollis 1 Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 7 грудня 2010 Share Опубліковано: 7 грудня 2010 ...но вернемся к нашим "баранам" - проблема с фильтром в IE. не работает ни в одной версии из тех, что я проверял ( :roll: 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(); });... пересмотрел свою позицию насчет правки данного кода (: просто "разъединил" обработку действий $('#filters select').live('change', function() { effects('', 'jump', 'icon', 200); //effects('in', 'fade', 'load', 300); loadContent(); }); $('#filters input').live('click', function() { effects('', 'jump', 'icon', 200); //effects('in', 'fade', 'load', 300); loadContent(); });обратите внимание на $('#filters input').live('click', function() { UPD вот уж не знаю, что,где и когда провтыкал, но сейчас у меня IE (чтоб его ###) не работает с этим кодом /* $('#filters select').live('change', function() { effects('', 'jump', 'icon', 200); //effects('in', 'fade', 'load', 300); loadContent(); }); */поэтому я его закомментировал (у меня используются только checkbox`ы) :? = = = кто-нибудь думал над реализацией функционала, упомянутого в сообщении ;) https://opencartforum.com/viewtopic.php?f=21&t=876&start=60#p7846 Надіслати Поділитися на інших сайтах More sharing options... wowkas Опубліковано: 10 грудня 2010 Share Опубліковано: 10 грудня 2010 Тоже все без ошибок работает, кроме назначения товару определенных свойств. Но тут скорее внутренний конфликт. Если есть две группы фильтров, в которых используются radiobuttons, то товару прибивается только одно свойство, а не отдельное в каждой группе. Т.е. например есть: Фильтр 1 - зн1 - зн2 Фильтр 2 - зн3 - зн4 Товару нельзя выбрать зн1 и зн3 сразу. А только что-то одно. Или это уже поправили и мне стоит установить модуль заново? :D А кто решил вот эту проблему? у самого возникла, раньше как-то не замечал, а тут заметил... Или у всех работает выборка по двум фильтрам? Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 12 грудня 2010 Share Опубліковано: 12 грудня 2010 (змінено) Я решил эту проблему. Сразу после того, как её опубликовали: :) https://opencartforum.com/viewtopic.php?f=21&t=876&start=50#p7701 Змінено 7 січня 2011 користувачем afwollis Надіслати Поділитися на інших сайтах More sharing options... wowkas Опубліковано: 13 грудня 2010 Share Опубліковано: 13 грудня 2010 Я делал это действие, нечего не изменилось... Потому и спросил повторно... Кроме как просто заменить эти строчки, больше нечего не нужно делать? Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 13 грудня 2010 Share Опубліковано: 13 грудня 2010 (змінено) Я делал это действие, нечего не изменилось... wowkas, вот с этого и надо было начинать. Я вроде ничего больше не делал - теперь уже и не знаю =) Могу предложить два варианта: 1) проверьте на всякий случай файл admin/view/template/catalog/get_ajax_options.tpl тут про checkbox`ы ... <?php } else if ($category_option['type'] == 1) { ?> <?php if ($category_option['category_option_values']) { ?> <?php foreach ($category_option['category_option_values'] as $category_option_value) { ?> <?php if (in_array($category_option_value['value_id'], $product_to_value_id)) { ?> <label><input type="radio" name="product_to_value_id[<?php echo $category_option['option_id']; ?>]" value="<?php echo $category_option_value['value_id']; ?>" checked="checked" /> <?php echo $category_option_value['language'][$language_id]['name']; ?></label> <?php } else { ?> <label><input type="radio" name="product_to_value_id[<?php echo $category_option['option_id']; ?>]" value="<?php echo $category_option_value['value_id']; ?>" /> <?php echo $category_option_value['language'][$language_id]['name']; ?></label> <?php } ?> <?php } ?> <?php } ?> <?php } else if ($category_option['type'] == 2) { ?> ... тут про select имя radio-input`a обязательно должно быть вида name="product_to_value_id[<?php echo $category_option['option_id']; ?>]"именно благодаря <?php echo $category_option['option_id']; ?>имя становится уникальным - ведь у разных групп разные option_id. а "навигация" между radio-input`ами происходит как раз по имени.2) перекачать архив, поставить вручную и сделать FIX, который я предложил. Змінено 7 січня 2011 користувачем afwollis Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 3 4 5 6 7 8 Вперед Сторінка 3 з 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 і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
SooR Опубліковано: 2 грудня 2010 Share Опубліковано: 2 грудня 2010 Ребята, подождите немного, сделаю установку таблиц через админку, и с префиксами проблем не будет. Сейчас разбираюсь с софтом в связи с заменой ос. Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 2 грудня 2010 Share Опубліковано: 2 грудня 2010 да у нас все отлично =) вы и так уже много сделали, отдав в паблик такой модуль. теперь можем "допиливать" его общими усилиями. имхо: не обязательно делать установку таблиц через админку. ...Сейчас разбираюсь с софтом в связи с заменой ос...что на что сменили, если не секрет? https://opencartforum.com/public/style_emoticons/default/icon_question.gif Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 3 грудня 2010 Share Опубліковано: 3 грудня 2010 "даешь IE" или "что-то не работает" XP SP3 7.0.5730.13 поставил кроме всего прочего IETester (http://www.my-debugbar.com/wiki/) - та же картина. кроме того, есть информация, что вобще ни в одной версии IE не работает. кто тестил? какие результаты? мысли? сейчас думаю чем искать причину. но, думаю, проблема в реализации $('#content').load('index.php?route=product/get_ajax_products&path=20&values=' + $values, function(response, status, xhr){ if (status == "error") { error(xhr.status + " " + xhr.statusText); } else { //effects('out', 'fade', 'load', 200); } });попробую переписать на что-то типа jQuery.ajax({ data: inputs.join('&'), url: "index.php?route=product/get_ajax_products&path=20&values=" + $values, timeout: 2000, error: function() { //console.log("Failed to submit"); alert("Failed to submit"); }, success: function(r) { //alert(r); $('#content').html(r); } }) // checkout http://jquery.com/api for more syntax and options on this method.ибо данный код исправно работает в четырех основных браузерах:opera 10.10, iceweasel 3.5.14 (mozilla), gChrome 6.?, IE (7,8 tested)... Надіслати Поділитися на інших сайтах More sharing options... deim Опубліковано: 3 грудня 2010 Share Опубліковано: 3 грудня 2010 отличный модуль :( и главное - очень вовремя :D ребят, предложение по улучшению функционала: сделать не только логическое ИЛИ (или то, или то), но и логическое И (и то, и то обязательно) при фильтрации в категории по свойствам товара. А опцию выбора И/ИЛИ внести в админку например :) мне кажется, что это будет очень полезной штукой Надіслати Поділитися на інших сайтах More sharing options... SooR Опубліковано: 3 грудня 2010 Share Опубліковано: 3 грудня 2010 да у нас все отлично =) вы и так уже много сделали, отдав в паблик такой модуль. теперь можем "допиливать" его общими усилиями. имхо: не обязательно делать установку таблиц через админку. ...Сейчас разбираюсь с софтом в связи с заменой ос...что на что сменили, если не секрет? :)Да на макось.Но начинаю понимать, что она в идеале подходит под медиа а коммуникации, общение, но не под веб девелоп, к сожалению Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 4 грудня 2010 Share Опубліковано: 4 грудня 2010 (змінено) 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();"в итоге получилось так: остатки оригинального кода <script type="text/javascript"><!-- /* $('#filters input, #filters select').live('change', function() { effects('', 'jump', 'icon', 200); loadContent(); alert("IE test _live change_"); markFilterOption(); }); */ // Handling inputs in filter and getting results /* function loadContent() { var $values = ''; var $fields = $("#filters input, #filters select").serializeArray(); jQuery.each($fields, function(i, $field){ if (i == 0) { $values += $field.value; } else if ($field.value == '') { $values += ''; } else { $values += '_' + $field.value; } }); $('#content').load('index.php?route=product/get_ajax_products&path=<?php echo $path; ?>&values=' + $values, function(response, status, xhr){ if (status == "error") { error(xhr.status + " " + xhr.statusText); } else { //effects('out', 'fade', 'load', 200); } }); } */ // Preloader Effects function effects(way, type, el, dur) { el = $('#' + el); el.parent().css({'position' : 'relative'}); if (type == 'fade') { if (way == 'in') { el.fadeIn(dur); } else { el.fadeOut(dur); } } if (type == 'jump') { el.css({'position' : 'relative'}); el.animate({top: '-=2px'}, dur).animate({top: '+=5px'}, dur).animate({top: '-=5px'}, dur).animate({top: '+=2px'}, dur); } } // If jQuery didn't loaded something function error(mess) { var msg = "Error loading: "; $("#filters").prepend(msg + mess); } //--></script> собсно код, который сейчас отвечает за работу фильтра (комментарии в коде "малость не отсюда", ибо этот код я взял на каком-то сайте, потом правил, потом использовал на локальном небольшом проекте и только потом впихнул в модуль фильтра :D ) <script type="text/javascript" charset="utf-8"> // let's start the jQuery while I wait. // step 1: onload - capture the submit event on the form. //$(function() { // onload...do function markFilterOption() { effects('', 'jump', 'icon', 200); $('#filters').submit(); } $(document).ready(function () { $('#filters').submit(function() { // now we're going to capture *all* the fields in the // form and submit it via ajax. // :input is a macro that grabs all input types, select boxes // textarea, etc. Then I'm using the context of the form from // the initial '#contactForm' to narrow down our selector var $values = ''; var $fields = $("#filters input[name='value_id[]'], #filters select[name='value_id[]']").serializeArray(); jQuery.each($fields, function(i, $field){ if (i == 0) { $values += $field.value; } else if ($field.value == '') { $values += ''; } else { $values += '_' + $field.value; } }); // now if I join our inputs using '&' we'll have a query string jQuery.ajax({ data: "", url: "/index.php?route=product/get_ajax_products&path=" + some_category_id_OR_path_goes_here + "&values=" + $values, timeout: 2000, error: function() { alert("Failed to submit"); }, success: function(r) { $('#content').html(r); } }) // checkout http://jquery.com/api for more syntax and options on this method. // re-test... // by default - we'll always return false so it doesn't redirect the user. return false; }) }) </script> мой код корректно работает в: 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 Змінено 7 січня 2011 користувачем afwollis Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 4 грудня 2010 Share Опубліковано: 4 грудня 2010 свой последний вопрос решил для себя таким образом: var $filter_options_fields = $("#filters input:checked").serializeArray(); jQuery.each($filter_options_fields, function(j, $filter_options_field){ if ($filter_options_field.name.match(/value_id[d*]/)) { //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; } } } });спасибо старой закладке (оказывается уже задавался подобным вопросом https://opencartforum.com/public/style_emoticons/default/icon_arrow.gif ) JavaScript Kit -> RegExp (regular expression) object http://www.javascriptkit.com/jsref/regexp.shtml Надіслати Поділитися на інших сайтах More sharing options... Гість Опубліковано: 4 грудня 2010 Share Опубліковано: 4 грудня 2010 А теперь можно выложить модуль с уже пофиксиными файлами и свежим манулом https://opencartforum.com/public/style_emoticons/default/icon_arrow.gif Заранее спасибо. Сам модуль пока у себя не активировал, много глюков наблюдается. Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 4 грудня 2010 Share Опубліковано: 4 грудня 2010 А теперь можно выложить модуль с уже пофиксиными файлами и свежим манулом...вот тут к сожалению помочь не могу :o ибо пиляю его под жесткие условия. ...Сам модуль пока у себя не активировал...значит не столкнулись еще с какими-либо сложностями.с чем я вас и могу поздравить :? все, нижеизложенное, является толстым "имхо`м" и не претендует на трактование оного, как единственно верного ответа лепить "наобум" новую альфу|бету|что-то_еще из имеющихся фиксов, мыслей, пожеланий - в данный момент - неразумно. если бы было больше информации от всех, кто использует этот модуль, тогда глядишь и подтянется новая|пофиксеная|улучшенная версия модуля|мануала... до тех пор, имхо, имеют место быть лишь ответы/апдейты на конкретные ошибки, у конкретных пользователей :? https://opencartforum.com/public/style_emoticons/default/icon_arrow.gif Надіслати Поділитися на інших сайтах More sharing options... liftex Опубліковано: 4 грудня 2010 Share Опубліковано: 4 грудня 2010 Исправил замеченные мной ошибки в скрипте: Делаем SQL запрос в БД при стандартном перфиксе 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; Распаковываем архив, заменяя файлы. (установка на чистый ocstore_v0.1.4) Из админки устанавливаем модуль "Фильтр товаров" и нажимаем "Изменить". Создаем опцию, добавляем значения и выбираем категорию товаров для данной опции. Сохраняем. Заходим в товары, выбираем товар из той категории которой мы присвоили опцию. И в появившейся закладке "Опции фильтра" выбираем необходимое значение. Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 5 грудня 2010 Share Опубліковано: 5 грудня 2010 ребят, предложение по улучшению функционала: сделать не только логическое ИЛИ (или то, или то), но и логическое И (и то, и то обязательно) при фильтрации в категории по свойствам товара. да, согласен надо бы переделать логику, чтобы выборка шла не сплошь по значениям опций, а как-то с группировкой опций: выбрать все продукты, у которых ( option_id_1 [value_id = 2 OR value_id = 3 OR value_id = 7] ) AND ( option_id_4 [value_id = 2 OR value_id = 4 OR value_id = 5] ) AND ( option_id_N [value_id = n OR value_id = n OR value_id = n] ) UPDдумаю стоит посмотреть в сторону UNION, но тут прийдется править вывод опций, сбор/отправку их значений и обработку далее в скриптах... :o А опцию выбора И/ИЛИ внести в админку например https://opencartforum.com/public/style_emoticons/default/icon_arrow.gif мне кажется, что это будет очень полезной штукой над этим можно задуматься позже - сначала надо попробовать реализовать такой функционал. Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 7 грудня 2010 Share Опубліковано: 7 грудня 2010 (змінено) Options Update BUG не знаю, почему не видел этот баг раньше, но вот столкнулся: исходные данные: - чистая установка OpenCart 1.4.9.1; - установленный вручную модуль. для дальнейшего усовершенствования модуля забиты такие опции: Действия: решил, что для "Phones & PDAs" маловато вариантов разрешения экрана и хотел было добавить дополнительный вариант "480 x 800". в итоге получил: Error: Duplicate entry '10' for key 1 Error No: 1062 INSERT INTO category_option_value SET option_id = '3', value_id = '10'на скрине ниже (над текстом ошибки) виден кусок вывода отладочной информации.уже поковырялся и добавил в admin / model / catalog / filter.php / public function updateOption($option_id, $data) {} print " <strong>public function updateOption($option_id, $data) {}</strong> <pre>"; print_r($data); print "</pre>"; в этой функции есть такой участок: $this->db->query("DELETE FROM " . DB_PREFIX . "category_option_value WHERE option_id = '" . (int)$option_id . "'"); $this->db->query("DELETE FROM " . DB_PREFIX . "category_option_value_description WHERE option_id = '" . (int)$option_id . "'"); if (isset($data['option_value'])) { foreach ($data['option_value'] as $value_id => $option_value) { $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value SET option_id = '" . (int)$option_id . "', value_id = '" . (int)$value_id . "'"); foreach ($option_value['language'] as $language_id => $language) { $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value_description SET value_id = '" . (int)$value_id . "', option_id = '" . (int)$option_id . "', language_id = '" . (int)$language_id . "', name = '" . $this->db->escape($language['name']) . "'"); } } }все, что находится здесь внутри условия if (isset($data['option_value'])) {и отдает нам указанную выше ошибку.однако корни проблемы растут малость из другого места... :? из строк <?php $option_value_row = 0; ?> ... <?php $option_value_row++; ?> ... <script type="text/javascript"><!-- ... var option_value_row = <?php echo $option_value_row; ?>; function addValue() { html = '<tr id="option_value' + option_value_row + '" class="option">'; html += '<td style="width: 170px;background-color: #F5EFD1;padding:4px;">'; <?php foreach ($languages as $language) { ?> html += '<input type="text" name="option_value[' + option_value_row + '][language][<?php echo $language['language_id']; ?>][name]" value="Значение ' + option_value_row + '" /> <img src="view/image/flags/<?php echo $language['image']; ?>" title="<?php echo $language['name']; ?>" /> '; <?php } ?> html += '</td>'; html += '<td align="center"><a onclick="removeValue(' + option_value_row + ');" class="button"><span>X</span></a></td>'; html += '</tr>'; $('#block_option').append(html); option_value_row++; } ... //--></script> в файле admin / view / template / module / filter_form.tpl .= = = Options Update FIX для себя решил проблему следующим образом: 1) файл admin / view / template / module / filter_form.tpl в функции function addValue() {} заменил строку html += '<input type="text" name="option_value[' + option_value_row + '][language][<?php echo $language['language_id']; ?>][name]" value="Значение ' + option_value_row + '" /> <img src="view/image/flags/<?php echo $language['image']; ?>" title="<?php echo $language['name']; ?>" /> ';на html += '<input type="text" name="option_value[' + option_value_row + '_new][language][<?php echo $language['language_id']; ?>][name]" value="Значение ' + option_value_row + '_new" /> <img src="view/image/flags/<?php echo $language['image']; ?>" title="<?php echo $language['name']; ?>" /> ';т.е. просто добавил "_new" в генерируемый для новых значений value_id2) файл admin / model / catalog / filter.php в функции public function updateOption($option_id, $data) {} заменил строку $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value SET option_id = '" . (int)$option_id . "', value_id = '" . (int)$value_id . "'");на $new_value_pos = strpos($value_id, "new"); if ($new_value_pos !== false) { $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value SET option_id = '" . (int)$option_id . "'"); $value_id = $this->db->getLastId(); } else { $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value SET option_id = '" . (int)$option_id . "', value_id = '" . (int)$value_id . "'"); } теперь у меня при сохранении значений опций проводится проверка значения "value_id" на предмет содержания текста "new".и если вхождение есть - то выполняем кусок кода, взятый из функции public function addOption($data) {} для вставки именно нового значения опции и получения value_id этого значения. иначе - используется существующий value_id, который, собсно, и был передан в функцию. = = = у кого есть такая проблема - попробуйте пофиксить моим способом :roll: у кого была такая проблема - поделитесь, пожалуйста, своим решением ;) у кого нет и небыло - вам можно только позавидовать :D Змінено 7 січня 2011 користувачем afwollis 1 Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 7 грудня 2010 Share Опубліковано: 7 грудня 2010 ...но вернемся к нашим "баранам" - проблема с фильтром в IE. не работает ни в одной версии из тех, что я проверял ( :roll: 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(); });... пересмотрел свою позицию насчет правки данного кода (: просто "разъединил" обработку действий $('#filters select').live('change', function() { effects('', 'jump', 'icon', 200); //effects('in', 'fade', 'load', 300); loadContent(); }); $('#filters input').live('click', function() { effects('', 'jump', 'icon', 200); //effects('in', 'fade', 'load', 300); loadContent(); });обратите внимание на $('#filters input').live('click', function() { UPD вот уж не знаю, что,где и когда провтыкал, но сейчас у меня IE (чтоб его ###) не работает с этим кодом /* $('#filters select').live('change', function() { effects('', 'jump', 'icon', 200); //effects('in', 'fade', 'load', 300); loadContent(); }); */поэтому я его закомментировал (у меня используются только checkbox`ы) :? = = = кто-нибудь думал над реализацией функционала, упомянутого в сообщении ;) https://opencartforum.com/viewtopic.php?f=21&t=876&start=60#p7846 Надіслати Поділитися на інших сайтах More sharing options... wowkas Опубліковано: 10 грудня 2010 Share Опубліковано: 10 грудня 2010 Тоже все без ошибок работает, кроме назначения товару определенных свойств. Но тут скорее внутренний конфликт. Если есть две группы фильтров, в которых используются radiobuttons, то товару прибивается только одно свойство, а не отдельное в каждой группе. Т.е. например есть: Фильтр 1 - зн1 - зн2 Фильтр 2 - зн3 - зн4 Товару нельзя выбрать зн1 и зн3 сразу. А только что-то одно. Или это уже поправили и мне стоит установить модуль заново? :D А кто решил вот эту проблему? у самого возникла, раньше как-то не замечал, а тут заметил... Или у всех работает выборка по двум фильтрам? Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 12 грудня 2010 Share Опубліковано: 12 грудня 2010 (змінено) Я решил эту проблему. Сразу после того, как её опубликовали: :) https://opencartforum.com/viewtopic.php?f=21&t=876&start=50#p7701 Змінено 7 січня 2011 користувачем afwollis Надіслати Поділитися на інших сайтах More sharing options... wowkas Опубліковано: 13 грудня 2010 Share Опубліковано: 13 грудня 2010 Я делал это действие, нечего не изменилось... Потому и спросил повторно... Кроме как просто заменить эти строчки, больше нечего не нужно делать? Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 13 грудня 2010 Share Опубліковано: 13 грудня 2010 (змінено) Я делал это действие, нечего не изменилось... wowkas, вот с этого и надо было начинать. Я вроде ничего больше не делал - теперь уже и не знаю =) Могу предложить два варианта: 1) проверьте на всякий случай файл admin/view/template/catalog/get_ajax_options.tpl тут про checkbox`ы ... <?php } else if ($category_option['type'] == 1) { ?> <?php if ($category_option['category_option_values']) { ?> <?php foreach ($category_option['category_option_values'] as $category_option_value) { ?> <?php if (in_array($category_option_value['value_id'], $product_to_value_id)) { ?> <label><input type="radio" name="product_to_value_id[<?php echo $category_option['option_id']; ?>]" value="<?php echo $category_option_value['value_id']; ?>" checked="checked" /> <?php echo $category_option_value['language'][$language_id]['name']; ?></label> <?php } else { ?> <label><input type="radio" name="product_to_value_id[<?php echo $category_option['option_id']; ?>]" value="<?php echo $category_option_value['value_id']; ?>" /> <?php echo $category_option_value['language'][$language_id]['name']; ?></label> <?php } ?> <?php } ?> <?php } ?> <?php } else if ($category_option['type'] == 2) { ?> ... тут про select имя radio-input`a обязательно должно быть вида name="product_to_value_id[<?php echo $category_option['option_id']; ?>]"именно благодаря <?php echo $category_option['option_id']; ?>имя становится уникальным - ведь у разных групп разные option_id. а "навигация" между radio-input`ами происходит как раз по имени.2) перекачать архив, поставить вручную и сделать FIX, который я предложил. Змінено 7 січня 2011 користувачем afwollis Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 3 4 5 6 7 8 Вперед Сторінка 3 з 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 і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
afwollis Опубліковано: 2 грудня 2010 Share Опубліковано: 2 грудня 2010 да у нас все отлично =) вы и так уже много сделали, отдав в паблик такой модуль. теперь можем "допиливать" его общими усилиями. имхо: не обязательно делать установку таблиц через админку. ...Сейчас разбираюсь с софтом в связи с заменой ос...что на что сменили, если не секрет? https://opencartforum.com/public/style_emoticons/default/icon_question.gif Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 3 грудня 2010 Share Опубліковано: 3 грудня 2010 "даешь IE" или "что-то не работает" XP SP3 7.0.5730.13 поставил кроме всего прочего IETester (http://www.my-debugbar.com/wiki/) - та же картина. кроме того, есть информация, что вобще ни в одной версии IE не работает. кто тестил? какие результаты? мысли? сейчас думаю чем искать причину. но, думаю, проблема в реализации $('#content').load('index.php?route=product/get_ajax_products&path=20&values=' + $values, function(response, status, xhr){ if (status == "error") { error(xhr.status + " " + xhr.statusText); } else { //effects('out', 'fade', 'load', 200); } });попробую переписать на что-то типа jQuery.ajax({ data: inputs.join('&'), url: "index.php?route=product/get_ajax_products&path=20&values=" + $values, timeout: 2000, error: function() { //console.log("Failed to submit"); alert("Failed to submit"); }, success: function(r) { //alert(r); $('#content').html(r); } }) // checkout http://jquery.com/api for more syntax and options on this method.ибо данный код исправно работает в четырех основных браузерах:opera 10.10, iceweasel 3.5.14 (mozilla), gChrome 6.?, IE (7,8 tested)... Надіслати Поділитися на інших сайтах More sharing options... deim Опубліковано: 3 грудня 2010 Share Опубліковано: 3 грудня 2010 отличный модуль :( и главное - очень вовремя :D ребят, предложение по улучшению функционала: сделать не только логическое ИЛИ (или то, или то), но и логическое И (и то, и то обязательно) при фильтрации в категории по свойствам товара. А опцию выбора И/ИЛИ внести в админку например :) мне кажется, что это будет очень полезной штукой Надіслати Поділитися на інших сайтах More sharing options... SooR Опубліковано: 3 грудня 2010 Share Опубліковано: 3 грудня 2010 да у нас все отлично =) вы и так уже много сделали, отдав в паблик такой модуль. теперь можем "допиливать" его общими усилиями. имхо: не обязательно делать установку таблиц через админку. ...Сейчас разбираюсь с софтом в связи с заменой ос...что на что сменили, если не секрет? :)Да на макось.Но начинаю понимать, что она в идеале подходит под медиа а коммуникации, общение, но не под веб девелоп, к сожалению Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 4 грудня 2010 Share Опубліковано: 4 грудня 2010 (змінено) 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();"в итоге получилось так: остатки оригинального кода <script type="text/javascript"><!-- /* $('#filters input, #filters select').live('change', function() { effects('', 'jump', 'icon', 200); loadContent(); alert("IE test _live change_"); markFilterOption(); }); */ // Handling inputs in filter and getting results /* function loadContent() { var $values = ''; var $fields = $("#filters input, #filters select").serializeArray(); jQuery.each($fields, function(i, $field){ if (i == 0) { $values += $field.value; } else if ($field.value == '') { $values += ''; } else { $values += '_' + $field.value; } }); $('#content').load('index.php?route=product/get_ajax_products&path=<?php echo $path; ?>&values=' + $values, function(response, status, xhr){ if (status == "error") { error(xhr.status + " " + xhr.statusText); } else { //effects('out', 'fade', 'load', 200); } }); } */ // Preloader Effects function effects(way, type, el, dur) { el = $('#' + el); el.parent().css({'position' : 'relative'}); if (type == 'fade') { if (way == 'in') { el.fadeIn(dur); } else { el.fadeOut(dur); } } if (type == 'jump') { el.css({'position' : 'relative'}); el.animate({top: '-=2px'}, dur).animate({top: '+=5px'}, dur).animate({top: '-=5px'}, dur).animate({top: '+=2px'}, dur); } } // If jQuery didn't loaded something function error(mess) { var msg = "Error loading: "; $("#filters").prepend(msg + mess); } //--></script> собсно код, который сейчас отвечает за работу фильтра (комментарии в коде "малость не отсюда", ибо этот код я взял на каком-то сайте, потом правил, потом использовал на локальном небольшом проекте и только потом впихнул в модуль фильтра :D ) <script type="text/javascript" charset="utf-8"> // let's start the jQuery while I wait. // step 1: onload - capture the submit event on the form. //$(function() { // onload...do function markFilterOption() { effects('', 'jump', 'icon', 200); $('#filters').submit(); } $(document).ready(function () { $('#filters').submit(function() { // now we're going to capture *all* the fields in the // form and submit it via ajax. // :input is a macro that grabs all input types, select boxes // textarea, etc. Then I'm using the context of the form from // the initial '#contactForm' to narrow down our selector var $values = ''; var $fields = $("#filters input[name='value_id[]'], #filters select[name='value_id[]']").serializeArray(); jQuery.each($fields, function(i, $field){ if (i == 0) { $values += $field.value; } else if ($field.value == '') { $values += ''; } else { $values += '_' + $field.value; } }); // now if I join our inputs using '&' we'll have a query string jQuery.ajax({ data: "", url: "/index.php?route=product/get_ajax_products&path=" + some_category_id_OR_path_goes_here + "&values=" + $values, timeout: 2000, error: function() { alert("Failed to submit"); }, success: function(r) { $('#content').html(r); } }) // checkout http://jquery.com/api for more syntax and options on this method. // re-test... // by default - we'll always return false so it doesn't redirect the user. return false; }) }) </script> мой код корректно работает в: 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 Змінено 7 січня 2011 користувачем afwollis Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 4 грудня 2010 Share Опубліковано: 4 грудня 2010 свой последний вопрос решил для себя таким образом: var $filter_options_fields = $("#filters input:checked").serializeArray(); jQuery.each($filter_options_fields, function(j, $filter_options_field){ if ($filter_options_field.name.match(/value_id[d*]/)) { //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; } } } });спасибо старой закладке (оказывается уже задавался подобным вопросом https://opencartforum.com/public/style_emoticons/default/icon_arrow.gif ) JavaScript Kit -> RegExp (regular expression) object http://www.javascriptkit.com/jsref/regexp.shtml Надіслати Поділитися на інших сайтах More sharing options... Гість Опубліковано: 4 грудня 2010 Share Опубліковано: 4 грудня 2010 А теперь можно выложить модуль с уже пофиксиными файлами и свежим манулом https://opencartforum.com/public/style_emoticons/default/icon_arrow.gif Заранее спасибо. Сам модуль пока у себя не активировал, много глюков наблюдается. Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 4 грудня 2010 Share Опубліковано: 4 грудня 2010 А теперь можно выложить модуль с уже пофиксиными файлами и свежим манулом...вот тут к сожалению помочь не могу :o ибо пиляю его под жесткие условия. ...Сам модуль пока у себя не активировал...значит не столкнулись еще с какими-либо сложностями.с чем я вас и могу поздравить :? все, нижеизложенное, является толстым "имхо`м" и не претендует на трактование оного, как единственно верного ответа лепить "наобум" новую альфу|бету|что-то_еще из имеющихся фиксов, мыслей, пожеланий - в данный момент - неразумно. если бы было больше информации от всех, кто использует этот модуль, тогда глядишь и подтянется новая|пофиксеная|улучшенная версия модуля|мануала... до тех пор, имхо, имеют место быть лишь ответы/апдейты на конкретные ошибки, у конкретных пользователей :? https://opencartforum.com/public/style_emoticons/default/icon_arrow.gif Надіслати Поділитися на інших сайтах More sharing options... liftex Опубліковано: 4 грудня 2010 Share Опубліковано: 4 грудня 2010 Исправил замеченные мной ошибки в скрипте: Делаем SQL запрос в БД при стандартном перфиксе 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; Распаковываем архив, заменяя файлы. (установка на чистый ocstore_v0.1.4) Из админки устанавливаем модуль "Фильтр товаров" и нажимаем "Изменить". Создаем опцию, добавляем значения и выбираем категорию товаров для данной опции. Сохраняем. Заходим в товары, выбираем товар из той категории которой мы присвоили опцию. И в появившейся закладке "Опции фильтра" выбираем необходимое значение. Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 5 грудня 2010 Share Опубліковано: 5 грудня 2010 ребят, предложение по улучшению функционала: сделать не только логическое ИЛИ (или то, или то), но и логическое И (и то, и то обязательно) при фильтрации в категории по свойствам товара. да, согласен надо бы переделать логику, чтобы выборка шла не сплошь по значениям опций, а как-то с группировкой опций: выбрать все продукты, у которых ( option_id_1 [value_id = 2 OR value_id = 3 OR value_id = 7] ) AND ( option_id_4 [value_id = 2 OR value_id = 4 OR value_id = 5] ) AND ( option_id_N [value_id = n OR value_id = n OR value_id = n] ) UPDдумаю стоит посмотреть в сторону UNION, но тут прийдется править вывод опций, сбор/отправку их значений и обработку далее в скриптах... :o А опцию выбора И/ИЛИ внести в админку например https://opencartforum.com/public/style_emoticons/default/icon_arrow.gif мне кажется, что это будет очень полезной штукой над этим можно задуматься позже - сначала надо попробовать реализовать такой функционал. Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 7 грудня 2010 Share Опубліковано: 7 грудня 2010 (змінено) Options Update BUG не знаю, почему не видел этот баг раньше, но вот столкнулся: исходные данные: - чистая установка OpenCart 1.4.9.1; - установленный вручную модуль. для дальнейшего усовершенствования модуля забиты такие опции: Действия: решил, что для "Phones & PDAs" маловато вариантов разрешения экрана и хотел было добавить дополнительный вариант "480 x 800". в итоге получил: Error: Duplicate entry '10' for key 1 Error No: 1062 INSERT INTO category_option_value SET option_id = '3', value_id = '10'на скрине ниже (над текстом ошибки) виден кусок вывода отладочной информации.уже поковырялся и добавил в admin / model / catalog / filter.php / public function updateOption($option_id, $data) {} print " <strong>public function updateOption($option_id, $data) {}</strong> <pre>"; print_r($data); print "</pre>"; в этой функции есть такой участок: $this->db->query("DELETE FROM " . DB_PREFIX . "category_option_value WHERE option_id = '" . (int)$option_id . "'"); $this->db->query("DELETE FROM " . DB_PREFIX . "category_option_value_description WHERE option_id = '" . (int)$option_id . "'"); if (isset($data['option_value'])) { foreach ($data['option_value'] as $value_id => $option_value) { $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value SET option_id = '" . (int)$option_id . "', value_id = '" . (int)$value_id . "'"); foreach ($option_value['language'] as $language_id => $language) { $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value_description SET value_id = '" . (int)$value_id . "', option_id = '" . (int)$option_id . "', language_id = '" . (int)$language_id . "', name = '" . $this->db->escape($language['name']) . "'"); } } }все, что находится здесь внутри условия if (isset($data['option_value'])) {и отдает нам указанную выше ошибку.однако корни проблемы растут малость из другого места... :? из строк <?php $option_value_row = 0; ?> ... <?php $option_value_row++; ?> ... <script type="text/javascript"><!-- ... var option_value_row = <?php echo $option_value_row; ?>; function addValue() { html = '<tr id="option_value' + option_value_row + '" class="option">'; html += '<td style="width: 170px;background-color: #F5EFD1;padding:4px;">'; <?php foreach ($languages as $language) { ?> html += '<input type="text" name="option_value[' + option_value_row + '][language][<?php echo $language['language_id']; ?>][name]" value="Значение ' + option_value_row + '" /> <img src="view/image/flags/<?php echo $language['image']; ?>" title="<?php echo $language['name']; ?>" /> '; <?php } ?> html += '</td>'; html += '<td align="center"><a onclick="removeValue(' + option_value_row + ');" class="button"><span>X</span></a></td>'; html += '</tr>'; $('#block_option').append(html); option_value_row++; } ... //--></script> в файле admin / view / template / module / filter_form.tpl .= = = Options Update FIX для себя решил проблему следующим образом: 1) файл admin / view / template / module / filter_form.tpl в функции function addValue() {} заменил строку html += '<input type="text" name="option_value[' + option_value_row + '][language][<?php echo $language['language_id']; ?>][name]" value="Значение ' + option_value_row + '" /> <img src="view/image/flags/<?php echo $language['image']; ?>" title="<?php echo $language['name']; ?>" /> ';на html += '<input type="text" name="option_value[' + option_value_row + '_new][language][<?php echo $language['language_id']; ?>][name]" value="Значение ' + option_value_row + '_new" /> <img src="view/image/flags/<?php echo $language['image']; ?>" title="<?php echo $language['name']; ?>" /> ';т.е. просто добавил "_new" в генерируемый для новых значений value_id2) файл admin / model / catalog / filter.php в функции public function updateOption($option_id, $data) {} заменил строку $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value SET option_id = '" . (int)$option_id . "', value_id = '" . (int)$value_id . "'");на $new_value_pos = strpos($value_id, "new"); if ($new_value_pos !== false) { $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value SET option_id = '" . (int)$option_id . "'"); $value_id = $this->db->getLastId(); } else { $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value SET option_id = '" . (int)$option_id . "', value_id = '" . (int)$value_id . "'"); } теперь у меня при сохранении значений опций проводится проверка значения "value_id" на предмет содержания текста "new".и если вхождение есть - то выполняем кусок кода, взятый из функции public function addOption($data) {} для вставки именно нового значения опции и получения value_id этого значения. иначе - используется существующий value_id, который, собсно, и был передан в функцию. = = = у кого есть такая проблема - попробуйте пофиксить моим способом :roll: у кого была такая проблема - поделитесь, пожалуйста, своим решением ;) у кого нет и небыло - вам можно только позавидовать :D Змінено 7 січня 2011 користувачем afwollis 1 Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 7 грудня 2010 Share Опубліковано: 7 грудня 2010 ...но вернемся к нашим "баранам" - проблема с фильтром в IE. не работает ни в одной версии из тех, что я проверял ( :roll: 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(); });... пересмотрел свою позицию насчет правки данного кода (: просто "разъединил" обработку действий $('#filters select').live('change', function() { effects('', 'jump', 'icon', 200); //effects('in', 'fade', 'load', 300); loadContent(); }); $('#filters input').live('click', function() { effects('', 'jump', 'icon', 200); //effects('in', 'fade', 'load', 300); loadContent(); });обратите внимание на $('#filters input').live('click', function() { UPD вот уж не знаю, что,где и когда провтыкал, но сейчас у меня IE (чтоб его ###) не работает с этим кодом /* $('#filters select').live('change', function() { effects('', 'jump', 'icon', 200); //effects('in', 'fade', 'load', 300); loadContent(); }); */поэтому я его закомментировал (у меня используются только checkbox`ы) :? = = = кто-нибудь думал над реализацией функционала, упомянутого в сообщении ;) https://opencartforum.com/viewtopic.php?f=21&t=876&start=60#p7846 Надіслати Поділитися на інших сайтах More sharing options... wowkas Опубліковано: 10 грудня 2010 Share Опубліковано: 10 грудня 2010 Тоже все без ошибок работает, кроме назначения товару определенных свойств. Но тут скорее внутренний конфликт. Если есть две группы фильтров, в которых используются radiobuttons, то товару прибивается только одно свойство, а не отдельное в каждой группе. Т.е. например есть: Фильтр 1 - зн1 - зн2 Фильтр 2 - зн3 - зн4 Товару нельзя выбрать зн1 и зн3 сразу. А только что-то одно. Или это уже поправили и мне стоит установить модуль заново? :D А кто решил вот эту проблему? у самого возникла, раньше как-то не замечал, а тут заметил... Или у всех работает выборка по двум фильтрам? Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 12 грудня 2010 Share Опубліковано: 12 грудня 2010 (змінено) Я решил эту проблему. Сразу после того, как её опубликовали: :) https://opencartforum.com/viewtopic.php?f=21&t=876&start=50#p7701 Змінено 7 січня 2011 користувачем afwollis Надіслати Поділитися на інших сайтах More sharing options... wowkas Опубліковано: 13 грудня 2010 Share Опубліковано: 13 грудня 2010 Я делал это действие, нечего не изменилось... Потому и спросил повторно... Кроме как просто заменить эти строчки, больше нечего не нужно делать? Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 13 грудня 2010 Share Опубліковано: 13 грудня 2010 (змінено) Я делал это действие, нечего не изменилось... wowkas, вот с этого и надо было начинать. Я вроде ничего больше не делал - теперь уже и не знаю =) Могу предложить два варианта: 1) проверьте на всякий случай файл admin/view/template/catalog/get_ajax_options.tpl тут про checkbox`ы ... <?php } else if ($category_option['type'] == 1) { ?> <?php if ($category_option['category_option_values']) { ?> <?php foreach ($category_option['category_option_values'] as $category_option_value) { ?> <?php if (in_array($category_option_value['value_id'], $product_to_value_id)) { ?> <label><input type="radio" name="product_to_value_id[<?php echo $category_option['option_id']; ?>]" value="<?php echo $category_option_value['value_id']; ?>" checked="checked" /> <?php echo $category_option_value['language'][$language_id]['name']; ?></label> <?php } else { ?> <label><input type="radio" name="product_to_value_id[<?php echo $category_option['option_id']; ?>]" value="<?php echo $category_option_value['value_id']; ?>" /> <?php echo $category_option_value['language'][$language_id]['name']; ?></label> <?php } ?> <?php } ?> <?php } ?> <?php } else if ($category_option['type'] == 2) { ?> ... тут про select имя radio-input`a обязательно должно быть вида name="product_to_value_id[<?php echo $category_option['option_id']; ?>]"именно благодаря <?php echo $category_option['option_id']; ?>имя становится уникальным - ведь у разных групп разные option_id. а "навигация" между radio-input`ами происходит как раз по имени.2) перекачать архив, поставить вручную и сделать FIX, который я предложил. Змінено 7 січня 2011 користувачем afwollis Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 3 4 5 6 7 8 Вперед Сторінка 3 з 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 і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
afwollis Опубліковано: 3 грудня 2010 Share Опубліковано: 3 грудня 2010 "даешь IE" или "что-то не работает" XP SP3 7.0.5730.13 поставил кроме всего прочего IETester (http://www.my-debugbar.com/wiki/) - та же картина. кроме того, есть информация, что вобще ни в одной версии IE не работает. кто тестил? какие результаты? мысли? сейчас думаю чем искать причину. но, думаю, проблема в реализации $('#content').load('index.php?route=product/get_ajax_products&path=20&values=' + $values, function(response, status, xhr){ if (status == "error") { error(xhr.status + " " + xhr.statusText); } else { //effects('out', 'fade', 'load', 200); } });попробую переписать на что-то типа jQuery.ajax({ data: inputs.join('&'), url: "index.php?route=product/get_ajax_products&path=20&values=" + $values, timeout: 2000, error: function() { //console.log("Failed to submit"); alert("Failed to submit"); }, success: function(r) { //alert(r); $('#content').html(r); } }) // checkout http://jquery.com/api for more syntax and options on this method.ибо данный код исправно работает в четырех основных браузерах:opera 10.10, iceweasel 3.5.14 (mozilla), gChrome 6.?, IE (7,8 tested)... Надіслати Поділитися на інших сайтах More sharing options... deim Опубліковано: 3 грудня 2010 Share Опубліковано: 3 грудня 2010 отличный модуль :( и главное - очень вовремя :D ребят, предложение по улучшению функционала: сделать не только логическое ИЛИ (или то, или то), но и логическое И (и то, и то обязательно) при фильтрации в категории по свойствам товара. А опцию выбора И/ИЛИ внести в админку например :) мне кажется, что это будет очень полезной штукой Надіслати Поділитися на інших сайтах More sharing options... SooR Опубліковано: 3 грудня 2010 Share Опубліковано: 3 грудня 2010 да у нас все отлично =) вы и так уже много сделали, отдав в паблик такой модуль. теперь можем "допиливать" его общими усилиями. имхо: не обязательно делать установку таблиц через админку. ...Сейчас разбираюсь с софтом в связи с заменой ос...что на что сменили, если не секрет? :)Да на макось.Но начинаю понимать, что она в идеале подходит под медиа а коммуникации, общение, но не под веб девелоп, к сожалению Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 4 грудня 2010 Share Опубліковано: 4 грудня 2010 (змінено) 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();"в итоге получилось так: остатки оригинального кода <script type="text/javascript"><!-- /* $('#filters input, #filters select').live('change', function() { effects('', 'jump', 'icon', 200); loadContent(); alert("IE test _live change_"); markFilterOption(); }); */ // Handling inputs in filter and getting results /* function loadContent() { var $values = ''; var $fields = $("#filters input, #filters select").serializeArray(); jQuery.each($fields, function(i, $field){ if (i == 0) { $values += $field.value; } else if ($field.value == '') { $values += ''; } else { $values += '_' + $field.value; } }); $('#content').load('index.php?route=product/get_ajax_products&path=<?php echo $path; ?>&values=' + $values, function(response, status, xhr){ if (status == "error") { error(xhr.status + " " + xhr.statusText); } else { //effects('out', 'fade', 'load', 200); } }); } */ // Preloader Effects function effects(way, type, el, dur) { el = $('#' + el); el.parent().css({'position' : 'relative'}); if (type == 'fade') { if (way == 'in') { el.fadeIn(dur); } else { el.fadeOut(dur); } } if (type == 'jump') { el.css({'position' : 'relative'}); el.animate({top: '-=2px'}, dur).animate({top: '+=5px'}, dur).animate({top: '-=5px'}, dur).animate({top: '+=2px'}, dur); } } // If jQuery didn't loaded something function error(mess) { var msg = "Error loading: "; $("#filters").prepend(msg + mess); } //--></script> собсно код, который сейчас отвечает за работу фильтра (комментарии в коде "малость не отсюда", ибо этот код я взял на каком-то сайте, потом правил, потом использовал на локальном небольшом проекте и только потом впихнул в модуль фильтра :D ) <script type="text/javascript" charset="utf-8"> // let's start the jQuery while I wait. // step 1: onload - capture the submit event on the form. //$(function() { // onload...do function markFilterOption() { effects('', 'jump', 'icon', 200); $('#filters').submit(); } $(document).ready(function () { $('#filters').submit(function() { // now we're going to capture *all* the fields in the // form and submit it via ajax. // :input is a macro that grabs all input types, select boxes // textarea, etc. Then I'm using the context of the form from // the initial '#contactForm' to narrow down our selector var $values = ''; var $fields = $("#filters input[name='value_id[]'], #filters select[name='value_id[]']").serializeArray(); jQuery.each($fields, function(i, $field){ if (i == 0) { $values += $field.value; } else if ($field.value == '') { $values += ''; } else { $values += '_' + $field.value; } }); // now if I join our inputs using '&' we'll have a query string jQuery.ajax({ data: "", url: "/index.php?route=product/get_ajax_products&path=" + some_category_id_OR_path_goes_here + "&values=" + $values, timeout: 2000, error: function() { alert("Failed to submit"); }, success: function(r) { $('#content').html(r); } }) // checkout http://jquery.com/api for more syntax and options on this method. // re-test... // by default - we'll always return false so it doesn't redirect the user. return false; }) }) </script> мой код корректно работает в: 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 Змінено 7 січня 2011 користувачем afwollis Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 4 грудня 2010 Share Опубліковано: 4 грудня 2010 свой последний вопрос решил для себя таким образом: var $filter_options_fields = $("#filters input:checked").serializeArray(); jQuery.each($filter_options_fields, function(j, $filter_options_field){ if ($filter_options_field.name.match(/value_id[d*]/)) { //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; } } } });спасибо старой закладке (оказывается уже задавался подобным вопросом https://opencartforum.com/public/style_emoticons/default/icon_arrow.gif ) JavaScript Kit -> RegExp (regular expression) object http://www.javascriptkit.com/jsref/regexp.shtml Надіслати Поділитися на інших сайтах More sharing options... Гість Опубліковано: 4 грудня 2010 Share Опубліковано: 4 грудня 2010 А теперь можно выложить модуль с уже пофиксиными файлами и свежим манулом https://opencartforum.com/public/style_emoticons/default/icon_arrow.gif Заранее спасибо. Сам модуль пока у себя не активировал, много глюков наблюдается. Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 4 грудня 2010 Share Опубліковано: 4 грудня 2010 А теперь можно выложить модуль с уже пофиксиными файлами и свежим манулом...вот тут к сожалению помочь не могу :o ибо пиляю его под жесткие условия. ...Сам модуль пока у себя не активировал...значит не столкнулись еще с какими-либо сложностями.с чем я вас и могу поздравить :? все, нижеизложенное, является толстым "имхо`м" и не претендует на трактование оного, как единственно верного ответа лепить "наобум" новую альфу|бету|что-то_еще из имеющихся фиксов, мыслей, пожеланий - в данный момент - неразумно. если бы было больше информации от всех, кто использует этот модуль, тогда глядишь и подтянется новая|пофиксеная|улучшенная версия модуля|мануала... до тех пор, имхо, имеют место быть лишь ответы/апдейты на конкретные ошибки, у конкретных пользователей :? https://opencartforum.com/public/style_emoticons/default/icon_arrow.gif Надіслати Поділитися на інших сайтах More sharing options... liftex Опубліковано: 4 грудня 2010 Share Опубліковано: 4 грудня 2010 Исправил замеченные мной ошибки в скрипте: Делаем SQL запрос в БД при стандартном перфиксе 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; Распаковываем архив, заменяя файлы. (установка на чистый ocstore_v0.1.4) Из админки устанавливаем модуль "Фильтр товаров" и нажимаем "Изменить". Создаем опцию, добавляем значения и выбираем категорию товаров для данной опции. Сохраняем. Заходим в товары, выбираем товар из той категории которой мы присвоили опцию. И в появившейся закладке "Опции фильтра" выбираем необходимое значение. Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 5 грудня 2010 Share Опубліковано: 5 грудня 2010 ребят, предложение по улучшению функционала: сделать не только логическое ИЛИ (или то, или то), но и логическое И (и то, и то обязательно) при фильтрации в категории по свойствам товара. да, согласен надо бы переделать логику, чтобы выборка шла не сплошь по значениям опций, а как-то с группировкой опций: выбрать все продукты, у которых ( option_id_1 [value_id = 2 OR value_id = 3 OR value_id = 7] ) AND ( option_id_4 [value_id = 2 OR value_id = 4 OR value_id = 5] ) AND ( option_id_N [value_id = n OR value_id = n OR value_id = n] ) UPDдумаю стоит посмотреть в сторону UNION, но тут прийдется править вывод опций, сбор/отправку их значений и обработку далее в скриптах... :o А опцию выбора И/ИЛИ внести в админку например https://opencartforum.com/public/style_emoticons/default/icon_arrow.gif мне кажется, что это будет очень полезной штукой над этим можно задуматься позже - сначала надо попробовать реализовать такой функционал. Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 7 грудня 2010 Share Опубліковано: 7 грудня 2010 (змінено) Options Update BUG не знаю, почему не видел этот баг раньше, но вот столкнулся: исходные данные: - чистая установка OpenCart 1.4.9.1; - установленный вручную модуль. для дальнейшего усовершенствования модуля забиты такие опции: Действия: решил, что для "Phones & PDAs" маловато вариантов разрешения экрана и хотел было добавить дополнительный вариант "480 x 800". в итоге получил: Error: Duplicate entry '10' for key 1 Error No: 1062 INSERT INTO category_option_value SET option_id = '3', value_id = '10'на скрине ниже (над текстом ошибки) виден кусок вывода отладочной информации.уже поковырялся и добавил в admin / model / catalog / filter.php / public function updateOption($option_id, $data) {} print " <strong>public function updateOption($option_id, $data) {}</strong> <pre>"; print_r($data); print "</pre>"; в этой функции есть такой участок: $this->db->query("DELETE FROM " . DB_PREFIX . "category_option_value WHERE option_id = '" . (int)$option_id . "'"); $this->db->query("DELETE FROM " . DB_PREFIX . "category_option_value_description WHERE option_id = '" . (int)$option_id . "'"); if (isset($data['option_value'])) { foreach ($data['option_value'] as $value_id => $option_value) { $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value SET option_id = '" . (int)$option_id . "', value_id = '" . (int)$value_id . "'"); foreach ($option_value['language'] as $language_id => $language) { $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value_description SET value_id = '" . (int)$value_id . "', option_id = '" . (int)$option_id . "', language_id = '" . (int)$language_id . "', name = '" . $this->db->escape($language['name']) . "'"); } } }все, что находится здесь внутри условия if (isset($data['option_value'])) {и отдает нам указанную выше ошибку.однако корни проблемы растут малость из другого места... :? из строк <?php $option_value_row = 0; ?> ... <?php $option_value_row++; ?> ... <script type="text/javascript"><!-- ... var option_value_row = <?php echo $option_value_row; ?>; function addValue() { html = '<tr id="option_value' + option_value_row + '" class="option">'; html += '<td style="width: 170px;background-color: #F5EFD1;padding:4px;">'; <?php foreach ($languages as $language) { ?> html += '<input type="text" name="option_value[' + option_value_row + '][language][<?php echo $language['language_id']; ?>][name]" value="Значение ' + option_value_row + '" /> <img src="view/image/flags/<?php echo $language['image']; ?>" title="<?php echo $language['name']; ?>" /> '; <?php } ?> html += '</td>'; html += '<td align="center"><a onclick="removeValue(' + option_value_row + ');" class="button"><span>X</span></a></td>'; html += '</tr>'; $('#block_option').append(html); option_value_row++; } ... //--></script> в файле admin / view / template / module / filter_form.tpl .= = = Options Update FIX для себя решил проблему следующим образом: 1) файл admin / view / template / module / filter_form.tpl в функции function addValue() {} заменил строку html += '<input type="text" name="option_value[' + option_value_row + '][language][<?php echo $language['language_id']; ?>][name]" value="Значение ' + option_value_row + '" /> <img src="view/image/flags/<?php echo $language['image']; ?>" title="<?php echo $language['name']; ?>" /> ';на html += '<input type="text" name="option_value[' + option_value_row + '_new][language][<?php echo $language['language_id']; ?>][name]" value="Значение ' + option_value_row + '_new" /> <img src="view/image/flags/<?php echo $language['image']; ?>" title="<?php echo $language['name']; ?>" /> ';т.е. просто добавил "_new" в генерируемый для новых значений value_id2) файл admin / model / catalog / filter.php в функции public function updateOption($option_id, $data) {} заменил строку $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value SET option_id = '" . (int)$option_id . "', value_id = '" . (int)$value_id . "'");на $new_value_pos = strpos($value_id, "new"); if ($new_value_pos !== false) { $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value SET option_id = '" . (int)$option_id . "'"); $value_id = $this->db->getLastId(); } else { $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value SET option_id = '" . (int)$option_id . "', value_id = '" . (int)$value_id . "'"); } теперь у меня при сохранении значений опций проводится проверка значения "value_id" на предмет содержания текста "new".и если вхождение есть - то выполняем кусок кода, взятый из функции public function addOption($data) {} для вставки именно нового значения опции и получения value_id этого значения. иначе - используется существующий value_id, который, собсно, и был передан в функцию. = = = у кого есть такая проблема - попробуйте пофиксить моим способом :roll: у кого была такая проблема - поделитесь, пожалуйста, своим решением ;) у кого нет и небыло - вам можно только позавидовать :D Змінено 7 січня 2011 користувачем afwollis 1 Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 7 грудня 2010 Share Опубліковано: 7 грудня 2010 ...но вернемся к нашим "баранам" - проблема с фильтром в IE. не работает ни в одной версии из тех, что я проверял ( :roll: 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(); });... пересмотрел свою позицию насчет правки данного кода (: просто "разъединил" обработку действий $('#filters select').live('change', function() { effects('', 'jump', 'icon', 200); //effects('in', 'fade', 'load', 300); loadContent(); }); $('#filters input').live('click', function() { effects('', 'jump', 'icon', 200); //effects('in', 'fade', 'load', 300); loadContent(); });обратите внимание на $('#filters input').live('click', function() { UPD вот уж не знаю, что,где и когда провтыкал, но сейчас у меня IE (чтоб его ###) не работает с этим кодом /* $('#filters select').live('change', function() { effects('', 'jump', 'icon', 200); //effects('in', 'fade', 'load', 300); loadContent(); }); */поэтому я его закомментировал (у меня используются только checkbox`ы) :? = = = кто-нибудь думал над реализацией функционала, упомянутого в сообщении ;) https://opencartforum.com/viewtopic.php?f=21&t=876&start=60#p7846 Надіслати Поділитися на інших сайтах More sharing options... wowkas Опубліковано: 10 грудня 2010 Share Опубліковано: 10 грудня 2010 Тоже все без ошибок работает, кроме назначения товару определенных свойств. Но тут скорее внутренний конфликт. Если есть две группы фильтров, в которых используются radiobuttons, то товару прибивается только одно свойство, а не отдельное в каждой группе. Т.е. например есть: Фильтр 1 - зн1 - зн2 Фильтр 2 - зн3 - зн4 Товару нельзя выбрать зн1 и зн3 сразу. А только что-то одно. Или это уже поправили и мне стоит установить модуль заново? :D А кто решил вот эту проблему? у самого возникла, раньше как-то не замечал, а тут заметил... Или у всех работает выборка по двум фильтрам? Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 12 грудня 2010 Share Опубліковано: 12 грудня 2010 (змінено) Я решил эту проблему. Сразу после того, как её опубликовали: :) https://opencartforum.com/viewtopic.php?f=21&t=876&start=50#p7701 Змінено 7 січня 2011 користувачем afwollis Надіслати Поділитися на інших сайтах More sharing options... wowkas Опубліковано: 13 грудня 2010 Share Опубліковано: 13 грудня 2010 Я делал это действие, нечего не изменилось... Потому и спросил повторно... Кроме как просто заменить эти строчки, больше нечего не нужно делать? Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 13 грудня 2010 Share Опубліковано: 13 грудня 2010 (змінено) Я делал это действие, нечего не изменилось... wowkas, вот с этого и надо было начинать. Я вроде ничего больше не делал - теперь уже и не знаю =) Могу предложить два варианта: 1) проверьте на всякий случай файл admin/view/template/catalog/get_ajax_options.tpl тут про checkbox`ы ... <?php } else if ($category_option['type'] == 1) { ?> <?php if ($category_option['category_option_values']) { ?> <?php foreach ($category_option['category_option_values'] as $category_option_value) { ?> <?php if (in_array($category_option_value['value_id'], $product_to_value_id)) { ?> <label><input type="radio" name="product_to_value_id[<?php echo $category_option['option_id']; ?>]" value="<?php echo $category_option_value['value_id']; ?>" checked="checked" /> <?php echo $category_option_value['language'][$language_id]['name']; ?></label> <?php } else { ?> <label><input type="radio" name="product_to_value_id[<?php echo $category_option['option_id']; ?>]" value="<?php echo $category_option_value['value_id']; ?>" /> <?php echo $category_option_value['language'][$language_id]['name']; ?></label> <?php } ?> <?php } ?> <?php } ?> <?php } else if ($category_option['type'] == 2) { ?> ... тут про select имя radio-input`a обязательно должно быть вида name="product_to_value_id[<?php echo $category_option['option_id']; ?>]"именно благодаря <?php echo $category_option['option_id']; ?>имя становится уникальным - ведь у разных групп разные option_id. а "навигация" между radio-input`ами происходит как раз по имени.2) перекачать архив, поставить вручную и сделать FIX, который я предложил. Змінено 7 січня 2011 користувачем afwollis Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 3 4 5 6 7 8 Вперед Сторінка 3 з 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 і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
deim Опубліковано: 3 грудня 2010 Share Опубліковано: 3 грудня 2010 отличный модуль :( и главное - очень вовремя :D ребят, предложение по улучшению функционала: сделать не только логическое ИЛИ (или то, или то), но и логическое И (и то, и то обязательно) при фильтрации в категории по свойствам товара. А опцию выбора И/ИЛИ внести в админку например :) мне кажется, что это будет очень полезной штукой Надіслати Поділитися на інших сайтах More sharing options... SooR Опубліковано: 3 грудня 2010 Share Опубліковано: 3 грудня 2010 да у нас все отлично =) вы и так уже много сделали, отдав в паблик такой модуль. теперь можем "допиливать" его общими усилиями. имхо: не обязательно делать установку таблиц через админку. ...Сейчас разбираюсь с софтом в связи с заменой ос...что на что сменили, если не секрет? :)Да на макось.Но начинаю понимать, что она в идеале подходит под медиа а коммуникации, общение, но не под веб девелоп, к сожалению Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 4 грудня 2010 Share Опубліковано: 4 грудня 2010 (змінено) 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();"в итоге получилось так: остатки оригинального кода <script type="text/javascript"><!-- /* $('#filters input, #filters select').live('change', function() { effects('', 'jump', 'icon', 200); loadContent(); alert("IE test _live change_"); markFilterOption(); }); */ // Handling inputs in filter and getting results /* function loadContent() { var $values = ''; var $fields = $("#filters input, #filters select").serializeArray(); jQuery.each($fields, function(i, $field){ if (i == 0) { $values += $field.value; } else if ($field.value == '') { $values += ''; } else { $values += '_' + $field.value; } }); $('#content').load('index.php?route=product/get_ajax_products&path=<?php echo $path; ?>&values=' + $values, function(response, status, xhr){ if (status == "error") { error(xhr.status + " " + xhr.statusText); } else { //effects('out', 'fade', 'load', 200); } }); } */ // Preloader Effects function effects(way, type, el, dur) { el = $('#' + el); el.parent().css({'position' : 'relative'}); if (type == 'fade') { if (way == 'in') { el.fadeIn(dur); } else { el.fadeOut(dur); } } if (type == 'jump') { el.css({'position' : 'relative'}); el.animate({top: '-=2px'}, dur).animate({top: '+=5px'}, dur).animate({top: '-=5px'}, dur).animate({top: '+=2px'}, dur); } } // If jQuery didn't loaded something function error(mess) { var msg = "Error loading: "; $("#filters").prepend(msg + mess); } //--></script> собсно код, который сейчас отвечает за работу фильтра (комментарии в коде "малость не отсюда", ибо этот код я взял на каком-то сайте, потом правил, потом использовал на локальном небольшом проекте и только потом впихнул в модуль фильтра :D ) <script type="text/javascript" charset="utf-8"> // let's start the jQuery while I wait. // step 1: onload - capture the submit event on the form. //$(function() { // onload...do function markFilterOption() { effects('', 'jump', 'icon', 200); $('#filters').submit(); } $(document).ready(function () { $('#filters').submit(function() { // now we're going to capture *all* the fields in the // form and submit it via ajax. // :input is a macro that grabs all input types, select boxes // textarea, etc. Then I'm using the context of the form from // the initial '#contactForm' to narrow down our selector var $values = ''; var $fields = $("#filters input[name='value_id[]'], #filters select[name='value_id[]']").serializeArray(); jQuery.each($fields, function(i, $field){ if (i == 0) { $values += $field.value; } else if ($field.value == '') { $values += ''; } else { $values += '_' + $field.value; } }); // now if I join our inputs using '&' we'll have a query string jQuery.ajax({ data: "", url: "/index.php?route=product/get_ajax_products&path=" + some_category_id_OR_path_goes_here + "&values=" + $values, timeout: 2000, error: function() { alert("Failed to submit"); }, success: function(r) { $('#content').html(r); } }) // checkout http://jquery.com/api for more syntax and options on this method. // re-test... // by default - we'll always return false so it doesn't redirect the user. return false; }) }) </script> мой код корректно работает в: 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 Змінено 7 січня 2011 користувачем afwollis Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 4 грудня 2010 Share Опубліковано: 4 грудня 2010 свой последний вопрос решил для себя таким образом: var $filter_options_fields = $("#filters input:checked").serializeArray(); jQuery.each($filter_options_fields, function(j, $filter_options_field){ if ($filter_options_field.name.match(/value_id[d*]/)) { //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; } } } });спасибо старой закладке (оказывается уже задавался подобным вопросом https://opencartforum.com/public/style_emoticons/default/icon_arrow.gif ) JavaScript Kit -> RegExp (regular expression) object http://www.javascriptkit.com/jsref/regexp.shtml Надіслати Поділитися на інших сайтах More sharing options... Гість Опубліковано: 4 грудня 2010 Share Опубліковано: 4 грудня 2010 А теперь можно выложить модуль с уже пофиксиными файлами и свежим манулом https://opencartforum.com/public/style_emoticons/default/icon_arrow.gif Заранее спасибо. Сам модуль пока у себя не активировал, много глюков наблюдается. Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 4 грудня 2010 Share Опубліковано: 4 грудня 2010 А теперь можно выложить модуль с уже пофиксиными файлами и свежим манулом...вот тут к сожалению помочь не могу :o ибо пиляю его под жесткие условия. ...Сам модуль пока у себя не активировал...значит не столкнулись еще с какими-либо сложностями.с чем я вас и могу поздравить :? все, нижеизложенное, является толстым "имхо`м" и не претендует на трактование оного, как единственно верного ответа лепить "наобум" новую альфу|бету|что-то_еще из имеющихся фиксов, мыслей, пожеланий - в данный момент - неразумно. если бы было больше информации от всех, кто использует этот модуль, тогда глядишь и подтянется новая|пофиксеная|улучшенная версия модуля|мануала... до тех пор, имхо, имеют место быть лишь ответы/апдейты на конкретные ошибки, у конкретных пользователей :? https://opencartforum.com/public/style_emoticons/default/icon_arrow.gif Надіслати Поділитися на інших сайтах More sharing options... liftex Опубліковано: 4 грудня 2010 Share Опубліковано: 4 грудня 2010 Исправил замеченные мной ошибки в скрипте: Делаем SQL запрос в БД при стандартном перфиксе 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; Распаковываем архив, заменяя файлы. (установка на чистый ocstore_v0.1.4) Из админки устанавливаем модуль "Фильтр товаров" и нажимаем "Изменить". Создаем опцию, добавляем значения и выбираем категорию товаров для данной опции. Сохраняем. Заходим в товары, выбираем товар из той категории которой мы присвоили опцию. И в появившейся закладке "Опции фильтра" выбираем необходимое значение. Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 5 грудня 2010 Share Опубліковано: 5 грудня 2010 ребят, предложение по улучшению функционала: сделать не только логическое ИЛИ (или то, или то), но и логическое И (и то, и то обязательно) при фильтрации в категории по свойствам товара. да, согласен надо бы переделать логику, чтобы выборка шла не сплошь по значениям опций, а как-то с группировкой опций: выбрать все продукты, у которых ( option_id_1 [value_id = 2 OR value_id = 3 OR value_id = 7] ) AND ( option_id_4 [value_id = 2 OR value_id = 4 OR value_id = 5] ) AND ( option_id_N [value_id = n OR value_id = n OR value_id = n] ) UPDдумаю стоит посмотреть в сторону UNION, но тут прийдется править вывод опций, сбор/отправку их значений и обработку далее в скриптах... :o А опцию выбора И/ИЛИ внести в админку например https://opencartforum.com/public/style_emoticons/default/icon_arrow.gif мне кажется, что это будет очень полезной штукой над этим можно задуматься позже - сначала надо попробовать реализовать такой функционал. Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 7 грудня 2010 Share Опубліковано: 7 грудня 2010 (змінено) Options Update BUG не знаю, почему не видел этот баг раньше, но вот столкнулся: исходные данные: - чистая установка OpenCart 1.4.9.1; - установленный вручную модуль. для дальнейшего усовершенствования модуля забиты такие опции: Действия: решил, что для "Phones & PDAs" маловато вариантов разрешения экрана и хотел было добавить дополнительный вариант "480 x 800". в итоге получил: Error: Duplicate entry '10' for key 1 Error No: 1062 INSERT INTO category_option_value SET option_id = '3', value_id = '10'на скрине ниже (над текстом ошибки) виден кусок вывода отладочной информации.уже поковырялся и добавил в admin / model / catalog / filter.php / public function updateOption($option_id, $data) {} print " <strong>public function updateOption($option_id, $data) {}</strong> <pre>"; print_r($data); print "</pre>"; в этой функции есть такой участок: $this->db->query("DELETE FROM " . DB_PREFIX . "category_option_value WHERE option_id = '" . (int)$option_id . "'"); $this->db->query("DELETE FROM " . DB_PREFIX . "category_option_value_description WHERE option_id = '" . (int)$option_id . "'"); if (isset($data['option_value'])) { foreach ($data['option_value'] as $value_id => $option_value) { $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value SET option_id = '" . (int)$option_id . "', value_id = '" . (int)$value_id . "'"); foreach ($option_value['language'] as $language_id => $language) { $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value_description SET value_id = '" . (int)$value_id . "', option_id = '" . (int)$option_id . "', language_id = '" . (int)$language_id . "', name = '" . $this->db->escape($language['name']) . "'"); } } }все, что находится здесь внутри условия if (isset($data['option_value'])) {и отдает нам указанную выше ошибку.однако корни проблемы растут малость из другого места... :? из строк <?php $option_value_row = 0; ?> ... <?php $option_value_row++; ?> ... <script type="text/javascript"><!-- ... var option_value_row = <?php echo $option_value_row; ?>; function addValue() { html = '<tr id="option_value' + option_value_row + '" class="option">'; html += '<td style="width: 170px;background-color: #F5EFD1;padding:4px;">'; <?php foreach ($languages as $language) { ?> html += '<input type="text" name="option_value[' + option_value_row + '][language][<?php echo $language['language_id']; ?>][name]" value="Значение ' + option_value_row + '" /> <img src="view/image/flags/<?php echo $language['image']; ?>" title="<?php echo $language['name']; ?>" /> '; <?php } ?> html += '</td>'; html += '<td align="center"><a onclick="removeValue(' + option_value_row + ');" class="button"><span>X</span></a></td>'; html += '</tr>'; $('#block_option').append(html); option_value_row++; } ... //--></script> в файле admin / view / template / module / filter_form.tpl .= = = Options Update FIX для себя решил проблему следующим образом: 1) файл admin / view / template / module / filter_form.tpl в функции function addValue() {} заменил строку html += '<input type="text" name="option_value[' + option_value_row + '][language][<?php echo $language['language_id']; ?>][name]" value="Значение ' + option_value_row + '" /> <img src="view/image/flags/<?php echo $language['image']; ?>" title="<?php echo $language['name']; ?>" /> ';на html += '<input type="text" name="option_value[' + option_value_row + '_new][language][<?php echo $language['language_id']; ?>][name]" value="Значение ' + option_value_row + '_new" /> <img src="view/image/flags/<?php echo $language['image']; ?>" title="<?php echo $language['name']; ?>" /> ';т.е. просто добавил "_new" в генерируемый для новых значений value_id2) файл admin / model / catalog / filter.php в функции public function updateOption($option_id, $data) {} заменил строку $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value SET option_id = '" . (int)$option_id . "', value_id = '" . (int)$value_id . "'");на $new_value_pos = strpos($value_id, "new"); if ($new_value_pos !== false) { $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value SET option_id = '" . (int)$option_id . "'"); $value_id = $this->db->getLastId(); } else { $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value SET option_id = '" . (int)$option_id . "', value_id = '" . (int)$value_id . "'"); } теперь у меня при сохранении значений опций проводится проверка значения "value_id" на предмет содержания текста "new".и если вхождение есть - то выполняем кусок кода, взятый из функции public function addOption($data) {} для вставки именно нового значения опции и получения value_id этого значения. иначе - используется существующий value_id, который, собсно, и был передан в функцию. = = = у кого есть такая проблема - попробуйте пофиксить моим способом :roll: у кого была такая проблема - поделитесь, пожалуйста, своим решением ;) у кого нет и небыло - вам можно только позавидовать :D Змінено 7 січня 2011 користувачем afwollis 1 Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 7 грудня 2010 Share Опубліковано: 7 грудня 2010 ...но вернемся к нашим "баранам" - проблема с фильтром в IE. не работает ни в одной версии из тех, что я проверял ( :roll: 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(); });... пересмотрел свою позицию насчет правки данного кода (: просто "разъединил" обработку действий $('#filters select').live('change', function() { effects('', 'jump', 'icon', 200); //effects('in', 'fade', 'load', 300); loadContent(); }); $('#filters input').live('click', function() { effects('', 'jump', 'icon', 200); //effects('in', 'fade', 'load', 300); loadContent(); });обратите внимание на $('#filters input').live('click', function() { UPD вот уж не знаю, что,где и когда провтыкал, но сейчас у меня IE (чтоб его ###) не работает с этим кодом /* $('#filters select').live('change', function() { effects('', 'jump', 'icon', 200); //effects('in', 'fade', 'load', 300); loadContent(); }); */поэтому я его закомментировал (у меня используются только checkbox`ы) :? = = = кто-нибудь думал над реализацией функционала, упомянутого в сообщении ;) https://opencartforum.com/viewtopic.php?f=21&t=876&start=60#p7846 Надіслати Поділитися на інших сайтах More sharing options... wowkas Опубліковано: 10 грудня 2010 Share Опубліковано: 10 грудня 2010 Тоже все без ошибок работает, кроме назначения товару определенных свойств. Но тут скорее внутренний конфликт. Если есть две группы фильтров, в которых используются radiobuttons, то товару прибивается только одно свойство, а не отдельное в каждой группе. Т.е. например есть: Фильтр 1 - зн1 - зн2 Фильтр 2 - зн3 - зн4 Товару нельзя выбрать зн1 и зн3 сразу. А только что-то одно. Или это уже поправили и мне стоит установить модуль заново? :D А кто решил вот эту проблему? у самого возникла, раньше как-то не замечал, а тут заметил... Или у всех работает выборка по двум фильтрам? Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 12 грудня 2010 Share Опубліковано: 12 грудня 2010 (змінено) Я решил эту проблему. Сразу после того, как её опубликовали: :) https://opencartforum.com/viewtopic.php?f=21&t=876&start=50#p7701 Змінено 7 січня 2011 користувачем afwollis Надіслати Поділитися на інших сайтах More sharing options... wowkas Опубліковано: 13 грудня 2010 Share Опубліковано: 13 грудня 2010 Я делал это действие, нечего не изменилось... Потому и спросил повторно... Кроме как просто заменить эти строчки, больше нечего не нужно делать? Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 13 грудня 2010 Share Опубліковано: 13 грудня 2010 (змінено) Я делал это действие, нечего не изменилось... wowkas, вот с этого и надо было начинать. Я вроде ничего больше не делал - теперь уже и не знаю =) Могу предложить два варианта: 1) проверьте на всякий случай файл admin/view/template/catalog/get_ajax_options.tpl тут про checkbox`ы ... <?php } else if ($category_option['type'] == 1) { ?> <?php if ($category_option['category_option_values']) { ?> <?php foreach ($category_option['category_option_values'] as $category_option_value) { ?> <?php if (in_array($category_option_value['value_id'], $product_to_value_id)) { ?> <label><input type="radio" name="product_to_value_id[<?php echo $category_option['option_id']; ?>]" value="<?php echo $category_option_value['value_id']; ?>" checked="checked" /> <?php echo $category_option_value['language'][$language_id]['name']; ?></label> <?php } else { ?> <label><input type="radio" name="product_to_value_id[<?php echo $category_option['option_id']; ?>]" value="<?php echo $category_option_value['value_id']; ?>" /> <?php echo $category_option_value['language'][$language_id]['name']; ?></label> <?php } ?> <?php } ?> <?php } ?> <?php } else if ($category_option['type'] == 2) { ?> ... тут про select имя radio-input`a обязательно должно быть вида name="product_to_value_id[<?php echo $category_option['option_id']; ?>]"именно благодаря <?php echo $category_option['option_id']; ?>имя становится уникальным - ведь у разных групп разные option_id. а "навигация" между radio-input`ами происходит как раз по имени.2) перекачать архив, поставить вручную и сделать FIX, который я предложил. Змінено 7 січня 2011 користувачем afwollis Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 3 4 5 6 7 8 Вперед Сторінка 3 з 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 і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
SooR Опубліковано: 3 грудня 2010 Share Опубліковано: 3 грудня 2010 да у нас все отлично =) вы и так уже много сделали, отдав в паблик такой модуль. теперь можем "допиливать" его общими усилиями. имхо: не обязательно делать установку таблиц через админку. ...Сейчас разбираюсь с софтом в связи с заменой ос...что на что сменили, если не секрет? :)Да на макось.Но начинаю понимать, что она в идеале подходит под медиа а коммуникации, общение, но не под веб девелоп, к сожалению Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 4 грудня 2010 Share Опубліковано: 4 грудня 2010 (змінено) 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();"в итоге получилось так: остатки оригинального кода <script type="text/javascript"><!-- /* $('#filters input, #filters select').live('change', function() { effects('', 'jump', 'icon', 200); loadContent(); alert("IE test _live change_"); markFilterOption(); }); */ // Handling inputs in filter and getting results /* function loadContent() { var $values = ''; var $fields = $("#filters input, #filters select").serializeArray(); jQuery.each($fields, function(i, $field){ if (i == 0) { $values += $field.value; } else if ($field.value == '') { $values += ''; } else { $values += '_' + $field.value; } }); $('#content').load('index.php?route=product/get_ajax_products&path=<?php echo $path; ?>&values=' + $values, function(response, status, xhr){ if (status == "error") { error(xhr.status + " " + xhr.statusText); } else { //effects('out', 'fade', 'load', 200); } }); } */ // Preloader Effects function effects(way, type, el, dur) { el = $('#' + el); el.parent().css({'position' : 'relative'}); if (type == 'fade') { if (way == 'in') { el.fadeIn(dur); } else { el.fadeOut(dur); } } if (type == 'jump') { el.css({'position' : 'relative'}); el.animate({top: '-=2px'}, dur).animate({top: '+=5px'}, dur).animate({top: '-=5px'}, dur).animate({top: '+=2px'}, dur); } } // If jQuery didn't loaded something function error(mess) { var msg = "Error loading: "; $("#filters").prepend(msg + mess); } //--></script> собсно код, который сейчас отвечает за работу фильтра (комментарии в коде "малость не отсюда", ибо этот код я взял на каком-то сайте, потом правил, потом использовал на локальном небольшом проекте и только потом впихнул в модуль фильтра :D ) <script type="text/javascript" charset="utf-8"> // let's start the jQuery while I wait. // step 1: onload - capture the submit event on the form. //$(function() { // onload...do function markFilterOption() { effects('', 'jump', 'icon', 200); $('#filters').submit(); } $(document).ready(function () { $('#filters').submit(function() { // now we're going to capture *all* the fields in the // form and submit it via ajax. // :input is a macro that grabs all input types, select boxes // textarea, etc. Then I'm using the context of the form from // the initial '#contactForm' to narrow down our selector var $values = ''; var $fields = $("#filters input[name='value_id[]'], #filters select[name='value_id[]']").serializeArray(); jQuery.each($fields, function(i, $field){ if (i == 0) { $values += $field.value; } else if ($field.value == '') { $values += ''; } else { $values += '_' + $field.value; } }); // now if I join our inputs using '&' we'll have a query string jQuery.ajax({ data: "", url: "/index.php?route=product/get_ajax_products&path=" + some_category_id_OR_path_goes_here + "&values=" + $values, timeout: 2000, error: function() { alert("Failed to submit"); }, success: function(r) { $('#content').html(r); } }) // checkout http://jquery.com/api for more syntax and options on this method. // re-test... // by default - we'll always return false so it doesn't redirect the user. return false; }) }) </script> мой код корректно работает в: 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 Змінено 7 січня 2011 користувачем afwollis Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 4 грудня 2010 Share Опубліковано: 4 грудня 2010 свой последний вопрос решил для себя таким образом: var $filter_options_fields = $("#filters input:checked").serializeArray(); jQuery.each($filter_options_fields, function(j, $filter_options_field){ if ($filter_options_field.name.match(/value_id[d*]/)) { //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; } } } });спасибо старой закладке (оказывается уже задавался подобным вопросом https://opencartforum.com/public/style_emoticons/default/icon_arrow.gif ) JavaScript Kit -> RegExp (regular expression) object http://www.javascriptkit.com/jsref/regexp.shtml Надіслати Поділитися на інших сайтах More sharing options... Гість Опубліковано: 4 грудня 2010 Share Опубліковано: 4 грудня 2010 А теперь можно выложить модуль с уже пофиксиными файлами и свежим манулом https://opencartforum.com/public/style_emoticons/default/icon_arrow.gif Заранее спасибо. Сам модуль пока у себя не активировал, много глюков наблюдается. Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 4 грудня 2010 Share Опубліковано: 4 грудня 2010 А теперь можно выложить модуль с уже пофиксиными файлами и свежим манулом...вот тут к сожалению помочь не могу :o ибо пиляю его под жесткие условия. ...Сам модуль пока у себя не активировал...значит не столкнулись еще с какими-либо сложностями.с чем я вас и могу поздравить :? все, нижеизложенное, является толстым "имхо`м" и не претендует на трактование оного, как единственно верного ответа лепить "наобум" новую альфу|бету|что-то_еще из имеющихся фиксов, мыслей, пожеланий - в данный момент - неразумно. если бы было больше информации от всех, кто использует этот модуль, тогда глядишь и подтянется новая|пофиксеная|улучшенная версия модуля|мануала... до тех пор, имхо, имеют место быть лишь ответы/апдейты на конкретные ошибки, у конкретных пользователей :? https://opencartforum.com/public/style_emoticons/default/icon_arrow.gif Надіслати Поділитися на інших сайтах More sharing options... liftex Опубліковано: 4 грудня 2010 Share Опубліковано: 4 грудня 2010 Исправил замеченные мной ошибки в скрипте: Делаем SQL запрос в БД при стандартном перфиксе 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; Распаковываем архив, заменяя файлы. (установка на чистый ocstore_v0.1.4) Из админки устанавливаем модуль "Фильтр товаров" и нажимаем "Изменить". Создаем опцию, добавляем значения и выбираем категорию товаров для данной опции. Сохраняем. Заходим в товары, выбираем товар из той категории которой мы присвоили опцию. И в появившейся закладке "Опции фильтра" выбираем необходимое значение. Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 5 грудня 2010 Share Опубліковано: 5 грудня 2010 ребят, предложение по улучшению функционала: сделать не только логическое ИЛИ (или то, или то), но и логическое И (и то, и то обязательно) при фильтрации в категории по свойствам товара. да, согласен надо бы переделать логику, чтобы выборка шла не сплошь по значениям опций, а как-то с группировкой опций: выбрать все продукты, у которых ( option_id_1 [value_id = 2 OR value_id = 3 OR value_id = 7] ) AND ( option_id_4 [value_id = 2 OR value_id = 4 OR value_id = 5] ) AND ( option_id_N [value_id = n OR value_id = n OR value_id = n] ) UPDдумаю стоит посмотреть в сторону UNION, но тут прийдется править вывод опций, сбор/отправку их значений и обработку далее в скриптах... :o А опцию выбора И/ИЛИ внести в админку например https://opencartforum.com/public/style_emoticons/default/icon_arrow.gif мне кажется, что это будет очень полезной штукой над этим можно задуматься позже - сначала надо попробовать реализовать такой функционал. Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 7 грудня 2010 Share Опубліковано: 7 грудня 2010 (змінено) Options Update BUG не знаю, почему не видел этот баг раньше, но вот столкнулся: исходные данные: - чистая установка OpenCart 1.4.9.1; - установленный вручную модуль. для дальнейшего усовершенствования модуля забиты такие опции: Действия: решил, что для "Phones & PDAs" маловато вариантов разрешения экрана и хотел было добавить дополнительный вариант "480 x 800". в итоге получил: Error: Duplicate entry '10' for key 1 Error No: 1062 INSERT INTO category_option_value SET option_id = '3', value_id = '10'на скрине ниже (над текстом ошибки) виден кусок вывода отладочной информации.уже поковырялся и добавил в admin / model / catalog / filter.php / public function updateOption($option_id, $data) {} print " <strong>public function updateOption($option_id, $data) {}</strong> <pre>"; print_r($data); print "</pre>"; в этой функции есть такой участок: $this->db->query("DELETE FROM " . DB_PREFIX . "category_option_value WHERE option_id = '" . (int)$option_id . "'"); $this->db->query("DELETE FROM " . DB_PREFIX . "category_option_value_description WHERE option_id = '" . (int)$option_id . "'"); if (isset($data['option_value'])) { foreach ($data['option_value'] as $value_id => $option_value) { $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value SET option_id = '" . (int)$option_id . "', value_id = '" . (int)$value_id . "'"); foreach ($option_value['language'] as $language_id => $language) { $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value_description SET value_id = '" . (int)$value_id . "', option_id = '" . (int)$option_id . "', language_id = '" . (int)$language_id . "', name = '" . $this->db->escape($language['name']) . "'"); } } }все, что находится здесь внутри условия if (isset($data['option_value'])) {и отдает нам указанную выше ошибку.однако корни проблемы растут малость из другого места... :? из строк <?php $option_value_row = 0; ?> ... <?php $option_value_row++; ?> ... <script type="text/javascript"><!-- ... var option_value_row = <?php echo $option_value_row; ?>; function addValue() { html = '<tr id="option_value' + option_value_row + '" class="option">'; html += '<td style="width: 170px;background-color: #F5EFD1;padding:4px;">'; <?php foreach ($languages as $language) { ?> html += '<input type="text" name="option_value[' + option_value_row + '][language][<?php echo $language['language_id']; ?>][name]" value="Значение ' + option_value_row + '" /> <img src="view/image/flags/<?php echo $language['image']; ?>" title="<?php echo $language['name']; ?>" /> '; <?php } ?> html += '</td>'; html += '<td align="center"><a onclick="removeValue(' + option_value_row + ');" class="button"><span>X</span></a></td>'; html += '</tr>'; $('#block_option').append(html); option_value_row++; } ... //--></script> в файле admin / view / template / module / filter_form.tpl .= = = Options Update FIX для себя решил проблему следующим образом: 1) файл admin / view / template / module / filter_form.tpl в функции function addValue() {} заменил строку html += '<input type="text" name="option_value[' + option_value_row + '][language][<?php echo $language['language_id']; ?>][name]" value="Значение ' + option_value_row + '" /> <img src="view/image/flags/<?php echo $language['image']; ?>" title="<?php echo $language['name']; ?>" /> ';на html += '<input type="text" name="option_value[' + option_value_row + '_new][language][<?php echo $language['language_id']; ?>][name]" value="Значение ' + option_value_row + '_new" /> <img src="view/image/flags/<?php echo $language['image']; ?>" title="<?php echo $language['name']; ?>" /> ';т.е. просто добавил "_new" в генерируемый для новых значений value_id2) файл admin / model / catalog / filter.php в функции public function updateOption($option_id, $data) {} заменил строку $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value SET option_id = '" . (int)$option_id . "', value_id = '" . (int)$value_id . "'");на $new_value_pos = strpos($value_id, "new"); if ($new_value_pos !== false) { $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value SET option_id = '" . (int)$option_id . "'"); $value_id = $this->db->getLastId(); } else { $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value SET option_id = '" . (int)$option_id . "', value_id = '" . (int)$value_id . "'"); } теперь у меня при сохранении значений опций проводится проверка значения "value_id" на предмет содержания текста "new".и если вхождение есть - то выполняем кусок кода, взятый из функции public function addOption($data) {} для вставки именно нового значения опции и получения value_id этого значения. иначе - используется существующий value_id, который, собсно, и был передан в функцию. = = = у кого есть такая проблема - попробуйте пофиксить моим способом :roll: у кого была такая проблема - поделитесь, пожалуйста, своим решением ;) у кого нет и небыло - вам можно только позавидовать :D Змінено 7 січня 2011 користувачем afwollis 1 Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 7 грудня 2010 Share Опубліковано: 7 грудня 2010 ...но вернемся к нашим "баранам" - проблема с фильтром в IE. не работает ни в одной версии из тех, что я проверял ( :roll: 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(); });... пересмотрел свою позицию насчет правки данного кода (: просто "разъединил" обработку действий $('#filters select').live('change', function() { effects('', 'jump', 'icon', 200); //effects('in', 'fade', 'load', 300); loadContent(); }); $('#filters input').live('click', function() { effects('', 'jump', 'icon', 200); //effects('in', 'fade', 'load', 300); loadContent(); });обратите внимание на $('#filters input').live('click', function() { UPD вот уж не знаю, что,где и когда провтыкал, но сейчас у меня IE (чтоб его ###) не работает с этим кодом /* $('#filters select').live('change', function() { effects('', 'jump', 'icon', 200); //effects('in', 'fade', 'load', 300); loadContent(); }); */поэтому я его закомментировал (у меня используются только checkbox`ы) :? = = = кто-нибудь думал над реализацией функционала, упомянутого в сообщении ;) https://opencartforum.com/viewtopic.php?f=21&t=876&start=60#p7846 Надіслати Поділитися на інших сайтах More sharing options... wowkas Опубліковано: 10 грудня 2010 Share Опубліковано: 10 грудня 2010 Тоже все без ошибок работает, кроме назначения товару определенных свойств. Но тут скорее внутренний конфликт. Если есть две группы фильтров, в которых используются radiobuttons, то товару прибивается только одно свойство, а не отдельное в каждой группе. Т.е. например есть: Фильтр 1 - зн1 - зн2 Фильтр 2 - зн3 - зн4 Товару нельзя выбрать зн1 и зн3 сразу. А только что-то одно. Или это уже поправили и мне стоит установить модуль заново? :D А кто решил вот эту проблему? у самого возникла, раньше как-то не замечал, а тут заметил... Или у всех работает выборка по двум фильтрам? Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 12 грудня 2010 Share Опубліковано: 12 грудня 2010 (змінено) Я решил эту проблему. Сразу после того, как её опубликовали: :) https://opencartforum.com/viewtopic.php?f=21&t=876&start=50#p7701 Змінено 7 січня 2011 користувачем afwollis Надіслати Поділитися на інших сайтах More sharing options... wowkas Опубліковано: 13 грудня 2010 Share Опубліковано: 13 грудня 2010 Я делал это действие, нечего не изменилось... Потому и спросил повторно... Кроме как просто заменить эти строчки, больше нечего не нужно делать? Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 13 грудня 2010 Share Опубліковано: 13 грудня 2010 (змінено) Я делал это действие, нечего не изменилось... wowkas, вот с этого и надо было начинать. Я вроде ничего больше не делал - теперь уже и не знаю =) Могу предложить два варианта: 1) проверьте на всякий случай файл admin/view/template/catalog/get_ajax_options.tpl тут про checkbox`ы ... <?php } else if ($category_option['type'] == 1) { ?> <?php if ($category_option['category_option_values']) { ?> <?php foreach ($category_option['category_option_values'] as $category_option_value) { ?> <?php if (in_array($category_option_value['value_id'], $product_to_value_id)) { ?> <label><input type="radio" name="product_to_value_id[<?php echo $category_option['option_id']; ?>]" value="<?php echo $category_option_value['value_id']; ?>" checked="checked" /> <?php echo $category_option_value['language'][$language_id]['name']; ?></label> <?php } else { ?> <label><input type="radio" name="product_to_value_id[<?php echo $category_option['option_id']; ?>]" value="<?php echo $category_option_value['value_id']; ?>" /> <?php echo $category_option_value['language'][$language_id]['name']; ?></label> <?php } ?> <?php } ?> <?php } ?> <?php } else if ($category_option['type'] == 2) { ?> ... тут про select имя radio-input`a обязательно должно быть вида name="product_to_value_id[<?php echo $category_option['option_id']; ?>]"именно благодаря <?php echo $category_option['option_id']; ?>имя становится уникальным - ведь у разных групп разные option_id. а "навигация" между radio-input`ами происходит как раз по имени.2) перекачать архив, поставить вручную и сделать FIX, который я предложил. Змінено 7 січня 2011 користувачем afwollis Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 3 4 5 6 7 8 Вперед Сторінка 3 з 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 і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
afwollis Опубліковано: 4 грудня 2010 Share Опубліковано: 4 грудня 2010 (змінено) 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();"в итоге получилось так: остатки оригинального кода <script type="text/javascript"><!-- /* $('#filters input, #filters select').live('change', function() { effects('', 'jump', 'icon', 200); loadContent(); alert("IE test _live change_"); markFilterOption(); }); */ // Handling inputs in filter and getting results /* function loadContent() { var $values = ''; var $fields = $("#filters input, #filters select").serializeArray(); jQuery.each($fields, function(i, $field){ if (i == 0) { $values += $field.value; } else if ($field.value == '') { $values += ''; } else { $values += '_' + $field.value; } }); $('#content').load('index.php?route=product/get_ajax_products&path=<?php echo $path; ?>&values=' + $values, function(response, status, xhr){ if (status == "error") { error(xhr.status + " " + xhr.statusText); } else { //effects('out', 'fade', 'load', 200); } }); } */ // Preloader Effects function effects(way, type, el, dur) { el = $('#' + el); el.parent().css({'position' : 'relative'}); if (type == 'fade') { if (way == 'in') { el.fadeIn(dur); } else { el.fadeOut(dur); } } if (type == 'jump') { el.css({'position' : 'relative'}); el.animate({top: '-=2px'}, dur).animate({top: '+=5px'}, dur).animate({top: '-=5px'}, dur).animate({top: '+=2px'}, dur); } } // If jQuery didn't loaded something function error(mess) { var msg = "Error loading: "; $("#filters").prepend(msg + mess); } //--></script> собсно код, который сейчас отвечает за работу фильтра (комментарии в коде "малость не отсюда", ибо этот код я взял на каком-то сайте, потом правил, потом использовал на локальном небольшом проекте и только потом впихнул в модуль фильтра :D ) <script type="text/javascript" charset="utf-8"> // let's start the jQuery while I wait. // step 1: onload - capture the submit event on the form. //$(function() { // onload...do function markFilterOption() { effects('', 'jump', 'icon', 200); $('#filters').submit(); } $(document).ready(function () { $('#filters').submit(function() { // now we're going to capture *all* the fields in the // form and submit it via ajax. // :input is a macro that grabs all input types, select boxes // textarea, etc. Then I'm using the context of the form from // the initial '#contactForm' to narrow down our selector var $values = ''; var $fields = $("#filters input[name='value_id[]'], #filters select[name='value_id[]']").serializeArray(); jQuery.each($fields, function(i, $field){ if (i == 0) { $values += $field.value; } else if ($field.value == '') { $values += ''; } else { $values += '_' + $field.value; } }); // now if I join our inputs using '&' we'll have a query string jQuery.ajax({ data: "", url: "/index.php?route=product/get_ajax_products&path=" + some_category_id_OR_path_goes_here + "&values=" + $values, timeout: 2000, error: function() { alert("Failed to submit"); }, success: function(r) { $('#content').html(r); } }) // checkout http://jquery.com/api for more syntax and options on this method. // re-test... // by default - we'll always return false so it doesn't redirect the user. return false; }) }) </script> мой код корректно работает в: 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 Змінено 7 січня 2011 користувачем afwollis Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 4 грудня 2010 Share Опубліковано: 4 грудня 2010 свой последний вопрос решил для себя таким образом: var $filter_options_fields = $("#filters input:checked").serializeArray(); jQuery.each($filter_options_fields, function(j, $filter_options_field){ if ($filter_options_field.name.match(/value_id[d*]/)) { //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; } } } });спасибо старой закладке (оказывается уже задавался подобным вопросом https://opencartforum.com/public/style_emoticons/default/icon_arrow.gif ) JavaScript Kit -> RegExp (regular expression) object http://www.javascriptkit.com/jsref/regexp.shtml Надіслати Поділитися на інших сайтах More sharing options... Гість Опубліковано: 4 грудня 2010 Share Опубліковано: 4 грудня 2010 А теперь можно выложить модуль с уже пофиксиными файлами и свежим манулом https://opencartforum.com/public/style_emoticons/default/icon_arrow.gif Заранее спасибо. Сам модуль пока у себя не активировал, много глюков наблюдается. Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 4 грудня 2010 Share Опубліковано: 4 грудня 2010 А теперь можно выложить модуль с уже пофиксиными файлами и свежим манулом...вот тут к сожалению помочь не могу :o ибо пиляю его под жесткие условия. ...Сам модуль пока у себя не активировал...значит не столкнулись еще с какими-либо сложностями.с чем я вас и могу поздравить :? все, нижеизложенное, является толстым "имхо`м" и не претендует на трактование оного, как единственно верного ответа лепить "наобум" новую альфу|бету|что-то_еще из имеющихся фиксов, мыслей, пожеланий - в данный момент - неразумно. если бы было больше информации от всех, кто использует этот модуль, тогда глядишь и подтянется новая|пофиксеная|улучшенная версия модуля|мануала... до тех пор, имхо, имеют место быть лишь ответы/апдейты на конкретные ошибки, у конкретных пользователей :? https://opencartforum.com/public/style_emoticons/default/icon_arrow.gif Надіслати Поділитися на інших сайтах More sharing options... liftex Опубліковано: 4 грудня 2010 Share Опубліковано: 4 грудня 2010 Исправил замеченные мной ошибки в скрипте: Делаем SQL запрос в БД при стандартном перфиксе 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; Распаковываем архив, заменяя файлы. (установка на чистый ocstore_v0.1.4) Из админки устанавливаем модуль "Фильтр товаров" и нажимаем "Изменить". Создаем опцию, добавляем значения и выбираем категорию товаров для данной опции. Сохраняем. Заходим в товары, выбираем товар из той категории которой мы присвоили опцию. И в появившейся закладке "Опции фильтра" выбираем необходимое значение. Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 5 грудня 2010 Share Опубліковано: 5 грудня 2010 ребят, предложение по улучшению функционала: сделать не только логическое ИЛИ (или то, или то), но и логическое И (и то, и то обязательно) при фильтрации в категории по свойствам товара. да, согласен надо бы переделать логику, чтобы выборка шла не сплошь по значениям опций, а как-то с группировкой опций: выбрать все продукты, у которых ( option_id_1 [value_id = 2 OR value_id = 3 OR value_id = 7] ) AND ( option_id_4 [value_id = 2 OR value_id = 4 OR value_id = 5] ) AND ( option_id_N [value_id = n OR value_id = n OR value_id = n] ) UPDдумаю стоит посмотреть в сторону UNION, но тут прийдется править вывод опций, сбор/отправку их значений и обработку далее в скриптах... :o А опцию выбора И/ИЛИ внести в админку например https://opencartforum.com/public/style_emoticons/default/icon_arrow.gif мне кажется, что это будет очень полезной штукой над этим можно задуматься позже - сначала надо попробовать реализовать такой функционал. Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 7 грудня 2010 Share Опубліковано: 7 грудня 2010 (змінено) Options Update BUG не знаю, почему не видел этот баг раньше, но вот столкнулся: исходные данные: - чистая установка OpenCart 1.4.9.1; - установленный вручную модуль. для дальнейшего усовершенствования модуля забиты такие опции: Действия: решил, что для "Phones & PDAs" маловато вариантов разрешения экрана и хотел было добавить дополнительный вариант "480 x 800". в итоге получил: Error: Duplicate entry '10' for key 1 Error No: 1062 INSERT INTO category_option_value SET option_id = '3', value_id = '10'на скрине ниже (над текстом ошибки) виден кусок вывода отладочной информации.уже поковырялся и добавил в admin / model / catalog / filter.php / public function updateOption($option_id, $data) {} print " <strong>public function updateOption($option_id, $data) {}</strong> <pre>"; print_r($data); print "</pre>"; в этой функции есть такой участок: $this->db->query("DELETE FROM " . DB_PREFIX . "category_option_value WHERE option_id = '" . (int)$option_id . "'"); $this->db->query("DELETE FROM " . DB_PREFIX . "category_option_value_description WHERE option_id = '" . (int)$option_id . "'"); if (isset($data['option_value'])) { foreach ($data['option_value'] as $value_id => $option_value) { $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value SET option_id = '" . (int)$option_id . "', value_id = '" . (int)$value_id . "'"); foreach ($option_value['language'] as $language_id => $language) { $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value_description SET value_id = '" . (int)$value_id . "', option_id = '" . (int)$option_id . "', language_id = '" . (int)$language_id . "', name = '" . $this->db->escape($language['name']) . "'"); } } }все, что находится здесь внутри условия if (isset($data['option_value'])) {и отдает нам указанную выше ошибку.однако корни проблемы растут малость из другого места... :? из строк <?php $option_value_row = 0; ?> ... <?php $option_value_row++; ?> ... <script type="text/javascript"><!-- ... var option_value_row = <?php echo $option_value_row; ?>; function addValue() { html = '<tr id="option_value' + option_value_row + '" class="option">'; html += '<td style="width: 170px;background-color: #F5EFD1;padding:4px;">'; <?php foreach ($languages as $language) { ?> html += '<input type="text" name="option_value[' + option_value_row + '][language][<?php echo $language['language_id']; ?>][name]" value="Значение ' + option_value_row + '" /> <img src="view/image/flags/<?php echo $language['image']; ?>" title="<?php echo $language['name']; ?>" /> '; <?php } ?> html += '</td>'; html += '<td align="center"><a onclick="removeValue(' + option_value_row + ');" class="button"><span>X</span></a></td>'; html += '</tr>'; $('#block_option').append(html); option_value_row++; } ... //--></script> в файле admin / view / template / module / filter_form.tpl .= = = Options Update FIX для себя решил проблему следующим образом: 1) файл admin / view / template / module / filter_form.tpl в функции function addValue() {} заменил строку html += '<input type="text" name="option_value[' + option_value_row + '][language][<?php echo $language['language_id']; ?>][name]" value="Значение ' + option_value_row + '" /> <img src="view/image/flags/<?php echo $language['image']; ?>" title="<?php echo $language['name']; ?>" /> ';на html += '<input type="text" name="option_value[' + option_value_row + '_new][language][<?php echo $language['language_id']; ?>][name]" value="Значение ' + option_value_row + '_new" /> <img src="view/image/flags/<?php echo $language['image']; ?>" title="<?php echo $language['name']; ?>" /> ';т.е. просто добавил "_new" в генерируемый для новых значений value_id2) файл admin / model / catalog / filter.php в функции public function updateOption($option_id, $data) {} заменил строку $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value SET option_id = '" . (int)$option_id . "', value_id = '" . (int)$value_id . "'");на $new_value_pos = strpos($value_id, "new"); if ($new_value_pos !== false) { $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value SET option_id = '" . (int)$option_id . "'"); $value_id = $this->db->getLastId(); } else { $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value SET option_id = '" . (int)$option_id . "', value_id = '" . (int)$value_id . "'"); } теперь у меня при сохранении значений опций проводится проверка значения "value_id" на предмет содержания текста "new".и если вхождение есть - то выполняем кусок кода, взятый из функции public function addOption($data) {} для вставки именно нового значения опции и получения value_id этого значения. иначе - используется существующий value_id, который, собсно, и был передан в функцию. = = = у кого есть такая проблема - попробуйте пофиксить моим способом :roll: у кого была такая проблема - поделитесь, пожалуйста, своим решением ;) у кого нет и небыло - вам можно только позавидовать :D Змінено 7 січня 2011 користувачем afwollis 1 Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 7 грудня 2010 Share Опубліковано: 7 грудня 2010 ...но вернемся к нашим "баранам" - проблема с фильтром в IE. не работает ни в одной версии из тех, что я проверял ( :roll: 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(); });... пересмотрел свою позицию насчет правки данного кода (: просто "разъединил" обработку действий $('#filters select').live('change', function() { effects('', 'jump', 'icon', 200); //effects('in', 'fade', 'load', 300); loadContent(); }); $('#filters input').live('click', function() { effects('', 'jump', 'icon', 200); //effects('in', 'fade', 'load', 300); loadContent(); });обратите внимание на $('#filters input').live('click', function() { UPD вот уж не знаю, что,где и когда провтыкал, но сейчас у меня IE (чтоб его ###) не работает с этим кодом /* $('#filters select').live('change', function() { effects('', 'jump', 'icon', 200); //effects('in', 'fade', 'load', 300); loadContent(); }); */поэтому я его закомментировал (у меня используются только checkbox`ы) :? = = = кто-нибудь думал над реализацией функционала, упомянутого в сообщении ;) https://opencartforum.com/viewtopic.php?f=21&t=876&start=60#p7846 Надіслати Поділитися на інших сайтах More sharing options... wowkas Опубліковано: 10 грудня 2010 Share Опубліковано: 10 грудня 2010 Тоже все без ошибок работает, кроме назначения товару определенных свойств. Но тут скорее внутренний конфликт. Если есть две группы фильтров, в которых используются radiobuttons, то товару прибивается только одно свойство, а не отдельное в каждой группе. Т.е. например есть: Фильтр 1 - зн1 - зн2 Фильтр 2 - зн3 - зн4 Товару нельзя выбрать зн1 и зн3 сразу. А только что-то одно. Или это уже поправили и мне стоит установить модуль заново? :D А кто решил вот эту проблему? у самого возникла, раньше как-то не замечал, а тут заметил... Или у всех работает выборка по двум фильтрам? Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 12 грудня 2010 Share Опубліковано: 12 грудня 2010 (змінено) Я решил эту проблему. Сразу после того, как её опубликовали: :) https://opencartforum.com/viewtopic.php?f=21&t=876&start=50#p7701 Змінено 7 січня 2011 користувачем afwollis Надіслати Поділитися на інших сайтах More sharing options... wowkas Опубліковано: 13 грудня 2010 Share Опубліковано: 13 грудня 2010 Я делал это действие, нечего не изменилось... Потому и спросил повторно... Кроме как просто заменить эти строчки, больше нечего не нужно делать? Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 13 грудня 2010 Share Опубліковано: 13 грудня 2010 (змінено) Я делал это действие, нечего не изменилось... wowkas, вот с этого и надо было начинать. Я вроде ничего больше не делал - теперь уже и не знаю =) Могу предложить два варианта: 1) проверьте на всякий случай файл admin/view/template/catalog/get_ajax_options.tpl тут про checkbox`ы ... <?php } else if ($category_option['type'] == 1) { ?> <?php if ($category_option['category_option_values']) { ?> <?php foreach ($category_option['category_option_values'] as $category_option_value) { ?> <?php if (in_array($category_option_value['value_id'], $product_to_value_id)) { ?> <label><input type="radio" name="product_to_value_id[<?php echo $category_option['option_id']; ?>]" value="<?php echo $category_option_value['value_id']; ?>" checked="checked" /> <?php echo $category_option_value['language'][$language_id]['name']; ?></label> <?php } else { ?> <label><input type="radio" name="product_to_value_id[<?php echo $category_option['option_id']; ?>]" value="<?php echo $category_option_value['value_id']; ?>" /> <?php echo $category_option_value['language'][$language_id]['name']; ?></label> <?php } ?> <?php } ?> <?php } ?> <?php } else if ($category_option['type'] == 2) { ?> ... тут про select имя radio-input`a обязательно должно быть вида name="product_to_value_id[<?php echo $category_option['option_id']; ?>]"именно благодаря <?php echo $category_option['option_id']; ?>имя становится уникальным - ведь у разных групп разные option_id. а "навигация" между radio-input`ами происходит как раз по имени.2) перекачать архив, поставить вручную и сделать FIX, который я предложил. Змінено 7 січня 2011 користувачем afwollis Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 3 4 5 6 7 8 Вперед Сторінка 3 з 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 і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
afwollis Опубліковано: 4 грудня 2010 Share Опубліковано: 4 грудня 2010 свой последний вопрос решил для себя таким образом: var $filter_options_fields = $("#filters input:checked").serializeArray(); jQuery.each($filter_options_fields, function(j, $filter_options_field){ if ($filter_options_field.name.match(/value_id[d*]/)) { //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; } } } });спасибо старой закладке (оказывается уже задавался подобным вопросом https://opencartforum.com/public/style_emoticons/default/icon_arrow.gif ) JavaScript Kit -> RegExp (regular expression) object http://www.javascriptkit.com/jsref/regexp.shtml Надіслати Поділитися на інших сайтах More sharing options... Гість Опубліковано: 4 грудня 2010 Share Опубліковано: 4 грудня 2010 А теперь можно выложить модуль с уже пофиксиными файлами и свежим манулом https://opencartforum.com/public/style_emoticons/default/icon_arrow.gif Заранее спасибо. Сам модуль пока у себя не активировал, много глюков наблюдается. Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 4 грудня 2010 Share Опубліковано: 4 грудня 2010 А теперь можно выложить модуль с уже пофиксиными файлами и свежим манулом...вот тут к сожалению помочь не могу :o ибо пиляю его под жесткие условия. ...Сам модуль пока у себя не активировал...значит не столкнулись еще с какими-либо сложностями.с чем я вас и могу поздравить :? все, нижеизложенное, является толстым "имхо`м" и не претендует на трактование оного, как единственно верного ответа лепить "наобум" новую альфу|бету|что-то_еще из имеющихся фиксов, мыслей, пожеланий - в данный момент - неразумно. если бы было больше информации от всех, кто использует этот модуль, тогда глядишь и подтянется новая|пофиксеная|улучшенная версия модуля|мануала... до тех пор, имхо, имеют место быть лишь ответы/апдейты на конкретные ошибки, у конкретных пользователей :? https://opencartforum.com/public/style_emoticons/default/icon_arrow.gif Надіслати Поділитися на інших сайтах More sharing options... liftex Опубліковано: 4 грудня 2010 Share Опубліковано: 4 грудня 2010 Исправил замеченные мной ошибки в скрипте: Делаем SQL запрос в БД при стандартном перфиксе 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; Распаковываем архив, заменяя файлы. (установка на чистый ocstore_v0.1.4) Из админки устанавливаем модуль "Фильтр товаров" и нажимаем "Изменить". Создаем опцию, добавляем значения и выбираем категорию товаров для данной опции. Сохраняем. Заходим в товары, выбираем товар из той категории которой мы присвоили опцию. И в появившейся закладке "Опции фильтра" выбираем необходимое значение. Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 5 грудня 2010 Share Опубліковано: 5 грудня 2010 ребят, предложение по улучшению функционала: сделать не только логическое ИЛИ (или то, или то), но и логическое И (и то, и то обязательно) при фильтрации в категории по свойствам товара. да, согласен надо бы переделать логику, чтобы выборка шла не сплошь по значениям опций, а как-то с группировкой опций: выбрать все продукты, у которых ( option_id_1 [value_id = 2 OR value_id = 3 OR value_id = 7] ) AND ( option_id_4 [value_id = 2 OR value_id = 4 OR value_id = 5] ) AND ( option_id_N [value_id = n OR value_id = n OR value_id = n] ) UPDдумаю стоит посмотреть в сторону UNION, но тут прийдется править вывод опций, сбор/отправку их значений и обработку далее в скриптах... :o А опцию выбора И/ИЛИ внести в админку например https://opencartforum.com/public/style_emoticons/default/icon_arrow.gif мне кажется, что это будет очень полезной штукой над этим можно задуматься позже - сначала надо попробовать реализовать такой функционал. Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 7 грудня 2010 Share Опубліковано: 7 грудня 2010 (змінено) Options Update BUG не знаю, почему не видел этот баг раньше, но вот столкнулся: исходные данные: - чистая установка OpenCart 1.4.9.1; - установленный вручную модуль. для дальнейшего усовершенствования модуля забиты такие опции: Действия: решил, что для "Phones & PDAs" маловато вариантов разрешения экрана и хотел было добавить дополнительный вариант "480 x 800". в итоге получил: Error: Duplicate entry '10' for key 1 Error No: 1062 INSERT INTO category_option_value SET option_id = '3', value_id = '10'на скрине ниже (над текстом ошибки) виден кусок вывода отладочной информации.уже поковырялся и добавил в admin / model / catalog / filter.php / public function updateOption($option_id, $data) {} print " <strong>public function updateOption($option_id, $data) {}</strong> <pre>"; print_r($data); print "</pre>"; в этой функции есть такой участок: $this->db->query("DELETE FROM " . DB_PREFIX . "category_option_value WHERE option_id = '" . (int)$option_id . "'"); $this->db->query("DELETE FROM " . DB_PREFIX . "category_option_value_description WHERE option_id = '" . (int)$option_id . "'"); if (isset($data['option_value'])) { foreach ($data['option_value'] as $value_id => $option_value) { $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value SET option_id = '" . (int)$option_id . "', value_id = '" . (int)$value_id . "'"); foreach ($option_value['language'] as $language_id => $language) { $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value_description SET value_id = '" . (int)$value_id . "', option_id = '" . (int)$option_id . "', language_id = '" . (int)$language_id . "', name = '" . $this->db->escape($language['name']) . "'"); } } }все, что находится здесь внутри условия if (isset($data['option_value'])) {и отдает нам указанную выше ошибку.однако корни проблемы растут малость из другого места... :? из строк <?php $option_value_row = 0; ?> ... <?php $option_value_row++; ?> ... <script type="text/javascript"><!-- ... var option_value_row = <?php echo $option_value_row; ?>; function addValue() { html = '<tr id="option_value' + option_value_row + '" class="option">'; html += '<td style="width: 170px;background-color: #F5EFD1;padding:4px;">'; <?php foreach ($languages as $language) { ?> html += '<input type="text" name="option_value[' + option_value_row + '][language][<?php echo $language['language_id']; ?>][name]" value="Значение ' + option_value_row + '" /> <img src="view/image/flags/<?php echo $language['image']; ?>" title="<?php echo $language['name']; ?>" /> '; <?php } ?> html += '</td>'; html += '<td align="center"><a onclick="removeValue(' + option_value_row + ');" class="button"><span>X</span></a></td>'; html += '</tr>'; $('#block_option').append(html); option_value_row++; } ... //--></script> в файле admin / view / template / module / filter_form.tpl .= = = Options Update FIX для себя решил проблему следующим образом: 1) файл admin / view / template / module / filter_form.tpl в функции function addValue() {} заменил строку html += '<input type="text" name="option_value[' + option_value_row + '][language][<?php echo $language['language_id']; ?>][name]" value="Значение ' + option_value_row + '" /> <img src="view/image/flags/<?php echo $language['image']; ?>" title="<?php echo $language['name']; ?>" /> ';на html += '<input type="text" name="option_value[' + option_value_row + '_new][language][<?php echo $language['language_id']; ?>][name]" value="Значение ' + option_value_row + '_new" /> <img src="view/image/flags/<?php echo $language['image']; ?>" title="<?php echo $language['name']; ?>" /> ';т.е. просто добавил "_new" в генерируемый для новых значений value_id2) файл admin / model / catalog / filter.php в функции public function updateOption($option_id, $data) {} заменил строку $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value SET option_id = '" . (int)$option_id . "', value_id = '" . (int)$value_id . "'");на $new_value_pos = strpos($value_id, "new"); if ($new_value_pos !== false) { $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value SET option_id = '" . (int)$option_id . "'"); $value_id = $this->db->getLastId(); } else { $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value SET option_id = '" . (int)$option_id . "', value_id = '" . (int)$value_id . "'"); } теперь у меня при сохранении значений опций проводится проверка значения "value_id" на предмет содержания текста "new".и если вхождение есть - то выполняем кусок кода, взятый из функции public function addOption($data) {} для вставки именно нового значения опции и получения value_id этого значения. иначе - используется существующий value_id, который, собсно, и был передан в функцию. = = = у кого есть такая проблема - попробуйте пофиксить моим способом :roll: у кого была такая проблема - поделитесь, пожалуйста, своим решением ;) у кого нет и небыло - вам можно только позавидовать :D Змінено 7 січня 2011 користувачем afwollis 1 Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 7 грудня 2010 Share Опубліковано: 7 грудня 2010 ...но вернемся к нашим "баранам" - проблема с фильтром в IE. не работает ни в одной версии из тех, что я проверял ( :roll: 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(); });... пересмотрел свою позицию насчет правки данного кода (: просто "разъединил" обработку действий $('#filters select').live('change', function() { effects('', 'jump', 'icon', 200); //effects('in', 'fade', 'load', 300); loadContent(); }); $('#filters input').live('click', function() { effects('', 'jump', 'icon', 200); //effects('in', 'fade', 'load', 300); loadContent(); });обратите внимание на $('#filters input').live('click', function() { UPD вот уж не знаю, что,где и когда провтыкал, но сейчас у меня IE (чтоб его ###) не работает с этим кодом /* $('#filters select').live('change', function() { effects('', 'jump', 'icon', 200); //effects('in', 'fade', 'load', 300); loadContent(); }); */поэтому я его закомментировал (у меня используются только checkbox`ы) :? = = = кто-нибудь думал над реализацией функционала, упомянутого в сообщении ;) https://opencartforum.com/viewtopic.php?f=21&t=876&start=60#p7846 Надіслати Поділитися на інших сайтах More sharing options... wowkas Опубліковано: 10 грудня 2010 Share Опубліковано: 10 грудня 2010 Тоже все без ошибок работает, кроме назначения товару определенных свойств. Но тут скорее внутренний конфликт. Если есть две группы фильтров, в которых используются radiobuttons, то товару прибивается только одно свойство, а не отдельное в каждой группе. Т.е. например есть: Фильтр 1 - зн1 - зн2 Фильтр 2 - зн3 - зн4 Товару нельзя выбрать зн1 и зн3 сразу. А только что-то одно. Или это уже поправили и мне стоит установить модуль заново? :D А кто решил вот эту проблему? у самого возникла, раньше как-то не замечал, а тут заметил... Или у всех работает выборка по двум фильтрам? Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 12 грудня 2010 Share Опубліковано: 12 грудня 2010 (змінено) Я решил эту проблему. Сразу после того, как её опубликовали: :) https://opencartforum.com/viewtopic.php?f=21&t=876&start=50#p7701 Змінено 7 січня 2011 користувачем afwollis Надіслати Поділитися на інших сайтах More sharing options... wowkas Опубліковано: 13 грудня 2010 Share Опубліковано: 13 грудня 2010 Я делал это действие, нечего не изменилось... Потому и спросил повторно... Кроме как просто заменить эти строчки, больше нечего не нужно делать? Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 13 грудня 2010 Share Опубліковано: 13 грудня 2010 (змінено) Я делал это действие, нечего не изменилось... wowkas, вот с этого и надо было начинать. Я вроде ничего больше не делал - теперь уже и не знаю =) Могу предложить два варианта: 1) проверьте на всякий случай файл admin/view/template/catalog/get_ajax_options.tpl тут про checkbox`ы ... <?php } else if ($category_option['type'] == 1) { ?> <?php if ($category_option['category_option_values']) { ?> <?php foreach ($category_option['category_option_values'] as $category_option_value) { ?> <?php if (in_array($category_option_value['value_id'], $product_to_value_id)) { ?> <label><input type="radio" name="product_to_value_id[<?php echo $category_option['option_id']; ?>]" value="<?php echo $category_option_value['value_id']; ?>" checked="checked" /> <?php echo $category_option_value['language'][$language_id]['name']; ?></label> <?php } else { ?> <label><input type="radio" name="product_to_value_id[<?php echo $category_option['option_id']; ?>]" value="<?php echo $category_option_value['value_id']; ?>" /> <?php echo $category_option_value['language'][$language_id]['name']; ?></label> <?php } ?> <?php } ?> <?php } ?> <?php } else if ($category_option['type'] == 2) { ?> ... тут про select имя radio-input`a обязательно должно быть вида name="product_to_value_id[<?php echo $category_option['option_id']; ?>]"именно благодаря <?php echo $category_option['option_id']; ?>имя становится уникальным - ведь у разных групп разные option_id. а "навигация" между radio-input`ами происходит как раз по имени.2) перекачать архив, поставить вручную и сделать FIX, который я предложил. Змінено 7 січня 2011 користувачем afwollis Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 3 4 5 6 7 8 Вперед Сторінка 3 з 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 і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
Гість Опубліковано: 4 грудня 2010 Share Опубліковано: 4 грудня 2010 А теперь можно выложить модуль с уже пофиксиными файлами и свежим манулом https://opencartforum.com/public/style_emoticons/default/icon_arrow.gif Заранее спасибо. Сам модуль пока у себя не активировал, много глюков наблюдается. Надіслати Поділитися на інших сайтах More sharing options...
afwollis Опубліковано: 4 грудня 2010 Share Опубліковано: 4 грудня 2010 А теперь можно выложить модуль с уже пофиксиными файлами и свежим манулом...вот тут к сожалению помочь не могу :o ибо пиляю его под жесткие условия. ...Сам модуль пока у себя не активировал...значит не столкнулись еще с какими-либо сложностями.с чем я вас и могу поздравить :? все, нижеизложенное, является толстым "имхо`м" и не претендует на трактование оного, как единственно верного ответа лепить "наобум" новую альфу|бету|что-то_еще из имеющихся фиксов, мыслей, пожеланий - в данный момент - неразумно. если бы было больше информации от всех, кто использует этот модуль, тогда глядишь и подтянется новая|пофиксеная|улучшенная версия модуля|мануала... до тех пор, имхо, имеют место быть лишь ответы/апдейты на конкретные ошибки, у конкретных пользователей :? https://opencartforum.com/public/style_emoticons/default/icon_arrow.gif Надіслати Поділитися на інших сайтах More sharing options... liftex Опубліковано: 4 грудня 2010 Share Опубліковано: 4 грудня 2010 Исправил замеченные мной ошибки в скрипте: Делаем SQL запрос в БД при стандартном перфиксе 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; Распаковываем архив, заменяя файлы. (установка на чистый ocstore_v0.1.4) Из админки устанавливаем модуль "Фильтр товаров" и нажимаем "Изменить". Создаем опцию, добавляем значения и выбираем категорию товаров для данной опции. Сохраняем. Заходим в товары, выбираем товар из той категории которой мы присвоили опцию. И в появившейся закладке "Опции фильтра" выбираем необходимое значение. Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 5 грудня 2010 Share Опубліковано: 5 грудня 2010 ребят, предложение по улучшению функционала: сделать не только логическое ИЛИ (или то, или то), но и логическое И (и то, и то обязательно) при фильтрации в категории по свойствам товара. да, согласен надо бы переделать логику, чтобы выборка шла не сплошь по значениям опций, а как-то с группировкой опций: выбрать все продукты, у которых ( option_id_1 [value_id = 2 OR value_id = 3 OR value_id = 7] ) AND ( option_id_4 [value_id = 2 OR value_id = 4 OR value_id = 5] ) AND ( option_id_N [value_id = n OR value_id = n OR value_id = n] ) UPDдумаю стоит посмотреть в сторону UNION, но тут прийдется править вывод опций, сбор/отправку их значений и обработку далее в скриптах... :o А опцию выбора И/ИЛИ внести в админку например https://opencartforum.com/public/style_emoticons/default/icon_arrow.gif мне кажется, что это будет очень полезной штукой над этим можно задуматься позже - сначала надо попробовать реализовать такой функционал. Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 7 грудня 2010 Share Опубліковано: 7 грудня 2010 (змінено) Options Update BUG не знаю, почему не видел этот баг раньше, но вот столкнулся: исходные данные: - чистая установка OpenCart 1.4.9.1; - установленный вручную модуль. для дальнейшего усовершенствования модуля забиты такие опции: Действия: решил, что для "Phones & PDAs" маловато вариантов разрешения экрана и хотел было добавить дополнительный вариант "480 x 800". в итоге получил: Error: Duplicate entry '10' for key 1 Error No: 1062 INSERT INTO category_option_value SET option_id = '3', value_id = '10'на скрине ниже (над текстом ошибки) виден кусок вывода отладочной информации.уже поковырялся и добавил в admin / model / catalog / filter.php / public function updateOption($option_id, $data) {} print " <strong>public function updateOption($option_id, $data) {}</strong> <pre>"; print_r($data); print "</pre>"; в этой функции есть такой участок: $this->db->query("DELETE FROM " . DB_PREFIX . "category_option_value WHERE option_id = '" . (int)$option_id . "'"); $this->db->query("DELETE FROM " . DB_PREFIX . "category_option_value_description WHERE option_id = '" . (int)$option_id . "'"); if (isset($data['option_value'])) { foreach ($data['option_value'] as $value_id => $option_value) { $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value SET option_id = '" . (int)$option_id . "', value_id = '" . (int)$value_id . "'"); foreach ($option_value['language'] as $language_id => $language) { $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value_description SET value_id = '" . (int)$value_id . "', option_id = '" . (int)$option_id . "', language_id = '" . (int)$language_id . "', name = '" . $this->db->escape($language['name']) . "'"); } } }все, что находится здесь внутри условия if (isset($data['option_value'])) {и отдает нам указанную выше ошибку.однако корни проблемы растут малость из другого места... :? из строк <?php $option_value_row = 0; ?> ... <?php $option_value_row++; ?> ... <script type="text/javascript"><!-- ... var option_value_row = <?php echo $option_value_row; ?>; function addValue() { html = '<tr id="option_value' + option_value_row + '" class="option">'; html += '<td style="width: 170px;background-color: #F5EFD1;padding:4px;">'; <?php foreach ($languages as $language) { ?> html += '<input type="text" name="option_value[' + option_value_row + '][language][<?php echo $language['language_id']; ?>][name]" value="Значение ' + option_value_row + '" /> <img src="view/image/flags/<?php echo $language['image']; ?>" title="<?php echo $language['name']; ?>" /> '; <?php } ?> html += '</td>'; html += '<td align="center"><a onclick="removeValue(' + option_value_row + ');" class="button"><span>X</span></a></td>'; html += '</tr>'; $('#block_option').append(html); option_value_row++; } ... //--></script> в файле admin / view / template / module / filter_form.tpl .= = = Options Update FIX для себя решил проблему следующим образом: 1) файл admin / view / template / module / filter_form.tpl в функции function addValue() {} заменил строку html += '<input type="text" name="option_value[' + option_value_row + '][language][<?php echo $language['language_id']; ?>][name]" value="Значение ' + option_value_row + '" /> <img src="view/image/flags/<?php echo $language['image']; ?>" title="<?php echo $language['name']; ?>" /> ';на html += '<input type="text" name="option_value[' + option_value_row + '_new][language][<?php echo $language['language_id']; ?>][name]" value="Значение ' + option_value_row + '_new" /> <img src="view/image/flags/<?php echo $language['image']; ?>" title="<?php echo $language['name']; ?>" /> ';т.е. просто добавил "_new" в генерируемый для новых значений value_id2) файл admin / model / catalog / filter.php в функции public function updateOption($option_id, $data) {} заменил строку $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value SET option_id = '" . (int)$option_id . "', value_id = '" . (int)$value_id . "'");на $new_value_pos = strpos($value_id, "new"); if ($new_value_pos !== false) { $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value SET option_id = '" . (int)$option_id . "'"); $value_id = $this->db->getLastId(); } else { $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value SET option_id = '" . (int)$option_id . "', value_id = '" . (int)$value_id . "'"); } теперь у меня при сохранении значений опций проводится проверка значения "value_id" на предмет содержания текста "new".и если вхождение есть - то выполняем кусок кода, взятый из функции public function addOption($data) {} для вставки именно нового значения опции и получения value_id этого значения. иначе - используется существующий value_id, который, собсно, и был передан в функцию. = = = у кого есть такая проблема - попробуйте пофиксить моим способом :roll: у кого была такая проблема - поделитесь, пожалуйста, своим решением ;) у кого нет и небыло - вам можно только позавидовать :D Змінено 7 січня 2011 користувачем afwollis 1 Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 7 грудня 2010 Share Опубліковано: 7 грудня 2010 ...но вернемся к нашим "баранам" - проблема с фильтром в IE. не работает ни в одной версии из тех, что я проверял ( :roll: 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(); });... пересмотрел свою позицию насчет правки данного кода (: просто "разъединил" обработку действий $('#filters select').live('change', function() { effects('', 'jump', 'icon', 200); //effects('in', 'fade', 'load', 300); loadContent(); }); $('#filters input').live('click', function() { effects('', 'jump', 'icon', 200); //effects('in', 'fade', 'load', 300); loadContent(); });обратите внимание на $('#filters input').live('click', function() { UPD вот уж не знаю, что,где и когда провтыкал, но сейчас у меня IE (чтоб его ###) не работает с этим кодом /* $('#filters select').live('change', function() { effects('', 'jump', 'icon', 200); //effects('in', 'fade', 'load', 300); loadContent(); }); */поэтому я его закомментировал (у меня используются только checkbox`ы) :? = = = кто-нибудь думал над реализацией функционала, упомянутого в сообщении ;) https://opencartforum.com/viewtopic.php?f=21&t=876&start=60#p7846 Надіслати Поділитися на інших сайтах More sharing options... wowkas Опубліковано: 10 грудня 2010 Share Опубліковано: 10 грудня 2010 Тоже все без ошибок работает, кроме назначения товару определенных свойств. Но тут скорее внутренний конфликт. Если есть две группы фильтров, в которых используются radiobuttons, то товару прибивается только одно свойство, а не отдельное в каждой группе. Т.е. например есть: Фильтр 1 - зн1 - зн2 Фильтр 2 - зн3 - зн4 Товару нельзя выбрать зн1 и зн3 сразу. А только что-то одно. Или это уже поправили и мне стоит установить модуль заново? :D А кто решил вот эту проблему? у самого возникла, раньше как-то не замечал, а тут заметил... Или у всех работает выборка по двум фильтрам? Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 12 грудня 2010 Share Опубліковано: 12 грудня 2010 (змінено) Я решил эту проблему. Сразу после того, как её опубликовали: :) https://opencartforum.com/viewtopic.php?f=21&t=876&start=50#p7701 Змінено 7 січня 2011 користувачем afwollis Надіслати Поділитися на інших сайтах More sharing options... wowkas Опубліковано: 13 грудня 2010 Share Опубліковано: 13 грудня 2010 Я делал это действие, нечего не изменилось... Потому и спросил повторно... Кроме как просто заменить эти строчки, больше нечего не нужно делать? Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 13 грудня 2010 Share Опубліковано: 13 грудня 2010 (змінено) Я делал это действие, нечего не изменилось... wowkas, вот с этого и надо было начинать. Я вроде ничего больше не делал - теперь уже и не знаю =) Могу предложить два варианта: 1) проверьте на всякий случай файл admin/view/template/catalog/get_ajax_options.tpl тут про checkbox`ы ... <?php } else if ($category_option['type'] == 1) { ?> <?php if ($category_option['category_option_values']) { ?> <?php foreach ($category_option['category_option_values'] as $category_option_value) { ?> <?php if (in_array($category_option_value['value_id'], $product_to_value_id)) { ?> <label><input type="radio" name="product_to_value_id[<?php echo $category_option['option_id']; ?>]" value="<?php echo $category_option_value['value_id']; ?>" checked="checked" /> <?php echo $category_option_value['language'][$language_id]['name']; ?></label> <?php } else { ?> <label><input type="radio" name="product_to_value_id[<?php echo $category_option['option_id']; ?>]" value="<?php echo $category_option_value['value_id']; ?>" /> <?php echo $category_option_value['language'][$language_id]['name']; ?></label> <?php } ?> <?php } ?> <?php } ?> <?php } else if ($category_option['type'] == 2) { ?> ... тут про select имя radio-input`a обязательно должно быть вида name="product_to_value_id[<?php echo $category_option['option_id']; ?>]"именно благодаря <?php echo $category_option['option_id']; ?>имя становится уникальным - ведь у разных групп разные option_id. а "навигация" между radio-input`ами происходит как раз по имени.2) перекачать архив, поставить вручную и сделать FIX, который я предложил. Змінено 7 січня 2011 користувачем afwollis Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 3 4 5 6 7 8 Вперед Сторінка 3 з 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 і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
liftex Опубліковано: 4 грудня 2010 Share Опубліковано: 4 грудня 2010 Исправил замеченные мной ошибки в скрипте: Делаем SQL запрос в БД при стандартном перфиксе 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; Распаковываем архив, заменяя файлы. (установка на чистый ocstore_v0.1.4) Из админки устанавливаем модуль "Фильтр товаров" и нажимаем "Изменить". Создаем опцию, добавляем значения и выбираем категорию товаров для данной опции. Сохраняем. Заходим в товары, выбираем товар из той категории которой мы присвоили опцию. И в появившейся закладке "Опции фильтра" выбираем необходимое значение. Надіслати Поділитися на інших сайтах More sharing options...
afwollis Опубліковано: 5 грудня 2010 Share Опубліковано: 5 грудня 2010 ребят, предложение по улучшению функционала: сделать не только логическое ИЛИ (или то, или то), но и логическое И (и то, и то обязательно) при фильтрации в категории по свойствам товара. да, согласен надо бы переделать логику, чтобы выборка шла не сплошь по значениям опций, а как-то с группировкой опций: выбрать все продукты, у которых ( option_id_1 [value_id = 2 OR value_id = 3 OR value_id = 7] ) AND ( option_id_4 [value_id = 2 OR value_id = 4 OR value_id = 5] ) AND ( option_id_N [value_id = n OR value_id = n OR value_id = n] ) UPDдумаю стоит посмотреть в сторону UNION, но тут прийдется править вывод опций, сбор/отправку их значений и обработку далее в скриптах... :o А опцию выбора И/ИЛИ внести в админку например https://opencartforum.com/public/style_emoticons/default/icon_arrow.gif мне кажется, что это будет очень полезной штукой над этим можно задуматься позже - сначала надо попробовать реализовать такой функционал. Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 7 грудня 2010 Share Опубліковано: 7 грудня 2010 (змінено) Options Update BUG не знаю, почему не видел этот баг раньше, но вот столкнулся: исходные данные: - чистая установка OpenCart 1.4.9.1; - установленный вручную модуль. для дальнейшего усовершенствования модуля забиты такие опции: Действия: решил, что для "Phones & PDAs" маловато вариантов разрешения экрана и хотел было добавить дополнительный вариант "480 x 800". в итоге получил: Error: Duplicate entry '10' for key 1 Error No: 1062 INSERT INTO category_option_value SET option_id = '3', value_id = '10'на скрине ниже (над текстом ошибки) виден кусок вывода отладочной информации.уже поковырялся и добавил в admin / model / catalog / filter.php / public function updateOption($option_id, $data) {} print " <strong>public function updateOption($option_id, $data) {}</strong> <pre>"; print_r($data); print "</pre>"; в этой функции есть такой участок: $this->db->query("DELETE FROM " . DB_PREFIX . "category_option_value WHERE option_id = '" . (int)$option_id . "'"); $this->db->query("DELETE FROM " . DB_PREFIX . "category_option_value_description WHERE option_id = '" . (int)$option_id . "'"); if (isset($data['option_value'])) { foreach ($data['option_value'] as $value_id => $option_value) { $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value SET option_id = '" . (int)$option_id . "', value_id = '" . (int)$value_id . "'"); foreach ($option_value['language'] as $language_id => $language) { $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value_description SET value_id = '" . (int)$value_id . "', option_id = '" . (int)$option_id . "', language_id = '" . (int)$language_id . "', name = '" . $this->db->escape($language['name']) . "'"); } } }все, что находится здесь внутри условия if (isset($data['option_value'])) {и отдает нам указанную выше ошибку.однако корни проблемы растут малость из другого места... :? из строк <?php $option_value_row = 0; ?> ... <?php $option_value_row++; ?> ... <script type="text/javascript"><!-- ... var option_value_row = <?php echo $option_value_row; ?>; function addValue() { html = '<tr id="option_value' + option_value_row + '" class="option">'; html += '<td style="width: 170px;background-color: #F5EFD1;padding:4px;">'; <?php foreach ($languages as $language) { ?> html += '<input type="text" name="option_value[' + option_value_row + '][language][<?php echo $language['language_id']; ?>][name]" value="Значение ' + option_value_row + '" /> <img src="view/image/flags/<?php echo $language['image']; ?>" title="<?php echo $language['name']; ?>" /> '; <?php } ?> html += '</td>'; html += '<td align="center"><a onclick="removeValue(' + option_value_row + ');" class="button"><span>X</span></a></td>'; html += '</tr>'; $('#block_option').append(html); option_value_row++; } ... //--></script> в файле admin / view / template / module / filter_form.tpl .= = = Options Update FIX для себя решил проблему следующим образом: 1) файл admin / view / template / module / filter_form.tpl в функции function addValue() {} заменил строку html += '<input type="text" name="option_value[' + option_value_row + '][language][<?php echo $language['language_id']; ?>][name]" value="Значение ' + option_value_row + '" /> <img src="view/image/flags/<?php echo $language['image']; ?>" title="<?php echo $language['name']; ?>" /> ';на html += '<input type="text" name="option_value[' + option_value_row + '_new][language][<?php echo $language['language_id']; ?>][name]" value="Значение ' + option_value_row + '_new" /> <img src="view/image/flags/<?php echo $language['image']; ?>" title="<?php echo $language['name']; ?>" /> ';т.е. просто добавил "_new" в генерируемый для новых значений value_id2) файл admin / model / catalog / filter.php в функции public function updateOption($option_id, $data) {} заменил строку $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value SET option_id = '" . (int)$option_id . "', value_id = '" . (int)$value_id . "'");на $new_value_pos = strpos($value_id, "new"); if ($new_value_pos !== false) { $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value SET option_id = '" . (int)$option_id . "'"); $value_id = $this->db->getLastId(); } else { $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value SET option_id = '" . (int)$option_id . "', value_id = '" . (int)$value_id . "'"); } теперь у меня при сохранении значений опций проводится проверка значения "value_id" на предмет содержания текста "new".и если вхождение есть - то выполняем кусок кода, взятый из функции public function addOption($data) {} для вставки именно нового значения опции и получения value_id этого значения. иначе - используется существующий value_id, который, собсно, и был передан в функцию. = = = у кого есть такая проблема - попробуйте пофиксить моим способом :roll: у кого была такая проблема - поделитесь, пожалуйста, своим решением ;) у кого нет и небыло - вам можно только позавидовать :D Змінено 7 січня 2011 користувачем afwollis 1 Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 7 грудня 2010 Share Опубліковано: 7 грудня 2010 ...но вернемся к нашим "баранам" - проблема с фильтром в IE. не работает ни в одной версии из тех, что я проверял ( :roll: 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(); });... пересмотрел свою позицию насчет правки данного кода (: просто "разъединил" обработку действий $('#filters select').live('change', function() { effects('', 'jump', 'icon', 200); //effects('in', 'fade', 'load', 300); loadContent(); }); $('#filters input').live('click', function() { effects('', 'jump', 'icon', 200); //effects('in', 'fade', 'load', 300); loadContent(); });обратите внимание на $('#filters input').live('click', function() { UPD вот уж не знаю, что,где и когда провтыкал, но сейчас у меня IE (чтоб его ###) не работает с этим кодом /* $('#filters select').live('change', function() { effects('', 'jump', 'icon', 200); //effects('in', 'fade', 'load', 300); loadContent(); }); */поэтому я его закомментировал (у меня используются только checkbox`ы) :? = = = кто-нибудь думал над реализацией функционала, упомянутого в сообщении ;) https://opencartforum.com/viewtopic.php?f=21&t=876&start=60#p7846 Надіслати Поділитися на інших сайтах More sharing options... wowkas Опубліковано: 10 грудня 2010 Share Опубліковано: 10 грудня 2010 Тоже все без ошибок работает, кроме назначения товару определенных свойств. Но тут скорее внутренний конфликт. Если есть две группы фильтров, в которых используются radiobuttons, то товару прибивается только одно свойство, а не отдельное в каждой группе. Т.е. например есть: Фильтр 1 - зн1 - зн2 Фильтр 2 - зн3 - зн4 Товару нельзя выбрать зн1 и зн3 сразу. А только что-то одно. Или это уже поправили и мне стоит установить модуль заново? :D А кто решил вот эту проблему? у самого возникла, раньше как-то не замечал, а тут заметил... Или у всех работает выборка по двум фильтрам? Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 12 грудня 2010 Share Опубліковано: 12 грудня 2010 (змінено) Я решил эту проблему. Сразу после того, как её опубликовали: :) https://opencartforum.com/viewtopic.php?f=21&t=876&start=50#p7701 Змінено 7 січня 2011 користувачем afwollis Надіслати Поділитися на інших сайтах More sharing options... wowkas Опубліковано: 13 грудня 2010 Share Опубліковано: 13 грудня 2010 Я делал это действие, нечего не изменилось... Потому и спросил повторно... Кроме как просто заменить эти строчки, больше нечего не нужно делать? Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 13 грудня 2010 Share Опубліковано: 13 грудня 2010 (змінено) Я делал это действие, нечего не изменилось... wowkas, вот с этого и надо было начинать. Я вроде ничего больше не делал - теперь уже и не знаю =) Могу предложить два варианта: 1) проверьте на всякий случай файл admin/view/template/catalog/get_ajax_options.tpl тут про checkbox`ы ... <?php } else if ($category_option['type'] == 1) { ?> <?php if ($category_option['category_option_values']) { ?> <?php foreach ($category_option['category_option_values'] as $category_option_value) { ?> <?php if (in_array($category_option_value['value_id'], $product_to_value_id)) { ?> <label><input type="radio" name="product_to_value_id[<?php echo $category_option['option_id']; ?>]" value="<?php echo $category_option_value['value_id']; ?>" checked="checked" /> <?php echo $category_option_value['language'][$language_id]['name']; ?></label> <?php } else { ?> <label><input type="radio" name="product_to_value_id[<?php echo $category_option['option_id']; ?>]" value="<?php echo $category_option_value['value_id']; ?>" /> <?php echo $category_option_value['language'][$language_id]['name']; ?></label> <?php } ?> <?php } ?> <?php } ?> <?php } else if ($category_option['type'] == 2) { ?> ... тут про select имя radio-input`a обязательно должно быть вида name="product_to_value_id[<?php echo $category_option['option_id']; ?>]"именно благодаря <?php echo $category_option['option_id']; ?>имя становится уникальным - ведь у разных групп разные option_id. а "навигация" между radio-input`ами происходит как раз по имени.2) перекачать архив, поставить вручную и сделать FIX, который я предложил. Змінено 7 січня 2011 користувачем afwollis Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 3 4 5 6 7 8 Вперед Сторінка 3 з 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 і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
afwollis Опубліковано: 7 грудня 2010 Share Опубліковано: 7 грудня 2010 (змінено) Options Update BUG не знаю, почему не видел этот баг раньше, но вот столкнулся: исходные данные: - чистая установка OpenCart 1.4.9.1; - установленный вручную модуль. для дальнейшего усовершенствования модуля забиты такие опции: Действия: решил, что для "Phones & PDAs" маловато вариантов разрешения экрана и хотел было добавить дополнительный вариант "480 x 800". в итоге получил: Error: Duplicate entry '10' for key 1 Error No: 1062 INSERT INTO category_option_value SET option_id = '3', value_id = '10'на скрине ниже (над текстом ошибки) виден кусок вывода отладочной информации.уже поковырялся и добавил в admin / model / catalog / filter.php / public function updateOption($option_id, $data) {} print " <strong>public function updateOption($option_id, $data) {}</strong> <pre>"; print_r($data); print "</pre>"; в этой функции есть такой участок: $this->db->query("DELETE FROM " . DB_PREFIX . "category_option_value WHERE option_id = '" . (int)$option_id . "'"); $this->db->query("DELETE FROM " . DB_PREFIX . "category_option_value_description WHERE option_id = '" . (int)$option_id . "'"); if (isset($data['option_value'])) { foreach ($data['option_value'] as $value_id => $option_value) { $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value SET option_id = '" . (int)$option_id . "', value_id = '" . (int)$value_id . "'"); foreach ($option_value['language'] as $language_id => $language) { $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value_description SET value_id = '" . (int)$value_id . "', option_id = '" . (int)$option_id . "', language_id = '" . (int)$language_id . "', name = '" . $this->db->escape($language['name']) . "'"); } } }все, что находится здесь внутри условия if (isset($data['option_value'])) {и отдает нам указанную выше ошибку.однако корни проблемы растут малость из другого места... :? из строк <?php $option_value_row = 0; ?> ... <?php $option_value_row++; ?> ... <script type="text/javascript"><!-- ... var option_value_row = <?php echo $option_value_row; ?>; function addValue() { html = '<tr id="option_value' + option_value_row + '" class="option">'; html += '<td style="width: 170px;background-color: #F5EFD1;padding:4px;">'; <?php foreach ($languages as $language) { ?> html += '<input type="text" name="option_value[' + option_value_row + '][language][<?php echo $language['language_id']; ?>][name]" value="Значение ' + option_value_row + '" /> <img src="view/image/flags/<?php echo $language['image']; ?>" title="<?php echo $language['name']; ?>" /> '; <?php } ?> html += '</td>'; html += '<td align="center"><a onclick="removeValue(' + option_value_row + ');" class="button"><span>X</span></a></td>'; html += '</tr>'; $('#block_option').append(html); option_value_row++; } ... //--></script> в файле admin / view / template / module / filter_form.tpl .= = = Options Update FIX для себя решил проблему следующим образом: 1) файл admin / view / template / module / filter_form.tpl в функции function addValue() {} заменил строку html += '<input type="text" name="option_value[' + option_value_row + '][language][<?php echo $language['language_id']; ?>][name]" value="Значение ' + option_value_row + '" /> <img src="view/image/flags/<?php echo $language['image']; ?>" title="<?php echo $language['name']; ?>" /> ';на html += '<input type="text" name="option_value[' + option_value_row + '_new][language][<?php echo $language['language_id']; ?>][name]" value="Значение ' + option_value_row + '_new" /> <img src="view/image/flags/<?php echo $language['image']; ?>" title="<?php echo $language['name']; ?>" /> ';т.е. просто добавил "_new" в генерируемый для новых значений value_id2) файл admin / model / catalog / filter.php в функции public function updateOption($option_id, $data) {} заменил строку $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value SET option_id = '" . (int)$option_id . "', value_id = '" . (int)$value_id . "'");на $new_value_pos = strpos($value_id, "new"); if ($new_value_pos !== false) { $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value SET option_id = '" . (int)$option_id . "'"); $value_id = $this->db->getLastId(); } else { $this->db->query("INSERT INTO " . DB_PREFIX . "category_option_value SET option_id = '" . (int)$option_id . "', value_id = '" . (int)$value_id . "'"); } теперь у меня при сохранении значений опций проводится проверка значения "value_id" на предмет содержания текста "new".и если вхождение есть - то выполняем кусок кода, взятый из функции public function addOption($data) {} для вставки именно нового значения опции и получения value_id этого значения. иначе - используется существующий value_id, который, собсно, и был передан в функцию. = = = у кого есть такая проблема - попробуйте пофиксить моим способом :roll: у кого была такая проблема - поделитесь, пожалуйста, своим решением ;) у кого нет и небыло - вам можно только позавидовать :D Змінено 7 січня 2011 користувачем afwollis 1 Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 7 грудня 2010 Share Опубліковано: 7 грудня 2010 ...но вернемся к нашим "баранам" - проблема с фильтром в IE. не работает ни в одной версии из тех, что я проверял ( :roll: 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(); });... пересмотрел свою позицию насчет правки данного кода (: просто "разъединил" обработку действий $('#filters select').live('change', function() { effects('', 'jump', 'icon', 200); //effects('in', 'fade', 'load', 300); loadContent(); }); $('#filters input').live('click', function() { effects('', 'jump', 'icon', 200); //effects('in', 'fade', 'load', 300); loadContent(); });обратите внимание на $('#filters input').live('click', function() { UPD вот уж не знаю, что,где и когда провтыкал, но сейчас у меня IE (чтоб его ###) не работает с этим кодом /* $('#filters select').live('change', function() { effects('', 'jump', 'icon', 200); //effects('in', 'fade', 'load', 300); loadContent(); }); */поэтому я его закомментировал (у меня используются только checkbox`ы) :? = = = кто-нибудь думал над реализацией функционала, упомянутого в сообщении ;) https://opencartforum.com/viewtopic.php?f=21&t=876&start=60#p7846 Надіслати Поділитися на інших сайтах More sharing options... wowkas Опубліковано: 10 грудня 2010 Share Опубліковано: 10 грудня 2010 Тоже все без ошибок работает, кроме назначения товару определенных свойств. Но тут скорее внутренний конфликт. Если есть две группы фильтров, в которых используются radiobuttons, то товару прибивается только одно свойство, а не отдельное в каждой группе. Т.е. например есть: Фильтр 1 - зн1 - зн2 Фильтр 2 - зн3 - зн4 Товару нельзя выбрать зн1 и зн3 сразу. А только что-то одно. Или это уже поправили и мне стоит установить модуль заново? :D А кто решил вот эту проблему? у самого возникла, раньше как-то не замечал, а тут заметил... Или у всех работает выборка по двум фильтрам? Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 12 грудня 2010 Share Опубліковано: 12 грудня 2010 (змінено) Я решил эту проблему. Сразу после того, как её опубликовали: :) https://opencartforum.com/viewtopic.php?f=21&t=876&start=50#p7701 Змінено 7 січня 2011 користувачем afwollis Надіслати Поділитися на інших сайтах More sharing options... wowkas Опубліковано: 13 грудня 2010 Share Опубліковано: 13 грудня 2010 Я делал это действие, нечего не изменилось... Потому и спросил повторно... Кроме как просто заменить эти строчки, больше нечего не нужно делать? Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 13 грудня 2010 Share Опубліковано: 13 грудня 2010 (змінено) Я делал это действие, нечего не изменилось... wowkas, вот с этого и надо было начинать. Я вроде ничего больше не делал - теперь уже и не знаю =) Могу предложить два варианта: 1) проверьте на всякий случай файл admin/view/template/catalog/get_ajax_options.tpl тут про checkbox`ы ... <?php } else if ($category_option['type'] == 1) { ?> <?php if ($category_option['category_option_values']) { ?> <?php foreach ($category_option['category_option_values'] as $category_option_value) { ?> <?php if (in_array($category_option_value['value_id'], $product_to_value_id)) { ?> <label><input type="radio" name="product_to_value_id[<?php echo $category_option['option_id']; ?>]" value="<?php echo $category_option_value['value_id']; ?>" checked="checked" /> <?php echo $category_option_value['language'][$language_id]['name']; ?></label> <?php } else { ?> <label><input type="radio" name="product_to_value_id[<?php echo $category_option['option_id']; ?>]" value="<?php echo $category_option_value['value_id']; ?>" /> <?php echo $category_option_value['language'][$language_id]['name']; ?></label> <?php } ?> <?php } ?> <?php } ?> <?php } else if ($category_option['type'] == 2) { ?> ... тут про select имя radio-input`a обязательно должно быть вида name="product_to_value_id[<?php echo $category_option['option_id']; ?>]"именно благодаря <?php echo $category_option['option_id']; ?>имя становится уникальным - ведь у разных групп разные option_id. а "навигация" между radio-input`ами происходит как раз по имени.2) перекачать архив, поставить вручную и сделать FIX, который я предложил. Змінено 7 січня 2011 користувачем afwollis Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 3 4 5 6 7 8 Вперед Сторінка 3 з 8 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Модулі та розширення Нужен ли модуль "фильтр в категории" ? Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich
afwollis Опубліковано: 7 грудня 2010 Share Опубліковано: 7 грудня 2010 ...но вернемся к нашим "баранам" - проблема с фильтром в IE. не работает ни в одной версии из тех, что я проверял ( :roll: 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(); });... пересмотрел свою позицию насчет правки данного кода (: просто "разъединил" обработку действий $('#filters select').live('change', function() { effects('', 'jump', 'icon', 200); //effects('in', 'fade', 'load', 300); loadContent(); }); $('#filters input').live('click', function() { effects('', 'jump', 'icon', 200); //effects('in', 'fade', 'load', 300); loadContent(); });обратите внимание на $('#filters input').live('click', function() { UPD вот уж не знаю, что,где и когда провтыкал, но сейчас у меня IE (чтоб его ###) не работает с этим кодом /* $('#filters select').live('change', function() { effects('', 'jump', 'icon', 200); //effects('in', 'fade', 'load', 300); loadContent(); }); */поэтому я его закомментировал (у меня используются только checkbox`ы) :? = = = кто-нибудь думал над реализацией функционала, упомянутого в сообщении ;) https://opencartforum.com/viewtopic.php?f=21&t=876&start=60#p7846 Надіслати Поділитися на інших сайтах More sharing options... wowkas Опубліковано: 10 грудня 2010 Share Опубліковано: 10 грудня 2010 Тоже все без ошибок работает, кроме назначения товару определенных свойств. Но тут скорее внутренний конфликт. Если есть две группы фильтров, в которых используются radiobuttons, то товару прибивается только одно свойство, а не отдельное в каждой группе. Т.е. например есть: Фильтр 1 - зн1 - зн2 Фильтр 2 - зн3 - зн4 Товару нельзя выбрать зн1 и зн3 сразу. А только что-то одно. Или это уже поправили и мне стоит установить модуль заново? :D А кто решил вот эту проблему? у самого возникла, раньше как-то не замечал, а тут заметил... Или у всех работает выборка по двум фильтрам? Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 12 грудня 2010 Share Опубліковано: 12 грудня 2010 (змінено) Я решил эту проблему. Сразу после того, как её опубликовали: :) https://opencartforum.com/viewtopic.php?f=21&t=876&start=50#p7701 Змінено 7 січня 2011 користувачем afwollis Надіслати Поділитися на інших сайтах More sharing options... wowkas Опубліковано: 13 грудня 2010 Share Опубліковано: 13 грудня 2010 Я делал это действие, нечего не изменилось... Потому и спросил повторно... Кроме как просто заменить эти строчки, больше нечего не нужно делать? Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 13 грудня 2010 Share Опубліковано: 13 грудня 2010 (змінено) Я делал это действие, нечего не изменилось... wowkas, вот с этого и надо было начинать. Я вроде ничего больше не делал - теперь уже и не знаю =) Могу предложить два варианта: 1) проверьте на всякий случай файл admin/view/template/catalog/get_ajax_options.tpl тут про checkbox`ы ... <?php } else if ($category_option['type'] == 1) { ?> <?php if ($category_option['category_option_values']) { ?> <?php foreach ($category_option['category_option_values'] as $category_option_value) { ?> <?php if (in_array($category_option_value['value_id'], $product_to_value_id)) { ?> <label><input type="radio" name="product_to_value_id[<?php echo $category_option['option_id']; ?>]" value="<?php echo $category_option_value['value_id']; ?>" checked="checked" /> <?php echo $category_option_value['language'][$language_id]['name']; ?></label> <?php } else { ?> <label><input type="radio" name="product_to_value_id[<?php echo $category_option['option_id']; ?>]" value="<?php echo $category_option_value['value_id']; ?>" /> <?php echo $category_option_value['language'][$language_id]['name']; ?></label> <?php } ?> <?php } ?> <?php } ?> <?php } else if ($category_option['type'] == 2) { ?> ... тут про select имя radio-input`a обязательно должно быть вида name="product_to_value_id[<?php echo $category_option['option_id']; ?>]"именно благодаря <?php echo $category_option['option_id']; ?>имя становится уникальным - ведь у разных групп разные option_id. а "навигация" между radio-input`ами происходит как раз по имени.2) перекачать архив, поставить вручную и сделать FIX, который я предложил. Змінено 7 січня 2011 користувачем afwollis Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 3 4 5 6 7 8 Вперед Сторінка 3 з 8 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Модулі та розширення Нужен ли модуль "фильтр в категории" ?
wowkas Опубліковано: 10 грудня 2010 Share Опубліковано: 10 грудня 2010 Тоже все без ошибок работает, кроме назначения товару определенных свойств. Но тут скорее внутренний конфликт. Если есть две группы фильтров, в которых используются radiobuttons, то товару прибивается только одно свойство, а не отдельное в каждой группе. Т.е. например есть: Фильтр 1 - зн1 - зн2 Фильтр 2 - зн3 - зн4 Товару нельзя выбрать зн1 и зн3 сразу. А только что-то одно. Или это уже поправили и мне стоит установить модуль заново? :D А кто решил вот эту проблему? у самого возникла, раньше как-то не замечал, а тут заметил... Или у всех работает выборка по двум фильтрам? Надіслати Поділитися на інших сайтах More sharing options...
afwollis Опубліковано: 12 грудня 2010 Share Опубліковано: 12 грудня 2010 (змінено) Я решил эту проблему. Сразу после того, как её опубликовали: :) https://opencartforum.com/viewtopic.php?f=21&t=876&start=50#p7701 Змінено 7 січня 2011 користувачем afwollis Надіслати Поділитися на інших сайтах More sharing options... wowkas Опубліковано: 13 грудня 2010 Share Опубліковано: 13 грудня 2010 Я делал это действие, нечего не изменилось... Потому и спросил повторно... Кроме как просто заменить эти строчки, больше нечего не нужно делать? Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 13 грудня 2010 Share Опубліковано: 13 грудня 2010 (змінено) Я делал это действие, нечего не изменилось... wowkas, вот с этого и надо было начинать. Я вроде ничего больше не делал - теперь уже и не знаю =) Могу предложить два варианта: 1) проверьте на всякий случай файл admin/view/template/catalog/get_ajax_options.tpl тут про checkbox`ы ... <?php } else if ($category_option['type'] == 1) { ?> <?php if ($category_option['category_option_values']) { ?> <?php foreach ($category_option['category_option_values'] as $category_option_value) { ?> <?php if (in_array($category_option_value['value_id'], $product_to_value_id)) { ?> <label><input type="radio" name="product_to_value_id[<?php echo $category_option['option_id']; ?>]" value="<?php echo $category_option_value['value_id']; ?>" checked="checked" /> <?php echo $category_option_value['language'][$language_id]['name']; ?></label> <?php } else { ?> <label><input type="radio" name="product_to_value_id[<?php echo $category_option['option_id']; ?>]" value="<?php echo $category_option_value['value_id']; ?>" /> <?php echo $category_option_value['language'][$language_id]['name']; ?></label> <?php } ?> <?php } ?> <?php } ?> <?php } else if ($category_option['type'] == 2) { ?> ... тут про select имя radio-input`a обязательно должно быть вида name="product_to_value_id[<?php echo $category_option['option_id']; ?>]"именно благодаря <?php echo $category_option['option_id']; ?>имя становится уникальным - ведь у разных групп разные option_id. а "навигация" между radio-input`ами происходит как раз по имени.2) перекачать архив, поставить вручную и сделать FIX, который я предложил. Змінено 7 січня 2011 користувачем afwollis Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 3 4 5 6 7 8 Вперед Сторінка 3 з 8 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку
wowkas Опубліковано: 13 грудня 2010 Share Опубліковано: 13 грудня 2010 Я делал это действие, нечего не изменилось... Потому и спросил повторно... Кроме как просто заменить эти строчки, больше нечего не нужно делать? Надіслати Поділитися на інших сайтах More sharing options...
afwollis Опубліковано: 13 грудня 2010 Share Опубліковано: 13 грудня 2010 (змінено) Я делал это действие, нечего не изменилось... wowkas, вот с этого и надо было начинать. Я вроде ничего больше не делал - теперь уже и не знаю =) Могу предложить два варианта: 1) проверьте на всякий случай файл admin/view/template/catalog/get_ajax_options.tpl тут про checkbox`ы ... <?php } else if ($category_option['type'] == 1) { ?> <?php if ($category_option['category_option_values']) { ?> <?php foreach ($category_option['category_option_values'] as $category_option_value) { ?> <?php if (in_array($category_option_value['value_id'], $product_to_value_id)) { ?> <label><input type="radio" name="product_to_value_id[<?php echo $category_option['option_id']; ?>]" value="<?php echo $category_option_value['value_id']; ?>" checked="checked" /> <?php echo $category_option_value['language'][$language_id]['name']; ?></label> <?php } else { ?> <label><input type="radio" name="product_to_value_id[<?php echo $category_option['option_id']; ?>]" value="<?php echo $category_option_value['value_id']; ?>" /> <?php echo $category_option_value['language'][$language_id]['name']; ?></label> <?php } ?> <?php } ?> <?php } ?> <?php } else if ($category_option['type'] == 2) { ?> ... тут про select имя radio-input`a обязательно должно быть вида name="product_to_value_id[<?php echo $category_option['option_id']; ?>]"именно благодаря <?php echo $category_option['option_id']; ?>имя становится уникальным - ведь у разных групп разные option_id. а "навигация" между radio-input`ами происходит как раз по имени.2) перекачать архив, поставить вручную и сделать FIX, который я предложил. Змінено 7 січня 2011 користувачем afwollis Надіслати Поділитися на інших сайтах More sharing options... Назад 1 2 3 4 5 6 7 8 Вперед Сторінка 3 з 8 Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0
Recommended Posts