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

wildweasel

  • Захожу иногда
  • 109
  • 29 / 5
Пытаюсь сделать отбор всех категорий, в которых имеется товар производителя. Но что-то слишком крепко я SQL подзабыл. Может, найдётся добрая душа, которая кинет в меня нужным запросом?

Делаю нечто вроде такого, но в информации о производителе:
Летайте самолетами и сами по себе.
*

wildweasel

  • Захожу иногда
  • 109
  • 29 / 5
Re: Выбор категорий по производителю
« Ответ #1 : 16.03.2010, 06:07:51 »
Зря паниковал. Немного подумал и таки сделал.



Код
// manuf start 
if ( !empty( $manufacturer_id ) ) {
$query  = "SELECT distinct a.category_id,a.category_name FROM #__{vm}_category AS a, ";
    $query .= "\n#__{vm}_product AS b,"
    . "\n#__{vm}_product_mf_xref AS c,"
    . "\n#__{vm}_product_category_xref AS d "
    . "\nWHERE c.manufacturer_id='$manufacturer_id'"
    . "\n AND d.product_id = b.product_id "
    . "\n AND b.product_id = c.product_id AND d.category_id = a.category_id ";

$query .= "ORDER BY a.category_name ASC";
$db = new ps_DB;
$db->query( $query );

$res = $db->record;

if( !empty ($manufacturer_id) ) {
      $query  = "SELECT mf_name, manufacturer_id FROM #__vm_manufacturer" ;
      $query .= "\n WHERE manufacturer_id=".$manufacturer_id;
      $database->setQuery( $query );
      $database->loadObject($result);
  $manuf_name = $result->mf_name.' ';
}
else{
$cat_name = '';
}
  $num = 0;
  foreach( $res as $category) {
    $num = $num + 1;
  echo '<div style="margin-left:3%;margin-bottom:10px;width:30%;float:left">';
     echo '<a href="'.$sess->url( $mm_action_url.'index.php?option=com_virtuemart&page=shop.browse&manufacturer_id='. $manufacturer_id.'&category_id='.$category->category_id ).'" title="'.$category->category_name.' '.$manuf_name.'"><h4>'.$category->category_name.' '.$manuf_name.'</h4></a>';
 echo '</div>';
           if($num==3){
              echo '<br style="clear:both"/>';
              $num = 0;
          }

}
echo '<br style="clear:both"/>';
}
//manuf end
Летайте самолетами и сами по себе.
*

remix8080

  • Захожу иногда
  • 340
  • 39 / 0
Re: Выбор категорий по производителю
« Ответ #2 : 16.03.2010, 15:36:46 »
Идея очччень хорошая!
И куда этот код? В shop.browse.php?
*

wildweasel

  • Захожу иногда
  • 109
  • 29 / 5
Re: Выбор категорий по производителю
« Ответ #3 : 16.03.2010, 17:15:26 »
В него, родимого.
Я shop.browse перелопатил напрочь, теперь вместо "все товары производителя" - его описание и ссылки на псевдокатегории. Вместо "все товары" - список производителей с логотипом и огрызком описания+ссылка на предыдущий пункт. Ну и псевдокатегории везде, где есть category_id.

Вставлябельный кусок для shop.browse:

