Автор Тема: Как поменять вид фильтра типа color или texture  (Прочитано 924 раз)

24 Октябрь 2016, 13:48:51
  • Пользователь
  • **
  • Сообщений: 93
  • Репутация: +2/-0
  • PrestaShop 1.7.7.3
    • Просмотр профиля
Добрый день!

Подскажите, пожалуйста, как изменить вывод фильтра типа color или texture, чтобы отображалась обычная галочка перед именем фильтра, а не изображение?
Нашёл что за это отвечает файл "\themes\default-bootstrap\modules\blocklayered\blocklayered.tpl"
Далее, нашёл место вывода:
{if $filter.filter_type == 0}
{foreach from=$filter.values key=id_value item=value name=fe}
{if $value.nbr || !$hide_0_values}
<li class="nomargin {if $smarty.foreach.fe.index >= $filter.filter_show_limit}hiddable{/if} col-lg-12">
{if isset($filter.is_color_group) && $filter.is_color_group}
<input class="color-option {if isset($value.checked) && $value.checked}on{/if} {if !$value.nbr}disable{/if}" type="button" name="layered_{$filter.type_lite}_{$id_value}" data-rel="{$id_value}_{$filter.id_key}" id="layered_id_attribute_group_{$id_value}" {if !$value.nbr}disabled="disabled"{/if} style="background: {if isset($value.color)}{if file_exists($smarty.const._PS_ROOT_DIR_|cat:"/img/co/$id_value.jpg")}url(img/co/{$id_value}.jpg){else}{$value.color}{/if}{else}#CCC{/if};" />
{if isset($value.checked) && $value.checked}<input type="hidden" name="layered_{$filter.type_lite}_{$id_value}" value="{$id_value}" />{/if}
{else}
<input type="checkbox" class="checkbox" name="layered_{$filter.type_lite}_{$id_value}" id="layered_{$filter.type_lite}{if $id_value || $filter.type == 'quantity'}_{$id_value}{/if}" value="{$id_value}{if $filter.id_key}_{$filter.id_key}{/if}"{if isset($value.checked)} checked="checked"{/if}{if !$value.nbr} disabled="disabled"{/if} />
{/if}
<label for="layered_{$filter.type_lite}_{$id_value}"{if !$value.nbr} class="disabled"{else}{if isset($filter.is_color_group) && $filter.is_color_group} name="layered_{$filter.type_lite}_{$id_value}" class="layered_color" data-rel="{$id_value}_{$filter.id_key}"{/if}{/if}>
{if !$value.nbr}
{$value.name|escape:'html':'UTF-8'}{if $layered_show_qties}<span> ({$value.nbr})</span>{/if}
{else}
<a href="{$value.link}"{if $value.rel|trim != ''} data-rel="{$value.rel}"{/if}>{$value.name|escape:'html':'UTF-8'}{if $layered_show_qties}<span> ({$value.nbr})</span>{/if}</a>
{/if}
</label>
</li>
{/if}
{/foreach}
{else}

Если убираю:
{if isset($filter.is_color_group) && $filter.is_color_group}
<input class="color-option {if isset($value.checked) && $value.checked}on{/if} {if !$value.nbr}disable{/if}" type="button" name="layered_{$filter.type_lite}_{$id_value}" data-rel="{$id_value}_{$filter.id_key}" id="layered_id_attribute_group_{$id_value}" {if !$value.nbr}disabled="disabled"{/if} style="background: {if isset($value.color)}{if file_exists($smarty.const._PS_ROOT_DIR_|cat:"/img/co/$id_value.jpg")}url(img/co/{$id_value}.jpg){else}{$value.color}{/if}{else}#CCC{/if};" />
{if isset($value.checked) && $value.checked}<input type="hidden" name="layered_{$filter.type_lite}_{$id_value}" value="{$id_value}" />{/if}
{else}
то при выборе фильтра товаров не находит, хотя до этих изменений работало.
Что ещё нужно убрать или изменить?
_________
Удаление вирусов и вредоносного кода с любых сайтов.
24 Октябрь 2016, 14:04:58
Ответ #1
  • Ветеран
  • *****
  • Сообщений: 3419
  • Репутация: +79/-6
  • Сообщество PrestaShop
    • Просмотр профиля
