Ivan2016 Опубликовано 24 января, 2018 Жалоба Поделиться Опубликовано 24 января, 2018 (изменено) В текущем шаблоне выводятся характеристики построчно, причем однотипные на несколько строк в коде (как на скрине). Как сделать, чтобы однотипные значения выводились в одну строку и если можно сортировка по возрастанию: {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} Изменено 24 января, 2018 пользователем Ivan2016 Цитата Ссылка на сообщение Поделиться на другие сайты
STM Опубликовано 24 января, 2018 Жалоба Поделиться Опубликовано 24 января, 2018 Как вариант когда заполняете пишите через запятую в одно свойство значения, а не в разные. Цитата Ссылка на сообщение Поделиться на другие сайты
Ivan2016 Опубликовано 25 января, 2018 Автор Жалоба Поделиться Опубликовано 25 января, 2018 Через запятую уже поздно, товаров тысячи. Буду рад любым советам. Цитата Ссылка на сообщение Поделиться на другие сайты
Ivan2016 Опубликовано 25 января, 2018 Автор Жалоба Поделиться Опубликовано 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; Как сделать, чтобы в этой строке значения ещё сортировались по возрастанию? Цитата Ссылка на сообщение Поделиться на другие сайты
Решение yr4ik Опубликовано 25 января, 2018 Решение Жалоба Поделиться Опубликовано 25 января, 2018 (изменено) foreach($temp_options as &$option) { sort($option['values']);//СОРТИРОВКА $option['value'] = implode('; ', $option['values']); } функцию сортировки подбирайте на свой вкус http://php.net/manual/ru/array.sorting.php Изменено 26 января, 2018 пользователем yr4ik Цитата Ссылка на сообщение Поделиться на другие сайты
aroman80 Опубликовано 29 января, 2018 Жалоба Поделиться Опубликовано 29 января, 2018 (изменено) что-то это не работает... версия 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 Изменено 29 января, 2018 пользователем aroman80 Цитата Ссылка на сообщение Поделиться на другие сайты
aroman80 Опубликовано 1 февраля, 2018 Жалоба Поделиться Опубликовано 1 февраля, 2018 как то не так работает на productsв админке стоит 8, 10, 12, а выводится 10, 12, 8 Цитата Ссылка на сообщение Поделиться на другие сайты
Плохиш Опубликовано 2 февраля, 2018 Жалоба Поделиться Опубликовано 2 февраля, 2018 Работает именно так, как запрограммировано. Надо не только код бездумно вставлять, а и читать. Было ведь специально сказано: функцию сортировки подбирайте на свой вкус http://php.net/manual/ru/array.sorting.php Цитата Ссылка на сообщение Поделиться на другие сайты
aroman80 Опубликовано 2 февраля, 2018 Жалоба Поделиться Опубликовано 2 февраля, 2018 Работает именно так, как запрограммировано.Надо не только код бездумно вставлять, а и читать. Было ведь специально сказано: поэтому и спрашиваю, как внедрить. в функциях php не особо силен, если не жалко, подскажите, пожалуйста Цитата Ссылка на сообщение Поделиться на другие сайты
Плохиш Опубликовано 3 февраля, 2018 Жалоба Поделиться Опубликовано 3 февраля, 2018 Даже если не особо силен, по ссылке можно легко в тексте найти список функций сортировки с объяснениями, как работают. Даже если краткие объяснения непонятны, просто попробовать эти функции по одной. Работы на несколько минут... Скорее всего, Вам подойдет natsort() Цитата Ссылка на сообщение Поделиться на другие сайты
aroman80 Опубликовано 5 февраля, 2018 Жалоба Поделиться Опубликовано 5 февраля, 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; кто разбирается, в чём разница? Изменено 5 февраля, 2018 пользователем aroman80 Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 6 февраля, 2018 Жалоба Поделиться Опубликовано 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; кто разбирается, в чём разница?Идиотский вопрос.Пойдите почитайте про массивы и объекты прежде чем задавать такие глупые вопросы. Цитата Ссылка на сообщение Поделиться на другие сайты
aroman80 Опубликовано 6 февраля, 2018 Жалоба Поделиться Опубликовано 6 февраля, 2018 Идиотский вопрос.Пойдите почитайте про массивы и объекты прежде чем задавать такие глупые вопросы.не кипишуйте, уважаемый Noxter! я не так давно изучаю php и mysql, сделайте поблажку новичку.я не задавал бы глупых вопросов, если бы было ясно как днём. Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 6 февраля, 2018 Жалоба Поделиться Опубликовано 6 февраля, 2018 не кипишуйте, уважаемый Noxter! я не так давно изучаю php и mysql, сделайте поблажку новичку. я не задавал бы глупых вопросов, если бы было ясно как днём.Да вы кэп! Цитата Ссылка на сообщение Поделиться на другие сайты
aroman80 Опубликовано 7 февраля, 2018 Жалоба Поделиться Опубликовано 7 февраля, 2018 (изменено) изучал вопрос и вроде получилось в карточке товара "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 это, типа связанного или сгруппированного столбца... Изменено 7 февраля, 2018 пользователем aroman80 Цитата Ссылка на сообщение Поделиться на другие сайты
Kosjak76 Опубликовано 7 февраля, 2018 Жалоба Поделиться Опубликовано 7 февраля, 2018 Вы поняли неправильно))po.value это краткая запись таблицы, из которой идет выборка FROM __options po И также __features f Цитата Ссылка на сообщение Поделиться на другие сайты
aroman80 Опубликовано 7 февраля, 2018 Жалоба Поделиться Опубликовано 7 февраля, 2018 значит правильно сортировать так? ORDER BY LENGTH(po.value) ASC Цитата Ссылка на сообщение Поделиться на другие сайты
Плохиш Опубликовано 8 февраля, 2018 Жалоба Поделиться Опубликовано 8 февраля, 2018 В данном случае сортировка будет правильно работать в обоих случаяхORDER BY LENGTH(po.value) ASCORDER BY LENGTH(value) ASC Это примерно, как, находясь в Ленинграде, водителю такси сказать1. 3-я улица Строителей, 25 ИЛИ2. Ленинград, 3-я улица Строителей, 25.Результат будет одинаков.А вот если это сказать в Москве, то результат будет другой... Цитата Ссылка на сообщение Поделиться на другие сайты
aroman80 Опубликовано 8 февраля, 2018 Жалоба Поделиться Опубликовано 8 февраля, 2018 В данном случае сортировка будет правильно работать в обоих случаяхORDER BY LENGTH(po.value) ASCORDER BY LENGTH(value) ASC Это примерно, как, находясь в Ленинграде, водителю такси сказать1. 3-я улица Строителей, 25 ИЛИ2. Ленинград, 3-я улица Строителей, 25.Результат будет одинаков.А вот если это сказать в Москве, то результат будет другой... спасибо добрый человек, всё по полочкам разложил, всем бы так отвечать! Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.