Скрипт поиска ИД категории


#1

Привет. Случайно где-то в коде может есть готовый скрипт поиска category_id в таблице cscart_categories?

Или если нет, то буду писать этот алгоритм
При экспорте файла колонка содержит “Книги///Бизнес и инвестиции” и так как данные в 2 таблицах, то надо:
$langCode = “ru”;
$explodeCat = explode(’///’,$catString);
// 1 ищу имя в cscart_category_descriptions где ланг_коде == $langCode
// 1.1 беру ИД и проверяю, что его левел == 1 в таблице cscart_categories
// 2 беру $explodeCat[1] и ищу имя в cscart_category_descriptions где ланг_коде == $langCode
// 2.1 проверяю, что его левел == 2 в таблице cscart_categories (в таблице cscart_categories)
// 2.2 проверяю, что ид_патх == ИД1го/ИД2го (в таблице cscart_categories)
// 3 беру $explodeCat[2] и ищу имя в cscart_category_descriptions где ланг_коде == $langCode
// 3.1 проверяю, что его левел == 3 в таблице cscart_categories
// 3.2 проверяю, что ид_патх == ИД1го/ИД2го/ИД3го (в таблице cscart_categories)
// итд по количеству $explodeCat


#2

Посмотрите, как импорт работает

Функция fn_exim_set_product_categories в app/schemas/exim/products.functions.php


#3

Откуда-то выцарапал давно код, из него всё поймете

    // Если товар со статусом action_new=Y удаляем его из категории Персональные скидки, 
    // Иначе надо поместить его туда
    if ($action_new == 'N') {
        $_add_categories = db_get_array("SELECT category_id, position FROM ?:products_categories WHERE product_id = ?i ORDER BY category_id", $p['product_id']);
        $add_categories = array();
        foreach ($_add_categories as $_category) $add_categories[] = $_category['category_id'];
        if (!in_array(450, $add_categories)) {
            $_data = array(
                'product_id' => $p['product_id'],
                'category_id' => 450,
                'link_type' => "A",
                'position' => 0
            );
            db_query("INSERT INTO ?:products_categories ?e", $_data);
        }
    } else {
        
            db_query("DELETE FROM ?:products_categories WHERE product_id = ".$p['product_id']." AND category_id = 450 AND link_type = 'A'");
        
    }

#4

Извините, не уточнил главное - это нужно при создании продукта, когда вручную создали ЦСВ и там только
|Product code|Language|Vendor|Price|Quantity|Категория
|New_1357|ru|Simtech|13.57|99|Книги///бизнес
Вытащил все запросы, которые исполняются при запросе и один из них
INSERT INTO cscart_products_categories (product_id, category_id, position, link_type) VALUES (298, 242, 0, ‘M’)

и поэтому хотел уточнить, где в коде та функция, которая принимает строку типа “Книги///Бизнес и инвестиции” и по ней определяет категори_ИД

Пробовал искать
product_id,category_id,position,`link_type
product_id, category_id, position, link_type
но таких строк не нашлось поиском


#5

Упростил алгоритм, получилось так
foreach ($explodeCat as $item) {
$findCatId = db_get_array
(“SELECT category_id FROM ?:category_descriptions WHERE (lang_code = ‘$langCode’ and category = ‘$item’) ORDER BY category_id ASC”);
if(empty($findCatId))return ‘error si300’;
if(count($findCatId)>1) $warningsArr[] = [‘found_many_categories_for’=>$item,
‘product_code’=>$productCode];
$category_ids[] = $findCatId[0][‘category_id’];
}
$implodeCat = implode(’/’,$category_ids);
$findCatId = db_get_array
(“SELECT category_id FROM ?:categories WHERE id_path = ‘$implodeCat’ ORDER BY category_id ASC limit 1”);
return $findCatId[0][‘category_id’];


#6

ecomlabs , alex_vp в любом случае спасибо!