Цитировать
if (!empty($manufacturer_id) && empty($category_id)) {
      $query2  = "SELECT mf_name, manufacturer_id, mf_desc, mf_url FROM #__vm_manufacturer" ;
      $query2 .= "\n WHERE manufacturer_id=".$manufacturer_id;
      $database->setQuery( $query2 );
      $database->loadObject($result2);
     $manuf_name = $result2->mf_name;
     $manuf_desc = $result2->mf_desc;
     $manuf_logo = $result2->mf_url;
     $imgurl=$mosConfig_live_site.$manuf_logo;
echo '<div>';
   if (! empty ($manuf_logo)){   
   echo '<img src="'.$imgurl.'" border="0" style="height:120px;width:auto;float:right;" alt="'.$manuf_name.'" />';
   }
echo '<h1 style="text-align:center;padding-top:10px;">'.$manuf_name.'</h1><br/>';     
     if( trim(str_replace( "<br />", "" , $manuf_desc))!= "" ) {
      echo $manuf_desc;
        }
      echo '</div>
            <br style="clear:both;" /><br />';     

// manuf start
   $query  = "SELECT distinct a.category_id,a.category_name FROM #__{vm}_category AS a, ";
    $query .= "\n#__{vm}_product AS b,"
    . "\n#__{vm}_product_mf_xref AS c,"
    . "\n#__{vm}_product_category_xref AS d "
    . "\nWHERE c.manufacturer_id='$manufacturer_id'"
    . "\n AND d.product_id = b.product_id "
    . "\n AND b.product_id = c.product_id AND d.category_id = a.category_id ";

$query .= "ORDER BY a.category_name ASC";
$db = new ps_DB;
$db->query( $query );

$res = $db->record;

        $num = 0;
echo '<b>Мы продаём:</b>';
echo '<br style="clear:both;" /><br />'; 
     foreach( $res as $category) {
    $num = $num + 1;
  echo '<div style="margin-left:3%;margin-bottom:10px;width:30%;float:left">';
     echo '<a href="'.$sess->url( $mm_action_url.'index.php?option=com_virtuemart&page=shop.browse&manufacturer_id='. $manufacturer_id.'&category_id='.$category->category_id ).'" title="'.$category->category_name.' '.$manuf_name.'"><h4>'.$category->category_name.' '.$manuf_name.'</h4></a>';
 echo '</div>';
           if($num==3){
              echo '<br style="clear:both"/>';
              $num = 0;
          }

}
echo '<br style="clear:both"/>';
//manuf end

return $mainframe;     
     }

зы: объектом издевательств стал VirtueMart 1.0.хз
« Последнее редактирование: 16.03.2010, 17:21:34 от wildweasel »
Летайте самолетами и сами по себе.
*

remix8080

  • Захожу иногда
  • 340
  • 39 / 0
Re: Выбор категорий по производителю
« Ответ #4 : 16.03.2010, 18:32:16 »
зы: объектом издевательств стал VirtueMart 1.0.хз

Упс... А для 1.1.3 подойдет?
П.С. Еще не экспериментировал.
*

wildweasel

  • Захожу иногда
  • 109
  • 29 / 5
Re: Выбор категорий по производителю
« Ответ #5 : 16.03.2010, 18:51:31 »
Структура БД в этом плане не отличается так что может и сработать.
Вставлять лучше после:

Код
// NEW: Include the query section from an external file
// If settings are loaded, extended Classes are allowed and the
Летайте самолетами и сами по себе.
*

remix8080

  • Захожу иногда
  • 340
  • 39 / 0
Re: Выбор категорий по производителю
« Ответ #6 : 16.03.2010, 18:58:30 »
Поэкспериментировал  ^-^

Правда, не уверен точно в какое место вставлять код, по-этому вставил в конец файла :-)
Ошибок не было  ^-^  После всех товаров даного производителя сейчас "Мы продаем" и все категории с даным производителем.
А можно так переделать, чтобы в "мы продаем" было не просто имя категории, а "весь путь" категорий? Т.е., например:

Мы продаем:

Комплектирующие/мат.платы/Acer       Комплектирующие/"Какие-то другие комплектирующие"/Acer        Ноутбуки/Acer
*

remix8080

  • Захожу иногда
  • 340
  • 39 / 0
Re: Выбор категорий по производителю
« Ответ #7 : 16.03.2010, 19:02:06 »
Структура БД в этом плане не отличается так что может и сработать.
Вставлять лучше после:

Код
// NEW: Include the query section from an external file
// If settings are loaded, extended Classes are allowed and the

Вставил после // NEW: Include the query section from an external file
Работает!
Спасибо!
*

wildweasel

  • Захожу иногда
  • 109
  • 29 / 5
Re: Выбор категорий по производителю
« Ответ #8 : 16.03.2010, 19:22:20 »
А зачем "весь путь"? Я эту бяку делал для SEO, а живые люди редко ищут "Комплектирующие/мат.платы/Acer ".
Летайте самолетами и сами по себе.
*

remix8080

  • Захожу иногда
  • 340
  • 39 / 0
Re: Выбор категорий по производителю
« Ответ #9 : 16.03.2010, 19:32:28 »
А зачем "весь путь"?

В моем случае структура категорий такая:

Комплектирующие/мат.платы/Acer
...
.../Acer
...
Ноутбуки/Acer
...

Всем товарам этих "последних" категорий проставлен производитель (в даном случае - Acer), и когда использую Вашу модификацию, то, соответственно, вижу:

Мы продаем:

Acer    Acer    Acer....


Оно-то правильно, т.е. так и должно показывать... но в даном случае лучше, если б был весь "путь" категорий  ^-^
« Последнее редактирование: 16.03.2010, 19:36:25 от remix8080 »
*

wildweasel

  • Захожу иногда
  • 109
  • 29 / 5
Re: Выбор категорий по производителю
« Ответ #10 : 16.03.2010, 19:44:42 »
Вон оно как... ну, тогда остаётся только переименовать подкатегории в стиле "Ноутбуки Acer" и убрать
Код
.$manuf_name.
Тогда будет "Ноутбуки/Ноутбуки Acer" и "Мат. платы Acer  Ноутбуки Acer..."
Летайте самолетами и сами по себе.
*

remix8080

  • Захожу иногда
  • 340
  • 39 / 0
Re: Выбор категорий по производителю
« Ответ #11 : 16.03.2010, 19:50:30 »
Вон оно как... ну, тогда остаётся только переименовать подкатегории в стиле "Ноутбуки Acer"

Только-что и думал над этим :)
*

remix8080

  • Захожу иногда
  • 340
  • 39 / 0
Re: Выбор категорий по производителю
« Ответ #12 : 16.03.2010, 20:20:04 »
А все-таки, Wildweasel, можно ли сделать такой "путь"?
*

wildweasel

  • Захожу иногда
  • 109
  • 29 / 5
Re: Выбор категорий по производителю
« Ответ #13 : 16.03.2010, 20:40:11 »
В принципе можно, но дополнительный код будет по размеру не менее 1/2 от того, что есть. В базе есть отношение товар->категория, товар->производитель и "дерево категорий". Соответственно, каждую категорию из
Код
foreach( $res as $category) 
придётся допрашивать на тему родословной. Нагрузка на сервер может стать неприличной.
Летайте самолетами и сами по себе.
*

remix8080

  • Захожу иногда
  • 340
  • 39 / 0
Re: Выбор категорий по производителю
« Ответ #14 : 16.03.2010, 20:46:39 »
придётся допрашивать на тему родословной. Нагрузка на сервер может стать неприличной.

Понятно. Тогда уж лучше категории переименовать :)
Спасибо!
*

and72

  • Осваиваюсь на форуме
  • 17
  • 0 / 0
Re: Выбор категорий по производителю
« Ответ #15 : 28.03.2010, 18:06:14 »
Спасибо огромное за решение! Очень давно его искал.. Единственное не подскажете.. как сделать так, чтобы не выводились неопубликованные категории?
*

wildweasel

  • Захожу иногда
  • 109
  • 29 / 5
Re: Выбор категорий по производителю
« Ответ #16 : 28.03.2010, 18:20:03 »
Как-то я об этом не подумал.
Значит, в $query после:

Код
\nWHERE

Следует добавить:

Код
#__vm_category.category_publish='Y' AND 
« Последнее редактирование: 28.03.2010, 18:28:22 от wildweasel »
Летайте самолетами и сами по себе.
*

and72

  • Осваиваюсь на форуме
  • 17
  • 0 / 0
Re: Выбор категорий по производителю
« Ответ #17 : 28.03.2010, 18:28:25 »
Спасибо за быстрый ответ.. но не понял после какой строки это нужно вставить
*

wildweasel

  • Захожу иногда
  • 109
  • 29 / 5
Re: Выбор категорий по производителю
« Ответ #18 : 28.03.2010, 18:32:55 »
Отправил ответ, и только тогда сообразил, что запроса два :)

Вставлять сюда:

Цитировать
// manuf start
   $query  = "SELECT distinct a.category_id,a.category_name FROM #__{vm}_category AS a, ";
    $query .= "\n#__{vm}_product AS b,"
    . "\n#__{vm}_product_mf_xref AS c,"
    . "\n#__{vm}_product_category_xref AS d "
    . "\nWHERE c.manufacturer_id='$manufacturer_id'"
    . "\n AND d.product_id = b.product_id "
    . "\n AND b.product_id = c.product_id AND d.category_id = a.category_id ";
Летайте самолетами и сами по себе.
*

and72

  • Осваиваюсь на форуме
  • 17
  • 0 / 0
Re: Выбор категорий по производителю
« Ответ #19 : 28.03.2010, 18:41:13 »
$query  = "SELECT distinct a.category_id,a.category_name FROM #__{vm}_category AS a, ";
    $query .= "\n#__{vm}_product AS b,"
    . "\n#__{vm}_product_mf_xref AS c,"
    . "\n#__{vm}_product_category_xref AS d "
    . "\nWHERE c.manufacturer_id='$manufacturer_id'"
        #__vm_category.category_publish='Y' AND   
     . "\n AND d.product_id = b.product_id "
    . "\n AND b.product_id = c.product_id AND d.category_id = a.category_id ";
Попробовал различные подстановки.. но к сожалению ничего не меняется или выходит ошибка, ничего больше не надо?
*

wildweasel

  • Захожу иногда
  • 109
  • 29 / 5
Re: Выбор категорий по производителю
« Ответ #20 : 28.03.2010, 18:48:58 »
А если так:

Цитировать
    . "\nWHERE category_publish='Y' AND c.manufacturer_id='$manufacturer_id'"
Летайте самолетами и сами по себе.
*

and72

  • Осваиваюсь на форуме
  • 17
  • 0 / 0
Re: Выбор категорий по производителю
« Ответ #21 : 28.03.2010, 18:51:29 »
УУра! спасибо! все заработало!
*

wildweasel

  • Захожу иногда
  • 109
  • 29 / 5
Re: Выбор категорий по производителю
« Ответ #22 : 28.03.2010, 18:54:24 »
на здоровье. :)
Летайте самолетами и сами по себе.
*

and72

  • Осваиваюсь на форуме
  • 17
  • 0 / 0
Re: Выбор категорий по производителю
« Ответ #23 : 31.03.2010, 18:55:33 »
а можно еще вопрос... возможно рядом с категориями выводить еще и ее фотку?
*

and72

  • Осваиваюсь на форуме
  • 17
  • 0 / 0
Re: Выбор категорий по производителю
« Ответ #24 : 05.04.2010, 18:30:18 »
 с фотками разобрался , а не подскажите как сделать чтобы выводились только дочерние категории? а то товар приписан к нескольким и список получается дублированный :(
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Усовершенствованный модуль категорий [Аккордион и прочее - the best ;) ]

Автор danik.html

Ответов: 749
Просмотров: 153674
Последний ответ 24.11.2014, 18:37:11
от slavakh
Вывод товара из дочерних категорий в родительскую

Автор B0nG

Ответов: 0
Просмотров: 929
Последний ответ 03.08.2014, 15:13:57
от B0nG
Быстродействие модуля дерева категорий JSCookTree VirtueMart в браузере Firefox

Автор capricorn

Ответов: 0
Просмотров: 949
Последний ответ 29.11.2013, 18:31:00
от capricorn
[Решено] Категорий при добавлении товара больше 200...

Автор mobiland

Ответов: 6
Просмотров: 1232
Последний ответ 22.11.2013, 12:41:26
от El_nik
Mета-теги для товаров и категорий VirtueMart

Автор igoryk

Ответов: 2
Просмотров: 3574
Последний ответ 30.10.2013, 09:11:53
от Ingener