LiveInternetMail.ru
Форум русской поддержки Joomla!® CMS
28.05.2012, 00:56:55 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 1.7 FAQ Joomla 1.5 FAQ Joomla 1.0 FAQ Правила форума Новости Joomla Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор Тема: [Решено] Сортировка товара по значению параметра типа в текущей категории V1.1.3  (Прочитано 4685 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
DarkMaster13
Осваиваюсь на форуме
***

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

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



« : 02.05.2009, 15:44:11 »

Ситуация такая:
  • Все товары разделены по категориям (всего их 4 пока без подкатегорий);
  • Все товары одного типа (Тип_1);
  • У Типа (Тип_1) есть 7 параметров (Параметр1 - Параметр7);
  • Значения параметров находятся в таблице jos_vm_product_type_1;
  • связаны с товаром по полю product_id.
А теперь вопрос: Как сделать сортировку товара по значению параметра типа для заданной категории?

Думаю такая сортировка вещь полезная и довольно универсальная.
Вобщем начинаю ковырять shop.parameter_search_form.
У кого какие идеи не стесняйтесь говорите  drink
« Последнее редактирование: 04.05.2009, 16:31:20 от beagler » Записан
DarkMaster13
Осваиваюсь на форуме
***

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

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



« Ответ #1 : 02.05.2009, 22:38:35 »

Эй народ !!!! празднуете ? Grin С праздниками Всех. Но всетаки вернемся к моим баранам.
Выполнение такого запроса:
Код:
SELECT a.`product_id` , a.`product_name` , b.`nvsh_mex`
FROM `jos_vm_product` AS a, `jos_vm_product_type_1` AS b, `jos_vm_product_category_xref` AS c
WHERE a.`product_id` = b.`product_id`
AND a.`product_id` = c.`product_id`
AND c.`category_id` =1
AND a.`product_publish` = 'Y'
ORDER BY b.`nvsh_mex`

и расположение всех товаров согласно product_id меня наверно устроит Azn
Вообще в shop.parameter_search_form много интересного но для сортировки он скорей всего не нужен.
вот shop_browse_queries гараздо интересней  Wink
в конце файла есть заремареная строка //echo $list;
если коментарий убрать то можно посмотреть какой запрос формируется.
Вот оно я уже де-то рядом Azn
Записан
DarkMaster13
Осваиваюсь на форуме
***

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

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



« Ответ #2 : 03.05.2009, 19:49:07 »

Вобщем Что у меня вышло
browse_orderbyfields.tpl
Добавляем список параметров в сортировку
Код:
$query = "SELECT distinct a.product_type_id,a.parameter_name,a.parameter_label FROM #__{vm}_product_type_parameter AS a ";
$query .= "ORDER BY a.parameter_label ASC";
$db = new ps_DB;
$db->query( $query );
$myres = $db->record;
foreach ($myres as $param) {
$selected = '';
if( @$_REQUEST['orderby'] == $param->parameter_name ) {
$selected = "selected=\"selected\"";
}
echo "<option value=\"".$param->parameter_name."\" $selected>". $param->parameter_label."</option>\n";
}
Немножко правим shop_browse_queries
Добавим нужную таблицу
Код:
$table_names = '`#__{vm}_product`, `#__{vm}_category`, `#__{vm}_product_category_xref`,`#__{vm}_shopper_group`,`jos_vm_product_type_1`';
Поправим сортировку
Код:
switch( $orderby ) {
case 'product_list':
$orderbyField = '`#__{vm}_product_category_xref`.`product_list`'; break;
case 'product_name':
    $orderbyField = '`#__{vm}_product_type_1`.`nvsh_mex`'; break;
// $orderbyField = '`#__{vm}_product`.`product_name`'; break;
case 'product_price':
$orderbyField = '`#__{vm}_product_price`.`product_price`'; break;
case 'product_sku':
$orderbyField = '`#__{vm}_product`.`product_sku`'; break;
case 'product_cdate':
$orderbyField = '`#__{vm}_product`.`cdate`'; break;
case 'nvsh_mex':
$orderbyField = '`#__{vm}_product_type_1`.`nvsh_mex`'; break;
case 'nvsh_model':
$orderbyField = '`#__{vm}_product_type_1`.`nvsh_model`'; break;
case 'nvsh_dlina':
$orderbyField = '`#__{vm}_product_type_1`.`nvsh_dlina`'; break;
case 'nvsh_cena':
$orderbyField = '`#__{vm}_product_type_1`.`nvsh_cena`'; break;
case 'nvsh_magazin':
$orderbyField = '`#__{vm}_product_type_1`.`nvsh_magazin`'; break;
case 'nvsh_cvet':
$orderbyField = '`#__{vm}_product_type_1`.`nvsh_cvet`'; break;
case 'nvsh_vibor':
$orderbyField = '`#__{vm}_product_type_1`.`nvsh_vibor`'; break;

default:
//$orderbyField = '`#__{vm}_product`.`product_name`'; break;
$orderbyField = '`#__{vm}_product_type_1`.`nvsh_mex`'; break;
}
В разделе // ASSEMBLE THE QUERY правим условие
Код:
$where_clause[] = "`product_parent_id`=0 ";
if( !$perm->check("admin,storeadmin") ) {
$where_clause[] = "`product_publish`='Y' ";
$where_clause[] = "`category_publish`='Y' ";
 $where_clause[] = "`jos_vm_product_type_1`.`product_id`= `jos_vm_product`.`product_id`";
Вроде даже работает...
Записан
DarkMaster13
Осваиваюсь на форуме
***

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

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



« Ответ #3 : 03.05.2009, 20:31:13 »

Тяк... вобщем расщиренный поиск перестал работать  Grin
решил так
shop_browse_queries
в области // Filter Products by Product Type восстанавливаем список таблиц
Код:
$table_names = '`#__{vm}_product`, `#__{vm}_category`, `#__{vm}_product_category_xref`,`#__{vm}_shopper_group`';
Записан
beagler
Moderator
*****

Репутация: +316/-4
Offline Offline

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


http://beagler.ru/


« Ответ #4 : 03.05.2009, 22:20:26 »

Молодец, +1. Прикрепляю тему. Ещё бы ссылку на демо дал...
И ещё ты забыл версию virtuemart указать...
Записан
DarkMaster13
Осваиваюсь на форуме
***

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

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



« Ответ #5 : 04.05.2009, 12:13:04 »

Спасибо. Smiley VirtueMart Version 1.1.3

попробывать пока можно тутhttp://darkmaster13.no-ip.biz:8080/webstream/

Задача усложняется. В листе сортировки разделить все на блоки таким образом.
Вначале каждого блока выводить "Сортировать по". Например если выбран цвет
то так
Белый
1 2 3 4
--------------------
Голубой
1 2 3 4
5 6 7 8
--------------------
Черный
1 2 3

Может кто делал? Или идею... Пока не знаю как сделать.
Записан
beagler
Moderator
*****

Репутация: +316/-4
Offline Offline

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


http://beagler.ru/


« Ответ #6 : 04.05.2009, 16:32:52 »

Попробовал в примере отсортировать по цвету - дает ошибку, в адресной строке  - localhost
Записан
DarkMaster13
Осваиваюсь на форуме
***

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

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



« Ответ #7 : 04.05.2009, 17:04:26 »

Бывает Azn ща виртуальный хостинг настрою. Работает вроде. Идеи как вывести блоки есть?
« Последнее редактирование: 04.05.2009, 17:08:42 от DarkMaster13 » Записан
beagler
Moderator
*****

Репутация: +316/-4
Offline Offline

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


http://beagler.ru/


« Ответ #8 : 04.05.2009, 18:10:14 »

Выбрал сортировку "длина" - а не по порядку Sad
А по блокам, даже в голову ничего не приходит.
Записан
DarkMaster13
Осваиваюсь на форуме
***

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

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



« Ответ #9 : 04.05.2009, 19:12:13 »

Длина мне не нужна будет Azn но как вариант длину можно задать в метрах 0,9 м.;1 м.;1,1 м.; Правила сорировки как для строк так что должно работать.
« Последнее редактирование: 05.05.2009, 22:00:40 от DarkMaster13 » Записан
DarkMaster13
Осваиваюсь на форуме
***

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

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



« Ответ #10 : 10.05.2009, 14:58:21 »

Так продолжаем Azn Не совсем блоки вышли но приемлемо.
получим примерно такое

Белый 1 2 3 4
Голубой 5 6 7 Серый 8
Черный 1 2 3

Сделал так: правим shop.browse.php Добавим в начало $products[$i]['id'] = $db_browse->f('product_id');
Код:
$products[$i]['id'] = $db_browse->f('product_id');
$products[$i]['product_name'] = shopMakeHtmlSafe( $product_name );
$products[$i]['product_s_desc'] = $product_s_desc;
$products[$i]['product_details'] = $product_details;
$products[$i]['product_rating'] = $product_rating;
$products[$i]['product_price'] = $product_price;
$products[$i]['product_price_raw'] = $product_price_raw;
$products[$i]['product_sku'] = $db_browse->f("product_sku");
$products[$i]['product_weight'] = $db_browse->f("product_weight");
$products[$i]['product_weight_uom'] = $db_browse->f("product_weight_uom");
$products[$i]['product_length'] = $db_browse->f("product_length");
$products[$i]['product_width'] = $db_browse->f("product_width");
$products[$i]['product_height'] = $db_browse->f("product_height");
$products[$i]['product_lwh_uom'] = $db_browse->f("product_lwh_uom");
$products[$i]['product_in_stock'] = $db_browse->f("product_in_stock");
$products[$i]['product_available_date'] = $VM_LANG->convert( vmFormatDate($db_browse->f("product_available_date"), $VM_LANG->_('DATE_FORMAT_LC') ));
$products[$i]['product_availability'] = $db_browse->f("product_availability");
$products[$i]['cdate'] = $VM_LANG->convert( vmFormatDate($db_browse->f("cdate"), $VM_LANG->_('DATE_FORMAT_LC') ));
$products[$i]['mdate'] = $VM_LANG->convert( vmFormatDate($db_browse->f("mdate"), $VM_LANG->_('DATE_FORMAT_LC') ));
$products[$i]['product_url'] = $db_browse->f("product_url");
добавляем такой код
Код:
$test=$product_type_param; // Дополнительная перемення для проверки
$cursortfd=$_REQUEST['orderby']; // Получаем параметр по которому происходит сортировка
if ($cursortfd=="") $cursortfd="nvsh_model"; // Если сортировки нет устанавливаем сами тот который по умолчанию
$query1="SELECT `product_id`,".$cursortfd; // Запрос к базе отбираем значение нужного параметра
$query1.="\n FROM `#__{vm}_product_type_1`";
$query1.="\n WHERE product_id=".$products[$i]['id'];
$db = new ps_DB;
$db->query( $query1);
$myres = $db->record;
foreach ($myres as $param1){
$product_type_param=$param1->$cursortfd;
}
if ($test<>$product_type_param) // Проверяем если значение раньше не выводилось то выводим его
$products[$i]['product_type_param'] = $product_type_param;
else $products[$i]['product_type_param']="<p>&nbsp;</p>";// Если значение уже выводилось вставляем абзац а то иначе будет неровная таблица
Правим browse_N.php так как у меня выводится по 4-ре товара вв строке то я правил browse_4.php
Перед
Код:
<h2>
    <a style="font-size: 16px; font-weight: bold;" href="<?php echo $product_flypage ?>"><?php echo $product_name ?></a>
  </h2>
вставляем
Код:
<h1>
     <?php echo $product_type_param;?>
 </h1>
Пользуйтесь ... Найдете баг пишите.
« Последнее редактирование: 10.05.2009, 19:05:41 от DarkMaster13 » Записан
DarkMaster13
Осваиваюсь на форуме
***

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

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



« Ответ #11 : 10.05.2009, 16:40:21 »

Нашел глюк. Если выводится несколько страниц теряется значение переменной $orderby устраняем так:
находим в shop.browse.php // Prepare Page Navigation и дописываем
$search_string .= empty($orderby) ? '' : '&amp;orderby='.$orderby;
Код:
$search_string = $mm_action_url."index.php?option=com_virtuemart&amp;Itemid=$Itemid&amp;category_id=$category_id&amp;page=$modulename.browse";
$search_string .= empty($manufacturer_id) ? '' : "&amp;manufacturer_id=$manufacturer_id";
$search_string .= empty($keyword) ? '' : '&amp;keyword='.urlencode( $keyword );
$search_string .= empty($orderby) ? '' : '&amp;orderby='.$orderby;
Записан
Sqvall
Осваиваюсь на форуме
***

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

Сообщений: 89


« Ответ #12 : 12.05.2009, 15:34:30 »

Доброго дня. Думаю что у меня похожая задача, сделать вместо стартовой страницы VirtueMart 1.1.3 где расположены фотографии главных групп, создать просто выборки в ячейках где выбираешь сначало Главную группу, далее в след ячейке все что относилось к главной группе (тоесть подгруппа), далее в след ячейке уже выбираю все товары относящиеся к этой подгруппе. Есть ли готовое решение данному вопросу?
Записан
DarkMaster13
Осваиваюсь на форуме
***

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

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



« Ответ #13 : 15.05.2009, 06:46:50 »

Доброго! Готового нет. Я правлю код магазина в зависимомсти от потребностей. Если есть вопросы то связатся можно так: http://www.coder.cv.ua/index.php?option=com_content&view=article&id=3&Itemid=9
Записан
Webprohozhiy
Захожу иногда
**

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

Сообщений: 15


« Ответ #14 : 25.08.2009, 12:32:41 »

Цитировать
Правим browse_N.php так как у меня выводится по 4-ре товара вв строке то я правил browse_4.php .....

А что вставлять в browse_listtable.tpl.php для отображения типа в таблице?
Записан
Master of Magic
Осваиваюсь на форуме
***

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

Сообщений: 47


« Ответ #15 : 08.06.2011, 16:53:02 »

Не, не работает. Поменял shop_browse_queries.php и browse_orderbyfields.tpl.php
В фильтре выпадающий список (browse_orderbyfields.tpl.php) формируется правильно, появились все параметры.
Но при выборе любого из параметров - товаров нет. Всякие разные эксперименты в hop_browse_queries резульатов не дали, кто подскажет где копать? vm 1.1.7
Вот наткнулся на такой фильтр:
http://allancer.com/free-stuff/allancer-virtuemart-advanced-search
« Последнее редактирование: 08.06.2011, 17:54:45 от Master of Magic » Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Рейтинг@Mail.ru Rambler Top100 Powered by SMF 1.1.16 | 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