Еще изменить modules/blocklayered/blocklayered.js
24 Октябрь 2016, 14:21:08
Ответ #2
  • Пользователь
  • **
  • Сообщений: 93
  • Репутация: +2/-0
  • PrestaShop 1.7.7.3
    • Просмотр профиля
_________
Удаление вирусов и вредоносного кода с любых сайтов.
24 Октябрь 2016, 14:28:56
Ответ #3
  • Ветеран
  • *****
  • Сообщений: 3419
  • Репутация: +79/-6
  • Сообщество PrestaShop
    • Просмотр профиля
Тем где Click on color, ты же изменил input у цвета, поэтому делай как в Click on checkbox.
24 Октябрь 2016, 14:44:24
Ответ #4
  • Пользователь
  • **
  • Сообщений: 93
  • Репутация: +2/-0
  • PrestaShop 1.7.7.3
    • Просмотр профиля
Так input у цвета теперь тоже типа checkbox, поэтому скрипт должен быть тот же или не так?
_________
Удаление вирусов и вредоносного кода с любых сайтов.
24 Октябрь 2016, 14:52:21
Ответ #5
  • Ветеран
  • *****
  • Сообщений: 16670
  • Репутация: +14630/-5
  • Сообщество PrestaShop
    • Просмотр профиля
blocklayered.js не нужно трогать.
Изменить нужно в шаблоне class и type.
<input class="checkbox" type="checkbox" ...
24 Октябрь 2016, 14:53:19
Ответ #6
  • Пользователь
  • **
  • Сообщений: 93
  • Репутация: +2/-0
  • PrestaShop 1.7.7.3
    • Просмотр профиля
_________
Удаление вирусов и вредоносного кода с любых сайтов.
24 Октябрь 2016, 15:04:21
Ответ #7
  • Ветеран
  • *****
  • Сообщений: 16670
  • Репутация: +14630/-5
  • Сообщество PrestaShop
    • Просмотр профиля
