Форум русской поддержки Joomla!® CMS
17.08.2017, 10:08:30 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Основной курс по Joomla
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

Настройка сортировки по артикулу

 (Прочитано 188 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Taatshi
Support Team
*****

Репутация: +452/-0
Offline Offline

Пол: Женский
Сообщений: 5004



« : 25.05.2017, 13:44:08 »

Артикул состоит из букв и цифр. Пример: К10

Нужно сортировать как по цифре. То есть, чтоб сначала шло К3, К4, К5... К39, К40   а не K39, К4, К40...

Подумываю, что, при указании сортировки нужно бы удалить сначала все буквы, и потом уже сортировать. Но что-то у меня какая-то чушь получается.В файле user_config.php делаю примерно так...

Код
$sortean = 'product_ean';
$sortean = preg_replace("/[^0-9]/", '', $sortean);
$sortean = $sortean + 0;
$config->sorting_products_field_select = array(
   1=>'(prod.extra_field_1 + 0)',
   2=>'name',
3=>'prod.product_price',
4=> $sortean

И получаю чушь полную... Sad
« Последнее редактирование: 25.05.2017, 14:05:26 от Taatshi » Записан
effrit
Группа развития
*****

Репутация: +822/-7
Online Online

Пол: Мужской
Сообщений: 7587


effrit.com


« Ответ #1 : 25.05.2017, 14:03:09 »

так если буквы разные, то их удаление хаос создаст ).
если буква - одна, то проще, наверно, заменить её на её код * 10000 и прибавить к нему (числовым сложением, а не строковым) остальную числовую часть.
Записан
Taatshi
Support Team
*****

Репутация: +452/-0
Offline Offline

Пол: Женский
Сообщений: 5004



« Ответ #2 : 25.05.2017, 14:06:58 »

Буквы в каждой категории одни и те же. Например - куклы продаем - буква К. Бетон - буква Б. Ладно со способом - почему мой не работает?
Записан
effrit
Группа развития
*****

Репутация: +822/-7
Online Online

Пол: Мужской
Сообщений: 7587


effrit.com


« Ответ #3 : 25.05.2017, 14:11:07 »

а, ну тогда проще.
но что вот это такое тогда?
Код:
$sortean = 'product_ean';
$sortean = preg_replace("/[^0-9]/", '', $sortean);

ты в строке "product_ean" ищешь цифры, их там явно нет, даже близорукий я это вижу Azn
Записан
dmitry_stas
Профи
********

Репутация: +935/-6
Online Online

Сообщений: 9957



« Ответ #4 : 25.05.2017, 14:16:10 »

Цитировать
(prod.extra_field_1 + 0)
это не будет работать. это работает только если одни цифры. а буква всегда одна, и она всегда есть?
Записан
Taatshi
Support Team
*****

Репутация: +452/-0
Offline Offline

Пол: Женский
Сообщений: 5004



« Ответ #5 : 25.05.2017, 14:26:12 »

dmitry_stas, этот характеристика, мы сейчас не про нее. Мы про product_ean

ты в строке "product_ean" ищешь цифры, их там явно нет, даже близорукий я это вижу Azn

Ты видишь суслика?))) А он есть)
Мы сортируем не по этой строке, а по ее значению. Которое и соответствует артикулу.
« Последнее редактирование: 25.05.2017, 14:33:56 от Taatshi » Записан
effrit
Группа развития
*****

Репутация: +822/-7
Online Online

Пол: Мужской
Сообщений: 7587


effrit.com


« Ответ #6 : 25.05.2017, 14:31:10 »

echo $sortean;
даст строку product_ean, а не значение переменно $product_ean
Записан
Taatshi
Support Team
*****

Репутация: +452/-0
Offline Offline

Пол: Женский
Сообщений: 5004



« Ответ #7 : 25.05.2017, 14:34:53 »

echo $sortean;
даст строку product_ean, а не значение переменно $product_ean
Воот я дуууура... счас
Записан
Taatshi
Support Team
*****

Репутация: +452/-0
Offline Offline

Пол: Женский
Сообщений: 5004



« Ответ #8 : 25.05.2017, 14:45:27 »

