Перейти к содержанию
Официальный форум поддержки Simpla

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


Перейти к решению Решено yr4ik,

Рекомендуемые сообщения

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

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

post-20681-0-68986700-1516811470_thumb.jpg

Изменено пользователем Ivan2016
Ссылка на сообщение
Поделиться на другие сайты

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

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

Ссылка на сообщение
Поделиться на другие сайты
  • Решение
foreach($temp_options as &$option)
{
       	sort($option['values']);//СОРТИРОВКА
       	$option['value'] = implode('; ', $option['values']);   
}

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

Изменено пользователем yr4ik
Ссылка на сообщение
Поделиться на другие сайты

что-то это не работает... версия 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
Ссылка на сообщение
Поделиться на другие сайты

Работает именно так, как запрограммировано.

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

 

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

Ссылка на сообщение
Поделиться на другие сайты

Работает именно так, как запрограммировано.

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

 

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

Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Ссылка на сообщение
Поделиться на другие сайты

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

 

у меня код такой и работает (Источник: 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
Ссылка на сообщение
Поделиться на другие сайты

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

 

у меня код такой и работает (Источник: 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;   
кто разбирается, в чём разница?
Идиотский вопрос.

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

Ссылка на сообщение
Поделиться на другие сайты

Идиотский вопрос.

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

не кипишуйте, уважаемый Noxter! 

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

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

Ссылка на сообщение
Поделиться на другие сайты

не кипишуйте, уважаемый Noxter! 

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

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

Да вы кэп!
Ссылка на сообщение
Поделиться на другие сайты

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

 

в карточке товара "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
Ссылка на сообщение
Поделиться на другие сайты

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

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

FROM __options po 

И также 

 __features f 
Ссылка на сообщение
Поделиться на другие сайты

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

ORDER BY LENGTH(po.value) ASC

ORDER BY LENGTH(value) ASC

 

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

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

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

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

А вот если это сказать в Москве, то результат будет другой...
 
 
Ссылка на сообщение
Поделиться на другие сайты

 

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

ORDER BY LENGTH(po.value) ASC

ORDER BY LENGTH(value) ASC

 

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

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

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

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

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

 

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

Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...