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


Фото
- - - - -

Вывод однотипных характеристик в 1 строку


Best Answer yr4ik , 25.01.2018 - 23:44

foreach($temp_options as &$option)
{
       	sort($option['values']);//СОРТИРОВКА
       	$option['value'] = implode('; ', $option['values']);   
}

функцию сортировки подбирайте на свой вкус http://php.net/manua...ray.sorting.php

Перейти к посту


  • Чтобы отвечать, сперва войдите на форум
18 ответов в теме

#1 Ivan2016

Ivan2016
  • Пользователь
  • 28 сообщений
  • Пользователь
  • Версия CMS:2.x
  • Откуда:Пермь

Опубликовано 24.01.2018 - 19:33

В текущем шаблоне выводятся характеристики построчно, причем однотипные на несколько строк в коде (как на скрине). Как сделать, чтобы однотипные значения выводились в одну строку и если можно сортировка по возрастанию:

	    {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}

Прикрепленные файлы:

  • Прикрепленный файл  prd-1.jpg   22,57К   36 раз скачано

Изменено: Ivan2016, 24.01.2018 - 19:34


#2 STM

STM
  • Пользователь
  • 75 сообщений
  • Дизайн, Программирование, Верстка, SEO
  • Откуда:Украина

Опубликовано 24.01.2018 - 23:03

Как вариант когда заполняете пишите через запятую в одно свойство значения, а не в разные. 



#3 Ivan2016

Ivan2016
  • Пользователь
  • 28 сообщений
  • Пользователь
  • Версия CMS:2.x
  • Откуда:Пермь

Опубликовано 25.01.2018 - 08:20

Через запятую уже поздно, товаров тысячи. Буду рад любым советам.



#4 Ivan2016

Ivan2016
  • Пользователь
  • 28 сообщений
  • Пользователь
  • Версия CMS:2.x
  • Откуда:Пермь

Опубликовано 25.01.2018 - 14:14

Код который позволяет вывести в 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;

Как сделать, чтобы в этой строке значения ещё сортировались по возрастанию?



#5 yr4ik

yr4ik
  • Фрилансер
  • 840 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:1.x, 2.x
  • Откуда:Украина Чернигов

Опубликовано 25.01.2018 - 23:44   Best Answer

foreach($temp_options as &$option)
{
       	sort($option['values']);//СОРТИРОВКА
       	$option['value'] = implode('; ', $option['values']);   
}

функцию сортировки подбирайте на свой вкус http://php.net/manua...ray.sorting.php


Изменено: yr4ik, 26.01.2018 - 16:51


#6 aroman80

aroman80
  • Пользователь
  • 30 сообщений
  • Пользователь
  • Версия CMS:2.x
  • Откуда:Марс

Опубликовано 29.01.2018 - 21:26

что-то это не работает... версия 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.php

185 строка - сортировка значений характеристик по длине значения 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


Изменено: aroman80, 29.01.2018 - 21:39


#7 aroman80

aroman80
  • Пользователь
  • 30 сообщений
  • Пользователь
  • Версия CMS:2.x
  • Откуда:Марс

Опубликовано 02.02.2018 - 02:46

как то не так работает на products

в админке стоит 8, 10, 12, а  выводится 10, 12, 8



#8 Плохиш

Плохиш
  • Забаненый
  • 98 сообщений
  • Программирование
  • Версия CMS:2.x
  • Откуда:Орел

Опубликовано 02.02.2018 - 09:27

Работает именно так, как запрограммировано.
Надо не только код бездумно вставлять, а и читать. Было ведь специально сказано:
 

функцию сортировки подбирайте на свой вкус http://php.net/manua...ray.sorting.php



#9 aroman80

aroman80
  • Пользователь
  • 30 сообщений
  • Пользователь
  • Версия CMS:2.x
  • Откуда:Марс

Опубликовано 03.02.2018 - 00:23

Работает именно так, как запрограммировано.
Надо не только код бездумно вставлять, а и читать. Было ведь специально сказано:
 

поэтому и спрашиваю, как внедрить. в функциях php не особо силен, если не жалко, подскажите, пожалуйста



#10 Плохиш

Плохиш
  • Забаненый
  • 98 сообщений
  • Программирование
  • Версия CMS:2.x
  • Откуда:Орел

Опубликовано 03.02.2018 - 10:00

Даже если не особо силен, по ссылке можно легко в тексте найти список функций сортировки с объяснениями, как работают. Даже если краткие объяснения непонятны, просто попробовать эти функции по одной. Работы на несколько минут...

 

Скорее всего, Вам подойдет natsort()



#11 aroman80

aroman80
  • Пользователь
  • 30 сообщений
  • Пользователь
  • Версия CMS:2.x
  • Откуда:Марс

Опубликовано 06.02.2018 - 02:03

у меня вообще по-другому

 

у меня код такой и работает (Источник: http://forum.simplac...ойства-в-товар/)

$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, 06.02.2018 - 02:05


#12 Noxter

Noxter

    Simpla Developer

  • Фрилансер
  • 6 497 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 06.02.2018 - 04:50

у меня вообще по-другому

у меня код такой и работает (Источник: http://forum.simplac...ойства-в-товар/)

$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;   
кто разбирается, в чём разница?
Идиотский вопрос.
Пойдите почитайте про массивы и объекты прежде чем задавать такие глупые вопросы.

#13 aroman80

aroman80
  • Пользователь
  • 30 сообщений
  • Пользователь
  • Версия CMS:2.x
  • Откуда:Марс

Опубликовано 06.02.2018 - 19:49

Идиотский вопрос.
Пойдите почитайте про массивы и объекты прежде чем задавать такие глупые вопросы.

не кипишуйте, уважаемый Noxter! 
я не так давно изучаю php и mysql, сделайте поблажку новичку.

я не задавал бы глупых вопросов, если бы было ясно как днём.



#14 Noxter

Noxter

    Simpla Developer

  • Фрилансер
  • 6 497 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 06.02.2018 - 20:06

не кипишуйте, уважаемый Noxter! 
я не так давно изучаю php и mysql, сделайте поблажку новичку.
я не задавал бы глупых вопросов, если бы было ясно как днём.

Да вы кэп!

#15 aroman80

aroman80
  • Пользователь
  • 30 сообщений
  • Пользователь
  • Версия CMS:2.x
  • Откуда:Марс

Опубликовано 07.02.2018 - 14:44

изучал вопрос и вроде получилось

 

в карточке товара "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 это, типа связанного или сгруппированного столбца...

 


Изменено: aroman80, 07.02.2018 - 14:48


#16 Kosjak76

Kosjak76
  • Модератор
  • 3 719 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Харьков, Украина

Опубликовано 07.02.2018 - 15:00

Вы поняли неправильно))

po.value это краткая запись таблицы, из которой идет выборка

FROM __options po 

И также 

 __features f 


#17 aroman80

aroman80
  • Пользователь
  • 30 сообщений
  • Пользователь
  • Версия CMS:2.x
  • Откуда:Марс

Опубликовано 07.02.2018 - 23:54

значит правильно сортировать так?

ORDER BY LENGTH(po.value) ASC


#18 Плохиш

Плохиш
  • Забаненый
  • 98 сообщений
  • Программирование
  • Версия CMS:2.x
  • Откуда:Орел

Опубликовано 08.02.2018 - 09:25

В данном случае сортировка будет правильно работать в обоих случаях

ORDER BY LENGTH(po.value) ASC

ORDER BY LENGTH(value) ASC

 

Это примерно, как, находясь в Ленинграде, водителю такси сказать

1. 3-я улица Строителей, 25  ИЛИ

2. Ленинград, 3-я улица Строителей, 25.

Результат будет одинаков.

А вот если это сказать в Москве, то результат будет другой...
 
 


#19 aroman80

aroman80
  • Пользователь
  • 30 сообщений
  • Пользователь
  • Версия CMS:2.x
  • Откуда:Марс

Опубликовано 08.02.2018 - 13:17

В данном случае сортировка будет правильно работать в обоих случаях

ORDER BY LENGTH(po.value) ASC

ORDER BY LENGTH(value) ASC

 

Это примерно, как, находясь в Ленинграде, водителю такси сказать

1. 3-я улица Строителей, 25  ИЛИ

2. Ленинград, 3-я улица Строителей, 25.

Результат будет одинаков.

А вот если это сказать в Москве, то результат будет другой...

 

спасибо добрый человек, всё по полочкам разложил, всем бы так отвечать!






0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых