Jump to content

Recommended Posts

  • 1 year later...

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

 

Edited by martinways
Link to post
Share on other sites

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

 

Повторяю. 

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

Link to post
Share on other sites

Повторяю. 

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

 

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

Edited by martinways
Link to post
Share on other sites

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

 

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

Link to post
Share on other sites

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

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

Link to post
Share on other sites

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

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

Edited by martinways
Link to post
Share on other sites

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

 http://simpla-template.org.ua/products/varianty-tovara

 

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

Edited by martinways
Link to post
Share on other sites

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

 http://simpla-template.org.ua/products/varianty-tovara

 

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

Вы купили у барыги который сей модуль вовсе не реализовывал а тупо своровал, по идее разработка что по ссылке принадлежит автору DaVinci.
Link to post
Share on other sites

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

Edited by martinways
Link to post
Share on other sites

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

 

 



<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>
Edited by martinways
Link to post
Share on other sites

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

 

 

 <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>
Link to post
Share on other sites
  • 2 months later...

 

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

 

 

 <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>

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

Link to post
Share on other sites

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

 

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

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

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

Link to post
Share on other sites

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

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...