Ivan2016 Posted January 24, 2018 Report Share Posted January 24, 2018 (edited) В текущем шаблоне выводятся характеристики построчно, причем однотипные на несколько строк в коде (как на скрине). Как сделать, чтобы однотипные значения выводились в одну строку и если можно сортировка по возрастанию: {if $product->features} <div class="clear"></div> <div id="page_title"><h1>{$product->name|escape} - Характеристики</h1></div> <div id="features"> <ul> {foreach $product->features as $f} <li><p class="name">{$f->name}:</p><p class="values">{$f->value}</p></li> {/foreach} <ul> </div> {/if} Edited January 24, 2018 by Ivan2016 Quote Link to post Share on other sites
STM Posted January 24, 2018 Report Share Posted January 24, 2018 Как вариант когда заполняете пишите через запятую в одно свойство значения, а не в разные. Quote Link to post Share on other sites
Ivan2016 Posted January 25, 2018 Author Report Share Posted January 25, 2018 Через запятую уже поздно, товаров тысячи. Буду рад любым советам. Quote Link to post Share on other sites
Ivan2016 Posted January 25, 2018 Author Report Share Posted January 25, 2018 Код который позволяет вывести в 1 строку: $product->features = $this->features->get_product_options(array('product_id'=>$product->id)); $temp_options = array(); foreach($product->features as $option) { $temp_options[$option->feature_id]['feature_id'] = $option->feature_id; $temp_options[$option->feature_id]['name'] = $option->name; $temp_options[$option->feature_id]['values'][] = $option->value; } foreach($temp_options as $id => $option) $temp_options[$id]['value'] = implode('; ', $temp_options[$id]['values']); $product->features = $temp_options; Как сделать, чтобы в этой строке значения ещё сортировались по возрастанию? Quote Link to post Share on other sites
Solution yr4ik Posted January 25, 2018 Solution Report Share Posted January 25, 2018 (edited) foreach($temp_options as &$option) { sort($option['values']);//СОРТИРОВКА $option['value'] = implode('; ', $option['values']); } функцию сортировки подбирайте на свой вкус http://php.net/manual/ru/array.sorting.php Edited January 26, 2018 by yr4ik Quote Link to post Share on other sites
aroman80 Posted January 29, 2018 Report Share Posted January 29, 2018 (edited) что-то это не работает... версия 2.3.8 вот как это foreach($temp_options as $id => $option) $temp_options[$id]['value'] = implode('; ', $temp_options[$id]['values']); стыкуется с этим? меняется? добавляется? foreach($temp_options as &$option) { sort($option['values']);//СОРТИРОВКА $option['value'] = implode('; ', $option['values']); } P.S. если нужна сортировка в фильтре и на странице вывода свойств api/Features.php185 строка - сортировка значений характеристик по длине значения LENGTH(value) ASC WHERE 1 $feature_id_filter $product_id_filter $brand_id_filter $features_filter GROUP BY po.feature_id, po.value ORDER BY LENGTH(value) ASC, value"); для одежды, размеры вводятся 0, 2, 4, 42, 46, 54, 62 Edited January 29, 2018 by aroman80 Quote Link to post Share on other sites
aroman80 Posted February 1, 2018 Report Share Posted February 1, 2018 как то не так работает на productsв админке стоит 8, 10, 12, а выводится 10, 12, 8 Quote Link to post Share on other sites
Плохиш Posted February 2, 2018 Report Share Posted February 2, 2018 Работает именно так, как запрограммировано. Надо не только код бездумно вставлять, а и читать. Было ведь специально сказано: функцию сортировки подбирайте на свой вкус http://php.net/manual/ru/array.sorting.php Quote Link to post Share on other sites
aroman80 Posted February 2, 2018 Report Share Posted February 2, 2018 Работает именно так, как запрограммировано.Надо не только код бездумно вставлять, а и читать. Было ведь специально сказано: поэтому и спрашиваю, как внедрить. в функциях php не особо силен, если не жалко, подскажите, пожалуйста Quote Link to post Share on other sites
Плохиш Posted February 3, 2018 Report Share Posted February 3, 2018 Даже если не особо силен, по ссылке можно легко в тексте найти список функций сортировки с объяснениями, как работают. Даже если краткие объяснения непонятны, просто попробовать эти функции по одной. Работы на несколько минут... Скорее всего, Вам подойдет natsort() Quote Link to post Share on other sites
aroman80 Posted February 5, 2018 Report Share Posted February 5, 2018 (edited) у меня вообще по-другому у меня код такой и работает (Источник: http://forum.simplacms.ru/topic/6089-%D0%BD%D0%B5%D1%81%D0%BA%D0%BE%D0%BB%D1%8C%D0%BA%D0%BE-%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B9-%D0%B4%D0%BB%D1%8F-%D0%BE%D0%B4%D0%BD%D0%BE%D0%B3%D0%BE-%D1%81%D0%B2%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B0-%D0%B2-%D1%82%D0%BE%D0%B2%D0%B0%D1%80/) $temp_options[$option->feature_id]->feature_id = $option->feature_id; $temp_options[$option->feature_id]->name = $option->name; $temp_options[$option->feature_id]->values[] = $option->value; тут такой $temp_options[$option->feature_id]['feature_id'] = $option->feature_id; $temp_options[$option->feature_id]['name'] = $option->name; $temp_options[$option->feature_id]['values'][] = $option->value; кто разбирается, в чём разница? Edited February 5, 2018 by aroman80 Quote Link to post Share on other sites
Noxter Posted February 6, 2018 Report Share Posted February 6, 2018 у меня вообще по-другому у меня код такой и работает (Источник: http://forum.simplacms.ru/topic/6089-%D0%BD%D0%B5%D1%81%D0%BA%D0%BE%D0%BB%D1%8C%D0%BA%D0%BE-%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B9-%D0%B4%D0%BB%D1%8F-%D0%BE%D0%B4%D0%BD%D0%BE%D0%B3%D0%BE-%D1%81%D0%B2%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B0-%D0%B2-%D1%82%D0%BE%D0%B2%D0%B0%D1%80/) $temp_options[$option->feature_id]->feature_id = $option->feature_id; $temp_options[$option->feature_id]->name = $option->name; $temp_options[$option->feature_id]->values[] = $option->value; тут такой $temp_options[$option->feature_id]['feature_id'] = $option->feature_id; $temp_options[$option->feature_id]['name'] = $option->name; $temp_options[$option->feature_id]['values'][] = $option->value; кто разбирается, в чём разница?Идиотский вопрос.Пойдите почитайте про массивы и объекты прежде чем задавать такие глупые вопросы. Quote Link to post Share on other sites
aroman80 Posted February 6, 2018 Report Share Posted February 6, 2018 Идиотский вопрос.Пойдите почитайте про массивы и объекты прежде чем задавать такие глупые вопросы.не кипишуйте, уважаемый Noxter! я не так давно изучаю php и mysql, сделайте поблажку новичку.я не задавал бы глупых вопросов, если бы было ясно как днём. Quote Link to post Share on other sites
Noxter Posted February 6, 2018 Report Share Posted February 6, 2018 не кипишуйте, уважаемый Noxter! я не так давно изучаю php и mysql, сделайте поблажку новичку. я не задавал бы глупых вопросов, если бы было ясно как днём.Да вы кэп! Quote Link to post Share on other sites
aroman80 Posted February 7, 2018 Report Share Posted February 7, 2018 (edited) изучал вопрос и вроде получилось в карточке товара "product" сортировка тут (api/Features.php самый конец файла) public function get_product_options($product_id) { $query = $this->db->placehold("SELECT f.id as feature_id, f.name, po.value, po.product_id FROM __options po LEFT JOIN __features f ON f.id=po.feature_id WHERE po.product_id in(?@) ORDER BY f.position", (array)$product_id); $this->db->query($query); return $this->db->results(); } меняем ORDER BY f.position на ORDER BY LENGTH(value) ASCи получаем сортировку в карточке товара по длине значения, вот так 0,1,2,3,4,10,100,1000,10000 p.s. вот только не могу понять, сортируем по value или по po.value ?в книге MySql по SELECT написано, что сортировка идет по названию столбца, а в базе нет столбца po.value.я так понял, что po.value это, типа связанного или сгруппированного столбца... Edited February 7, 2018 by aroman80 Quote Link to post Share on other sites
Kosjak76 Posted February 7, 2018 Report Share Posted February 7, 2018 Вы поняли неправильно))po.value это краткая запись таблицы, из которой идет выборка FROM __options po И также __features f Quote Link to post Share on other sites
aroman80 Posted February 7, 2018 Report Share Posted February 7, 2018 значит правильно сортировать так? ORDER BY LENGTH(po.value) ASC Quote Link to post Share on other sites
Плохиш Posted February 8, 2018 Report Share Posted February 8, 2018 В данном случае сортировка будет правильно работать в обоих случаяхORDER BY LENGTH(po.value) ASCORDER BY LENGTH(value) ASC Это примерно, как, находясь в Ленинграде, водителю такси сказать1. 3-я улица Строителей, 25 ИЛИ2. Ленинград, 3-я улица Строителей, 25.Результат будет одинаков.А вот если это сказать в Москве, то результат будет другой... Quote Link to post Share on other sites
aroman80 Posted February 8, 2018 Report Share Posted February 8, 2018 В данном случае сортировка будет правильно работать в обоих случаяхORDER BY LENGTH(po.value) ASCORDER BY LENGTH(value) ASC Это примерно, как, находясь в Ленинграде, водителю такси сказать1. 3-я улица Строителей, 25 ИЛИ2. Ленинград, 3-я улица Строителей, 25.Результат будет одинаков.А вот если это сказать в Москве, то результат будет другой... спасибо добрый человек, всё по полочкам разложил, всем бы так отвечать! Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.