baldesarini
Осваиваюсь на форуме
 
Репутация: +1/-0
Offline
Пол: 
Сообщений: 33
Брутальный мерзавец
|
 |
« : 09.10.2008, 20:29:20 » |
|
Задача такая: есть каталог товаров, в нем есть родительские категории и подкатегории. в родительских категориях товаров просто нет. дак вот, нужно чтобы при просмотре родительской категории на страницу выводился список всех товаров в дочерних категориях, а сверху уже были ссылки на сами подкатегории дочерние. как такое сделать? можно конечно просто забить в родительскую категорию копии всех товаров из дочерних, но это имха не выход, когда большой магазин и много товара то гемору много.
|
|
|
|
« Последнее редактирование: 23.06.2009, 15:14:13 от beagler »
|
Записан
|
|
|
|
| |
tatjana_s
Захожу иногда

Репутация: +0/-0
Offline
Сообщений: 8
|
 |
« Ответ #1 : 11.10.2008, 11:46:59 » |
|
Меня этот вопрос также интересует, помогите пож-та
|
|
|
|
|
Записан
|
|
|
|
put_nik
Осваиваюсь на форуме
 
Репутация: +2/-0
Offline
Пол: 
Сообщений: 28
|
 |
« Ответ #2 : 21.10.2008, 02:01:06 » |
|
Меня также. Неужели никто не делал?
|
|
|
|
|
Записан
|
|
|
|
tsesl
Завсегдатай
   
Репутация: +83/-0
Offline
Сообщений: 409
Терпение и труд всё перетрут?
|
 |
« Ответ #3 : 23.10.2008, 11:31:46 » |
|
Делал, пример http://novagrosso.ruВерсия магаза какая?
|
|
|
|
|
Записан
|
|
|
|
put_nik
Осваиваюсь на форуме
 
Репутация: +2/-0
Offline
Пол: 
Сообщений: 28
|
 |
« Ответ #4 : 25.10.2008, 22:11:12 » |
|
Красиво получилось. У меня версия ВМРЕ 1.0.15b
|
|
|
|
|
Записан
|
|
|
|
tsesl
Завсегдатай
   
Репутация: +83/-0
Offline
Сообщений: 409
Терпение и труд всё перетрут?
|
 |
« Ответ #5 : 30.10.2008, 13:28:12 » |
|
*решение дано в ознакомительных целях для задания направления мышлению. Навешивание рюшечек и оптимизацию делайте сами своими умами  Часть I "Вывод развернутого дерева категорий в модуле (для ветки VM1.0.x)" В файле /administrator/components/com_virtuemart/classes/ps_product_category.php ищем функцию get_category_tree. В ней ищем $allowed = false;. Ниже идет: if( $depth_list[$n] > 0 ) {
// Subcategory!
if( isset( $root ) && in_array( $category_tmp[$row_list[$n]]["category_child_id"], $allowed_subcategories )
|| $category_tmp[$row_list[$n]]["category_parent_id"] == $category_id
|| $category_tmp[$row_list[$n]]["category_parent_id"] == @$categories[$category_id]["category_parent_id"]) {
$allowed = true;
}
}
добавляем $allowed = true; после закрывающей скобки вложенного if, т.е. должно получиться: if( $depth_list[$n] > 0 ) {
// Subcategory!
if( isset( $root ) && in_array( $category_tmp[$row_list[$n]]["category_child_id"], $allowed_subcategories )
|| $category_tmp[$row_list[$n]]["category_parent_id"] == $category_id
|| $category_tmp[$row_list[$n]]["category_parent_id"] == @$categories[$category_id]["category_parent_id"]) {
$allowed = true;
}
$allowed = true; //наша добавленная строка
}
Сохраняем, проверяем... Часть IIа "Отображение товаров из подкатегорий (для ветки VM1.0.x)" В файле /administrator/components/com_virtuemart/html/shop.browse.php ищем строку // NEW: Include the query section from an external file. Сразу над ней добавляем: function getCategories($catid=0){
$cats = getCategoriesTree($catid);
$tmp = array();
foreach($cats as $curcat) {$tmp[]=$curcat->id;}
return $tmp; }
function getCategoriesTree($catid=0){
global $database;
$database->setQuery( "SELECT c.category_child_id as id,c.category_parent_id as parent FROM #__vm_category_xref as c "
. "\nWHERE c.category_parent_id=".$catid);
$cats = $database->loadObjectList();
$tmp=array();
if (count($cats)>0) {
foreach ($cats as $cat) $tmp=array_merge($tmp,getCategoriesTree($cat->id));
}
$cats=array_merge($cats,$tmp);
return $cats; }
$rows = implode(',',getCategories($category_id)); if ($category_id){
if ($rows) $category_id1 = $category_id.','.$rows;
else $category_id1 = ''; }
Далее открываем /administrator/components/com_virtuemart/html/shop_browse_queries.php, находим код: if( $category_id ) {
$where_clause[] = "`#__{vm}_product_category_xref`.`category_id`=".$category_id; }
меняем его на наше слегка модифицированное: if( $category_id ) {
if ($category_id1) $where_clause[] = "`#__{vm}_product_category_xref`.`category_id` IN(".$category_id1.")";
else $where_clause[] = "`#__{vm}_product_category_xref`.`category_id`=".$category_id; }
Сохраняем, проверяем... Часть IIб "Отображение товаров из подкатегорий произвольной вложенности (для ветки VM1.1.x)" В файле /administrator/components/com_virtuemart/html/shop.browse.php ищем строку $dbp = new ps_DB;Под ней добавляем: function getCatergoryChildsList( $clist, $catid ){
$res_list = array( $catid );
$search_childs = true;
while( $search_childs ){
$search_childs = false;
foreach( $clist as $c_catid => $val ){
if( in_array( $val['category_parent_id'], $res_list ) ){
$res_list[] = $c_catid;
unset( $clist[ $c_catid ] );
$search_childs = true;
}
}
}
return $res_list; } $category_childs = ''; if ( $category_id && $ps_product_category->has_childs($category_id) ){
$category_childs = getCatergoryChildsList( $ps_product_category->getCategoryTreeArray(), $category_id ); }
Далее открываем /administrator/components/com_virtuemart/html/shop_browse_queries.php, находим код: } elseif( empty( $keyword ) && empty( $manufacturer_id )) {
$where_clause[] = "`#__{vm}_product_category_xref`.`category_id`=".$category_id;
}
меняем на немного подправленный нами: } elseif( empty( $keyword ) && empty( $manufacturer_id )) {
if(!empty( $category_childs ))
$where_clause[] = "`#__{vm}_product_category_xref`.`category_id` IN (".$category_id.",".implode(',',$category_childs).")";
else
$where_clause[] = "`#__{vm}_product_category_xref`.`category_id`=".$category_id;
}
Сохраняем, проверяем... Всем удачи!
|
|
|
|
« Последнее редактирование: 26.06.2009, 12:23:25 от tsesl »
|
Записан
|
|
|
|
Lounge
Захожу иногда

Репутация: +0/-0
Offline
Сообщений: 20
|
 |
« Ответ #6 : 06.11.2008, 13:59:05 » |
|
Это то работает, но это вывод подкатегорий в меню, а как сделать что б товары из подкатегорий выводились в родительской категории в самом каталоге. вот как у тебя например: Коллекция KAMURI, в ней выводятся товары из всех подкатегорий (абажюр, вешалка итд) Как это у тебя получилось? 
|
|
|
|
|
Записан
|
|
|
|
tsesl
Завсегдатай
   
Репутация: +83/-0
Offline
Сообщений: 409
Терпение и труд всё перетрут?
|
 |
