Перейти к содержимому


Фото
- - - - -

Выбрать размер и цвет!


  • Чтобы отвечать, сперва войдите на форум
19 ответов в теме

#1 webopro

webopro
  • Пользователь
  • 1 сообщений
  • Заказчик
  • Версия CMS:2.x

Опубликовано 21.11.2013 - 17:34

Всем привет! Такой вопрос. Как сделать так чтоб можно было выбирать у товара размер и цвет? на пример коньки, выбираем размер..
Как такое провернуть?  


#2 Simplamarket

Simplamarket
  • Забаненный
  • 533 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x

Опубликовано 09.09.2015 - 11:22

В общем, потребовалось для будущего магазина одежды реализовать функцию выбора размера и цвета, на одном из сайтов нашел в продаже модуль за небольшие деньги, приобрел , выполнил все по инструкции, но в итоге оказалось модуль недоделанный, в админке все работает (есть 1 маленький баг, о нем позже), к вариантам размера и цвета удобно привязывается фото, а вот на странице товара работает только смена фотографии при выборе в выпадающем списке варианта цвета, а остальное не работает - то есть, при выборе вариантов цена не меняется автоматически (все время отображается цена последнего варианта), а также не скрываются недоступные для данного цвета размеры и наоборот. В корзине все работает как надо, то есть подтягивается фото выбранного варианта цвета. Фактически надо допилить страницу товара, похоже, что там отсутствуют скрипты изменения цены и скрытия недоступных вариантов. Если доделаем общими усилиями, то данная доработка станет достоянием общественности, а её так не хватает в стандартном функционале. Прикрепил архив с инструкцией и файлами (в инструкции кстати как раз в конце отсутствует пункт по редактированию product.tpl , но в файлах он есть, его нужно только допилить) 

 

Повторяю. 

Приобретайте доработки у их авторов, тогда авторы будут всё доделывать. А покупать на сайтах у барыг за смешные деньги модуль, а затем выкладывать его в бесплатный доступ - это неуважение к чужому труду.



#3 martinways

martinways
  • Пользователь
  • 88 сообщений

Опубликовано 09.09.2015 - 11:38

Повторяю. 

Приобретайте доработки у их авторов, тогда авторы будут всё доделывать. А покупать на сайтах у барыг за смешные деньги модуль, а затем выкладывать его в бесплатный доступ - это неуважение к чужому труду.

 

Так Вы автор этого расширения что ли? Я откуда знаю кто написал тот  или  иной код - зашел на сайт, купил. Не работает)))


Изменено: martinways, 09.09.2015 - 11:38


#4 Simplamarket

Simplamarket
  • Забаненный
  • 533 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x

Опубликовано 09.09.2015 - 11:39

Так Вы автор этого расширения что ли?

Нет. Именно этого - скорее всего simplashop.com. Детально не смотрел, но они называют доработки в таком стиле.



#5 mishanya

mishanya
  • Фрилансер
  • 2 575 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Ukraine

Опубликовано 09.09.2015 - 12:10

Так Вы автор этого расширения что ли? Я откуда знаю кто написал тот  или  иной код - зашел на сайт, купил. Не работает)))

 

ну работает оно так как описано в функционале (автор действительно simplashop). изменять цену при смене цвета не проблема. а насчет размера - помоему в этой доработке один размер = один цвет. там нельзя несколько размеров прикрепить к цвету. фильтр для селекта можно тоже сделать, чтобы при выборе цвета размер менялся. смотрите в сторону этого



#6 mart

mart
  • Пользователь
  • 1 331 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Venlo

Опубликовано 10.09.2015 - 01:01

Как автор доработки скажу, что можно делаю любые сочетания цвета-размера. Но каждый вариант надо задавать отдельно, т.к. там свои остатки и возможно свои цены. Фото к каждому варианту (если этот модуль включает и фото), то назначаются именно вариант (паре цвет-размер), а не конкретно цвету или размеру.

Этот скрипт был рабочим - внесенные изменения в нем не проверял, но обычно при попытке скрыть автора "нехорошие люди" удаляю не только форматирование, но и куски кода случайно.



#7 martinways

martinways
  • Пользователь
  • 88 сообщений

Опубликовано 15.09.2015 - 19:30

Люди добрые, подскажите. в стандартной версии поле выбора цвета скрывается, если есть только 1 варианта цвета 

Код такой {if $product->colors|count < 2} style="display:none;"{/if} , а как сделать ,чтобы поле скрывалось только тогда, когда вообще нет вариантов цвета, а если есть 1 вариант, то он не скрывался?  Ставлю colors|count < 1   - поле всеравно скрывается, а ставлю colors|count = 0  - то ошибка синтаксиса.


Изменено: martinways, 15.09.2015 - 19:32


#8 Kosjak76

Kosjak76
  • Модератор
  • 3 854 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Харьков, Украина

Опубликовано 15.09.2015 - 19:35

Попробуйте colors|count == 0



#9 martinways

martinways
  • Пользователь
  • 88 сообщений

Опубликовано 15.09.2015 - 20:30

Чет не срабатывает тогда style="display:none;"  если поле цвета не заполнено. Это вобщем я купил вот эту доработку

 http://simpla-templa...varianty-tovara

 

Но мне хотелось бы сделать следующее - поменять инпуты на выпадающий селект, а также не устраивает то, что если  у вариантов указан например 1 цвет и 1 размер, то они скрываются вовсе, а хотелось бы чтоб они скрывались, только если их вовсе нет. Реально ли такое реализовать в данном расширении?


Изменено: martinways, 15.09.2015 - 20:37


#10 Noxter

Noxter
  • Фрилансер
  • 1 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 15.09.2015 - 20:36

Чет не срабатывает тогда style="display:none;"  если поле цвета не заполнено. Это вобщем я купил вот эту доработку
 http://simpla-templa...varianty-tovara
 
Но мне хотелось бы сделать следующее - поменять инпуты на выпадающий селект, а также не устраивает то, что если  у вариантов указан например 1 цвет и 1 размер, то они скрываются вовсе, а хотелось бы чтоб они скрывались, если их поле пустое. Реально ли такое реализовать в данном расширении?

Вы купили у барыги который сей модуль вовсе не реализовывал а тупо своровал, по идее разработка что по ссылке принадлежит автору DaVinci.

#11 martinways

martinways
  • Пользователь
  • 88 сообщений

Опубликовано 15.09.2015 - 20:38

Опять барыга? Да чтож такое, как их распознать? Отдал 35$, думал цена уже адекватная и на тебе. В первый раз купил за 250рубелй, так модуль вообще не работал, в этот раз работает, но выходит, что дал заработать барыге?? И че теперь делать...  Почему у вас на форуме нет черных списков сайтов-барыг? Как поступать прстым покупателям, которые  не в курсе происходящего?


Изменено: martinways, 15.09.2015 - 20:42


#12 martinways

martinways
  • Пользователь
  • 88 сообщений

Опубликовано 15.09.2015 - 21:52

Ну так что, реально ли переделать с инпутов на селекты? По идее надо чуть изменить скрипт

 

 



<tr{if $product->colors|count < 2} style="display:none;"{/if}>
<td id="colors">
Цвета:<br/>
{foreach $product->colors as $k=>$v}<label{if $v@first} class="active"{/if}><input type="radio" name="color" value="{$k}"{if $v@first} checked{/if} />{$k}</label>{/foreach}
</td>
</tr>
<tr{if $product->heights|count < 2} style="display:none;"{/if}>
<td id="heights">
Рост:<br/>
{foreach $product->heights as $k=>$v}<label{if $v@first} class="active"{/if}><input type="radio" name="height" value="{$k}"{if $v@first} checked{/if} />{$k}</label>{/foreach}
</td>
</tr>
<tr{if $product->variants|count < 2} style="display:none;"{/if}>
<td id="variants">
Размеры:<br/>
{foreach $product->variants as $v}<label{if $v@first} class="active"{/if}><input type="radio" name="variant" value="{$v->id}"{if $v@first} checked{/if} />{$v->name}</label>{/foreach}
</td>
</tr>





