Не пойму в чём проблема.
Написал компонент-парсер каталога для VirtueMart 2 (сразу извиняюсь за свой ломаный PHP ).
Категории с подкатегориями в таблицы
Цитата |
virtuemart_categories virtuemart_categorues_ru_ru virtuemart_category_categories |
Цитата |
virtuemart_products_ru_ru virtuemart_product_categories virtuemart_product_prices |
Цитата |
virtuemart_products |
define(CSVFILE, "EF_PerechenSkollekciyami.csv"); // Имя файла с данными для загрузки
define(PRODUCTS, '#__virtuemart_products'); // Имя таблицы с продуктами
define(PRODUCTS_RU, '#__virtuemart_products_ru_ru'); // Имя таблицы с продуктами (РУС)
define(PRODUCT_CATEGORIES, '#__virtuemart_product_categories'); // Имя таблицы сопоставления товаров и категорий
define(PRODUCT_PRICES, '#__virtuemart_product_prices');
define(CATEGORIES, '#__virtuemart_categories'); // Имя таблицы с категориями
define(CATEGORIES_RU, '#__virtuemart_categories_ru_ru'); // Имя таблицы с категориями (РУС)
define(CATEGORY_CATEGORIES, '#__virtuemart_category_categories'); // Имя таблицы сопоставления родительских категорий с дочерними
/*--------------------------- ВЫВЕСТИ В HELPER (начало) ---------------------------*/
$prod = 1; // Очищать перед загрузкой таблицу #__virtuemart_products ?
$prod_ru = 1; // Очищать перед загрузкой таблицу #__virtuemart_products_ru_ru ?
$prod_cat = 1; // Очищать перед загрузкой таблицу #__virtuemart_product_categories ?
$prod_price = 1; // Очищать перед загрузкой таблицу #__virtuemart_product_prices ?
$cat = 1; // Очищать перед загрузкой таблицу #__virtuemart_categories ?
$cat_ru = 1; // Очищать перед загрузкой таблицу #__virtuemart_categories_ru_ru ?
$cat_cat = 1; // Очищать перед загрузкой таблицу #__virtuemart_category_categories ?
/* Переводим кирилицу на латынь для заполнения алиасов */
function translit($str) {
$alphavit = array(
/* Строчные буквы */
"а"=>"a","б"=>"b","в"=>"v","г"=>"g","д"=>"d","е"=>"e",
"ё"=>"yo","ж"=>"j","з"=>"z","и"=>"i","й"=>"y","к"=>"k","л"=>"l", "м"=>"m",
"н"=>"n","о"=>"o","п"=>"p","р"=>"r","с"=>"s","т"=>"t",
"у"=>"u","ф"=>"f","х"=>"h","ц"=>"c","ч"=>"ch", "ш"=>"sh","щ"=>"sh",
"ы"=>"i","э"=>"e","ю"=>"u","я"=>"ya",
/* Заглавные буквы */
"А"=>"a","Б"=>"b","В"=>"v","Г"=>"g","Д"=>"d","Е"=>"e", "Ё"=>"yo",
"Ж"=>"j","З"=>"z","И"=>"i","Й"=>"y","К"=>"k", "Л"=>"l","М"=>"m",
"Н"=>"n","О"=>"o","П"=>"p", "Р"=>"r","С"=>"s","Т"=>"t","У"=>"u",
"Ф"=>"f", "Х"=>"h","Ц"=>"c","Ч"=>"ch","Ш"=>"sh","Щ"=>"sh",
"Ы"=>"i","Э"=>"e","Ю"=>"u","Я"=>"ya",
"ь"=>"","Ь"=>"","ъ"=>"","Ъ"=>"",
/* Символы */
", "=>"-"," "=>"-","'"=>"","''"=>""
);
return strtr($str, $alphavit);
}
// КАТЕГОРИИ
// Пример: 2;00881;00375;Сувениры;;;;;;0;0;0;0;0;0;0;0;0;0;
// Прототип: category_type;category_id;category_shop_id;category_name;;;;;;0;0;0;0;0;0;0;0;0;0;
// ПОДКАТЕГОРИИ
// Пример: 1;02723;00378;Без мошонки;;;;;;0;0;0;0;0;0;0;0;0;0;
// Прототип: category_type;category_id;category_parent_id;category_name;;;;;;0;0;0;0;0;0;0;0;0;0;
// ТОВАР
// Пример: 0;10711;11732;Туфли под питона с блестящими кристаллами 40;HFW-019-40;HFW-019-40;Описание товара;3503.00;9490.00;2;24;0;0;999 000 121;31;96;999 000 124;0;5;
// Прототип: type;product_id;product_parent_id;product_name;product_sku;product_group_sku;product_descr;product_pr ice;product_sale_price;product_quantity;product_box;product_new;product_stock;product_manufactorer;pr oduct_material;product_color;product_size;product_collection;product_quantity_in_box;product_comment;
/*--------------------------- ВЫВЕСТИ В HELPER (конец) ---------------------------*/
$catalog = file(CSVFILE);
$catalog ? print('Соединение с файлом: ОК <br />') : print('Соединение с файлом: ОШИБКА! <br />');
if($catalog) {
$db = JFactory::getDbo();
// $db ? print('Подключение к БД: ОК <br />') : print('Подключение к БД: ОШИБКА! <br />');
if($db) {
/* Чистим старые таблицы (НАЧАЛО) */
echo "<hr />";
echo '<h3>Очищаем старые таблицы:</h3>';
echo '<table border="0">';
if($prod) {
$query = $db->getQuery(true);
$query->delete($db->quoteName(PRODUCTS));
$db->setQuery($query);
$result = $db->query();
$result ? print('<tr><td>'.PRODUCTS.'</td><td>: <span style="color:green; font-weight:bold;">ОК</span> </td></tr>') : print(PRODUCTS.': ОШИБКА <br />');
}
if($prod_ru) {
$query = $db->getQuery(true);
$query->delete($db->quoteName(PRODUCTS_RU));
$db->setQuery($query);
$result = $db->query();
$result ? print('<tr><td>'.PRODUCTS_RU.'</td><td>: <span style="color:green; font-weight:bold;">ОК</span> </td></tr>') : print(PRODUCTS_RU.': ОШИБКА <br />');
}
if($prod_cat) {
$query = $db->getQuery(true);
$query->delete($db->quoteName(PRODUCT_CATEGORIES));
$db->setQuery($query);
$result = $db->query();
$result ? print('<tr><td>'.PRODUCT_CATEGORIES.'</td><td>: <span style="color:green; font-weight:bold;">ОК</span> </td></tr>') : print(PRODUCT_CATEGORIES.': ОШИБКА <br />');
}
if($prod_price){
$query = $db->getQuery(true);
$query->delete($db->quoteName(PRODUCT_PRICES));
$db->setQuery($query);
$result = $db->query();
$result ? print('<tr><td>'.PRODUCT_PRICES.'</td><td>: <span style="color:green; font-weight:bold;">ОК</span> </td></tr>') : print(PRODUCT_PRICES.': ОШИБКА <br />');
}
if($cat) {
$query = $db->getQuery(true);
$query->delete($db->quoteName(CATEGORIES));
$db->setQuery($query);
$result = $db->query();
$result ? print('<tr><td>'.CATEGORIES.'</td><td>: <span style="color:green; font-weight:bold;">ОК</span> </td></tr>') : print(CATEGORIES.': ОШИБКА <br />');
}
if($cat_ru) {
$query = $db->getQuery(true);
$query->delete($db->quoteName(CATEGORIES_RU));
$db->setQuery($query);
$result = $db->query();
$result ? print('<tr><td>'.CATEGORIES_RU.'</td><td>: <span style="color:green; font-weight:bold;">ОК</span> </td></tr>') : print(CATEGORIES_RU.': ОШИБКА <br />');
}
if($cat_cat) {
$query = $db->getQuery(true);
$query->delete($db->quoteName(CATEGORY_CATEGORIES));
$db->setQuery($query);
$result = $db->query();
$result ? print('<tr><td>'.CATEGORY_CATEGORIES.'</td><td>: <span style="color:green; font-weight:bold;">ОК</span> </td></tr>') : print(CATEGORY_CATEGORIES.': ОШИБКА <br />');
}
echo '</table>';
echo "<hr />";
/* Чистим старые таблицы (КОНЕЦ) */
foreach($catalog as $item) {
$product = explode(";", $item);
if($product[0] == 1 || $product[0] == 2) {
if($product[0] == 2) $parent = 0;
if($product[0] == 1) $parent = $product[2];
$query = $db->getQuery(true);
$columns = array(
'virtuemart_category_id',
'virtuemart_vendor_id',
'category_template',
'category_layout',
'category_product_layout',
'products_per_row',
'limit_list_step',
'limit_list_initial',
'hits',
'metarobot',
'metaauthor',
'ordering',
'shared',
'published',
'created_on',
'created_by',
'modified_on',
'modified_by',
'locked_on',
'locked_by'
);
$values = array(
$product[1],
1,
0,
0,
0,
0,
0,
0,
0,
$db->quote(''),
$db->quote(''),
0,
0,
1,
$db->quote(date('Y-m-d H:i:s')),
999,
$db->quote(date('Y-m-d H:i:s')),
999,
$db->quote('0000-00-00 00:00:00'),
0
);
$query->insert($db->quoteName(CATEGORIES));
$query->columns($db->quoteName($columns));
$query->values(implode(',', $values));
$db->setQuery($query);
$db->query();
$query = $db->getQuery(true);
$columns = array(
'virtuemart_category_id',
'category_name',
'slug'
);
$values = array(
$product[1],
$db->quote($product[3]),
$db->quote(mb_convert_case(translit($product[3]), 1))
);
$query->insert($db->quoteName(CATEGORIES_RU));
$query->columns($db->quoteName($columns));
$query->values(implode(',', $values));
$db->setQuery($query);
$db->query();
$query = $db->getQuery(true);
$columns = array(
'category_parent_id',
'category_child_id',
'ordering'
);
$values = array(
$parent,
$product[1],
0
);
$query->insert($db->quoteName(CATEGORY_CATEGORIES));
$query->columns($db->quoteName($columns));
$query->values(implode(',', $values));
$db->setQuery($query);
$db->query();
}
if($product[0] == 0) {
$query = $db->getQuery(true);
$columns = array(
'virtuemart_product_id',
'virtuemart_vendor_id',
'product_parent_id',
'product_sku',
'product_weight',
'product_weight_uom',
'product_length',
'product_width',
'product_height',
'product_lwh_uom',
'product_url',
'product_in_stock',
'product_ordered',
'low_stock_notification',
'product_available_date',
'product_availability',
'product_special',
'product_sales',
'product_unit',
'product_packaging',
'product_params',
'hits',
'intnotes',
'metarobot',
'metaauthor',
'layout',
'published',
'pordering',
'created_on',
'created_by',
'modified_on',
'modified_by',
'locked_on',
'locked_by'
);
$values = array(
$product[1], // virtuemart_product_id
1, // virtuemart_vendor_id
0, // product_parent_id
$product[4], // product_sku
$db->quote(NULL), // product_weight
$db->quote('KG'), // product_weight_uom
$db->quote(NULL), // product_length
$db->quote(NULL), // product_width
$db->quote(NULL), // product_height
$db->quote('M'), // product_lwh_uom
$db->quote(''), // product_url
0, // product_in_stock
0, // product_ordered
0, // low_stock_notification
$db->quote(date('Y-m-d 00:00:00')), // product_available_date
$db->quote(''), // product_availability
0, // product_special
0, // product_sales
$db->quote('KG'), // product_unit
$db->quote(NULL), // product_packaging
$db->quote('min_order_level=""|max_order_level=""|step_order_level=""|product_box =""|'), // product_params
$db->quote(NULL), // hits
$db->quote(''), // intnotes
$db->quote(''), // metarobot
$db->quote(''), // metaauthor
0, // layout
1, // published
0, // pordering
$db->quote(date('Y-m-d H:i:s')), // created_on
999, // created_by
$db->quote(date('Y-m-d H:i:s')), // modified_on
999, // modified_by
$db->quote('0000-00-00 00:00:00'), // locked_on
0 // locked_by
);
$query->insert($db->quoteName(PRODUCTS));
$query->columns($db->quoteName($columns));
$query->values(implode(',', $values));
$db->setQuery($query);
$db->query();
$query = $db->getQuery(true);
$columns = array(
'virtuemart_product_id',
'product_s_desc',
'product_desc',
'product_name',
'metadesc',
'metakey',
'customtitle',
'slug'
);
$values = array(
$product[1],
$db->quote(),
$db->quote($product[6]),
$db->quote($product[3]),
$db->quote(),
$db->quote(),
$db->quote(),
$db->quote(mb_convert_case(translit($product[3]), 1))
);
$query->insert($db->quoteName(PRODUCTS_RU));
$query->columns($db->quoteName($columns));
$query->values(implode(',', $values));
$db->setQuery($query);
$db->query();
$query = $db->getQuery(true);
$columns = array(
'virtuemart_product_id',
'virtuemart_category_id'
);
$values = array(
$product[1],
$product[2]
);
$query->insert($db->quoteName(PRODUCT_CATEGORIES));
$query->columns($db->quoteName($columns));
$query->values(implode(',', $values));
$db->setQuery($query);
$db->query();
$query = $db->getQuery(true);
$columns = array(
'virtuemart_product_id',
'virtuemart_shoppergroup_id',
'product_price',
'override',
'product_currency',
'created_on',
'created_by',
'modified_on',
'modified_by',
'locked_on',
'locked_by'
);
$values = array(
$product[1],
0,
$product[8],
0,
$db->quote('131'),
$db->quote(date('Y-m-d H:i:s')),
999,
$db->quote(date('Y-m-d H:i:s')),
999,
$db->quote('0000-00-00 00:00:00'),
0
);
$query->insert($db->quoteName(PRODUCT_PRICES));
$query->columns($db->quoteName($columns));
$query->values(implode(',', $values));
$db->setQuery($query);
$db->query();
}
}
}
}