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

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

Сортировка Атрибутов и Характеристик по алфавиту.

 (Прочитано 2973 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Linfuby
Живу я здесь
******

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

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


Всё просто...


« : 09.05.2012, 17:25:41 »

Как многим известно, у ЖШ с сортировкой недоработки. Так вот периодически используя импорт, добавляются некоторые атрибуты, характеристики и их значения, и конечно же они не сортируются. После чего приходится заходить в опции атрибута и сортировать вручную.
Надоело.
Как я неоднократно упоминал, надо всего лишь немного воображения и логики. Результат:
Для атрибутов
Открываем файл \administrator\components\com_jshopping\controllers\attributesvalues.php
Ищем функцию saveorder(), и в ней после
Код:
       $attr_id = JRequest::getInt("attr_id");
Добавляем
Код:
       $table = &JTable::getInstance('attributValue', 'jshop');
        $AttributeValues = $table->getAllValues($attr_id);
        UnSet($table);
        $AllAttributeValues = Array();
        ForEach($AttributeValues As $AttributeValue){
            $AllAttributeValues[$AttributeValue->value_id] = $AttributeValue->name;
        }
        Array_MultiSort($AllAttributeValues, SORT_STRING, $cid);
        ForEach($AllAttributeValues As $Key => $AllAttributeValue){
         $order[$Key] = $Key;
        }
Теперь при нажатии на кнопку сохранить сортировку на этой странице (/administrator/index.php?option=com_jshopping&controller=attributesvalues&task=show&attr_id=тут номер атрибута) значения отсортируются по строковым значениям.

Для характеристик
Открываем файл \administrator\components\com_jshopping\controllers\productfieldvalues.php
Ищем функцию saveorder(), и в ней после
Код:
       $field_id = JRequest::getInt("field_id");
Добавляем
Код:
       $_ProductFieldValues = &$this->getModel("productFieldValues");
        $ProductFieldValues = $_ProductFieldValues->getList($field_id);
        UnSet($_ProductFieldValues);
        UnSet($order);
        $AllProductFieldValues = Array();
        ForEach($ProductFieldValues As $ProductFieldValue){
            $AllProductFieldValues[$ProductFieldValue->id] = $ProductFieldValue->name;
        }
        Array_MultiSort($AllProductFieldValues, SORT_STRING, $cid);
        ForEach($AllProductFieldValues As $Key => $AllProductFieldValue){
         $order[$Key] = $Key;
        }
Теперь при нажатии на кнопку сохранить сортировку на этой странице (/administrator/index.php?option=com_jshopping&controller=productfieldvalues&field_id=тут номер характеристики) значения отсортируются по строковым значениям.
P.S. Теряется возможность указывать сортировку вручную указав номера (Только стрелками вверх и вниз)
« Последнее редактирование: 12.05.2012, 11:37:14 от Linfuby » Записан
Maxum
Завсегдатай
*****

Репутация: +32/-1
Offline Offline

Сообщений: 689


« Ответ #1 : 31.08.2012, 12:08:31 »

Подскажите, последнее - это и для характеристик или только для значений характеристик? Код добавлен, в характеристиках изменений пока не видно.
Пока категории остались в своём порядке, не по алфавиту, и сортировка вручную, с указанием номера, работает.
Записан
Linfuby
Живу я здесь
******

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

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


Всё просто...


« Ответ #2 : 31.08.2012, 12:50:04 »

Подскажите, последнее - это и для характеристик или только для значений характеристик? Код добавлен, в характеристиках изменений пока не видно.
Пока категории остались в своём порядке, не по алфавиту, и сортировка вручную, с указанием номера, работает.
Это только для опций.
Сохранение с указанием номеров порядка перестает работать, но стрелками можно перемещать позиции.
Для самих характеристик думаю по той же аналогии можно сделать. Поищите функцию сортировки в файле \administrator\components\com_jshopping\controllers\productfields.php
Записан
Maxum
Завсегдатай
*****

Репутация: +32/-1
Offline Offline

Сообщений: 689


« Ответ #3 : 31.08.2012, 14:08:23 »

Программирование по аналогии гуманитарием - страшная вещь ))). Получилось вот такое, пока работает:
файл \administrator\components\com_jshopping\controllers\productfields.php, в функцию saveorder() после

Код:
 $field_id = JRequest::getInt("field_id");

добавлено

Код:
$_ProductFields = &$this->getModel("productFields");
        $ProductFields = $_ProductFields->getList($field_id);
        UnSet($_ProductFields);
        UnSet($order);
        $AllProductFields = Array();
        ForEach($ProductFields As $ProductField){
            $AllProductFields[$ProductField->id] = $ProductField->name;
        }
        Array_MultiSort($AllProductFields, SORT_STRING, $cid);
        ForEach($AllProductFields As $Key => $AllProductField){
         $order[$Key] = $Key;
        }

Спасибо!
Записан
Maxum
Завсегдатай
*****

Репутация: +32/-1
Offline Offline

Сообщений: 689


« Ответ #4 : 31.08.2012, 14:22:39 »

И ещё вопрос про аналогии: а можно ли оставить для фронтенда сайта сортировку характеристик в произвольном порядке, но сделать, чтобы они шли по алфавиту при добавлении товара?
Записан
Linfuby
Живу я здесь
******

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

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


Всё просто...


« Ответ #5 : 31.08.2012, 14:55:33 »

И ещё вопрос про аналогии: а можно ли оставить для фронтенда сайта сортировку характеристик в произвольном порядке, но сделать, чтобы они шли по алфавиту при добавлении товара?
То есть чтобы в карточке товара было например согласно их порядку:
1. Цвета: Красный, Синий
2. Размеры: 56, 62

А при редактировании карточки товара было по алфавиту
2. Размеры
1. Цвета
Я правильно понял?
Записан
Maxum
Завсегдатай
*****

Репутация: +32/-1
Offline Offline

Сообщений: 689


« Ответ #6 : 31.08.2012, 15:03:31 »

Да, всё верно, именно так и нужно.
Записан
Linfuby
Живу я здесь
******

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

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


Всё просто...


« Ответ #7 : 31.08.2012, 15:06:22 »

Откроем файл \administrator\components\com_jshopping\controllers\products.php
Найдем функцию _getHtmlProductExtraFields($categorys, $product)
После
Код:
$list = $_productfields->getList(1);
Допишем код:
Код:
        function mySort($f1,$f2){
            if($f1->name < $f2->name) return -1;
            elseif($f1->name > $f2->name) return 1;
            else return 0;
        }
        uasort($list, "mySort");
Записан
Maxum
Завсегдатай
*****

Репутация: +32/-1
Offline Offline

Сообщений: 689


« Ответ #8 : 31.08.2012, 15:19:50 »

Спасибо ещё раз, вот этот вариант наиболее подходящий: и на сайте логично, и в админке удобно. Благодарю!
Записан
jorevo
Завсегдатай
*****

Репутация: +12/-1
Offline Offline

Сообщений: 606


« Ответ #9 : 08.04.2013, 05:01:19 »

Linfuby, а не подскажите как сделать сортировку опций атрибута по названию в админной части карточки товара (ну то есть там, где мы товару собственно и добавляем атрибуты из списка опций). Просто по умолчанию опции эти располагаются по времени добавления, а хотелось бы по человечески - по названиям опций последовательно (по первому атрибуту, второму, третьему и тд.).

ЗЫ. Первое вложение - по умолчанию (по мере добавления), второе - как надо.

[вложение удалено Администратором]
« Последнее редактирование: 08.04.2013, 05:16:36 от jorevo » Записан
Linfuby
Живу я здесь
******

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

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


Всё просто...


« Ответ #10 : 08.04.2013, 09:00:53 »

Linfuby, а не подскажите как сделать сортировку опций атрибута по названию в админной части карточки товара (ну то есть там, где мы товару собственно и добавляем атрибуты из списка опций). Просто по умолчанию опции эти располагаются по времени добавления, а хотелось бы по человечески - по названиям опций последовательно (по первому атрибуту, второму, третьему и тд.).
Как я вас понимаю...
А Вы не пробовали решение из первого топика? Ведь насколько я помню в карточке атрибуты показываются согласно сортировке в списке атрибутов в Опциях.
Записан
jorevo
Завсегдатай
*****

Репутация: +12/-1
Offline Offline

Сообщений: 606


« Ответ #11 : 08.04.2013, 13:58:22 »

А Вы не пробовали решение из первого топика? Ведь насколько я помню в карточке атрибуты показываются согласно сортировке в списке атрибутов в Опциях.

Попробовал, не работает. Удаленный и заново добавленный в товар атрибут становится в списке в конец (см. вложение). Подозреваю что в карточке товара вообще сортировки как таковой нет, как в базу записано, в том порядке и выводится.