var variants = {
{foreach $product->variants as $v} '{$v->id}': {literal}{{/literal}'color':'{$v->color}', 'images_ids':[{$v->images_ids}], 'height':'{$v->height}', 'name':'{$v->name}', 'price':'{$v->price}', 'compare_price':'{$v->compare_price}'{literal}}{/literal},
{/foreach}
};

{literal}

function changeColor(){
var color = $('input[name=color]:checked'),
arr = [];

$('#colors label').removeClass('active');
color.parent().addClass('active');

$('#heights label').remove(); //удаляем все ростовки
$.each(variants, function(id, val) {
if(val['color'] == color.val() && $.inArray(val['height'], arr) < 0) {
arr.push(val['height']);
$('#heights').append('<label><input type="radio" name="height" value="' + val['height'] + '" />' + val['height'] + '</label>');
}
});

if(arr.length > 1) $('#heights').show();
else $('#heights').hide();

$("input[name=height]:first").attr('checked', true).parent().addClass('active');
changeHeight();
}

function changeHeight(){
var height = $('input[name=height]:checked'),
c = $('input[name=color]:checked').val(),
arr = [];

$('#heights label').removeClass('active');
height.parent().addClass('active');

$('#variants label').remove(); //удаляем все ростовки
$.each(variants, function(id, val) {
if(val['color'] == c && val['height'] == height.val() && $.inArray(val['name'], arr) < 0) {
arr.push(val['name']);
$('#variants').append('<label><input type="radio" name="variant" value="' + id + '" />' + val['name'] + '</label>');
}
});

if(arr.length > 1) $('#variants').show();
else $('#variants').hide();

$("input[name=variant]:first").attr('checked', true).parent().addClass('active');
changeVariant();
}

function changeVariant(){
var variant = $('input[name=variant]:checked'),
val = variants[variant.val()],
images_ids = val['images_ids'],
image_id = images_ids[0],
arr = [];

$('.images a').hide();
if(image_id != '' && $('#image' + image_id) !== 'undefined') {
$('#big_image img').attr('src', $('#image'+image_id).attr('rel'));
$.each(images_ids, function(id, val) { $('#image' + val).show(); });
}

$('#variants label').removeClass('active');
variant.parent().addClass('active');

$('.compare_price').text(val['compare_price']);
$('.price').text(val['price']);
}

$(function() {
$('#colors input').live('change', function(){ changeColor(); });
$('#heights input').live('change', function(){ changeHeight(); });
$('#variants input').live('change', function(){ changeVariant(); });
changeColor();
});
{/literal}
</script>

Изменено: martinways, 15.09.2015 - 21:52


#13 Noxter

Noxter
  • Фрилансер
  • 1 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 15.09.2015 - 22:18

Да реально, пишите в скайп simplacms, сделаю.

#14 martinways

martinways
  • Пользователь
  • 88 сообщений

Опубликовано 20.09.2015 - 12:42

Люди добрые, помогите переделать выбор цвета, роста и размера с инпутов на селекты, вот код

 

 

 <tr>            
            <td id="colors">
                Цвета: {foreach $product->colors as $k=>$v}<label{if $v@first} class="active"{/if}><input type="radio" name="color" value="{$k}"{if $v@first} checked{/if} />{$k}</label>{/foreach} 
            </td>
    
               
            <td id="heights" {if $product->heights|count < 2} style="display:none;"{/if}>
                Рост: {foreach $product->heights as $k=>$v}<label{if $v@first} class="active"{/if}><input type="radio" name="height" value="{$k}"{if $v@first} checked{/if} />{$k}</label>{/foreach}
            </td>
           
            <td id="variants"{if $product->variants|count < 2} style="display:none;"{/if}>
                Размеры: {foreach $product->variants as $v}<label{if $v@first} class="active"{/if}><input type="radio" name="variant" value="{$v->id}"{if $v@first} checked{/if} />{$v->name}</label>{/foreach} 
            </td>

 

 <script>

    var variants = {
        {foreach $product->variants as $v} '{$v->id}': {literal}{{/literal}'color':'{$v->color}', 'images_ids':[{$v->images_ids}], 'height':'{$v->height}', 'name':'{$v->name}', 'price':'{$v->price|convert}', 'compare_price':'{$v->compare_price}'{literal}}{/literal},
        {/foreach}   
    };

    {literal}
    
    function changeColor(){
        var color = $('input[name=color]:checked'),
            arr = []; 
            
        $('#colors label').removeClass('active');   
        color.parent().addClass('active');
        
        $('#heights label').remove(); //удаляем все ростовки
        $.each(variants, function(id, val) {
            if(val['color'] == color.val() && $.inArray(val['height'], arr) < 0) { 
                arr.push(val['height']);   
                $('#heights').append('<label><input type="radio" name="height" value="' + val['height'] + '" />' + val['height'] + '</label>'); 
            }
        });
        
        if(arr.length > 1) $('#heights').show();
        else $('#heights').hide();       

        $("input[name=height]:first").attr('checked', true).parent().addClass('active');
        changeHeight();       
    }
    
    function changeHeight(){
        var height = $('input[name=height]:checked'),
            c = $('input[name=color]:checked').val(),
            arr = []; 
            
        $('#heights label').removeClass('active');   
        height.parent().addClass('active');

        $('#variants label').remove(); //удаляем все ростовки
        $.each(variants, function(id, val) {
            if(val['color'] == c && val['height'] == height.val() && $.inArray(val['name'], arr) < 0) { 
                arr.push(val['name']);   
                $('#variants').append('<label><input type="radio" name="variant" value="' + id + '" />' + val['name'] + '</label>'); 
            }
        });
        
        if(arr.length > 1) $('#variants').show();
        else $('#variants').hide();

        $("input[name=variant]:first").attr('checked', true).parent().addClass('active');
        changeVariant();       
    }

    function changeVariant(){
        var variant = $('input[name=variant]:checked'),
            val = variants[variant.val()],
            images_ids = val['images_ids'],
            image_id = images_ids[0],
            arr = [];
            
        $('.images a').hide();
        if(image_id != '' && $('#image' + image_id) !== 'undefined') {
            $('#big_image img').attr('src', $('#image'+image_id).attr('rel'));
            $.each(images_ids, function(id, val) { $('#image' + val).show(); });
        }
            
        $('#variants label').removeClass('active');   
        variant.parent().addClass('active');            

        $('.compare_price').text(val['compare_price']);   
        $('.price').text(val['price']);   
    }

    $(function() {
        $('#colors input').live('change', function(){ changeColor(); });
        $('#heights input').live('change', function(){ changeHeight(); });
        $('#variants input').live('change', function(){ changeVariant(); });
        changeColor();
    });
    {/literal}
    </script>


#15 as564

as564
  • Пользователь
  • 51 сообщений
  • Дизайн
  • Версия CMS:2.x

Опубликовано 12.12.2015 - 11:14