Нет, все равно не работает(

Антон, там через джумшоппинговские функции идет передача переменной, поэтому и получается непонятно что. В оригинале там

Код
$config->sorting_products_field_select = array(
   1=>'(prod.extra_field_1 + 0)',
   2=>'name',
   3=>'prod.product_price',
   4=>'product_ean'

и все работает
« Последнее редактирование: 25.05.2017, 14:49:36 от Taatshi » Записан
dmitry_stas
Профи
********

Репутация: +935/-6
Online Online

Сообщений: 9957



« Ответ #9 : 25.05.2017, 14:47:50 »

ну так... а что толку что-то делать с product_ean до запроса? Azn вопрос прежний Azn буква всегда одна, и она всегда есть?
Записан
Taatshi
Support Team
*****

Репутация: +452/-0
Offline Offline

Пол: Женский
Сообщений: 5004



« Ответ #10 : 25.05.2017, 14:49:01 »

буква всегда одна, и она всегда есть?
Есть ли - будем исходить из ответа "Неизвестно заранее", буквы точно разные в разных категориях
Записан
dmitry_stas
Профи
********

Репутация: +935/-6
Online Online

Сообщений: 9957



« Ответ #11 : 25.05.2017, 14:55:21 »

ну если неизвестно заранее, то попробуй

Код:
4=>'LENGTH(product_ean),product_ean'
Записан
effrit
Группа развития
*****

Репутация: +822/-7
Online Online

Пол: Мужской
Сообщений: 7587


effrit.com


« Ответ #12 : 25.05.2017, 15:06:43 »

а вот такое можно этой фунции скормить?

Код:
4=>'(int) substr ( $sortean, 2)'
Записан
Taatshi
Support Team
*****

Репутация: +452/-0
Offline Offline

Пол: Женский
Сообщений: 5004



« Ответ #13 : 25.05.2017, 15:19:24 »

Дим, твое сработало. Это что за LENGHT такой? Рассказывай как пашет.

Антон, чем-то ты ее невкусным кормишь)

Показать текстовый блок
Записан
effrit
Группа развития
*****

Репутация: +822/-7
Online Online

Пол: Мужской
Сообщений: 7587


effrit.com


« Ответ #14 : 25.05.2017, 15:32:42 »

а. это для MySQL передается строка.
тогда вот так может сработать, наверно )
Код:
4=>'SUBSTR(product_ean, 2)'
Записан
Taatshi
Support Team
*****

Репутация: +452/-0
Offline Offline

Пол: Женский
Сообщений: 5004



« Ответ #15 : 25.05.2017, 15:40:56 »

А кто тебе сказал, что буква будет только одна?))
Записан
dmitry_stas
Профи
********

Репутация: +935/-6
Online Online

Сообщений: 9957



« Ответ #16 : 25.05.2017, 16:09:34 »

Это что за LENGHT такой? Рассказывай как пашет.
количество символов в строке. указываем 2 сортировки, сначала сортируется по длине строки, затем по алфавиту.

тогда вот так может сработать, наверно )
Код:
4=>'SUBSTR(product_ean, 2)'
да, если знать что буква 1, и она всегда есть Azn тогда этот вариант лучше, немного быстрее будет. хотя конечно на 1К, или даже на 10К товаров это будет незаметно. только надо будет к числу все равно привести
Код:
4=>'SUBSTR(product_ean, 2) + 0'
Записан
Taatshi
Support Team
*****

Репутация: +452/-0
Offline Offline

Пол: Женский
Сообщений: 5004



« Ответ #17 : 25.05.2017, 18:00:26 »

Круто... До двойной сортировки я бы не додумалась(

LENGHT это стандартная функция php? Что-то я ее не нашла в справочниках...

И еще - сначала я делала вот так

Код
4=>'preg_replace("/[^0-9]/", 'product_ean') + 0'

Почему не сработало?
« Последнее редактирование: 25.05.2017, 18:03:31 от Taatshi » Записан
effrit
Группа развития
*****

Репутация: +822/-7
Online Online

Пол: Мужской
Сообщений: 7587


effrit.com


« Ответ #18 : 25.05.2017, 18:08:29 »

эта функция передает параметры для MySQL, так что сюда можно только для неё синтаксис писать. регулярок по дефолту MySQL не поддерживает.
так что гугли "MySQL LENGHT"
Записан
Taatshi
Support Team
*****

Репутация: +452/-0
Offline Offline

Пол: Женский
Сообщений: 5004



« Ответ #19 : 25.05.2017, 18:44:40 »

Дошло, пасиб)
Записан
dmitry_stas
Профи
********

Репутация: +935/-6
Online Online

Сообщений: 9957



« Ответ #20 : 25.05.2017, 19:13:01 »

эта функция передает параметры для MySQL, так что сюда можно только для неё синтаксис писать. регулярок по дефолту MySQL не поддерживает.
угу угу. так и есть. можем только MySQL командами выкручиваться. которые как верно подмечено не знают что такое регулярки. хотя может оно и к лучшему Azn
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet