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

baldesarini

  • Осваиваюсь на форуме
  • 27
  • 1 / 0
  • Брутальный мерзавец
Задача такая:
есть каталог товаров, в нем есть родительские категории и подкатегории. в родительских категориях товаров просто нет. дак вот, нужно чтобы при просмотре родительской категории на страницу выводился список всех товаров в дочерних категориях, а сверху уже были ссылки на сами подкатегории дочерние. как такое сделать?
можно конечно просто забить в родительскую категорию копии всех товаров из дочерних, но это имха не выход, когда большой магазин и много товара то гемору много.
« Последнее редактирование: 23.06.2009, 15:14:13 от beagler »
*

tatjana_s

  • Осваиваюсь на форуме
  • 16
  • 0 / 0
Меня этот вопрос также интересует, помогите пож-та
*

put_nik

  • Осваиваюсь на форуме
  • 27
  • 2 / 0
Меня также. Неужели никто не делал?
*

tsesl

  • Захожу иногда
  • 363
  • 87 / 0
  • Терпение и труд всё перетрут?
Делал, пример http://novagrosso.ru

Версия магаза какая?
FAQ смотрел? Версию указал?
*

put_nik

  • Осваиваюсь на форуме
  • 27
  • 2 / 0
Красиво получилось. У меня версия ВМРЕ 1.0.15b 
*

tsesl

  • Захожу иногда
  • 363
  • 87 / 0
  • Терпение и труд всё перетрут?
*решение дано в ознакомительных целях для задания направления мышлению. Навешивание рюшечек и оптимизацию делайте сами своими умами 8)

[spoiler title=Часть I "Вывод развернутого дерева категорий в модуле (для ветки VM1.0.x)"]

В файле /administrator/components/com_virtuemart/classes/ps_product_category.php ищем функцию get_category_tree. В ней ищем $allowed = false;. Ниже идет:


	
	
	
if( 
$depth_list[$n] > ) {
	
	
	
	
// 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] > ) {
	
	
	
	
// 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//наша добавленная строка
	
	
	
}


Сохраняем, проверяем...
[/spoiler]

[spoiler title=Часть 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;
}


Сохраняем, проверяем...
[/spoiler]

[spoiler title=Часть 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;
	
}


Сохраняем, проверяем...
[/spoiler]

Всем удачи!
« Последнее редактирование: 26.06.2009, 12:23:25 от tsesl »
FAQ смотрел? Версию указал?
*

Lounge

  • Осваиваюсь на форуме
  • 27
  • 0 / 0
Это то работает, но это вывод подкатегорий в меню, а как сделать что б товары из подкатегорий выводились в родительской категории в самом каталоге.
вот как у тебя например:
Коллекция KAMURI, в ней выводятся товары из всех подкатегорий (абажюр, вешалка итд)

Как это у тебя получилось? :)
*

tsesl

  • Захожу иногда
  • 363
  • 87 / 0
  • Терпение и труд всё перетрут?
Это то работает, но это вывод подкатегорий в меню, а как сделать что б товары из подкатегорий выводились в родительской категории в самом каталоге.
...

Обновил, см. пост выше

PS. сейчас не могу протестировать на нулевой инсталяции, так что, если возникнут по прежнему недоработки - не серчайте, разберемся... 8)
FAQ смотрел? Версию указал?
*

Lounge

  • Осваиваюсь на форуме
  • 27
  • 0 / 0
СУПЕР!  :D
все отлично работает! огромное спасибо!
*

tsesl

  • Захожу иногда
  • 363
  • 87 / 0
  • Терпение и труд всё перетрут?
« Последнее редактирование: 17.11.2008, 14:40:29 от tsesl »
FAQ смотрел? Версию указал?
*

put_nik

  • Осваиваюсь на форуме
  • 27
  • 2 / 0
Очень обрадовался, что появилось решение.
Но оказалось что у меня следующий код:
   
Код
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

  • Захожу иногда
  • 363
  • 87 / 0
  • Терпение и труд всё перетрут?
Очень обрадовался, что появилось решение.
Но оказалось что у меня следующий код:
.........
Как здесь быть? Подскажите, плиз...

Версия VM какая?
FAQ смотрел? Версию указал?
*

put_nik

  • Осваиваюсь на форуме
  • 27
  • 2 / 0
Пишет VirtueMart 1.0.7
*

tsesl

  • Захожу иногда
  • 363
  • 87 / 0
  • Терпение и труд всё перетрут?
Пишет VirtueMart 1.0.7

У вас уже ковырялись, видимо, в shop_browse_queries.php, либо сборка какая-то необычная. Словом, я не встречал такой вариации. Прилепите тут весь файл, помотрим, что можно сделать
FAQ смотрел? Версию указал?
*

put_nik

  • Осваиваюсь на форуме
  • 27
  • 2 / 0
У вас уже ковырялись, видимо, в shop_browse_queries.php, либо сборка какая-то необычная. Словом, я не встречал такой вариации. Прилепите тут весь файл, помотрим, что можно сделать

Да, вы правы - ковырялись. Насколько я помню это делалось для вывода второй цены - в нац валюте
Вот файлик прицепил

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

tsesl

  • Захожу иногда
  • 363
  • 87 / 0
  • Терпение и труд всё перетрут?
Да, вы правы - ковырялись. Насколько я помню это делалось для вывода второй цены - в нац валюте
Вот файлик прицепил

[spoiler title=ваше решение]

	
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.") ";
	
	
}
	
}

[/spoiler]

Пробуйте
FAQ смотрел? Версию указал?
*

put_nik

  • Осваиваюсь на форуме
  • 27
  • 2 / 0
Спасибо за помощь! Но с наскока пока не пошло - внешне ничего не изменилось.
*

Sanyo

  • Захожу иногда
  • 127
  • 11 / 0
Отлично, работает.
Толко прошу помощи в небольшой доработке, а именно:
Как сделать сортировку, чтобы сначало показывались товары из первой категории, затем из второй и т.д.
Как вывести подписи над каждой из подкатегории, к примеру:
Категория1
   Товар
   Товар
Категория2 
   Товар
   Товар
« Последнее редактирование: 22.01.2009, 11:12:32 от Sanyo »
*

tsesl

  • Захожу иногда
  • 363
  • 87 / 0
  • Терпение и труд всё перетрут?
Sanyo, для сортировки нужно еще добавить соответсвующее поле в $orderbyField. Не забываем, что в том месте, где мы добавляем нашу выборку по субкатегориям, эта переменная уже проинициализирована. Поэтому нужно написать типа: $orderbyField = '`#__{vm}_category`.`category_id`,' . $orderbyField;

Чтобы добавить еще и заголовок категории перед блоком товаров, нужно править код генерации этого отображения, но сейчас у меня не хватает катастрофически времени это глянуть...
FAQ смотрел? Версию указал?
*

Sanyo

  • Захожу иногда
  • 127
  • 11 / 0
tsesl спасибо за овтет,вроде бы пролучилось
А самое важное и главное второе, про заголовки :( может кто уже делал?
« Последнее редактирование: 22.01.2009, 13:16:53 от Sanyo »
*

tsesl

  • Захожу иногда
  • 363
  • 87 / 0
  • Терпение и труд всё перетрут?
Sanyo, предполагается, что вывод товаров из подкатегорий ты уже сделал...

[spoiler title="Вывод с заголовками подкатегорий для 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.php

III. ищем наше

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. Проверяем на сайте...
[/spoiler]
[spoiler title="Вывод с заголовками подкатегорий для 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'];
}


Сохраняем, пробуем...
[/spoiler]
« Последнее редактирование: 26.06.2009, 12:20:56 от tsesl »
FAQ смотрел? Версию указал?
*

papirosa

  • Новичок
  • 5
  • 0 / 0
Предполагается, что вывод товаров из подкатегорий ты уже сделал...

В /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.php

III. ищем наше

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

  • Захожу иногда
  • 363
  • 87 / 0
  • Терпение и труд всё перетрут?
papirosa

1. Незачем цитировать все сообщение, если постишь сразу за ним, ровно как и кричать
2. Это решение для версии 1.0.х просьбы Sanyo
« Последнее редактирование: 23.01.2009, 13:25:06 от tsesl »
FAQ смотрел? Версию указал?
*

Sanyo

  • Захожу иногда
  • 127
  • 11 / 0
2. Это решение для версии 1.0.х просьбы Sanyo

За что тебе огромное спасибо! +
*

papirosa

  • Новичок
  • 5
  • 0 / 0
Хорошо, я понял, не буду цитировать.

Но с большим нетерпением ЖДУ решение для 1.1.2
Если такое возможно то пожалуйста выложите аналогично первому, потому как копаясь лично не достиг желаемого результата. Наверное что то не то делаю.

Заранее спасибо.
*

tsesl

  • Захожу иногда
  • 363
  • 87 / 0
  • Терпение и труд всё перетрут?
papirosa, решение какой задачи для VM1.1.x ты ждешь? Сформулируй - будем думать...
FAQ смотрел? Версию указал?
*

papirosa

  • Новичок
  • 5
  • 0 / 0
Сортировка по производителям в категориях
Кстати можно с Вами связаться по ICQ Даю свой номер 374856545
Есть несколько вопросов, я типа новичок, но ловлю всё на лету.
*

m1vladimir

  • Новичок
  • 6
  • 0 / 0
Спасибо за ваш форум
Возможно добавить описание подкатегории, а именно:

Категория1
описание категории
   Товар
   Товар
Категория2 
описание категории
   Товар
   Товар
Версия 1.0.15
*

tsesl

  • Захожу иногда
  • 363
  • 87 / 0
  • Терпение и труд всё перетрут?
Любой каприз, как говориццо... Для добавления описания, на втором шаге в удобном месте нужно добавить:

echo '<div>'.$ps_product_category->get_description$ps_product_category->get_cid$db_browse->f("product_id") ) ).'</div>'//выводим описание категории
FAQ смотрел? Версию указал?
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

[Решено] Невидимая регистрация ( Покупка без регистрации ) V1.1.3

Автор urodoff

Ответов: 319
Просмотров: 105145
Последний ответ 27.10.2014, 15:27:02
от gaalferov
[Решено] Отобразить кол-во товаров из всех подкатегорий V1.1.3

Автор bazic

Ответов: 19
Просмотров: 12461
Последний ответ 18.09.2014, 06:39:33
от fila61
вывод категории и её подкатегорий на одной странице

Автор sega

Ответов: 44
Просмотров: 14129
Последний ответ 30.04.2014, 14:05:45
от ИринаМ
[Решено] Добавление Watermark к фото товара V1.0.15 V1.1.3

Автор mickymouse

Ответов: 52
Просмотров: 21202
Последний ответ 13.06.2013, 01:04:46
от richman
[Решено] Как изменить ,товаров в наличии 1 на "есть в наличии" V1.0.15 V1.1.3

Автор ButuzOFF

Ответов: 93
Просмотров: 38989
Последний ответ 17.05.2013, 21:10:44
от sa1981