Как многие, кто пользуется Virtuemart 1.0.x уже заметили, при попытке добавить сопутствующий товар в адмике (особенно если товаров много) — дело достаточно нелегкое и вот почему.
Товары выводятся не по алфавиту.
Задача решается достаточно просто — нужно просто отсортировать стандартными средствами PHP массив, содержащий эти самые товары.Для этого открываем файл \administrator\components\com_virtuemart\classes\ps_html.php, переходим к строке 400 и перед ней вставляем функцию сортировки.
Т.е. вместо:
while( $db->next_record() ) { $products[$db->f("product_id")] = $db->f("category_name")." => ".$db->f("product_name"); } $this->dropdown_display($list_name, $values, $products, $size=20, "multiple=\"multiple\""); }
Пишем:
while( $db->next_record() ) { $products[$db->f("product_id")] = $db->f("category_name")." => ".$db->f("product_name"); } asort($products); reset($products); $this->dropdown_display($list_name, $values, $products, $size=20, "multiple=\"multiple\""); }
Пара строк.
Теперь рассмотрим подробнее.
Функция asort ( array &array [, int sort_flags] )
Эта функция сортирует массив таким образом, что сохраняются отношения между ключами и значениями. Она полезна, в основном, при сортировке ассоциативных массивов, когда важно сохранить отношение ключ => значение.
Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.
Дополнительный второй параметр sort_flags можно использовать для изменения поведения сортировки, используя следующие значения:
Флаги сортировки:
SORT_REGULAR — сравнивать элементы нормально (не изменять типы)
SORT_NUMERIC — сравнивать элементы в числовом отношении
SORT_STRING — сравнивать элементы как строки
SORT_LOCALE_STRING — сравнивать элементы как строки, основываясь на текущей локали. Добавлено в PHP 5.0.2