СКРИПТ: Получение товаров из базы данных virtuemart.

Подача, публикация, рассылка объявлений на доски. Удаление и редактирование старых объявлений. Нюансы работы с различными досками объявлений.
Ответить
Аватара пользователя
XwebDeveloper
Сообщения: 51
Зарегистрирован: 13 ноя 2017, 12:53

СКРИПТ: Получение товаров из базы данных virtuemart.

Сообщение XwebDeveloper » 27 фев 2020, 15:04

Пример получения товаров из интернет магазина на VirtueMart. По аналоги можно получать данные для объявлений из любой базы данных.

В базе данных все категории имеют свои номера, поэтому для получения товаров нужно указать номер категории товаров.
// 2  Жидкость
// 4  Аксессуары
// 3  Железо 
// 73 Расходники
// категория товара
$category=3;

// получаем товары из магазина
$array_goods = get_shop_goods($category);
// вывести в панель отладки
print_r($array_goods);

Функция получения товаров:
// 2  Жидкость
// 4  Аксессуары
// 3  Железо 
// 73 Расходники
// категория товара
// $category = '3';
// получить все товары из магазина
function get_shop_goods($category)
{
// настройки базы данных 
// берутся из настроек магазина
$db_ip='IP базы данных';
$bd_user='пользователь';
$bd_pwd='пароль';
$tb_name ='wxa43_virtuemart_products_ru_ru';
$tb_name2 = 'wxa43_virtuemart_products';

// коллекция товаров с цветами
$goods = array();

// соединяемся с базой
$mysql_bd = @mysqli_connect($db_ip, $bd_user, $bd_pwd,$bd_user); 

if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    // закончить скрипт
	 $app->quit();
}

// кодировка 
mysqli_set_charset($mysql_bd,'utf8');

$sql='SELECT * FROM wxa43_virtuemart_product_categories WHERE virtuemart_category_id = '.$category;

$q = mysqli_query($mysql_bd, $sql); 

 while ($row = mysqli_fetch_row($q))
 {
        // создаём объект товаров с их цветами
        $good = new ShopGoods();
        $good->id=trim($row[1]);
        
        // получаем товар и его название
        $sql1 = 'SELECT * FROM wxa43_virtuemart_products_ru_ru WHERE virtuemart_product_id = '.$row[1];
        $q1 = mysqli_query($mysql_bd, $sql1); 
        $f = mysqli_fetch_array($q1, MYSQLI_ASSOC);
        $good->name = trim($f['product_name']);
        mysqli_free_result($q1);

        // получаем артикул товара
        $sql1 = 'SELECT * FROM wxa43_virtuemart_products WHERE virtuemart_product_id = '.$row[1];
        $q1 = mysqli_query($mysql_bd, $sql1); 
        $f = mysqli_fetch_array($q1, MYSQLI_ASSOC);
        $good->article = trim($f['product_sku']);
        mysqli_free_result($q1);

        // получить цену 
        $sql1 = 'SELECT * FROM wxa43_virtuemart_product_prices WHERE virtuemart_product_id= '.$row[1];
        $q1 = mysqli_query($mysql_bd, $sql1); 
        $f = mysqli_fetch_array($q1, MYSQLI_ASSOC);
        $good->price = trim($f['product_price']);
        $good->price =ceil($good->price);
        mysqli_free_result($q1);

        $sql1 = 'SELECT * FROM wxa43_virtuemart_product_customfields where virtuemart_product_id='.$row[1].' and virtuemart_custom_id = 4' ;
        $q1 = mysqli_query($mysql_bd, $sql1); 
        while ($row_ = mysqli_fetch_row($q1))
        {
           $good->add(trim($row_[3]));
        }
        mysqli_free_result($q1);
       
        // получаем атрибут клон
        $sql1 = 'SELECT * FROM wxa43_virtuemart_product_customfields where virtuemart_product_id='.$row[1].' and virtuemart_custom_id = 73' ;
        $q1 = mysqli_query($mysql_bd, $sql1); 
        $f = mysqli_fetch_array($q1, MYSQLI_ASSOC);
        if(trim($f['customfield_value'])=='Клон (Clone)')
            $good->strclone = 'Клон (Clone)';
        else
            $good->strclone = 'Original';
          
        mysqli_free_result($q1);

        $goods[]=$good;
 }

mysqli_free_result($q);

mysqli_close($mysql_bd);

echo 'получили все товары из магазина в количестве - '.count($goods)."<br>";

return $goods;
}

Полученные данные разбираем в объекты класса ShopGoods.

// товар из магазина
class ShopGoods implements IteratorAggregate
{
    // доступные цвета
    public $collection = array();
     
    var $name;
    var $id;
    var $price;
    var $strclone; 
    var $article;
   
    public function getIterator()
    {
        return new ArrayIterator($this->collection);
    }
 
    public function add($pond)
    {
        $this->collection[] = $pond;
    }
}

В итоге имеем данные в следующем виде:
[518] => ShopGoods Object
(
[collection] => Array
(
[0] => Черный
[1] => Зеленый
[2] => Стальной
[3] => Желтый
)

[name] => Дрипка ADVKEN & VapersMD Breath RDA
[id] => 12146
[price] => 1500
[strclone] => Original
[article] => AD-009B
)

[519] => ShopGoods Object
(
[collection] => Array
(
[0] => Черный
[1] => Сталь
[2] => Красная медь
)

[name] => Дрипка-бак Augvape Merlin RDTA
[id] => 12280
[price] => 1860
[strclone] => Original
[article] => CM-001B
)

C этими данными мы далее можем работать так:
// пройдёмся по всему массиву
   foreach ($array_goods as $good)
   {
        // название товара
         echo $good->name."<br>"; 
        // артикул
         echo $good->article."<br>";

   }   
Запрос на создание скриптов viewforum.php?f=61

Ответить