[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Пишу парсер CSV-файла для каталога VirtueMart
Страницы: 1, 2
Гость_shurikkan
Не пойму в чём проблема.

Написал компонент-парсер каталога для VirtueMart 2 (сразу извиняюсь за свой ломаный PHP huh.gif ).

Категории с подкатегориями в таблицы
Цитата
virtuemart_categories
virtuemart_categorues_ru_ru
virtuemart_category_categories

выгружаются правильно.

Товары в продуктные таблицы
Цитата
virtuemart_products_ru_ru
virtuemart_product_categories
virtuemart_product_prices

тоже вносятся как надо.

А вот в таблицу
Цитата
virtuemart_products

почему-то, попадает всего 75 товаров.

В чём причина - не пойму!
Может кто подскажет в чём ошибка??

http://wr-team.ru/images/com_vmparser.zip
http://wr-team.ru/images/EF_PerechenSkollekciyami.zip

P.S.: не обращайте внимание на наименования товаров и категорий - такой уж магазин попался smile.gif

Заранее спасибо за ответы!
Гость_Shurikkan
Забыл спросить обсуждаются ли у вас на форуме скрипты для CMS, а не чистый php!
Игорь_Vasinsky
да что тут тока не обсуждается)) главное раздел правильно выбрать)

архивы наверника никто качать не будет. выкладывай проблемный кусок кода в bb теги [ php ] и [ /php ] (есть кнопочка) и если большой кусок кода - то ещё заверни [ more ] [ / more] - кнопочка S - лежачая


_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Гость_Shurikkan
Да я вот хз какой кусок проблемный))) Весь компонент, вобщем-то, из одного файла пока состоит.

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();

}

}

}

}
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.