Люди добрые, помогите переделать выбор цвета, роста и размера с инпутов на селекты, вот код

 

 

 <tr>            
            <td id="colors">
                Цвета: {foreach $product->colors as $k=>$v}<label{if $v@first} class="active"{/if}><input type="radio" name="color" value="{$k}"{if $v@first} checked{/if} />{$k}</label>{/foreach} 
            </td>
    
               
            <td id="heights" {if $product->heights|count < 2} style="display:none;"{/if}>
                Рост: {foreach $product->heights as $k=>$v}<label{if $v@first} class="active"{/if}><input type="radio" name="height" value="{$k}"{if $v@first} checked{/if} />{$k}</label>{/foreach}
            </td>
           
            <td id="variants"{if $product->variants|count < 2} style="display:none;"{/if}>
                Размеры: {foreach $product->variants as $v}<label{if $v@first} class="active"{/if}><input type="radio" name="variant" value="{$v->id}"{if $v@first} checked{/if} />{$v->name}</label>{/foreach} 
            </td>

 

 <script>

    var variants = {
        {foreach $product->variants as $v} '{$v->id}': {literal}{{/literal}'color':'{$v->color}', 'images_ids':[{$v->images_ids}], 'height':'{$v->height}', 'name':'{$v->name}', 'price':'{$v->price|convert}', 'compare_price':'{$v->compare_price}'{literal}}{/literal},
        {/foreach}   
    };

    {literal}
    
    function changeColor(){
        var color = $('input[name=color]:checked'),
            arr = []; 
            
        $('#colors label').removeClass('active');   
        color.parent().addClass('active');
        
        $('#heights label').remove(); //удаляем все ростовки
        $.each(variants, function(id, val) {
            if(val['color'] == color.val() && $.inArray(val['height'], arr) < 0) { 
                arr.push(val['height']);   
                $('#heights').append('<label><input type="radio" name="height" value="' + val['height'] + '" />' + val['height'] + '</label>'); 
            }
        });
        
        if(arr.length > 1) $('#heights').show();
        else $('#heights').hide();       

        $("input[name=height]:first").attr('checked', true).parent().addClass('active');
        changeHeight();       
    }
    
    function changeHeight(){
        var height = $('input[name=height]:checked'),
            c = $('input[name=color]:checked').val(),
            arr = []; 
            
        $('#heights label').removeClass('active');   
        height.parent().addClass('active');

        $('#variants label').remove(); //удаляем все ростовки
        $.each(variants, function(id, val) {
            if(val['color'] == c && val['height'] == height.val() && $.inArray(val['name'], arr) < 0) { 
                arr.push(val['name']);   
                $('#variants').append('<label><input type="radio" name="variant" value="' + id + '" />' + val['name'] + '</label>'); 
            }
        });
        
        if(arr.length > 1) $('#variants').show();
        else $('#variants').hide();

        $("input[name=variant]:first").attr('checked', true).parent().addClass('active');
        changeVariant();       
    }

    function changeVariant(){
        var variant = $('input[name=variant]:checked'),
            val = variants[variant.val()],
            images_ids = val['images_ids'],
            image_id = images_ids[0],
            arr = [];
            
        $('.images a').hide();
        if(image_id != '' && $('#image' + image_id) !== 'undefined') {
            $('#big_image img').attr('src', $('#image'+image_id).attr('rel'));
            $.each(images_ids, function(id, val) { $('#image' + val).show(); });
        }
            
        $('#variants label').removeClass('active');   
        variant.parent().addClass('active');            

        $('.compare_price').text(val['compare_price']);   
        $('.price').text(val['price']);   
    }

    $(function() {
        $('#colors input').live('change', function(){ changeColor(); });
        $('#heights input').live('change', function(){ changeHeight(); });
        $('#variants input').live('change', function(){ changeVariant(); });
        changeColor();
    });
    {/literal}
    </script>

а че он не работает?



#16 Noxter

Noxter
  • Фрилансер
  • 1 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 12.12.2015 - 12:27

а че он не работает?

А хрен его знает :D
Может руки не с того места растут?

#17 mishanya

mishanya
  • Фрилансер
  • 2 575 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Ukraine

Опубликовано 12.12.2015 - 12:33

а че он не работает?

 

смотрите выше, человек сам просит код доработать, собственно поетому и не работает



#18 Kors

Kors
  • Фрилансер
  • 3 522 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Россия

Опубликовано 12.12.2015 - 13:10

смотрите выше, человек сам просит код доработать, собственно поетому и не работает

 

Код не работает по причине того, что человек просит его доработать?

Какая необычная ситуация...

Может, тогда человеку надо лишь отозвать просьбу о доработке? Глядишь, код и заработает...



#19 as564

as564
  • Пользователь
  • 51 сообщений
  • Дизайн
  • Версия CMS:2.x

Опубликовано 12.12.2015 - 13:20

Это и все умозаключение? тогда вы мастера )))))



#20 Kors

Kors
  • Фрилансер
  • 3 522 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Россия

Опубликовано 12.12.2015 - 13:40

Если Вы хотите, чтобы Вам починили, то надо не бросать кусок кода, как кость собаке, а давать данные максимально полные, как минимум URL страницы, где этот код не работает...






0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых