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


сортировка доп.характеристик


  • Вы не можете ответить в тему
Сообщений в теме: 11

#1 yura

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 82 сообщений
Репутация: 0
Начинающий

Отправлено 23 November 2011 - 10:45 PM

Подскажите, пожалуйста, как сделать, чтобы в доп. характеристиках размеры выводились по порядку - 94,98,102 и т.д.
Сейчас выводятся как на картинке -
[ATTACH]227.vB[/ATTACH]
Вручную через админ-панель задавать сортировку очень долго - больше 3000 вариантов размер/цвет.
Как-нибудь в скрипте прописать нужный порядок можно?
  • 0

#2 Dbus

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 1116 сообщений
Репутация: 174
Мастер
  • ГородОдесса

Отправлено 24 November 2011 - 08:50 PM

так он по логике все верно выводит, откуда ж ему знать как правильнее )) тогда забивать нужно было не 94 а 094, было бы так как хочешь.
  • 0
502 Bad Gateway

#3 yura

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 82 сообщений
Репутация: 0
Начинающий

Отправлено 24 November 2011 - 09:04 PM

Я понимаю, что это не ошибка скрипта ))
Вот как эту логику обойти? забивать 094 не подходит ((
Может можно заставить скрипт выводить размеры в том порядке, как в загружаемом csv файле? Там у меня они в нужном порядке стоят.
  • 0

#4 Dbus

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 1116 сообщений
Репутация: 174
Мастер
  • ГородОдесса

Отправлено 24 November 2011 - 09:21 PM

ну какбы, это php а не гадание на кофейной гуще ) обходить логику нужно разве что другой логикой. лично я вариантов не вижу - только ручная сортировка.
  • 0
502 Bad Gateway

#5 R.Sergey

    Администратор

  • Администраторы
  • 2810 сообщений
Репутация: 332
Мастер

Отправлено 25 November 2011 - 09:43 AM

да можно подправить.... скорее всего там идет сортировка при выборке из БД, нужно записать в массив и отсортировать массив функция natsort - отсортирует в привычной для человека форме т.е. не
1
10
20
300
3

а

1
3
10
20
300
  • 0

#6 Dbus

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 1116 сообщений
Репутация: 174
Мастер
  • ГородОдесса

Отправлено 25 November 2011 - 10:45 AM

о, я не знал про natsort )
  • 0
502 Bad Gateway

#7 yura

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 82 сообщений
Репутация: 0
Начинающий

Отправлено 25 November 2011 - 02:03 PM

Я так и думал, что можно что-то сделать ))

функция natsort - отсортирует в привычной для человека форме

а можно подробней - как и куда эту функцию вставить. или готов заплатить)
  • 0

#8 R.Sergey

    Администратор

  • Администраторы
  • 2810 сообщений
Репутация: 332
Мастер

Отправлено 25 November 2011 - 02:15 PM

куда вставлять я и сам еще не знаю.... нужно смотреть код, я написал теоретически...... если готовы оплачивать, тогда предлагаю так я реализую у себя - если все ок, тогда оплата - ну мою таксу Вы знаете ))
  • 0

#9 yura

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 82 сообщений
Репутация: 0
Начинающий

Отправлено 25 November 2011 - 02:17 PM

договорились
  • 0

#10 R.Sergey

    Администратор

  • Администраторы
  • 2810 сообщений
Репутация: 332
Мастер

Отправлено 26 November 2011 - 12:32 PM

договорились


мда еле нашел что где править, и пришлось немного поморочиться в результате чего так как я написал пока не получилось )) НО.....

появился один наводящий вопрос: У Вас характеристики всегда с цифры начинаются? или есть только буквы или начинаются с буквы?
  • 0

#11 R.Sergey

    Администратор

  • Администраторы
  • 2810 сообщений
Репутация: 332
Мастер

Отправлено 26 November 2011 - 02:59 PM

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

Другой вариант более простой это сделать сортировку прямо в запросе мускула, но в мускуле нет natsort поэтому правильно будет работать только на тех характеристиках которые начинаются с цифры

открываем файл \core\functions\product_functions.php

446 строка ORDER BY povvt.sort_order, povvt.option_value
дописываем +0

весь запрос
                        //fetch all option values variants
$sql = 'select povvt.option_value, povvt.variantID, post.price_surplus
FROM '.PRODUCTS_OPTIONS_SET_TABLE.' as post
LEFT JOIN '.PRODUCTS_OPTIONS_VALUES_VARIANTS_TABLE.' as povvt
ON povvt.variantID=post.variantID
WHERE povvt.optionID='.$_Row['optionID'].' AND post.productID='.$_Row['productID'].' AND povvt.optionID='.$_Row['optionID'].'
ORDER BY povvt.sort_order, povvt.option_value+1
';


таким образом мы наименования характеристики приводим к числовому типу и идет числовая сортировка по возрастанию, а буквы отбрасываются. Как при этом будут сортироваться буквенные значения не знам ))
  • 0

#12 Kyborg

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 31 сообщений
Репутация: 1
Начинающий

Отправлено 27 February 2016 - 09:35 PM

Есть относительно свежее решение по данной теме? У меня такой вариант не проходит, стоит патч Patch Optimize 01.

// BEGIN Patch Optimize 01 (by http://trickywebs.org.ua/ soulmare@gmail.com)
					    // Initialize array for storing options
					    if(!isset($optHash))
						  $optHash = Array();
					    // If option values set is not stored
					    if(!isset($optHash[$_Row['optionID']])) {
						  // Get and store option values set
						  $sql = 'select povvt.option_value, povvt.variantID, post.price_surplus, post.productID
								  FROM '.PRODUCTS_OPTIONS_SET_TABLE.' as post
								  LEFT JOIN '.PRODUCTS_OPTIONS_VALUES_VARIANTS_TABLE.' as povvt
								  ON povvt.variantID=post.variantID
								  WHERE povvt.optionID='.$_Row['optionID'].' AND post.productID IN ('.implode(',', $ProductIDs).') AND povvt.optionID='.$_Row['optionID'].'
								  ORDER BY post.productID, povvt.sort_order, povvt.option_value
						  ';
						  $q2=db_query($sql);
						  while($rowOvs = db_fetch_assoc($q2))
						    if(isset($optHash[$_Row['optionID']][$rowOvs['productID']]))
							  $optHash[$_Row['optionID']][$rowOvs['productID']][] = $rowOvs;
						    else
							  $optHash[$_Row['optionID']][$rowOvs['productID']] = Array($rowOvs);
					    }
					    $_Row['values_to_select']=array();
					    $i=0;
					    foreach((array)$optHash[$_Row['optionID']][$_Row['productID']] as $_Rowue){
							    $_Row['values_to_select'][$i]=array();
							    $_Row['values_to_select'][$i]['option_value'] = $_Rowue['option_value'];
							    // if ( $_Rowue['price_surplus'] > 0 )$_Row['values_to_select'][$i]['option_value'] .= ' (+ '.show_price($_Rowue['price_surplus']).')';
							    // elseif($_Rowue['price_surplus'] < 0 )$_Row['values_to_select'][$i]['option_value'] .= ' (- '.show_price(-$_Rowue['price_surplus']).')';
							    $_Row['values_to_select'][$i]['option_valueWithOutPrice'] = $_Rowue['option_value'];
							    $_Row['values_to_select'][$i]['price_surplus'] = show_priceWithOutUnit($_Rowue['price_surplus']);
							    $_Row['values_to_select'][$i]['variantID']=$_Rowue['variantID'];
							    $i++;
					    }
					    $_Row['values_to_select_count'] = count($_Row['values_to_select']);
					    $ProductsExtras[$_Row['productID']][] = $_Row;
// END Patch Optimize 01

  • 0