-
Публікації
11 658 -
З нами
-
Відвідування
Тип публікації
Профілі
Форум
Маркетплейс
Статті
FAQ
Наші новини
Магазин
Блоги
module__dplus_manager
Повідомлення, опубліковані користувачем afwollis
-
-
в ЛС я вам в общем-то ответил. если что - стучитесь по указанным контактам.Так, я уже запуталься...
Значит что я делаю!
Я беру viewtopic.php?f=21&t=876&start=10#p7565 вот отсюдова качаю архив с чистой установкой, после viewtopic.php?f=21&t=876&start=50#p7701 делаю как ты говорил, по идее должно всё работать?
лишь отмечу здесь, что я там где-то выше писал (возможно - позже того, как опубликовал тот свой fix) - работаю над вручную установленным (архив "Openstore_module_product_filter_1.0_(manual_install).rar") оригинальным модулем
-
.
Делаем возможность выбора из двух вариантов отображения товара: табличный или колоночный
шаг #1: Делаем шаблоны
копируем
втабличный шаблон
catalog/view/theme/default/template/product/category.tpl
колоночный шаблон
catalog/view/theme/default/template/product/category2.tpl
чтобы убедиться во время теста/проверки, что все будет нормально работать, меняем в category2.tpl
вывод категорий
<?php for ($i = 0; $i < sizeof($categories); $i = $i + 4) { ?> <tr> <?php for ($j = $i; $j < ($i + 4); $j++) { ?>
на<?php for ($i = 0; $i < sizeof($categories); $i = $i + 2) { ?> <tr> <?php for ($j = $i; $j < ($i + 2); $j++) { ?>
вывод товаров<?php for ($i = 0; $i < sizeof($products); $i = $i + 4) { ?> <tr> <?php for ($j = $i; $j < ($i + 4); $j++) { ?>
на<?php for ($i = 0; $i < sizeof($products); $i = $i + 2) { ?> <tr> <?php for ($j = $i; $j < ($i + 2); $j++) { ?>
т.е. вместо вывода по 4 элемента в строке делаем вывод по 2 элемента.шаг #2: Добавляем в шаблоны возможность выбора варианта отображения товара
в любое понравившееся вам место в обоих шаблонах вставляем что-то вроде:
<!-- viewType addon - start --> <div> <a href="<?php echo $viewType_default_href; ?>&viewType=tbl" target="_self" title="tbl_View">viewType[tbl]</a> <a href="<?php echo $viewType_default_href; ?>&viewType=col" target="_self" title="col_View">viewType[col]</a> </div> <!-- viewType addon - end -->
главное - воткнуть две ссылки:// ссылка для применения табличного шаблона <a href="<?php echo $viewType_default_href; ?>&viewType=tbl" target="_self" title="">text / image</a> // ссылка для применения колоночного шаблона <a href="<?php echo $viewType_default_href; ?>&viewType=col" target="_self" title="">text / image[col]</a>
как вы их оформите, и куда вставите - дело ваше.я добавил предыдущий код после
<div class="middle"> <table style="padding-bottom:10px;"> <tr> <?php if ($thumb) { ?> <td><img src="<?php echo $thumb; ?>" alt="<?php echo $heading_title; ?>" /></td> <?php } ?> <?php if ($description) { ?> <td><?php echo $description; ?></td> <?php } ?> </tr> </table>
шаг #3: Правим файл catalog/controller/product/category.php
а) перед
$this->load->model('catalog/category'); $this->load->model('tool/seo_url');
вставляем//======= $viewType_tmpl["tbl"] = "category.tpl"; //это название табличного шаблона $viewType_tmpl["col"] = "category2.tpl"; //это название колоночного шаблона $viewType = ""; if (isset($this->session->data['viewType'])) { $viewType = $this->session->data['viewType']; } if (isset($this->request->get['viewType'])) { $viewType = $this->request->get['viewType']; } if ($viewType == "col") { $viewType_tmpl["current"] = $viewType_tmpl["col"]; // пишем в сессию пользователя информацию о выбранном варианте отображения // спасибо __alexjk__ за напоминание о том, что эту инфу можно и нужно где-то хранить ;) $this->session->data['viewType'] = "col"; } else { $viewType_tmpl["current"] = $viewType_tmpl["tbl"]; // пишем в сессию пользователя информацию о выбранном варианте отображения // спасибо __alexjk__ за напоминание о том, что эту инфу можно и нужно где-то хранить :( $this->session->data['viewType'] = "tbl"; } //=======
б) после
$this->data['sorts'][] = array( 'text' => $this->language->get('text_model_desc'), 'value' => 'p.model-DESC', 'href' => $this->model_tool_seo_url->rewrite(HTTP_SERVER . 'index.php?route=product/category&path=' . $this->request->get['path'] . '&sort=p.model&order=DESC') );
но до$url = '';
вставляем// ====== $this->data['viewType_default_href'] = $this->model_tool_seo_url->rewrite(HTTP_SERVER . 'index.php?route=product/category&path=' . $this->request->get['path'] . $url); // ======
в) меняем все вхождения
'/template/product/category.tpl'
на'/template/product/'.$viewType_tmpl["current"]
= = = = = = = =
пользуемся, пишем замечания, дополнения
-
.
http://lmgtfy.com/?q=imagejpeg()
т.е. это создание новой jpeg-картинки из того, что у тебя в "буферной переменной", а не из существующего файла.bool imagejpeg ( resource $image [, string $filename [, int $quality ]] )
creates a JPEG file from the given image.файл, в котором возникает ошибка указан, строки в нем - тоже есть.
смотри что там получается.
логично. если вкратце, то:+ к этому кодировка на всем сайте меняется на крякозябры.
при выводе чего-либо (в данном случае - сообщений об ошибках) перед браузер пытается автоматически определить кодировку страницы.
так как ошибки на английском - о русских символах в теле документа можно забыть.
вспомнилась одна цитатка, возможно есть/была на БАШе.Значит дело в чем-то другом. В чем?
цитировать я не стал... :(
-
Я делал это действие, нечего не изменилось...
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, который я предложил.
-
-
можно так:
0. делаешь backup базы + файлов магазина;
1. ставишь такую же версию;
2. заливаешь базу из backup`a;
если делались изменения в файлах / ставились модули, плагины / еще что:
3. копируешь создавшиеся конфиги в какую-нибудь папку у себя.
4. заливаешь файлы из backup`a поверх с перезаписью;
5. проставляешь заново права на папки/файлы (благо не так много и не в очень разных местах) (смотри install, если не помнишь, что где должно быть);
6. заливаешь поверх сохраненные конфиги.
ну или как-то так =)
мож кому не понравится такой метод, и может он "малость не оптимален".
я похожим способом клонирую сайты локально (когда есть необходимость).
-
смотрим в сторону
PHP unlink(path/to/file);
-
Я решил эту проблему.
Сразу после того, как её опубликовали:
:) https://opencartforum.com/viewtopic.php?f=21&t=876&start=50#p7701
-
смотрим в сторону Нужен ли модуль "фильтр в категории" ?...5. особенно необходимым является вот такого рода фильтр для разного рода товара...
SooR проделал колоссальный труд и отдал почти шедевр в свободный доступ :roll:
-
DEATH, можно пример проблемы посмотреть?
вобще (тему полностью не читал) думаю, что можно сделать "второй файловый менеджер" для работы с файлами отличными от изображений. а тот, который по-умолчанию, оставить для загрузки исключительно фото :roll:
-
самому пришлось ставить последнюю доступную версию jQuery из-за необходимости использования jQuery-UI....А подскажи пожалуйста - как поставить новый jquery?...
изменения проводил только для каталога
catalog/view/theme/default/template/common/header.tpl
<!-- --> <!--link type="text/css" href="catalog/view/javascript/jquery/jquery-ui/css/ui-lightness/jquery-ui-1.8.6.custom.css" rel="stylesheet" /--> <link type="text/css" href="catalog/view/javascript/jquery/jquery-ui/css/custom-theme/jquery-ui-1.8.6.custom.css" rel="stylesheet" /> <!-- --> <?php //<script type="text/javascript" src="catalog/view/javascript/jquery/jquery-1.3.2.min.js"></script> ?> <script type="text/javascript" src="catalog/view/javascript/jquery/jquery-ui/js/jquery-1.4.3.min.js"></script> <script type="text/javascript" src="catalog/view/javascript/jquery/thickbox/thickbox-compressed.js"></script> <link rel="stylesheet" type="text/css" href="catalog/view/javascript/jquery/thickbox/thickbox.css" /> <script type="text/javascript" src="catalog/view/javascript/jquery/tab.js"></script> <!-- --> <script type="text/javascript" src="catalog/view/javascript/jquery/jquery-ui/js/jquery-ui-1.8.6.custom.min.js"></script> <!-- -->
пока полет нормальный. -
...но вернемся к нашим "баранам" - проблема с фильтром в 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
-
уж не знаю, как там обстоят дела со скидками,
но меня, мягко говоря, смущает блок с названием MyOpencart.Ru на демо-странице, содержащий ссылки на "edition (dot) cnn (dot) com" :roll:
-
может кто и возьмется, но учитывая...Если не сложно реализуйте пока НГ не наступил :roll:
я бы хорошо подумал, прежде чем ставить нечто подобное на "продакшн"...Начало бета-тестирования
1 декабря 2010
Рады сообщить о начале бета-тестирования нашего нового сервиса..
P.S.
а вот такие "умные мысли" в 90% случаев отбивают напрочь желание хотя бы ознакомиться с предложением, не говоря уже о каком-либо сотрудничестве....Зная opencart думаю плагин написать дело 1 часа или того меньше...
-
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
для себя решил проблему следующим образом:
теперь у меня при сохранении значений опций проводится проверка значения "value_id" на предмет содержания текста "new".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 . "'"); }
и если вхождение есть - то выполняем кусок кода, взятый из функции public function addOption($data) {} для вставки именно нового значения опции и получения value_id этого значения.
иначе - используется существующий value_id, который, собсно, и был передан в функцию.
= = =
у кого есть такая проблема - попробуйте пофиксить моим способом :roll:
у кого была такая проблема - поделитесь, пожалуйста, своим решением ;)
у кого нет и небыло - вам можно только позавидовать :D
- 1
-
эммм...
вариант конечно правильный, если думать только о выводе информации.
однако при таком подходе движок совершает лишние действия (все равно вытягивает из базы всю информацию, которая нам уже не нужна и которую мы уже не будем выводить).
так что советую переработать вот этот участок кода:
и либо изменить функциюcatalog / controller / product / category.php (строки ~45 - 68)
$category_info = $this->model_catalog_category->getCategory($category_id); if ($category_info) { $this->document->title = $category_info['name']; $this->document->keywords = $category_info['meta_keywords']; $this->document->description = $category_info['meta_description']; $this->data['heading_title'] = $category_info['name']; $this->data['description'] = html_entity_decode($category_info['description'], ENT_QUOTES, 'UTF-8'); $this->data['text_sort'] = $this->language->get('text_sort'); $this->load->model('tool/image'); if ($category_info['image']) { $image = $category_info['image']; } else { $image = ''; } $this->data['thumb'] = $this->model_tool_image->resize($image, $this->config->get('config_image_category_width'), $this->config->get('config_image_category_height'));
$this->model_catalog_category->getCategory($category_id);
, либо написать другую, которая бы просто проверяла существование категории с заданным ID.и подставить ее вместо вышеуказанной
$category_info = $this->model_catalog_category->getCategory($category_id);
:roll: -
никто не запрещает вам исправить эту ситуацию =)
однако позволю себе вкратце пройтись по вашим пунктам:
1) 2) 4) 5)
каждый делает так, как ему надо. "jQuery forms + validate" (или как там оно) или "jQuery + JS regExp"и вперед https://opencartforum.com/public/style_emoticons/default/icon_arrow.gif
3) + последнее, без номера)
Вы меня конечно извините, но ёлки-моталки, вы ведь должны знать, что, разработкой движка, как такового, занимаются англоязычные разработчики.
А из этого уже и вытекает расположение полей "ФИО" - оно просто-напросто не рассчитано на русскоязычных пользователей =)
и добавлю от себя:
мне, например, важнее Имя и Отчество человека....поле Фамилия явл. наиболее важным...
а фамилия в общем-то чуть ли не побоку.
хотя, если вы обращаетесь к своим клиентам "Уважаемый, ФАМИЛИЯ" вместо "Уважаемый, Имя Отчество", то тут я вам не советчик :o
-
да, согласен надо бы переделать логику, чтобы выборка шла не сплошь по значениям опций, а как-то с группировкой опций:ребят, предложение по улучшению функционала:
сделать не только логическое ИЛИ (или то, или то), но и логическое И (и то, и то обязательно) при фильтрации в категории по свойствам товара.
выбрать все продукты, у которых ( 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
мне кажется, что это будет очень полезной штукой
-
вот тут к сожалению помочь не могу :oА теперь можно выложить модуль с уже пофиксиными файлами и свежим манулом...
ибо пиляю его под жесткие условия.
значит не столкнулись еще с какими-либо сложностями....Сам модуль пока у себя не активировал...
с чем я вас и могу поздравить :?
все, нижеизложенное, является толстым "имхо`м"
и не претендует на трактование оного, как единственно верного ответа
лепить "наобум" новую альфу|бету|что-то_еще из имеющихся фиксов, мыслей, пожеланий - в данный момент - неразумно.
если бы было больше информации от всех, кто использует этот модуль, тогда глядишь и подтянется новая|пофиксеная|улучшенная версия модуля|мануала...
до тех пор, имхо, имеют место быть лишь ответы/апдейты на конкретные ошибки, у конкретных пользователей :? https://opencartforum.com/public/style_emoticons/default/icon_arrow.gif
-
свой последний вопрос решил для себя таким образом:
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
-
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
-
SSShop, спасибо за терпение и чтение моих не всегда умных мыслей :)
во-первых:
естессно тут он будет сортировать по имени или модели или хз, что там найдет. ибо значение "порядок сортировки" у всех данных одинаковый и просто опускается....всем товарам выставил одинаковый порядок сортировки...
во-вторых:
возможно вы правы и я опять что-то прое#а... упустил.
но к черту.
если никто не подскажет вам, как решить этот вопрос - отпишусь через пару дней.
сейчас есть срочные дела.
-
"даешь 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)...
-
печально... =)OOPS!....Page Error 500 has occurred.
т.е. с таким .htaccess:
AddHandler phpini-cgi .php .htm Action phpini-cgi /cgi-bin/php5-custom-ini.cgi
сайт работает, но не работает SEO, а с таким:AddHandler phpini-cgi .php .htm Action phpini-cgi /cgi-bin/php5-custom-ini.cgi # Подробнее на https://myopencart.com Options +FollowSymlinks # Запретить листинг директорий Options -Indexes # Закрыть доступ к файлам шаблонов <FilesMatch ".tpl"> Order deny,allow Deny from all </FilesMatch> # Необходимо для ЧПУ. RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)?*$ index.php?_route_=$1 [L,QSA] AllowOwerride All
(в обоих случаях в конце файла должна быть пустая строка)получаем сервер-oops-500 ? https://opencartforum.com/public/style_emoticons/default/icon_question.gif
Нужен ли модуль "фильтр в категории" ?
в Модулі та розширення
Опубліковано:
спасибо Alexander Dorogikh и его теме "сложная(?) выборка" :(
для себя я этот вопрос решил ;)
если вкратце, то:
catalog / model / catalog / product.php
было
стало= = =
доработок в движке и, собственно, в фильтре - масса.
что / где / как отличается от того, что есть у вас - не знаю.
поэтому за дополнительной информацией по конкретно вашему случаю прошу в ЛС.
можно с альтернативными контактами - jabber / skype / icq
а лучший вариант - дождитесь релиза от liftex
я помогу ему впарить этот FIX в сборку, которую он уже выкладывал.
а может и вовсе пересобрать её в истинно отдельный модуль.
в этом случае будут кардинальные изменения на стороне catalog`a.