1
сортировка доп.характеристик
Автор
yura
, Nov 23 2011 10:45 PM
Сообщений в теме: 11
#1
Отправлено 23 November 2011 - 10:45 PM
Подскажите, пожалуйста, как сделать, чтобы в доп. характеристиках размеры выводились по порядку - 94,98,102 и т.д.
Сейчас выводятся как на картинке -
[ATTACH]227.vB[/ATTACH]
Вручную через админ-панель задавать сортировку очень долго - больше 3000 вариантов размер/цвет.
Как-нибудь в скрипте прописать нужный порядок можно?
Сейчас выводятся как на картинке -
[ATTACH]227.vB[/ATTACH]
Вручную через админ-панель задавать сортировку очень долго - больше 3000 вариантов размер/цвет.
Как-нибудь в скрипте прописать нужный порядок можно?
#2
Отправлено 24 November 2011 - 08:50 PM
так он по логике все верно выводит, откуда ж ему знать как правильнее )) тогда забивать нужно было не 94 а 094, было бы так как хочешь.
502 Bad Gateway
#3
Отправлено 24 November 2011 - 09:04 PM
Я понимаю, что это не ошибка скрипта ))
Вот как эту логику обойти? забивать 094 не подходит ((
Может можно заставить скрипт выводить размеры в том порядке, как в загружаемом csv файле? Там у меня они в нужном порядке стоят.
Вот как эту логику обойти? забивать 094 не подходит ((
Может можно заставить скрипт выводить размеры в том порядке, как в загружаемом csv файле? Там у меня они в нужном порядке стоят.
#4
Отправлено 24 November 2011 - 09:21 PM
ну какбы, это php а не гадание на кофейной гуще ) обходить логику нужно разве что другой логикой. лично я вариантов не вижу - только ручная сортировка.
502 Bad Gateway
#5
Отправлено 25 November 2011 - 09:43 AM
да можно подправить.... скорее всего там идет сортировка при выборке из БД, нужно записать в массив и отсортировать массив функция natsort - отсортирует в привычной для человека форме т.е. не
1
10
20
300
3
а
1
3
10
20
300
1
10
20
300
3
а
1
3
10
20
300
#6
Отправлено 25 November 2011 - 10:45 AM
о, я не знал про natsort )
502 Bad Gateway
#7
Отправлено 25 November 2011 - 02:03 PM
Я так и думал, что можно что-то сделать ))
а можно подробней - как и куда эту функцию вставить. или готов заплатить)функция natsort - отсортирует в привычной для человека форме
#8
Отправлено 25 November 2011 - 02:15 PM
куда вставлять я и сам еще не знаю.... нужно смотреть код, я написал теоретически...... если готовы оплачивать, тогда предлагаю так я реализую у себя - если все ок, тогда оплата - ну мою таксу Вы знаете ))
#9
Отправлено 25 November 2011 - 02:17 PM
договорились
#10
Отправлено 26 November 2011 - 12:32 PM
договорились
мда еле нашел что где править, и пришлось немного поморочиться в результате чего так как я написал пока не получилось )) НО.....
появился один наводящий вопрос: У Вас характеристики всегда с цифры начинаются? или есть только буквы или начинаются с буквы?
#11
Отправлено 26 November 2011 - 02:59 PM
В общем, не очень знаком с сортировкой в смарти, и проблема в том что в смарти передается многомерный массив со всеми характеристиками, поэтому если делать по-нормальному, и не использовать сортировку смарти, то нужно разобрать массив, отсортировать его, а затем снова записать и передать в смарти.
Другой вариант более простой это сделать сортировку прямо в запросе мускула, но в мускуле нет natsort поэтому правильно будет работать только на тех характеристиках которые начинаются с цифры
открываем файл \core\functions\product_functions.php
446 строка ORDER BY povvt.sort_order, povvt.option_value
дописываем +0
весь запрос
таким образом мы наименования характеристики приводим к числовому типу и идет числовая сортировка по возрастанию, а буквы отбрасываются. Как при этом будут сортироваться буквенные значения не знам ))
Другой вариант более простой это сделать сортировку прямо в запросе мускула, но в мускуле нет 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
';
таким образом мы наименования характеристики приводим к числовому типу и идет числовая сортировка по возрастанию, а буквы отбрасываются. Как при этом будут сортироваться буквенные значения не знам ))
#12
Отправлено 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