Joomla 2.5 Вывод товаров подкатегории в категории

Тема в разделе "Управление товарами, атрибутами, свойствами и цена", создана пользователем Dark19, 11.01.2015.

  1. Dark19
    Offline

    Dark19 Пользователь

    Регистрация:
    18.08.2014
    Сообщения:
    55
    Симпатии:
    0
    Добрый день. Подскажите как вывести товары подкатегории в категории вместо вывода категорий. В общем есть главная категория например: Отопление, в ней есть подкатегория 2-ого уровня - Котлы, а в ней еще несколько разных подкатегорий. Так вот как вывести в подкатегории Котлы вместо ее подкатегорий просто товары этих подкатегорий?
    Вот главная категория: http://aqualink.com.ua/otoplenie.html
     
  2.  
  3. shurikkan
    Offline

    shurikkan Russian Joomla! Team Команда форума

    Регистрация:
    01.09.2011
    Сообщения:
    1 856
    Симпатии:
    162
    Пол:
    Мужской
    Тогда в чём вообще смысл делать подкатегории?
     
  4. Dark19
    Offline

    Dark19 Пользователь

    Регистрация:
    18.08.2014
    Сообщения:
    55
    Симпатии:
    0
    там еще сортировка будет по этим подкатегориям отдельно
     
  5. shurikkan
    Offline

    shurikkan Russian Joomla! Team Команда форума

    Регистрация:
    01.09.2011
    Сообщения:
    1 856
    Симпатии:
    162
    Пол:
    Мужской
    Ок...
    Вечером отпишусь :)
     
  6. Dark19
    Offline

    Dark19 Пользователь

    Регистрация:
    18.08.2014
    Сообщения:
    55
    Симпатии:
    0
    ну так что, поможете?
     
  7. shurikkan
    Offline

    shurikkan Russian Joomla! Team Команда форума

    Регистрация:
    01.09.2011
    Сообщения:
    1 856
    Симпатии:
    162
    Пол:
    Мужской
    да! на работе закрутился просто, забыл вообще про эту тему)
    щас...
     
  8. Dark19
    Offline

    Dark19 Пользователь

    Регистрация:
    18.08.2014
    Сообщения:
    55
    Симпатии:
    0
    хорошо, жду...
     
  9. shurikkan
    Offline

    shurikkan Russian Joomla! Team Команда форума

    Регистрация:
    01.09.2011
    Сообщения:
    1 856
    Симпатии:
    162
    Пол:
    Мужской
    Так и не смог сесть покопаться :)
    В общем смотри, если без API Virtuemart делать, то смысл такой:
    1. Получить ID всех дочерних категорий и сохранить их в массив. В файле
      Код (PHP):
      1. if (!empty($this->category->children)) {
      2.     $catIds = Array();
      3.     foreach ($this->category->children as $category) {
      4.         $catIds[] = $category->virtuemart_category_id;
      5.     }
      6. }
    2. Прогнать массив с ID категорий через цикл FOREACH. Внутри цикла запрос к базе: SELECT virtuemart_product_id FROM *****_virtuemart_product_categories WHERE virtuemart_category_id = ID_категории. По аналогии с п.1 каждую итерацию добавляем полученный результат с массив (например, $prodIds). Получим ID всех товаров вложенных категорий.
    3. Програть массив с ID товаров через цикл FOREACH. Внутри цикла запрос к базе: SELECT product_name,product_desc,slug FROM *****_virtuemart_product_ru_ru WHERE virtuemart_category_id = ID_товара
    Логика такая. Главное - получить ID товара, а дальше просто запросы к базе и выборка нужных полей из нужных таблиц по ID товара.
    Но в целом это волокита, т.к. у VM2 есть свой API, используя который можно просто вставлять ID категорий или товаров в функцию и получать их объект со всеми свойствами. Не нашёл сегодня как сделать, может на неделе ещё время будет! Или напиши на форум Virtuemart тему "Как получить объект товара через API Virtuemart 2?" :)
     
  10. Dark19
    Offline

    Dark19 Пользователь

    Регистрация:
    18.08.2014
    Сообщения:
    55
    Симпатии:
    0
    Написал вот так:
    Код (PHP):
    1. <?php if (!empty($this->category->children)) {
    2. $catIds = Array();
    3. foreach ($this->category->children as $category) {
    4. $catIds[] = $category->virtuemart_category_id;
    5. }
    6. }if (!empty($this->category->children)) {
    7. foreach ($catIds as $item) {
    8. $prodIds = mysql_query("SELECT virtuemart_product_id FROM c9qo6_virtuemart_product_categories WHERE virtuemart_category_id = $item");
    9. }
    10. }
    11. while($row = mysql_fetch_array($prodIds)){
    12. $item2 = $row['virtuemart_product_id'];
    13. $pr = mysql_query("SELECT product_name, product_desc, slug FROM c9qo6_virtuemart_products_ru_ru WHERE virtuemart_product_id = $item2");
    14. }
    15. while($r = mysql_fetch_array($pr)){echo $r['product_name'];echo $r['product_desc'];echo $r['slug'];
    16. }
    17. ?>

    но выводит только 1 товар
     
  11. shurikkan
    Offline

    shurikkan Russian Joomla! Team Команда форума

    Регистрация:
    01.09.2011
    Сообщения:
    1 856
    Симпатии:
    162
    Пол:
    Мужской
    Ну, по меньшей мере не нужно использовать запросы к базе в чистом виде...
    Узнать ID товаров подкатегорий можно так:
    Код (PHP):
    1. if (!empty($this->category->children)) {
    2.  
    3.     $catIds = Array();
    4.     foreach ($this->category->children as $category) {
    5.         $catIds[] = $category->virtuemart_category_id;
    6.     }
    7.  
    8.     $prodIds = Array();
    9.     $db = JFactory::getDbo();
    10.     foreach ($catIds as $catId) {
    11.  
    12.         $query->select('virtuemart_product_id');
    13.         $query->from('c9qo6_virtuemart_product_categories');
    14.         $query->where('virtuemart_category_id = '.$catId);
    15.  
    16.         $db->setQuery($query);
    17.         $results = $db->loadObjectList();
    18.  
    19.         $prodIds[] = $result->virtuemart_product_id;
    20.  
    21.     }
    22. }
     
  12. Dark19
    Offline

    Dark19 Пользователь

    Регистрация:
    18.08.2014
    Сообщения:
    55
    Симпатии:
    0
    что-то стили слетели и крокозябры полезли после этого кода
     
  13. Dark19
    Offline

    Dark19 Пользователь

    Регистрация:
    18.08.2014
    Сообщения:
    55
    Симпатии:
    0
    Подправил немного Ваш код, заработало, но все равно не выводит айдишники продуктов, пишет null. Проследил путь где не передаются данные в переменные:
    Код (PHP):
    1. $results = $db->loadObjectList();

    Но не могу понять почему, вроде бы, все правильно...
     
  14. woojin
    Offline

    woojin Местный Команда форума

    Регистрация:
    31.05.2009
    Сообщения:
    3 209
    Симпатии:
    335
    Пол:
    Мужской
    вообще не понятно (из последнего кода) на фига каждый ID передавать в запрос что что бы получить все ID из категории
    проще уж сделать так:
    Код (PHP):
    1. $cids = explode(',', $catIds);
    2. if (count($catIds)>1) {
    3.    $ids = " IN ($cids)";
    4. } else {
    5.    $ids = " = $cids";
    6. }
    7. $query->where('virtuemart_category_id '.$ids);

    таким кодом меньше будет грузиться БД
    и у класса QUERY есть хорошая функция которая выдаёт полностью сформированный SQL запрос который потом можно проверить в PhpMyAdmin:
    Код (PHP):
    1. $sql = $query->__toString();

    или "эхни" (echo) эту переменную ($sql) или если работаешь с дубугером просто тормозни после данной строки возьми сформированный запрос и проверь его

    P.S. не забудь заменить "#__" на свой префикс таблиц
     
    Dark19 нравится это.
  15. Dark19
    Offline

    Dark19 Пользователь

    Регистрация:
    18.08.2014
    Сообщения:
    55
    Симпатии:
    0
    Это конечно, хорошо, но я не могу никак вывести товары в главную категорию вместо вывода категорий. Мне бы хоть как-то их айдишники повытягивать, чтобы их вывести.
     
  16. woojin
    Offline

    woojin Местный Команда форума

    Регистрация:
    31.05.2009
    Сообщения:
    3 209
    Симпатии:
    335
    Пол:
    Мужской
    этот код выдаёт тебе список всех ID которые указаны в списке категорий $catIds
    что именно не получается?
    не знаешь куда дальше вставлять полученный список ID товаров?
     
  17. Dark19
    Offline

    Dark19 Пользователь

    Регистрация:
    18.08.2014
    Сообщения:
    55
    Симпатии:
    0
    Ваш код выдает вот такой запрос:
    Код (PHP):
    1. SELECT virtuemart_product_id,virtuemart_product_id,virtuemart_product_id,virtuemart_product_id,virtuemart_product_id,virtuemart_product_id FROM c9qo6_virtuemart_product_categories,c9qo6_virtuemart_product_categories,c9qo6_virtuemart_product_categories,c9qo6_virtuemart_product_categories,c9qo6_virtuemart_product_categories,c9qo6_virtuemart_product_categories WHERE virtuemart_category_id = 5 AND virtuemart_category_id = 6 AND virtuemart_category_id = 7 AND virtuemart_category_id = 8 AND virtuemart_category_id = 9 AND virtuemart_category_id = 4 AND virtuemart_category_id IN ()


    Не могу понять, что с ним дальше делать?
     
  18. woojin
    Offline

    woojin Местный Команда форума

    Регистрация:
    31.05.2009
    Сообщения:
    3 209
    Симпатии:
    335
    Пол:
    Мужской
    мой код используется без цикла ;)

    для начинающих, показываю:
    Код (PHP):
    1. if (!empty($this->category->children)) {
    2.  
    3.     $catIds = Array();
    4.     foreach ($this->category->children as $category) {
    5.         $catIds[] = $category->virtuemart_category_id;
    6.     }
    7.  
    8.        $cids = explode(',', $catIds);
    9.        if (count($catIds)>1) {
    10.           $ids = " IN ($cids)";
    11.        } else {
    12.           $ids = " = $cids";
    13.        }
    14.         $query->select('virtuemart_product_id');
    15.         $query->from('c9qo6_virtuemart_product_categories');
    16.         $query->where('virtuemart_category_id '.$ids);
    17.  
    18.        $sql = $query->__toString();
    19.  
    20.         $db->setQuery($query);
    21.         $results = $db->loadObjectList();
    22.  
    23.         $prodIds[] = $result->virtuemart_product_id;
    24.  
    25.     }
    26. }

    ещё вопросы?
     
  19. Dark19
    Offline

    Dark19 Пользователь

    Регистрация:
    18.08.2014
    Сообщения:
    55
    Симпатии:
    0
    код не работал, крокозябры выдавал и стилей не было, то есть что-то неправильно было там. Я добавил 2 строчки
    Код (PHP):
    1. $db = JFactory::getDbo();$query = $db->getQuery(true);


    перед запросами к базе и заработало, но $prodIds выводит null
     
  20. woojin
    Offline

    woojin Местный Команда форума

    Регистрация:
    31.05.2009
    Сообщения:
    3 209
    Симпатии:
    335
    Пол:
    Мужской
    какие на фиг стили?
    к тому же (если мне память не изменяет) это $db->loadObjectList(); выдаёт список объектов, а не в одном объекте список полей в котором есть одно поле с именем virtuemart_product_id
    если уж очень хочется объект перевести в массив то сделай так $prodIds= (array)$db->loadObjectList();
    но лучше использовать спец. класс(JArray) для работы с массивами, там есть функция преобразования объекта в массив
     
  21. Dark19
    Offline

    Dark19 Пользователь

    Регистрация:
    18.08.2014
    Сообщения:
    55
    Симпатии:
    0
    только что проверял
    Код (PHP):
    1. var_dump($sql);


    идет вот такой запрос
    Код (sql):
    1. SELECT virtuemart_product_id FROM c9qo6_virtuemart_product_categories WHERE virtuemart_category_id IN ()

    $ids я так понял пустое
     

Поделиться этой страницей

Загрузка...