Jump to content

Скрыть недоступные атрибуты


Recommended Posts

Добрый день. Есть необходимость скрывать недоступные опции...

 

Допустим, куртка черного цвета есть в размерах 48, 50, 52, а куртка белого цвета в размерах 50 и 52

 

Стандартно в престе получается так:

 

Цвет

- черный

- белый

 

Размер

- 48

- 50

- 52

 

Как скрыть при выборе белого цвета недоступный 48 размер?

 

Знаю, что это умеют модули:

 

Attribute Order

http://www.presto-ch...bute-order.html

 

и

 

Attribute Wizard

http://www.presto-ch...ute-wizard.html

 

Attribute Wizard PRO

http://www.presto-ch...wizard-pro.html

этого не умеет

 

Какие решения могут быть без установки каких-либо модулей?

 

И у кого есть Attribute Order или Attribute Wizard?? Могу предложить обмен на Attribute Wizard PRO... так сказать для ознакомления в учебных целях и обязательного последующего удаления, дабы права разработчиков не нарушать ;)

Edited by Caracal (see edit history)
Link to comment
Share on other sites

мм, навскидку Настройки - Продукты -

Display unavailable product attributes on product page:

 

насколько я помню в коде именно так все решается. Модуль если чо шли по адресу - Москва, Шаболовка 37, тёте Тане ))

Link to comment
Share on other sites

  • 2 months later...

Добрый день. Есть необходимость скрывать недоступные опции...

 

Допустим, куртка черного цвета есть в размерах 48, 50, 52, а куртка белого цвета в размерах 50 и 52

 

Стандартно в престе получается так:

 

Цвет

- черный

- белый

 

Размер

- 48

- 50

- 52

 

Как скрыть при выборе белого цвета недоступный 48 размер?

 

Знаю, что это умеют модули:

 

Attribute Order

http://www.presto-ch...bute-order.html

 

и

 

Attribute Wizard

http://www.presto-ch...ute-wizard.html

 

Attribute Wizard PRO

http://www.presto-ch...wizard-pro.html

этого не умеет

 

Какие решения могут быть без установки каких-либо модулей?

 

И у кого есть Attribute Order или Attribute Wizard?? Могу предложить обмен на Attribute Wizard PRO... так сказать для ознакомления в учебных целях и обязательного последующего удаления, дабы права разработчиков не нарушать ;)

Почему Вы решили, что в AWP этого нет - ведь это расширенная версия AW?

Link to comment
Share on other sites

Почему Вы решили, что в AWP этого нет - ведь это расширенная версия AW?

Потому что у меня есть AWP. Сам разраб в какой-то из тем говорил, что нет этого. AWP - он чтобы неограниченное кол-во комбинаций создавать нужен. Благо я уже нашел выход.
Link to comment
Share on other sites

Потому что у меня есть AWP. Сам разраб в какой-то из тем говорил, что нет этого. AWP - он чтобы неограниченное кол-во комбинаций создавать нужен. Благо я уже нашел выход.

А не подскажете -как разобрались?

Link to comment
Share on other sites

А не подскажете -как разобрались?

Вот так:

 

$(function(){

 var groupIds=new Array();
 $('select[id^="group_"]').each(function(){
   groupIds.push(this.id);
 });
 var allCombinations=new Array();
 $.each(combinations,function(key,combination){
   allCombinations.push(combination['idsAttributes']);
 });

 $('select[id^="group_"]').change(function(){checkCombination()});
 $('a[id^="color_"][class="color_pick"]').click(function(){checkCombination()});
 checkCombination();

 function checkCombination()
 {
   $('select[id^="group_"] option').removeAttr('disabled');
   $.each(groupIds,function(key,groupId){
  var this_select=$('select[id='+groupId+']');
  this_select.children('option').each(function(){
    if(this_select.val()!=this.value){
	  var combination=new Array();
	  combination[key]=this.value;
	  $.each(groupIds,function(key2,groupId2){
	    if(key!=key2){
		  combination[key2]=$('select[id='+groupId2+']').val();
	    }
	  });
	  var position=-1;
	  $.each(allCombinations,function(key1,theCombination){
	    if(position==-1){
		  position=key1;
		  $.each(theCombination,function(key2,value){
		    if(combination[key2]!=value)position=-1;
		  });
	    }
	  });
	  if(position<0)
	  {
	    this_select.children('option[value='+this.value+']').attr('disabled','disabled');
	  }
    }
  });
   });
 }

});

Link to comment
Share on other sites

Поставил в head.tpl в блок <head>. Реакции никакой. Взял в теги <script>...</script>.

Блин, у меня 1.5.2. А скрипт только для 1.4?

ну вообще да...

скрипт просто переводит option в disabled

Link to comment
Share on other sites

Кстати, купил Attribute Order. Может или я еще в Presta слабоват и не додую, в чем дело или модуль никудышний. Короче, кроме того что он может менятьместами группы атрибутов и скрывать невозможные комбинации. Но дело в том, что после первого или второго выбора уже невозможно выбрать и заложенную комбинацию. Если нужно разъяснение , могу привести и приложить скрины.

Edited by pvi1 (see edit history)
Link to comment
Share on other sites

header.tpl можно... можно и между body ...особой роли не играет

 

Поставил версию 1.4.4 RUS., вставил скрипт, выводит ошибку

 

Fatal error: Uncaught exception 'SmartyCompilerException' with message 'Syntax Error in template "Z:\home\localhost\www\Presta/themes/prestashop/header.tpl" on line 78 "$('select ').change(function(){checkCombination()});" unknown function "checkCombination"' in Z:\home\localhost\www\Presta\tools\smarty\sysplugins\smarty_internal_templatecompilerbase.php:431 Stack trace: #0 Z:\home\localhost\www\Presta\tools\smarty\sysplugins\smarty_internal_templateparser.php(2660): Smarty_Internal_TemplateCompilerBase->trigger_template_error('unknown functio...') #1 Z:\home\localhost\www\Presta\tools\smarty\sysplugins\smarty_internal_templateparser.php(2812): Smarty_Internal_Templateparser->yy_r148() #2 Z:\home\localhost\www\Presta\tools\smarty\sysplugins\smarty_internal_templateparser.php(2912): Smarty_Internal_Templateparser->yy_reduce(148) #3 Z:\home\localhost\www\Presta\tools\smarty\sysplugins\smarty_internal_smartytemplatecompiler.php(51): Smarty_Internal_Templateparser->doParse(16, '}') #4 Z:\home\localhost\www\Presta\tools\smart in Z:\home\localhost\www\Presta\tools\smarty\sysplugins\smarty_internal_templatecompilerbase.php on line 431

Link to comment
Share on other sites

Поставил версию 1.4.4 RUS., вставил скрипт, выводит ошибку

 

Fatal error: Uncaught exception 'SmartyCompilerException' with message 'Syntax Error in template "Z:\home\localhost\www\Presta/themes/prestashop/header.tpl" on line 78 "$('select ').change(function(){checkCombination()});" unknown function "checkCombination"' in Z:\home\localhost\www\Presta\tools\smarty\sysplugins\smarty_internal_templatecompilerbase.php:431 Stack trace: #0 Z:\home\localhost\www\Presta\tools\smarty\sysplugins\smarty_internal_templateparser.php(2660): Smarty_Internal_TemplateCompilerBase->trigger_template_error('unknown functio...') #1 Z:\home\localhost\www\Presta\tools\smarty\sysplugins\smarty_internal_templateparser.php(2812): Smarty_Internal_Templateparser->yy_r148() #2 Z:\home\localhost\www\Presta\tools\smarty\sysplugins\smarty_internal_templateparser.php(2912): Smarty_Internal_Templateparser->yy_reduce(148) #3 Z:\home\localhost\www\Presta\tools\smarty\sysplugins\smarty_internal_smartytemplatecompiler.php(51): Smarty_Internal_Templateparser->doParse(16, '}') #4 Z:\home\localhost\www\Presta\tools\smart in Z:\home\localhost\www\Presta\tools\smarty\sysplugins\smarty_internal_templatecompilerbase.php on line 431

У тебя в php ошибка. Неправильно поставил.

Сейчас проверил на демке 1.5.2 - работает. С селектами во всяком случае.

Link to comment
Share on other sites

А что неправильно поставил? В файле header.tpl после строки {$HOOK_HEADER} я вставил скрипт

<script>
$(function(){
  var groupIds=new Array();
  $('select ').each(function(){
 groupIds.push(this.id);
  });
  var allCombinations=new Array();
  $.each(combinations,function(key,combination){
 allCombinations.push(combination['idsAttributes']);
  });
  $('select ').change(function(){checkCombination()});
  $('a ').click(function(){checkCombination()});
  checkCombination();
  function checkCombination()
  {
 $('select option').removeAttr('disabled');
 $.each(groupIds,function(key,groupId){
var this_select=$('select ');
this_select.children('option').each(function(){
if(this_select.val()!=this.value){
var combination=new Array();
combination[key]=this.value;
$.each(groupIds,function(key2,groupId2){
if(key!=key2){
combination[key2]=$('select ').val();
}
});
var position=-1;
$.each(allCombinations,function(key1,theCombination){
if(position==-1){
position=key1;
$.each(theCombination,function(key2,value){
if(combination[key2]!=value)position=-1;
});
}
});
if(position<0)
{
this_select.children('option ').attr('disabled','disabled');
}
}
});
 });
  }
});
</script>

Link to comment
Share on other sites

У меня в отдельном файле вынесено.

Вот так:

 

<script type="text/javascript" src="/themes/dsmain/js/disopt.js"></script>

...и работает

 

Стоит в header.tpl под строкой:

<script type="text/javascript" src="{$js_dir}jquery.scroll.min.js"></script>

Edited by Caracal (see edit history)
Link to comment
Share on other sites

Сделал так. Скрипт заработал Но появляется комбинация по умолчанию и все. Может, я комбинации неправильно ввожу. Ну, например, как Вы описывали свою проблему в посте:

 

1 комбинация: Цвет - черный, размер 48

2 комбинация: Цвет - черный, размер 50

3 комбинация: Цвет - черный, размер 52

4 комбинация: Цвет - белый, размер 50

5комбинация: Цвет - белый , размер 52

По умолчанию включена первая комбинация и она появляется, остальные не работают. Что не так?

Link to comment
Share on other sites

Может быть такое, что много недоступных комбинаций.

Решение не универсальное, иначе бы в престе разработчики давно наладили Display unavailable product attributes on product page

 

Тут всё индивидуально в зависимости от потребностей.

 

Если из 6 возможных 1 недоступная, то должно работать нормально...

 

В данном случае недоступна Цвет - белый, размер 48

В 48 размере у вас не может быть доступен белый цвет. Переключите размер на другой и оба цвета станут доступны - это нормальная работа скрипта.

 

Лучше по умолчанию ставить в обоих параметрах доступные комбинации.

например Цвет - черный, размер 50

Link to comment
Share on other sites

У меня в отдельном файле вынесено.

Вот так:

 

<script type="text/javascript" src="/themes/dsmain/js/disopt.js"></script>

...и работает

 

Стоит в header.tpl под строкой:

<script type="text/javascript" src="{$js_dir}jquery.scroll.min.js"></script>

У меня как на скрине. В коде ссылки выводятся перебором, естественно я поставил ссылку после перебора.

Кстати ссылки {$js_dir}jquery.scroll.min.js у меня нет

post-439109-0-80931000-1354211718_thumb.jpg

Link to comment
Share on other sites

Может быть такое, что много недоступных комбинаций.

Решение не универсальное, иначе бы в престе разработчики давно наладили Display unavailable product attributes on product page

 

Тут всё индивидуально в зависимости от потребностей.

 

Если из 6 возможных 1 недоступная, то должно работать нормально...

 

В данном случае недоступна Цвет - белый, размер 48

В 48 размере у вас не может быть доступен белый цвет. Переключите размер на другой и оба цвета станут доступны - это нормальная работа скрипта.

 

Лучше по умолчанию ставить в обоих параметрах доступные комбинации.

например Цвет - черный, размер 50

Так и сделал. Из 6 комбинаций только одна невозможная и по умолчанию поставил, как Вы сказали. Никак

Link to comment
Share on other sites

Значит у вас что-то не так.

Вот например...

 

Переходим на официальном сайте на демку 1.5.2:

http://demo-store.pr...cs/30-ipad.html

 

 

Я работаю в опере... Нажимаем CTRL U

 

Находим комбинации... вот они:

 

 

// Combinations
  addCombination(85, new Array('14','49','53'), 999, 130, 0, -1, '', 0.00, 1);
  addCombination(89, new Array('14','50','53'), 999, 230, 0, -1, '', 0.00, 1);
  addCombination(93, new Array('14','51','53'), 896, 330, 0, -1, '', 0.00, 1);
  addCombination(87, new Array('14','50','52'), 1000, 100, 0, -1, '', 0.00, 1);
  addCombination(91, new Array('14','51','52'), 999, 200, 0, -1, '', 0.00, 1);
  addCombination(83, new Array('14','49','52'), 597, 0, 0, 69, '', 0.00, 1);
  addCombination(84, new Array('54','49','52'), 1000, 0, 0, 72, '', 0.00, 1);
  addCombination(88, new Array('54','50','52'), 999, 100, 0, -1, '', 0.00, 1);
  addCombination(92, new Array('54','51','52'), 991, 200, 0, -1, '', 0.00, 1);
  addCombination(86, new Array('54','49','53'), 999, 130, 0, -1, '', 0.00, 1);
  addCombination(90, new Array('54','50','53'), 998, 230, 0, -1, '', 0.00, 1);
  addCombination(94, new Array('54','51','53'), 990, 330, 0, -1, '', 0.00, 1);
 // Colors
