0 Пользователей и 1 Гость просматривают эту тему.
  • 19 Ответов
  • 5597 Просмотров
*

Linfuby

  • Завсегдатай
  • 1242
  • 176 / 0
  • Всё просто...
Как многим известно, у ЖШ с сортировкой недоработки. Так вот периодически используя импорт, добавляются некоторые атрибуты, характеристики и их значения, и конечно же они не сортируются. После чего приходится заходить в опции атрибута и сортировать вручную.
Надоело.
Как я неоднократно упоминал, надо всего лишь немного воображения и логики. Результат:
Для атрибутов
Открываем файл \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 »
Немного воображения и логики, и любая проблема становится решенной.
Кривые решения - дают кривой результат!
Решения для JoomShopping
Благодарности и поддержка принимаются по след. реквизитам:
Яндекс.Деньги - 41001751720054
*

Maxum

  • Давно я тут
  • 689
  • 32 / 1
Подскажите, последнее - это и для характеристик или только для значений характеристик? Код добавлен, в характеристиках изменений пока не видно.
Пока категории остались в своём порядке, не по алфавиту, и сортировка вручную, с указанием номера, работает.
*

Linfuby

  • Завсегдатай
  • 1242
  • 176 / 0
  • Всё просто...
Подскажите, последнее - это и для характеристик или только для значений характеристик? Код добавлен, в характеристиках изменений пока не видно.
Пока категории остались в своём порядке, не по алфавиту, и сортировка вручную, с указанием номера, работает.
Это только для опций.
Сохранение с указанием номеров порядка перестает работать, но стрелками можно перемещать позиции.
Для самих характеристик думаю по той же аналогии можно сделать. Поищите функцию сортировки в файле \administrator\components\com_jshopping\controllers\productfields.php
Немного воображения и логики, и любая проблема становится решенной.
Кривые решения - дают кривой результат!
Решения для JoomShopping
Благодарности и поддержка принимаются по след. реквизитам:
Яндекс.Деньги - 41001751720054
*

Maxum

  • Давно я тут
  • 689
  • 32 / 1
Программирование по аналогии гуманитарием - страшная вещь ))). Получилось вот такое, пока работает:
файл \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

  • Давно я тут
  • 689
  • 32 / 1
И ещё вопрос про аналогии: а можно ли оставить для фронтенда сайта сортировку характеристик в произвольном порядке, но сделать, чтобы они шли по алфавиту при добавлении товара?
*

Linfuby

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

А при редактировании карточки товара было по алфавиту
2. Размеры
1. Цвета
Я правильно понял?
Немного воображения и логики, и любая проблема становится решенной.
Кривые решения - дают кривой результат!
Решения для JoomShopping
Благодарности и поддержка принимаются по след. реквизитам:
Яндекс.Деньги - 41001751720054
*

Maxum

  • Давно я тут
  • 689
  • 32 / 1
Да, всё верно, именно так и нужно.
*

Linfuby

  • Завсегдатай
  • 1242
  • 176 / 0
  • Всё просто...
Откроем файл \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");
Немного воображения и логики, и любая проблема становится решенной.
Кривые решения - дают кривой результат!
Решения для JoomShopping
Благодарности и поддержка принимаются по след. реквизитам:
Яндекс.Деньги - 41001751720054
*

Maxum

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

jorevo

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

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

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

Linfuby

  • Завсегдатай
  • 1242
  • 176 / 0
  • Всё просто...
Linfuby, а не подскажите как сделать сортировку опций атрибута по названию в админной части карточки товара (ну то есть там, где мы товару собственно и добавляем атрибуты из списка опций). Просто по умолчанию опции эти располагаются по времени добавления, а хотелось бы по человечески - по названиям опций последовательно (по первому атрибуту, второму, третьему и тд.).
Как я вас понимаю...
А Вы не пробовали решение из первого топика? Ведь насколько я помню в карточке атрибуты показываются согласно сортировке в списке атрибутов в Опциях.
Немного воображения и логики, и любая проблема становится решенной.
Кривые решения - дают кривой результат!
Решения для JoomShopping
Благодарности и поддержка принимаются по след. реквизитам:
Яндекс.Деньги - 41001751720054
*

jorevo

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

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

[вложение удалено Администратором]
*

jorevo

  • Давно я тут
  • 595
  • 13 / 1
Насколько я понял искомое находится в /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

  • Завсегдатай
  • 1242
  • 176 / 0
  • Всё просто...
Я попробовал. Полчаса убил на понимание структуры и у меня ничего не получилось, только из-за того что я не могу связать две таблицы по динамическому названию колонки (attr_1, attr_2 и т.д.)
ЖШ в этом плане конечно не удобен.
Поэтому я заявляю что с таким методом хранения данных невозможно делать необходимую Вам сортировку.
Может найдется кто поумнее меня и найдет таки решение этой задачи...
Немного воображения и логики, и любая проблема становится решенной.
Кривые решения - дают кривой результат!
Решения для JoomShopping
Благодарности и поддержка принимаются по след. реквизитам:
Яндекс.Деньги - 41001751720054
*

jorevo

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

Linfuby

  • Завсегдатай
  • 1242
  • 176 / 0
  • Всё просто...
Получится. Но для этого надо будет сделать достаточно много переделок.
Если у Вас всего 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 Вашего атрибута.
Немного воображения и логики, и любая проблема становится решенной.
Кривые решения - дают кривой результат!
Решения для JoomShopping
Благодарности и поддержка принимаются по след. реквизитам:
Яндекс.Деньги - 41001751720054
*

jorevo

  • Давно я тут
  • 595
  • 13 / 1
Получится. Но для этого надо будет сделать достаточно много переделок.

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

Nocopyrights

  • Новичок
  • 5
  • 1 / 0
Можно ли аналогичным образом отсортировать список производителей? Подскажите, пожалуйста.
*

Linfuby

  • Завсегдатай
  • 1242
  • 176 / 0
  • Всё просто...
Можно ли аналогичным образом отсортировать список производителей? Подскажите, пожалуйста.
Конечно можно.
По факту там же (/components/com_jshopping/tables/) искать файл manufacturer.php Искать там функцию getManufacturers() или getAllManufacturers() и смотреть какой там ORDER BY и при необходимости поменять на свой
Немного воображения и логики, и любая проблема становится решенной.
Кривые решения - дают кривой результат!
Решения для JoomShopping
Благодарности и поддержка принимаются по след. реквизитам:
Яндекс.Деньги - 41001751720054
*

Nocopyrights

  • Новичок
  • 5
  • 1 / 0
Спасибо большое, но не работает (
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться