0 Пользователей и 1 Гость просматривают эту тему.
  • 26 Ответов
  • 8704 Просмотров
*

Delfi

  • Захожу иногда
  • 53
  • 13 / 0
По голосованию понял, что кому-нибудь, да интересен этот вопрос.
http://joomlaforum.ru/index.php?topic=242603.new;topicseen.

Делал все для Joomla 2.5.7 + JS 3.12.2

Итак, по порядку. Преобразование в селект делается модификацией модуля, остальные правки требуют изменений в ядре магазина, т.к. в модуле идет обращение к функциям самого магазина. И для фильтра по диапазону делаем текстовое поле, куда вводим только цифры. Товары с текстом в этом поле будут игнорироваться.
Будем считать, что модуль фильтра установлен. Для того, чтобы гарантировать, что при обновлении часть изменений не перезапишется обновленными файлами, вынесем файл шаблона фильтра в свой основной шаблон Joomla.


Для этого копируем файл /modules/mod_jshopping_filters/tmpl/default.php в /templates/{имя вашего шаблона}/html/mod_jshopping_filters/default.php. Т.е. теперь модуль будет брать свой layout с из нашего шаблона, а не из самого модуля. Советую, кстати, делать со всеми layout, которые изменяете. Меньше проблем будет с обновлением.

Так же подготовим настройки модуля, чтобы сделать более универсальный способ включения/выключения преобразования поиска. Результат можно увидеть на приложенной картинке.
Открываем /modules/mod_jshopping_filters/mod_jshopping_filters.xml и после вот этого кода


Код
<field
name="moduleclass_sfx"
type="text"
label="COM_MODULES_FIELD_MODULECLASS_SFX_LABEL"
description="COM_MODULES_FIELD_MODULECLASS_SFX_DESC" />    

добавляем следующее


Код
<field name="show_name_search" type="radio" default="0" label="Поиск по названию">
<option value="0">JNO</option>
<option value="1">JYES</option>
</field>            
<field name="show_search_button" type="radio" default="0" label="Кнопка поиска">
<option value="0">JNO</option>
<option value="1">JYES</option>
</field>                                
<field name="select" type="text" label="id характеристик в select через запятую" description="" />
<field name="range" type="text" label="id характеристик в диапазон через запятую" description="" />                
<field name="btn_text" type="text" label="текст на кнопке" default="Поиск" description="" />

Путем этих изменений мы добавили 5 настроек. Теперь добавим функционал


Для начала будем редактировать файл /templates/{имя вашего шаблона}/html/mod_jshopping_filters/default.php

Находим строчку

Код
<?php if ($show_prices){?>
<span class="filter_price"><?php print JText::_('PRICE')?>:<br/>
<span class="box_price_from"><?php print JText::_('FROM')?> <input type = "text" class = "inputbox" name = "fprice_from" id="fprice_from" size="7" value="<?php if ($fprice_from>0) print $fprice_from?>" /></span>
<span class="box_price_to"><?php print JText::_('TO')?> <input type = "text" class = "inputbox" name = "fprice_to"  id="fprice_to" size="7" value="<?php if ($fprice_to>0) print $fprice_to?>" /></span>
<?php print $jshopConfig->currency_code?>
</span>    
<input type="submit" class="button" value="<?php print JText::_('GO')?>">    
<span class="clear_filter"><a href="#" onclick="modFilterclearPriceFilter();return false;"><?php print JText::_('RESET FILTER')?></a></span>
<?php }?>

и до тега </form> заменяем весь код на

Код

   <?php
//Считываем параметры
$selectsparam = $params->get('select', 999);
$range = $params->get('range', 999);
?>
<?php if($params->get('show_name_search', 0)) {
//Поиск по имени
?>
<div class="item_name">
<div class="characteristic_name">Название</div>
<input type="text" class="fw" name="name_search" id="" value="<?php echo htmlspecialchars($_POST['name_search']); ?>" />
</div>
<?php } ?>
<?php if (is_array($characteristic_displayfields) && count($characteristic_displayfields)){?>
<div class="filter_characteristic">
<?php foreach($characteristic_displayfields as $ch_id){
if (is_array($characteristic_fieldvalues[$ch_id])){ ?>
<div class="characteristic_name"><?php echo $characteristic_fields[$ch_id]->name;?></div>
<?php
//Первое условие, где преобразуем в select. Все просто - преобразуем строку из параметров
//В массив, разбив ее по знаку запятой и затем смотрим, есть ли в этом списке текущий выводимый элемент
if(in_array($ch_id, explode(',',$selectsparam))) {
?>
<select name="extra_fields[<?php print $ch_id?>][]" id="genre" onchange="document.jshop_filters.submit();" >
<!-- Первая опция, чтобы пользователь мог сбросить этот фильтр -->
<option value="0">выбирите из списка</option>
<?php foreach($characteristic_fieldvalues[$ch_id] as $val_id=>$val_name){?>
<option value="<?php print $val_id;?>" <?php if (is_array($extra_fields_active[$ch_id]) && in_array($val_id, $extra_fields_active[$ch_id])) print "selected";?> /> <?php print $val_name;?></option>
<?php }?>
</select>
<?php
// Тут мы делаем ту же операцию, только с параметром поиска по диапазону. Работать пока не будет
// без изменений в ядре компонента
} elseif(in_array($ch_id, explode(',',$range))) {
?>
<div class="range">
от <input type="text" name="extra_fields_ft[<?php print $ch_id?>][from]" id="" value="<?php if(isset($extra_fields_ft_active[$ch_id]['from'])) echo $extra_fields_ft_active[$ch_id]['from'];?>" /> до
<input type="text" name="extra_fields_ft[<?php print $ch_id?>][to]" id="" value="<?php if(isset($extra_fields_ft_active[$ch_id]['to'])) echo $extra_fields_ft_active[$ch_id]['to'];?>" />
</div>
<?php
//В противном случае выводим обычные чекбоксы
} else {
?>
<input type="hidden" name="extra_fields[<?php print $ch_id?>][]" value="0" />        
<?php foreach($characteristic_fieldvalues[$ch_id] as $val_id=>$val_name){?>
<input type="checkbox" name="extra_fields[<?php print $ch_id?>][]" value="<?php print $val_id;?>" <?php if (is_array($extra_fields_active[$ch_id]) && in_array($val_id, $extra_fields_active[$ch_id])) print "checked";?> onclick="document.jshop_filters.submit();" /> <?php print $val_name;?><br/>
<?php }?>
<?php
}
}?>
<?php }?>
</div>
<?php }
//Тут смотрим - надо ли выводить кнопку поиска и какой текст на ней будет. Если текст не указали - просто пишет на кнопке слово "Поиск"
if($params->get('show_search_button')) { ?><br/>
<button onclick="document.jshop_filters.submit();"><?php echo $params->get("btn_text", "Поиск"); ?></button>
<?php } ?>


Теперь открываем /components/com_jshopping/lib/jtableauto.php

После
Код
        if ($type!="vendor" && is_array($filters['vendors']) && count($filters['vendors'])){
            $adv_query .= " AND prod.vendor_id in (".implode(",",$filters['vendors']).")";
        }    
Добавляем
Код
	if(isset($filters['name_search']) && !empty($filters['name_search'])) {
$adv_query .= " AND prod.`name_ru-RU` like \"%".trim($filters['name_search'])."%\"";
}
Эти мы добавили в SQL запрос поиск по названию. Учтите, если язык отличен от русского, то нужно модифицировать запрос. Это я оставлю на ваши плечи.

И сразу же после предыдущего кода добавим
Код
if (is_array($filters['extra_fields_ft'])){
foreach($filters['extra_fields_ft'] as $id=>$v){
if(isset($v["from"]) && $v['from'] > 0) {
$from = (int) $db->escape($v['from']);
$adv_query .= " AND prod.`extra_field_".$id."` >= ".$from;
}
if(isset($v["to"]) && $v['to'] > 0) {
$to = (int) $db->escape($v['to']);
$adv_query .= " AND prod.`extra_field_".$id."` <= ".$to;
}
}
}

Здесь мы производим обработку диапазонных значений. Обрабатываться будет даже если мы введем только минимальное или максимальное значение.
Как видно по условиям - в расчет берем только положительные числа. Можете поправить под себя.

Так как мы добавили новый параметр extra_fields_ft и name_search, нам надо добавить его в функции.
Открываем components/com_jshopping/lib/functions.php. Ищем функцию getBuildFilterListProduct.

После
Код
    $fprice_from = $mainframe->getUserStateFromRequest( $contextfilter.'fprice_from', 'fprice_from');
    $fprice_from = saveAsPrice($fprice_from);
Добавляем
Код
$extra_fields_ft = $mainframe->getUserStateFromRequest( $contextfilter.'extra_fields_ft', 'extra_fields_ft', array());
$name_search = JRequest::getString('name_search');

После
Код
$filters['vendors'] = $vendors;
Добавляем
Код
    $filters['name_search'] = $name_search;
    $filters['extra_fields_ft'] = $extra_fields_ft;

Вроде ничего не забыл. Если что-то не заработает - пишите
Вкратце, что сделали:
1. В шаблоне фильтра добавили условия, по которым у нас выводятся селекты, форма поиска по имени, вывод двух полей для поиска по диапазону (кстати, можно подключить плагин слайдера)
2. В функциях добавили считывание новых переменных, которые передаются из фильтра
3. В sql запрос добавили поиск по имени и диапазону

[вложение удалено Администратором]
« Последнее редактирование: 24.01.2013, 11:07:54 от Delfi »
*

Oleg24

  • Осваиваюсь на форуме
  • 45
  • 1 / 0
Delfi, спасибо большое! Отличное решение!

Единственный вопрос, в селектах характеристик появились знаки вопроса, я так понимаю это добавлены характеристики все и нужно поменять кодировку? В каком файле ее поменять?

Все разобрался! default.php нужно пересохранить! Отличное решение:)

Сюда бы еще сортировку прикрутить:)
« Последнее редактирование: 04.02.2013, 14:08:26 от Oleg24 »
*

Oleg24

  • Осваиваюсь на форуме
  • 45
  • 1 / 0
Delfi, а еще подскажите, как сделать так, чтобы при выборе одной характеристики в первом селекте, во втором оставались только те характеристики, которые присутствуют с выбранным значением первого селекта?
*

Delfi

  • Захожу иногда
  • 53
  • 13 / 0
Delfi, а еще подскажите, как сделать так, чтобы при выборе одной характеристики в первом селекте, во втором оставались только те характеристики, которые присутствуют с выбранным значением первого селекта?

Это уже куда более сложная система, в платных решениях наверняка есть. Заказчик был доволен тем, что сделано :)
*

Oleg24

  • Осваиваюсь на форуме
  • 45
  • 1 / 0
Ясно! Всегда хочется чего-то большего:)

В любом случае, спасибо за Ваше решение! :)
*

code.secret

  • Захожу иногда
  • 58
  • 3 / 0
Не работает поиск по диапазону. Точнее работает, то неправильно. Вот длина товара 175:
я задаю запрос от 0 до 999 - товар выводится, от 142 до 175 - товар выводится, а уже от 143 до 175 - товар не выводится. Если увеличивать "от", то товар не выводится. В чем может быть проблема?

UPD: вопрос решил изменением характеристики в тип текстового поля. Возник вопрос: можно ли вывести кнопку сброса фильтра?
« Последнее редактирование: 25.02.2013, 14:38:30 от code.secret »
*

nevigen

  • Moderator
  • 10436
  • 863 / 25
  • http://n*****n.com
Профессиональные / Бесплатные решения для JoomShopping
Не лечи бесплатно, ибо тот, кто лечится бесплатно, рано или поздно перестает ценить свое здоровье,
а тот, кто лечит бесплатно, рано или поздно перестает ценить результаты своего труда/ (с) Гиппократ?
Не ищите ответов, ищите решение !
*

RTEagle

  • Захожу иногда
  • 140
  • 6 / 0
Не могу понять с чем связана ошибка. С магазином, со стандартным модулем фильтра или с данной модификацией?

Что собственно происходит. Если товаров в категории достаточно много и они разбиваются пагинацией, то фильтр работает некорректно.
При переходе на вторую страницу в адресной строке как и положено добавляется ?start=x
Далее если воспользоваться фильтром (отфильтровать поставив галочку на характеристику) есть вероятность попасть на 404 страницу.
Видимо дело в том, что товаров после фильтрации уже не хватает по количеству на две страницы, а ?start=x не очищается.

Joomla 2.5.9
JoomShopping 3.13.2
Использую стандартный модуль mod_jshopping_filters не изменённый для поиска даже. Я сделал его только чтобы работал вывод в селект.
Но конкретно для этой страницы даже не воспользовался этой функцией. То есть по идее стандартный функционал.

Для наглядности пример: http://www.avto-hol.ru/demo/avto-oborudovanie/parktroniki.html
Если поставить галочку на 6 датчиков на первой странце - работает, если на второй - 404 ошибка.
*

nevigen

  • Moderator
  • 10436
  • 863 / 25
  • http://n*****n.com
пагинация это ...... в Joomla..
имен потому нет AJAX обновления страницы со списком товаров в нашем фильтре...
эти грабли уже не 1-у лоб расшибли...
так что... врядли будет решение. выводите все товары на 1 странице :)
Профессиональные / Бесплатные решения для JoomShopping
Не лечи бесплатно, ибо тот, кто лечится бесплатно, рано или поздно перестает ценить свое здоровье,
а тот, кто лечит бесплатно, рано или поздно перестает ценить результаты своего труда/ (с) Гиппократ?
Не ищите ответов, ищите решение !
*

orexov_m

  • Захожу иногда
  • 297
  • 24 / 0
а никто не обращал внимания, что если при поиске по диапазону ввести данные подобрать товар, затем уйти в другую категорию. И после этого вернуться в категорию где осуществлялся подбор, то увидим те же товары из подбора. То есть фильтр как бы не обнуляется при уходе из категории. Чтобы увидеть все товары категории надо в незаполненом фильтре нажать кнопку найти.
Как с этим бороться?
Skype:orekhov.mikhail, ICQ: 580077720, Телега
*

back

  • Захожу иногда
  • 214
  • 7 / 0
  • Все просто если по очереди)
Спасибо! очень помогло. немного кое-что подправил и на 3.13.2 пошло!
*

orexov_m

  • Захожу иногда
  • 297
  • 24 / 0
Спасибо! очень помогло. немного кое-что подправил и на 3.13.2 пошло!
подскажите что поправили, возможно у меня из-за этого и есть глюк с тем что данные не обнуляются при переходе в другую категорию и последующем возврате в категорию где был подбор.
Skype:orekhov.mikhail, ICQ: 580077720, Телега
*

Sergun42

  • Осваиваюсь на форуме
  • 36
  • 0 / 0
В поиске по диапазону (характеристика) не сохраняются введенные значения после нажатия кнопки поиска, например в диапазоне цен введеные значения сохранятся.
Код
	<div class="characteristic_name"><?php echo $characteristic_fields[$ch_id]->name;?></div>
<div class="range">
от <input type="text" name="extra_fields_ft[<?php print $ch_id?>][from]" id="3" value="<?php if(isset($extra_fields_ft_active[$ch_id]['from'])) echo $extra_fields_ft_active[$ch_id]['from'];?>" /> до
<input type="text" name="extra_fields_ft[<?php print $ch_id?>][to]" id="3" value="<?php if(isset($extra_fields_ft_active[$ch_id]['to'])) echo $extra_fields_ft_active[$ch_id]['to'];?>" />
</div>


Как сделать, чтобы введеные значения сохранялись после нажатия кнопки поиска?
*

RTEagle

  • Захожу иногда
  • 140
  • 6 / 0
пагинация это ...... в Joomla..
имен потому нет AJAX обновления страницы со списком товаров в нашем фильтре...
эти грабли уже не 1-у лоб расшибли...
так что... врядли будет решение. выводите все товары на 1 странице :)

Возвращаюсь к этому вопросу спустя много времени.
Вопрос немного меняю.

Есть производители, а есть характеристики. И те и те выводятся в фильтре. Но если поставить галочку на производителя она не скидывается при переходе по старницам пагинации или при переходе в другие разделы сайта, а галочка с характеристик каждый раз сбрасывается если перейти на страницу.
В чём отличие? И как мне сделать так, чтобы у характеристик выбор пользователя также сохранялся и можно было спокойно кликать по страницам пагинации?
*

volenarg

  • Новичок
  • 1
  • 1 / 0
видимо, автор позабыл
в файле modules\mod_jshopping_filters\mod_jshopping_filters.php
после
Код
$extra_fields_active = $mainframe->getUserStateFromRequest($contextfilter.'extra_fields', 'extra_fields', array());
$extra_fields_active = filterAllowValue($extra_fields_active, "array_int_k_v+");
надо добавить
Код
$extra_fields_ft_active = $mainframe->getUserStateFromRequest($contextfilter.'extra_fields_ft', 'extra_fields_ft', array());
*

capauih

  • Новичок
  • 6
  • 0 / 0
Доброго времени суток.

Я новичек в Joomla (Joomla! 2.5.4) и в PHP, но не в программировании.

Пытаюсь помочь товарищам с добавлением предложенное автором решения, уперся в непреодолимую проблему.
После долгого дебага выяснил, что  изменения который я вношу в файле не отображаются в HTML отрендереной страницы. К примеру я добавляю комментарий в файл /modules/mod_jshopping_filters/tmpl/default.php вот так вот:

Код: php
<div class="jshop_filters">
    <!--Test comment-->
   <form action="<?php print $_SERVER['REQUEST_URI'];?>" method="post" name="jshop_filters">

и соответственно ожидаю увидеть HTML комментарий на странице где добавлен данный фильтр. Но его нет!
Подозреваю что у Joomla есть какой то неизвестный мне кэш. Я пробовал прогуглить проблему, но видимо из-за малого опыта так и не нашел как очистить или же отключить этот кэш.

Если у кого-нибудь есть мысли или решение - буду весьма признателен.
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Подозреваю что у Joomla есть какой то неизвестный мне кэш.
это в смысле известный кеш /administrator/index.php?option=com_cache вы уже очистили, но изменений нет?
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

capauih

  • Новичок
  • 6
  • 0 / 0
Ну на сколько я понимаю, это вид кэша в моем случае отключен:


*

nevigen

  • Moderator
  • 10436
  • 863 / 25
  • http://n*****n.com
в HTML папке шаблона Joomla не переопределен модуль фильтра?
Профессиональные / Бесплатные решения для JoomShopping
Не лечи бесплатно, ибо тот, кто лечится бесплатно, рано или поздно перестает ценить свое здоровье,
а тот, кто лечит бесплатно, рано или поздно перестает ценить результаты своего труда/ (с) Гиппократ?
Не ищите ответов, ищите решение !
*

capauih

  • Новичок
  • 6
  • 0 / 0
в HTML папке шаблона Joomla не переопределен модуль фильтра?

Нет, не переопределен.
*

nevigen

  • Moderator
  • 10436
  • 863 / 25
  • http://n*****n.com
ну по настройкам отключено кеширование Joomla.
а могут быть браузер и плагины специальные и т.д.
попробуйте очистить кеш принудительно в браузере для начала ктрл+ф5

и лучше ссылочку давать на сайт
Профессиональные / Бесплатные решения для JoomShopping
Не лечи бесплатно, ибо тот, кто лечится бесплатно, рано или поздно перестает ценить свое здоровье,
а тот, кто лечит бесплатно, рано или поздно перестает ценить результаты своего труда/ (с) Гиппократ?
Не ищите ответов, ищите решение !
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
похоже что стоит какой то дополнительный кеш, например JotCache любят.
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

capauih

  • Новичок
  • 6
  • 0 / 0
ну по настройкам отключено кеширование Joomla.
а могут быть браузер и плагины специальные и т.д.
попробуйте очистить кеш принудительно в браузере для начала ктрл+ф5

и лучше ссылочку давать на сайт

Это не кэш браузера, его я очистил в первую очередь. А вот про плагины расскажите пожалуйста по подробнее. Как я понимаю вы говорите про Joomla плагины. Я  пробежался по плагинам, нашел плагин "Система - Кэш". Но он выключен.


похоже что стоит какой то дополнительный кеш, например JotCache любят.

JotCache не нашел в проекте. По постараюсь погуглить на предмет всевозможных кэшей. Спасибо. 
*

capauih

  • Новичок
  • 6
  • 0 / 0
В итоге оказалось что дело было в nginx, точнее в том что вместо nginx конфигурационного файла был .htaccess . И nginx читал .php только один раз :( ...
Всем спасибо за помощь.
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
т.е. нет апача, только нгинкс? или как такое получилось не могу понять?
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

capauih

  • Новичок
  • 6
  • 0 / 0
Мои товарищи, для который я прикручиваю mod_jshopping_filters, купили готовый интернет-магазин, и заплатили кому-то за размещение его у себе на ферме, где крутятся другие сайты/магазины. Ферма использует nginx а купленный интернет-магазин юзал apache на старом хостинге. При переносе .htaccess не был заменен на nginx конфигурационный файл.
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

В списке товаров вывести названия категорий каждого товара

Автор shop-user

Ответов: 5
Просмотров: 1451
Последний ответ 25.01.2022, 06:05:12
от kit2m2
Поиск заказа по номеру телефона клиента

Автор Shiffer

Ответов: 19
Просмотров: 2391
Последний ответ 07.12.2021, 19:43:38
от anatol81n
Плагин - Инфоблок товара в списке товаров [Скачать]

Автор kit2m2

Ответов: 13
Просмотров: 2725
Последний ответ 20.10.2021, 14:51:08
от kit2m2
Автоматическая генерация кода товара (плагин)

Автор maslybs

Ответов: 8
Просмотров: 3196
Последний ответ 30.08.2021, 20:21:25
от nevigen
Таблица размеров (и т.п.) Плагин модульных позиций для атрибутов на странице товара [Скачать]

Автор kit2m2

Ответов: 39
Просмотров: 7137
Последний ответ 16.05.2021, 18:16:50
от kit2m2