[вложение удалено Администратором]
Записан
jorevo
Завсегдатай
*****

Репутация: +12/-1
Offline Offline

Сообщений: 606


« Ответ #12 : 11.04.2013, 12:50:22 »

Насколько я понял искомое находится в /administrator/components/com_jshopping/views/product_edit/tmpl/attribute.php c 75 строки:

Код:
               foreach($lists['all_attributes'] as $key=>$value){
                    $tmp_field = "attr_".$value->attr_id;
                    $tmp_val = $v->$tmp_field;
                    $tmp_val_val = $lists['attribs_values'][$tmp_val]->name;
                    $image_ = "";
                    if ($lists['attribs_values'][$tmp_val]->image!=''){
                        $image_ = "<img src='".$jshopConfig->image_attributes_live_path."/".$lists['attribs_values'][$tmp_val]->image."' align='left' hspace='5' width='16' height='16' style='margin-right:5px;' class='img_attrib'>";
                    }
                    print "<td><input type='hidden' name='attrib_id[".$value->attr_id."][]' value='".$tmp_val."'>".$image_.$tmp_val_val."</td>";
               }

Вот куда то сюда кажется и надо воткнуть сортировку. Подскажите как?
Записан
Linfuby
Живу я здесь
******

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

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


Всё просто...


« Ответ #13 : 11.04.2013, 14:28:08 »

Я попробовал. Полчаса убил на понимание структуры и у меня ничего не получилось, только из-за того что я не могу связать две таблицы по динамическому названию колонки (attr_1, attr_2 и т.д.)
ЖШ в этом плане конечно не удобен.
Поэтому я заявляю что с таким методом хранения данных невозможно делать необходимую Вам сортировку.
Может найдется кто поумнее меня и найдет таки решение этой задачи...
Записан
jorevo
Завсегдатай
*****

Репутация: +12/-1
Offline Offline

Сообщений: 606


« Ответ #14 : 11.04.2013, 15:03:33 »

А я вот смотрю в фронт-энд карточки товара атрибуты выводятся в том же порядке, что задано в админке в опциях атрибутов. Вобщем то этого достаточно, один раз расставить их там как надо не проблема. По аналогии тоже самое сделать такое для закладки атрибуты в админке не получится?
Записан
Linfuby
Живу я здесь
******

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

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


Всё просто...


« Ответ #15 : 11.04.2013, 15:41:57 »

Получится. Но для этого надо будет сделать достаточно много переделок.
Если у Вас всего 1 атрибут и больше не предвидится, то это можно сделать модифицировав всего 1 функцию.
Замените функцию getAttributes() в файле /components/com_jshopping/tables/product.php
Код:
    function getAttributes(){
$lang = JSFactory::getLang();
        $query = "SELECT * FROM `#__jshopping_products_attr` LEFT JOIN `#__jshopping_attr_values` ON attr_1=value_id WHERE product_id = '".$this->product_id."' ORDER BY (`name_".$lang->lang.'` + 0)';
        $this->_db->setQuery($query);
        return $this->_db->loadObjectList();
    }
Внимание! Заменить в SQL-запросе attr_1 на attr_ID Вашего атрибута.
Записан
jorevo
Завсегдатай
*****

Репутация: +12/-1
Offline Offline

Сообщений: 606


« Ответ #16 : 11.04.2013, 15:49:53 »

Получится. Но для этого надо будет сделать достаточно много переделок.

Ох, пойду тогда наверное разработчиков тиранить в "хотелки", а то и так магазин уже в сплошных заплатках. Спасибо!
Записан
Nocopyrights
Новичок
*

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

Сообщений: 7


« Ответ #17 : 19.05.2015, 22:16:31 »

Можно ли аналогичным образом отсортировать список производителей? Подскажите, пожалуйста.
Записан
Linfuby
Живу я здесь
******

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

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


Всё просто...


« Ответ #18 : 21.05.2015, 08:41:21 »

Можно ли аналогичным образом отсортировать список производителей? Подскажите, пожалуйста.
Конечно можно.
По факту там же (/components/com_jshopping/tables/) искать файл manufacturer.php Искать там функцию getManufacturers() или getAllManufacturers() и смотреть какой там ORDER BY и при необходимости поменять на свой
Записан
Nocopyrights
Новичок
*

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

Сообщений: 7


« Ответ #19 : 23.05.2015, 02:53:37 »

Спасибо большое, но не работает (
Записан
Страниц: [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