« Ответ #7 : 06.11.2008, 14:28:55 » |
|
Это то работает, но это вывод подкатегорий в меню, а как сделать что б товары из подкатегорий выводились в родительской категории в самом каталоге. ...
Обновил, см. пост вышеPS. сейчас не могу протестировать на нулевой инсталяции, так что, если возникнут по прежнему недоработки - не серчайте, разберемся... 
|
|
|
|
|
Записан
|
|
|
|
Lounge
Захожу иногда

Репутация: +0/-0
Offline
Сообщений: 20
|
 |
« Ответ #8 : 06.11.2008, 18:49:37 » |
|
СУПЕР!  все отлично работает! огромное спасибо!
|
|
|
|
|
Записан
|
|
|
|
|
|
put_nik
Осваиваюсь на форуме
 
Репутация: +2/-0
Offline
Пол: 
Сообщений: 28
|
 |
« Ответ #10 : 09.12.2008, 23:26:58 » |
|
Очень обрадовался, что появилось решение. Но оказалось что у меня следующий код: if( $category_id ) { if ($keyword || $keyword1) { $q .= "\n AND (`#__{vm}_product_category_xref`.`category_id`='".$category_id."' OR `#__{vm}_product_category_xref`.`category_id` IN (SELECT category_child_id FROM #__{vm}_category_xref WHERE category_parent_id='".$category_id."')) "; } else { $q .= "\n AND (`#__{vm}_product_category_xref`.`category_id`='".$category_id."') "; } } Как здесь быть? Подскажите, плиз...
|
|
|
|
|
Записан
|
|
|
|
tsesl
Завсегдатай
   
Репутация: +83/-0
Offline
Сообщений: 409
Терпение и труд всё перетрут?
|
 |
« Ответ #11 : 10.12.2008, 12:33:07 » |
|
Очень обрадовался, что появилось решение. Но оказалось что у меня следующий код: ......... Как здесь быть? Подскажите, плиз...
Версия VM какая?
|
|
|
|
|
Записан
|
|
|
|
put_nik
Осваиваюсь на форуме
 
Репутация: +2/-0
Offline
Пол: 
Сообщений: 28
|
 |
« Ответ #12 : 18.12.2008, 02:08:02 » |
|
Пишет VirtueMart 1.0.7
|
|
|
|
|
Записан
|
|
|
|
tsesl
Завсегдатай
   
Репутация: +83/-0
Offline
Сообщений: 409
Терпение и труд всё перетрут?
|
 |
« Ответ #13 : 19.12.2008, 12:49:53 » |
|
Пишет VirtueMart 1.0.7
У вас уже ковырялись, видимо, в shop_browse_queries.php, либо сборка какая-то необычная. Словом, я не встречал такой вариации. Прилепите тут весь файл, помотрим, что можно сделать
|
|
|
|
|
Записан
|
|
|
|
put_nik
Осваиваюсь на форуме
 
Репутация: +2/-0
Offline
Пол: 
Сообщений: 28
|
 |
« Ответ #14 : 20.12.2008, 03:03:18 » |
|
У вас уже ковырялись, видимо, в shop_browse_queries.php, либо сборка какая-то необычная. Словом, я не встречал такой вариации. Прилепите тут весь файл, помотрим, что можно сделать
Да, вы правы - ковырялись. Насколько я помню это делалось для вывода второй цены - в нац валюте Вот файлик прицепил
|
|
|
|
|
Записан
|
|
|
|
tsesl
Завсегдатай
   
Репутация: +83/-0
Offline
Сообщений: 409
Терпение и труд всё перетрут?
|
 |
« Ответ #15 : 22.12.2008, 17:06:12 » |
|
Да, вы правы - ковырялись. Насколько я помню это делалось для вывода второй цены - в нац валюте Вот файлик прицепил
if( $category_id ) {
$ext = $category_id1 ? " IN(".$category_id1.")" : "='".$category_id."'";
if ($keyword || $keyword1) {
$q .= "\n AND (`#__{vm}_product_category_xref`.`category_id`".$ext." OR `#__{vm}_product_category_xref`.`category_id` IN (SELECT category_child_id FROM #__{vm}_category_xref WHERE category_parent_id".$ext.")) ";
} else {
$q .= "\n AND (`#__{vm}_product_category_xref`.`category_id`".$ext.") ";
}
}
Пробуйте
|
|
|
|
|
Записан
|
|
|
|
put_nik
Осваиваюсь на форуме
 
Репутация: +2/-0
Offline
Пол: 
Сообщений: 28
|
 |
« Ответ #16 : 25.12.2008, 03:46:22 » |
|
Спасибо за помощь! Но с наскока пока не пошло - внешне ничего не изменилось.
|
|
|
|
|
Записан
|
|
|
|
papirosa
Захожу иногда

Репутация: +0/-0
Offline
Сообщений: 5
|
 |
« Ответ #17 : 21.01.2009, 12:28:57 » |
|
|
|
|
|
|
Записан
|
|
|
|
Sanyo
Осваиваюсь на форуме
 
Репутация: +9/-0
Offline
Сообщений: 131
|
 |
« Ответ #18 : 21.01.2009, 22:58:48 » |
|
Отлично, работает. Толко прошу помощи в небольшой доработке, а именно: Как сделать сортировку, чтобы сначало показывались товары из первой категории, затем из второй и т.д. Как вывести подписи над каждой из подкатегории, к примеру: Категория1 Товар Товар Категория2 Товар Товар
|
|
|
|
« Последнее редактирование: 22.01.2009, 12:12:32 от Sanyo »
|
Записан
|
|
|
|
tsesl
Завсегдатай
   
Репутация: +83/-0
Offline
Сообщений: 409
Терпение и труд всё перетрут?
|
 |
« Ответ #19 : 22.01.2009, 13:12:03 » |
|
Sanyo, для сортировки нужно еще добавить соответсвующее поле в $orderbyField. Не забываем, что в том месте, где мы добавляем нашу выборку по субкатегориям, эта переменная уже проинициализирована. Поэтому нужно написать типа: $orderbyField = '`#__{vm}_category`.`category_id`,' . $orderbyField;
Чтобы добавить еще и заголовок категории перед блоком товаров, нужно править код генерации этого отображения, но сейчас у меня не хватает катастрофически времени это глянуть...
|
|
|
|
|
Записан
|
|
|
|
Sanyo
Осваиваюсь на форуме
 
Репутация: +9/-0
Offline
Сообщений: 131
|
 |
« Ответ #20 : 22.01.2009, 14:05:29 » |
|
tsesl спасибо за овтет,вроде бы пролучилось А самое важное и главное второе, про заголовки  может кто уже делал?
|
|
|
|
« Последнее редактирование: 22.01.2009, 14:16:53 от Sanyo »
|
Записан
|
|
|
|
tsesl
Завсегдатай
   
Репутация: +83/-0
Offline
Сообщений: 409
Терпение и труд всё перетрут?
|
 |
« Ответ #21 : 22.01.2009, 15:43:08 » |
|
Sanyo, предполагается, что вывод товаров из подкатегорий ты уже сделал..."Вывод с заголовками подкатегорий для VM1.0.x" В /administrator/components/com_virtuemart/html/shop.browse.php делаем: I.ищем /*** Start printing out all products (in that category) ***/ добавляем перед этой строкой $tmp_cur_subcategory = ''; // вводим переменную для храниения id текущей категории II.ищем /*** Now echo the filled cell ***/ добавляем перед этой строкой if( $tmp_cur_subcategory != $db_browse->f("category_id")){ //если текущая категория не является сохраненной
echo '</tr></table>'; //прерываем текущую таблицу
echo '<h3>'.$ps_product_category->get_name($db_browse->f("product_id")).'</h3>'; //выводим название категории
$tmp_cur_subcategory = $db_browse->f("category_id"); //запоминаем текущую категорию
echo '<table><tr>'; //начинаем новую таблицу }
Сохраняем shop.browse.php. Далее открываем shop_browse_queries.phpIII. ищем наше if( $category_id ) {
if ($category_id1) $where_clause[] = "`#__{vm}_product_category_xref`.`category_id` IN(".$category_id1.")";
else $where_clause[] = "`#__{vm}_product_category_xref`.`category_id`=".$category_id; }
меняем на if( $category_id ) {
if ($category_id1){
$where_clause[] = "`#__{vm}_product_category_xref`.`category_id` IN(".$category_id1.")";
$orderbyField = '`#__{vm}_category`.`category_id`,' . $orderbyField; //добавляем сортировку результатов по id категории
}
else $where_clause[] = "`#__{vm}_product_category_xref`.`category_id`=".$category_id; }
Сохраняем shop_browse_queries.php. Проверяем на сайте... "Вывод с заголовками подкатегорий для VM1.1.x (отображение DIV-ами без таблиц)" В /administrator/components/com_virtuemart/html/shop.browse.php ищем: $products[$i]['product_name'] = shopMakeHtmlSafe( $product_name ); добавляем ниже $products[$i]['product_category'] = $db_browse->f("category_id"); $products[$i]['product_category_name'] = $ps_product_category->get_name( $db_browse->f("product_id") );
Сохраняем. В /administrator/components/com_virtuemart/html/shop_browse_queries.php ищем: if(!empty( $category_childs )) $where_clause[] = "`#__{vm}_product_category_xref`.`category_id` IN (".$category_id.",".implode(',',$category_childs).")"; меняем на if(!empty( $category_childs )){
$where_clause[] = "`#__{vm}_product_category_xref`.`category_id` IN (".$category_id.",".implode(',',$category_childs).")";
$orderbyField = '`#__{vm}_category`.`category_id`,' . $orderbyField; }
Сохраняем. В /components/com_virtuemart/themes/default/templates/browse/includes/browse_notables.tpl.php ищем: foreach( $products as $product ) { выше добавляем $tmp_cur_subcategory = ''; ищем: /*** Now echo the filled cell ***/ выше добавляем if( $tmp_cur_subcategory != $product['product_category'] ){
$row++;
echo "\n</div><br class=\"clr\" />";
echo '<h3>'.$product['product_category_name'].'</h3>';
$tmp_cur_subcategory = $product['product_category']; }
Сохраняем, пробуем...
|
|
|
|
« Последнее редактирование: 26.06.2009, 12:20:56 от tsesl »
|
Записан
|
|
|
|
papirosa
Захожу иногда

Репутация: +0/-0
Offline
Сообщений: 5
|
 |
« Ответ #22 : 23.01.2009, 14:14:55 » |
|
Предполагается, что вывод товаров из подкатегорий ты уже сделал...В /administrator/components/com_virtuemart/html/shop.browse.php делаем: I.ищем /*** Start printing out all products (in that category) ***/ добавляем перед этой строкой $tmp_cur_subcategory = ''; // вводим переменную для храниения id текущей категории II.ищем /*** Now echo the filled cell ***/ добавляем перед этой строкой if( $tmp_cur_subcategory != $db_browse->f("category_id")){ //если текущая категория не является сохраненной
echo '</tr></table>'; //прерываем текущую таблицу
echo '<h3>'.$ps_product_category->get_name($db_browse->f("product_id")).'</h3>'; //выводим название категории
$tmp_cur_subcategory = $db_browse->f("category_id"); //запоминаем текущую категорию
echo '<table><tr>'; //начинаем новую таблицу }
Сохраняем shop.browse.php. Далее открываем shop_browse_queries.phpIII. ищем наше if( $category_id ) {
if ($category_id1) $where_clause[] = "`#__{vm}_product_category_xref`.`category_id` IN(".$category_id1.")";
else $where_clause[] = "`#__{vm}_product_category_xref`.`category_id`=".$category_id; }
меняем на if( $category_id ) {
if ($category_id1){
$where_clause[] = "`#__{vm}_product_category_xref`.`category_id` IN(".$category_id1.")";
$orderbyField = '`#__{vm}_category`.`category_id`,' . $orderbyField; //добавляем сортировку результатов по id категории
}
else $where_clause[] = "`#__{vm}_product_category_xref`.`category_id`=".$category_id; }
Сохраняем shop_browse_queries.php. Проверяем на сайте... ЭТО ДЛЯ ВЕРСИИ 1,1,Х ??? Или где? 
|
|
|
|
|
Записан
|
|
|
|
tsesl
Завсегдатай
   
Репутация: +83/-0
Offline
Сообщений: 409
Терпение и труд всё перетрут?
|
 |
« Ответ #23 : 23.01.2009, 14:20:47 » |
|
papirosa
1. Незачем цитировать все сообщение, если постишь сразу за ним, ровно как и кричать 2. Это решение для версии 1.0.х просьбы Sanyo
|
|
|
|
« Последнее редактирование: 23.01.2009, 14:25:06 от tsesl »
|
Записан
|
|
|
|
Sanyo
Осваиваюсь на форуме
 
Репутация: +9/-0
Offline
Сообщений: 131
|
 |
« Ответ #24 : 23.01.2009, 15:06:00 » |
|
2. Это решение для версии 1.0.х просьбы Sanyo
За что тебе огромное спасибо! +
|
|
|
|
|
Записан
|
|
|
|
papirosa
Захожу иногда

Репутация: +0/-0
Offline
Сообщений: 5
|
 |
« Ответ #25 : 26.01.2009, 13:47:45 » |
|
Хорошо, я понял, не буду цитировать.
Но с большим нетерпением ЖДУ решение для 1.1.2 Если такое возможно то пожалуйста выложите аналогично первому, потому как копаясь лично не достиг желаемого результата. Наверное что то не то делаю.
Заранее спасибо.
|
|
|
|
|
Записан
|
|
|
|
tsesl
Завсегдатай
   
Репутация: +83/-0
Offline
Сообщений: 409
Терпение и труд всё перетрут?
|
 |
« Ответ #26 : 26.01.2009, 14:08:28 » |
|
papirosa, решение какой задачи для VM1.1.x ты ждешь? Сформулируй - будем думать...
|
|
|
|
|
Записан
|
|
|
|
papirosa
Захожу иногда

Репутация: +0/-0
Offline
Сообщений: 5
|
 |
« Ответ #27 : 26.01.2009, 14:12:52 » |
|
Сортировка по производителям в категориях Кстати можно с Вами связаться по ICQ Даю свой номер 374856545 Есть несколько вопросов, я типа новичок, но ловлю всё на лету.
|
|
|
|
|
Записан
|
|
|
|
m1vladimir
Захожу иногда

Репутация: +0/-0
Offline
Сообщений: 8
|
 |
« Ответ #28 : 26.01.2009, 18:18:28 » |
|
Спасибо за ваш форум Возможно добавить описание подкатегории, а именно:
Категория1 описание категории Товар Товар Категория2 описание категории Товар Товар Версия 1.0.15
|
|
|
|
|
Записан
|
|
|
|
tsesl
Завсегдатай
   
Репутация: +83/-0
Offline
Сообщений: 409
Терпение и труд всё перетрут?
|
 |
« Ответ #29 : 26.01.2009, 18:30:24 » |
|
Любой каприз, как говориццо... Для добавления описания, на втором шаге в удобном месте нужно добавить: echo '<div>'.$ps_product_category->get_description( $ps_product_category->get_cid( $db_browse->f("product_id") ) ).'</div>'; //выводим описание категории
|
|
|
|
|
Записан
|
|
|
|
|