Вы пишите что удаляете, а не меняете это код.
<input class="color-option {if isset($value.checked) && $value.checked}on{/if} {if !$value.nbr}disable{/if}" type="button" name="layered_{$filter.type_lite}_{$id_value}" data-rel="{$id_value}_{$filter.id_key}" id="layered_id_attribute_group_{$id_value}" {if !$value.nbr}disabled="disabled"{/if} style="background: {if isset($value.color)}{if file_exists($smarty.const._PS_ROOT_DIR_|cat:"/img/co/$id_value.jpg")}url(img/co/{$id_value}.jpg){else}{$value.color}{/if}{else}#CCC{/if};" />
{if isset($value.checked) && $value.checked}<input type="hidden" name="layered_{$filter.type_lite}_{$id_value}" value="{$id_value}" />{/if}
Если удаляете, тогда переделайте функцию Click on color в blocklayered.js, так как у вас изменился type.
// Click on color
$('#layered_form input[type=button],
вы же удалили type=button
24 Октябрь 2016, 15:21:55
Ответ #8
  • Ветеран
  • *****
  • Сообщений: 3419
  • Репутация: +79/-6
  • Сообщество PrestaShop
    • Просмотр профиля
blocklayered.js не нужно трогать.
Изменить нужно в шаблоне class и type.
<input class="checkbox" type="checkbox" ...
Если меняешь шаблон, то меняншь и javascript.
По type checkbox нельзя индантифицировать чекбокс цвета, поэтому нужно добавлять класс и заменять #layered_form input[type=button] на #layered_form input.myclasscolor.
24 Октябрь 2016, 15:50:13
Ответ #9
  • Пользователь
  • **
  • Сообщений: 93
  • Репутация: +2/-0
  • PrestaShop 1.7.7.3
    • Просмотр профиля
Вы пишите что удаляете, а не меняете это код.
<input class="color-option {if isset($value.checked) && $value.checked}on{/if} {if !$value.nbr}disable{/if}" type="button" name="layered_{$filter.type_lite}_{$id_value}" data-rel="{$id_value}_{$filter.id_key}" id="layered_id_attribute_group_{$id_value}" {if !$value.nbr}disabled="disabled"{/if} style="background: {if isset($value.color)}{if file_exists($smarty.const._PS_ROOT_DIR_|cat:"/img/co/$id_value.jpg")}url(img/co/{$id_value}.jpg){else}{$value.color}{/if}{else}#CCC{/if};" />
{if isset($value.checked) && $value.checked}<input type="hidden" name="layered_{$filter.type_lite}_{$id_value}" value="{$id_value}" />{/if}
Если удаляете, тогда переделайте функцию Click on color в blocklayered.js, так как у вас изменился type.
// Click on color
$('#layered_form input[type=button],
вы же удалили type=button
Это я удаляю и посмотрите что остаётся:
<input type="checkbox" class="checkbox" name="layered_{$filter.type_lite}_{$id_value}" id="layered_{$filter.type_lite}{if $id_value || $filter.type == 'quantity'}_{$id_value}{/if}" value="{$id_value}{if $filter.id_key}_{$filter.id_key}{/if}"{if isset($value.checked)} checked="checked"{/if}{if !$value.nbr} disabled="disabled"{/if} />
_________
Удаление вирусов и вредоносного кода с любых сайтов.
24 Октябрь 2016, 16:35:50
Ответ #10
  • Партнер
  • Ветеран
  • ****
  • Сообщений: 22816
  • Репутация: +17143/-1
  • Разработка веб-сайтов и веб-программирование
    • Просмотр профиля
Изменять нужно полностью шаблон
/themes/default-bootstrap/modules/blocklayered/blocklayered.tpl
и функции javascript
/themes/default-bootstrap/js/modules/blocklayered/blocklayered.js
чтобы не было конфликтов между атрибутами типа цвет и другими.
Так для клика на ссылки с названием цвета рядом с чекбоксом изменяете в blocklayered.tpl
{if isset($filter.is_color_group) && $filter.is_color_group}
<input class="checkbox color-option {if isset($value.checked) && $value.checked}on{/if} {if !$value.nbr}disable{/if}" type="checkbox" name="layered_{$filter.type_lite}_{$id_value}" data-rel="{$id_value}_{$filter.id_key}" id="layered_id_attribute_group_{$id_value}" {if !$value.nbr}disabled="disabled"{/if}  {if isset($value.checked) && $value.checked}checked="checked"{/if}/>
{if isset($value.checked) && $value.checked}<input type="hidden" name="layered_{$filter.type_lite}_{$id_value}" value="{$id_value}" />{/if}
{else}
и в blocklayered.js
// Click on color
$(document).on('click', '#layered_form input.color-option, #layered_form label.layered_color', function(e) {
...
$.each($(this).parent().parent().find('input.color-option'), function (it, item) {
При клике на самом чекбоксе фильтры будут работать, но cбрасывать чекбокс не будет (при повторном клике).
Интернет-магазин под ключ.
Какой выбрать движок для интернет магазина ?
Какой движок лучше ?
Magento или Prestashop ?
Решение всех Ваших вопросов в создании Интернет-магазина.
24 Октябрь 2016, 17:06:37
Ответ #11
  • Пользователь
  • **
  • Сообщений: 93
  • Репутация: +2/-0
  • PrestaShop 1.7.7.3
    • Просмотр профиля
При клике на самом чекбоксе фильтры будут работать, но cбрасывать чекбокс не будет (при повторном клике).
А почему не будут сбрасывать и как это исправить?
_________
Удаление вирусов и вредоносного кода с любых сайтов.
24 Октябрь 2016, 18:14:37
Ответ #12
  • Партнер
  • Ветеран
  • ****
  • Сообщений: 22816
  • Репутация: +17143/-1
  • Разработка веб-сайтов и веб-программирование
    • Просмотр профиля
А почему не будут сбрасывать и как это исправить?
Ответ в моем первом посте, менять нужно шаблон и функции javascript так как 2 вида чекбоксов вызывают конфликт между собой.
Пример дал как изменить.
Интернет-магазин под ключ.
Какой выбрать движок для интернет магазина ?
Какой движок лучше ?
Magento или Prestashop ?
Решение всех Ваших вопросов в создании Интернет-магазина.
24 Октябрь 2016, 21:26:58
Ответ #13
  • Пользователь
  • **
  • Сообщений: 93
  • Репутация: +2/-0
  • PrestaShop 1.7.7.3
    • Просмотр профиля
Всё равно не понимаю, почему первом (верхнем) случае галочки работают как надо, а во втором - нет:

<div class="layered_filter">
<div class="layered_subtitle_heading">
<span class="layered_subtitle">Size</span>
</div>
<ul id="ul_layered_id_attribute_group_7" class="col-lg-12 layered_filter_ul">
<li class="nomargin hiddable col-lg-12">
<div class="checker" id="uniform-layered_id_attribute_group_43"><span><input type="checkbox" class="checkbox" name="layered_id_attribute_group_43" id="layered_id_attribute_group_43" value="43_7"></span></div>
<label for="layered_id_attribute_group_43"><a href="/12-tovar#bottom_size-xs_83_88">XS (83-88 cm)<span> (3)</span></a></label>
</li>
<li class="nomargin hiddable col-lg-12">
<div class="checker" id="uniform-layered_id_attribute_group_44"><span><input type="checkbox" class="checkbox" name="layered_id_attribute_group_44" id="layered_id_attribute_group_44" value="44_7"></span></div>
<label for="layered_id_attribute_group_44"><a href="/12-tovar#bottom_size-s_89_94_cm">S (89-94 cm)<span> (3)</span></a></label>
</li>
</ul>
</div>


<div class="layered_filter">
<div class="layered_subtitle_heading">
<span class="layered_subtitle">Bottom Style</span>
</div>
<ul id="ul_layered_id_attribute_group_8" class="col-lg-12 layered_filter_ul">
<li class="nomargin hiddable col-lg-12">
<div class="checker" id="uniform-layered_id_attribute_group_48"><span><input type="checkbox" class="checkbox" name="layered_id_attribute_group_48" id="layered_id_attribute_group_48" value="48_8"></span></div>
<label for="layered_id_attribute_group_48"><a href="/12-tovar#bottom_style_behind-miami">Miami<span> (1)</span></a></label>
</li>
<li class="nomargin hiddable col-lg-12">
<div class="checker" id="uniform-layered_id_attribute_group_49"><span><input type="checkbox" class="checkbox" name="layered_id_attribute_group_49" id="layered_id_attribute_group_49" value="49_8"></span></div>
<label for="layered_id_attribute_group_49"><a href="/12-tovar#bottom_style_behind-rio_2">Rio 2<span> (1)</span></a></label>
</li>
</ul>
</div>

Имена чекбоксов правильные и разные
_________
Удаление вирусов и вредоносного кода с любых сайтов.
25 Октябрь 2016, 09:43:50
Ответ #14
  • Ветеран
  • *****
  • Сообщений: 16670
  • Репутация: +14630/-5
  • Сообщество PrestaShop
    • Просмотр профиля
Смотрите файл blocklayered.js и будет понятно. Переключение, запоминание выбранного фильтра делается через функции javascript. Для фильтров цвета исполуют значения из скрытых полей input тип hidden.