//]]>

 

Допустим, я удалю предпоследнюю...

и получу:

 

// Combinations
  addCombination(85, new Array('14','49','53'), 999, 130, 0, -1, '', 0.00, 1);
  addCombination(89, new Array('14','50','53'), 999, 230, 0, -1, '', 0.00, 1);
  addCombination(93, new Array('14','51','53'), 896, 330, 0, -1, '', 0.00, 1);
  addCombination(87, new Array('14','50','52'), 1000, 100, 0, -1, '', 0.00, 1);
  addCombination(91, new Array('14','51','52'), 999, 200, 0, -1, '', 0.00, 1);
  addCombination(83, new Array('14','49','52'), 597, 0, 0, 69, '', 0.00, 1);
  addCombination(84, new Array('54','49','52'), 1000, 0, 0, 72, '', 0.00, 1);
  addCombination(88, new Array('54','50','52'), 999, 100, 0, -1, '', 0.00, 1);
  addCombination(92, new Array('54','51','52'), 991, 200, 0, -1, '', 0.00, 1);
  addCombination(86, new Array('54','49','53'), 999, 130, 0, -1, '', 0.00, 1);

  addCombination(94, new Array('54','51','53'), 990, 330, 0, -1, '', 0.00, 1);
 // Colors
//]]>
</script>

http://s019.radikal....e7738b41ddf.png

 

Вставлю наш код куда-нибудь:

http://s019.radikal....68806db53e2.png

 

(вставил под <script type="text/javascript" src="/js/jquery/jquery.autocomplete.js"></script>)

 

нажму в опере волшебную кнопку

23c77e883bd1.png

 

Применить изменения.

 

Нажму на соседнюю вкладку с нашим Apple iPad 2...

http://s017.radikal.ru/i444/1211/27/40c3be2e881f.png

 

(см. положение курсора)

 

начну переключать опции...

http://i069.radikal....0a4177caf48.jpg

 

переключаю....переключаю.... и вот вижу что комбинация

 

Color: White

Modek: 32 GB

Options: Wi-Fi + 3G

 

недоступна

 

вот смотрите более тусклым 32 GB

 

424d965b447f.jpg

 

...её не выберешь - она option disabled

 

Всё работает.

У меня работает на престе 1.4.8 официальная демка судя по всему 1.5.2

Edited by Caracal (see edit history)
Link to comment
Share on other sites

Спасибо, понял. Все правильно, Чем меньше недоступных комбинаций - тем лучше. А если будет комбинция Цвет Черный - размер 48 и 52, а цвет белый - только 54 - наступает ступор. Я почему так критично настроен, потому что у меня есть опыт работы с компонентом Joomshopping от Joomla - так там последний приведенный вариант делается самой программой. и можно такие сложные комбинации наделать - только фантазируй.

Edited by pvi1 (see edit history)
Link to comment
Share on other sites

Спасибо, понял. Все правильно, Чем меньше недоступных комбинаций - тем лучше. А если будет комбинция Цвет Черный - размер 48 и 52, а цвет белый - только 54 - наступает ступор. Я почему так критично настроен, потому что у меня есть опыт работы с компонентом Joomshopping от Joomla - так там последний приведенный вариант делается самой программой. и можно такие сложные комбинации наделать - только фантазируй.

Именно. Кому-то подойдёт такое решение, а кому-то и нет.

 

CS-Cart более продуман в плане комбинаций... Если в престе все комбинации загружаются пользователю, то CS-Cart всё хранит в БД и через аякс формируются запросы и считается цена на стороне сервера. Там вариантвов больше и комбинаций может быть сколько угодно, а преста ложится напрочь при полутра тысячах вариантов для одного товара.

 

Насчет Joomshopping ничего сказать не могу, не сталкивался.

Link to comment
Share on other sites

  • 3 months later...

подскажите у меня фаил header.tpl выглядет так, где вставить ваше изменения?

 

 

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="{$lang_iso}">

<head>

 

<title>{$meta_title|escape:'htmlall':'UTF-8'}</title>

{if isset($meta_description) AND $meta_description}

<meta name="description" content="{$meta_description|escape:html:'UTF-8'}" />

{/if}

{if isset($meta_keywords) AND $meta_keywords}

<meta name="keywords" content="{$meta_keywords|escape:html:'UTF-8'}" />

{/if}

<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" />

<meta name="generator" content="PrestaShop" />

<meta name="robots" content="{if isset($nobots)}no{/if}index,follow" />

<link rel="icon" type="image/vnd.microsoft.icon" href="{$img_ps_dir}favicon.ico?{$img_update_time}" />

<link rel="shortcut icon" type="image/x-icon" href="{$img_ps_dir}favicon.ico?{$img_update_time}" />

<script type="text/javascript">

var baseDir = '{$content_dir}';

var static_token = '{$static_token}';

var token = '{$token}';

var priceDisplayPrecision = {$priceDisplayPrecision*$currency->decimals};

var priceDisplayMethod = {$priceDisplay};

var roundMode = {$roundMode};

</script>

{if isset($css_files)}

{foreach from=$css_files key=css_uri item=media}

<link href="{$css_uri}" rel="stylesheet" type="text/css" media="{$media}" />

{/foreach}

{/if}

{if isset($js_files)}

{foreach from=$js_files item=js_uri}

<script type="text/javascript" src="{$js_uri}"></script>

{/foreach}

{/if}

{$HOOK_HEADER}

 

 

</head>

 

<body {if $page_name}id="{$page_name|escape:'htmlall':'UTF-8'}"{/if}>

 

 

{if !$content_only}

{if isset($restricted_country_mode) && $restricted_country_mode}

<div id="restricted-country">

<p>{l s='You cannot place a new order from your country.'} <span class="bold">{$geolocation_country}</span></p>

</div>

{/if}

<div id="page">

 

<!-- Header -->

<div id="header">

<a id="header_logo" href="{$base_dir}" title="{$shop_name|escape:'htmlall':'UTF-8'}">

<img class="logo" src="{$img_ps_dir}logo.jpg?{$img_update_time}" alt="{$shop_name|escape:'htmlall':'UTF-8'}" {if $logo_image_width}width="{$logo_image_width}"{/if} {if $logo_image_height}height="{$logo_image_height}" {/if} />

</a>

<div id="header_right">

{$HOOK_TOP}

</div>

</div>

 

<div id="columns">

<!-- Left -->

<div id="left_column" class="column">

{$HOOK_LEFT_COLUMN}

</div>

 

<!-- Center -->

<div id="center_column">

{/if}

Link to comment
Share on other sites

вставил выдает ошибку

Fatal error: Uncaught exception 'SmartyCompilerException' with message 'Syntax Error in template "/home/sanek206/domains/speakbuy.com/public_html/themes/prestashop/header.tpl" on line 40 "$('select ').change(function(){checkCombination()});" unknown function "checkCombination"' in /home/sanek206/domains/speakbuy.com/public_html/tools/smarty/sysplugins/smarty_internal_templatecompilerbase.php:431 Stack trace: #0 /home/sanek206/domains/speakbuy.com/public_html/tools/smarty/sysplugins/smarty_internal_templateparser.php(2660): Smarty_Internal_TemplateCompilerBase->trigger_template_error('unknown functio...') #1 /home/sanek206/domains/speakbuy.com/public_html/tools/smarty/sysplugins/smarty_internal_templateparser.php(2812): Smarty_Internal_Templateparser->yy_r148() #2 /home/sanek206/domains/speakbuy.com/public_html/tools/smarty/sysplugins/smarty_internal_templateparser.php(2912): Smarty_Internal_Templateparser->yy_reduce(148) #3 /home/sanek206/domains/speakbuy.com/public_html/tools/smarty/sysplugins/smarty_internal_smartytemp in /home/sanek206/domains/speakbuy.com/public_html/tools/smarty/sysplugins/smarty_internal_templatecompilerbase.php on line 431

Link to comment
Share on other sites

У меня не много другая трабла, я добавляю товары, изменяю остатки, цены и т.д. импортом и у меня получается что в некоторых товарах комбинация по умолчанию может стоять та, которая не доступна и при заходе на карточку товара пишет выберите другой цвет или размер, вот как бы так сделать чтобы если такое происходит то комбинация менялась на другую, которая доступна, скриптом к примеру, но лучше при помощи смарти или php..

Link to comment
Share on other sites

  • 7 months later...
×
×
  • Create New...