Перенос товаров из одной подкатегории в другую

Тема в разделе "Shop-script", создана пользователем shkiper, 26 сен 2010.

Статус темы:
Закрыта.
  1. shkiper

    shkiper

    Регистр.:
    16 ноя 2008
    Сообщения:
    302
    Симпатии:
    17
    Собственно столкнулся с проблемой, не могу перенести группу товаров из одной подкатегории в другую.
    В файле цсв, товары которые хочу перенести, вручную перенёс в другую подкатегорию (каждый товар имеет свой артикул), загружаю фаил, в шоп, но доп подкатегория создаётся, а товары остаются как и были, в своих категориях, а в новой пусто. (задавал обновлять и по артиклу и по наименованию)
    Какие есть соображения по этому поводу?
    Сносить базу и заливать по новому не хочется, пострадает индексация.
     
  2. nafanyaa

    nafanyaa

    Регистр.:
    23 авг 2006
    Сообщения:
    286
    Симпатии:
    170
    для импорта надо удалить товары.
    если немного - вручную в окне редактирования товара выбрать новую под/категории.
     
  3. shkiper

    shkiper

    Регистр.:
    16 ноя 2008
    Сообщения:
    302
    Симпатии:
    17
    если удалить, то при загрузке будет новый id товара со старым артиклом:(
    переносить вручную 400 шт. довига, но чувствую единственный вариант.
    Думал может чё делаю не так, на локалке часа 2 вариантами игрался :D
     
  4. sskiev

    sskiev Постоялец

    Регистр.:
    1 фев 2008
    Сообщения:
    97
    Симпатии:
    13
    Если id товара в каком-то диапазоне по порядку я бы попробовал переместить через sql - запрос в PHPMyAdmin
     
  5. 99cent

    99cent

    Регистр.:
    27 фев 2009
    Сообщения:
    194
    Симпатии:
    11
    400 товаров ручками - это быстрее чем тут ждать ответа.
     
  6. FANTiK123

    FANTiK123 Создатель

    Регистр.:
    2 мар 2009
    Сообщения:
    26
    Симпатии:
    0
    а если весь товар в корень перекинуть, а потом уже оттуда в нужный раздел переместить? Так пробовали.
     
  7. A_L_I_E_N

    A_L_I_E_N Постоялец

    Регистр.:
    1 сен 2008
    Сообщения:
    131
    Симпатии:
    59
    PHP:
    <?php 
        
    include("./cfg/connect.inc.php");
        
    $conn mysql_connect(DB_HOST,DB_USER,DB_PASS) or die("Could not connect : " mysql_error());
        print 
    "Connected successfully";
        print 
    "<br/>";
        
    mysql_select_db(DB_NAME) or die("Could not select database");
        
    $now 80//  ID исходной категории
        
    $cel 84//  ID целевой категории
        
    $str 'Наклейки'// объединяющее группу товаров слово
        
    $q "UPDATE SS_products SET categoryID=".$cel." WHERE categoryID=".$now." AND description REGEXP '".$str."'";
        
    mysql_query($q) or die("Query failed : " mysql_error());
        print 
    "Good work! All done..!"
        
    mysql_free_result($result);
        
    mysql_close($conn); 
    ?>
    Сохраняем в (например) zapros.php, закидываем на сервак в корень, пишем в строке браузера: _http://www.site.com/zapros.php (_ убрать)
    Не забываем бекапить БД "на случай"..!
     
  8. bobbig

    bobbig Создатель

    Регистр.:
    14 ноя 2007
    Сообщения:
    34
    Симпатии:
    5
    Реально тупо и долго получается переносить большое количество товара из одной категории в другую, особенно если была удалена какая либо категория и товар оказался в корневой категории.
    Можно сделать дополнительную опцию в админке (в данном случае SSP 1.24:(
    Открываем файл ./templates/backend/catalog_products_categories.tpl.html
    Перед строкой <td width=1%>{$smarty.const.ADMIN_PRODUCT_ENABLED}</td> (у меня по умолчанию 214 строка, у вас может быть другая) вставляем код:
    PHP:
    <td>
                        {
    $smarty.const.ADMIN_CATEGORY_CHANGE}<br>
                        <
    select name="select_change_category" {php}
        if (
    CONF_FULLY_EXPAND_CATEGORIES_IN_ADMIN_MODE == 0// update list
            
    echo "onChange=\"window.location='products.php?productID=".$_GET["productID"]."&change_category='+document.MainForm.categoryID.value;\"";
    {/
    php}>
    {
    php}
        if (
    CONF_FULLY_EXPAND_CATEGORIES_IN_ADMIN_MODE == 1) echo "<option value=\"1\">".ADMIN_CATEGORY_ROOT."</option>";
        
    //show categories select element
        
    $core_category = (isset($_GET["change_category"])) ? (int)$_GET["change_category"] : $product["categoryID"] ;
        if (
    CONF_FULLY_EXPAND_CATEGORIES_IN_ADMIN_MODE == 0)
            
    $cats catGetCategoryCompactCList($core_category);
        else
            
    $cats catGetCategoryCList();
        for (
    $i=0$i<count($cats); $i++)
        {
            echo 
    "<option value=\"".$cats[$i]["categoryID"]."\"";
            if (
    $core_category == $cats[$i]["categoryID"]) //select category
                
    echo " selected";
            echo 
    ">";
            for (
    $j=0;$j<$cats[$i]["level"];$j++) echo "&nbsp;&nbsp;";
            echo 
    $cats[$i]["name"];
            echo 
    "</option>";
        }
    {/
    php}
    </
    select>
                    <
    input type=submit value='Изменить' name='button_change_category'>
                    </
    td>
    далее находим строки
    {section name=i loop=$products}
    <tr bgcolor=#FFFFE2>
    у меня они под номером (401, 402, 403)
    и после них вставляем код:
    PHP:
    <td align="center">
                        <!--<
    input type=hidden name=productID value={*$products[i].productID*}>-->
                        <
    input type=hidden name=hidden_change_categories_{$products[i].productID
                            {if 
    $products[i].enabled}value='1'{else}value='0'{/if}
                        >
                        <
    input type=checkbox name=checkbo_change_categories_{$products[i].productID
                            {*{if 
    $products[i].enabled}checked{/if}*}
                            
    onclick='JavaScript:CheckBoxChangeCategories_{$products[i].productID}()'
                            
    >
                        <
    script language='JavaScript'>
                            function 
    CheckBoxChangeCategories_{$products[i].productID}()
                            {
    literal}
                            {
                            {/
    literal}
                                if ( 
    document.form.checkbo_change_categories_{$products[i].productID}.checked )
                                    
    document.form.hidden_change_categories_{$products[i].productID}.value '1';
                                else
                                    
    document.form.hidden_change_categories_{$products[i].productID}.value '0';
                            {
    literal}
                            }
                            {/
    literal}
                        
    </script>
                    </td>
    Сохраняем этот файл и закрываем его.
    Открываем файл admin.php и в самом конце файла перед строками:
    //show Smarty output
    $smarty->display("backend/index.tpl.html");
    вставляем следующий код:
    PHP:
    // change category
        
    if ( isset($_POST["button_change_category"]) )
        {
            
    $data ScanPostVariableWithId( array( "hidden_change_categories""select_change_category""checkbo_change_categories" ) );
                foreach( 
    $data as $key => $val )
                {
                    if ( 
    $val["checkbo_change_categories"] == 'on' )
                    {
                    
    $cat_change $_POST["select_change_category"];
                    
    $s "UPDATE ".PRODUCTS_TABLE." SET categoryID='".$cat_change."' where productID='".$key."'";
                    
    db_query($s) or die (db_error());
                    }
                }
            
    Redirect("admin.php?dpt=catalog&sub=products_categories&categoryID=".$_POST['categoryID']."&expandCat=".$_POST['categoryID']);
        }
    Сохраняем этот файл и закрываем его.
    Открываем файл ./languages/russian.php находим строку
    //different admin strings
    и добавляем после нее такую строку:
    define('ADMIN_CATEGORY_CHANGE', 'Изменить родительскую категорию:');
    сохраняем и закрываем файл.
    Как использовать:
    открываете категорию из которой будете переносить товар
    выбираете в выпадающем списке с именем "Изменить родительскую категорию:" категорию в которую будете переносить товар
    отмечаете находящиеся под выпадающем списком чекбоксы товаров которые будете переносить и нажимаете на кнопку "Изменить" которая находится сразу под выпадающим списком категорий.
    Не забываем делать бекап!
    P.S. Критика приветствуется ))
     
    Oljosha нравится это.
  9. A_L_I_E_N

    A_L_I_E_N Постоялец

    Регистр.:
    1 сен 2008
    Сообщения:
    131
    Симпатии:
    59
    1000 товаров...?
    Да даже 100 - уже поди покликай...!
    Данная ситуация (перенос) единоразовая.. Ну пусть 2 - 3 раза. И смысла дотачивать мод нету!
    ИМХО - моим вышеописанным скриптом можно всё сделать за 30 секунд. Как в общем-то всё и делаю..
    Недавно понадобилось очистить описания товара от ненужной инфы (наважно от чего, допустим от цвета: color:#FFA500).
    Прописал в скрипт нужное, залил, выполнил. Всё! Пример скрипта ниже:
    PHP:
    <?php 
        
    include("./cfg/connect.inc.php");
        
    $conn mysql_connect(DB_HOST,DB_USER,DB_PASS) or die("Could not connect : " mysql_error());
        print 
    "Connected successfully";
        print 
    "<br/>";
        
    $ii 1;
        
    mysql_select_db(DB_NAME)  or die("Could not select database");
        
    $repl 'color:#2C618F'// что будем удалять
        
    $q1 "SELECT productID, description, name FROM SS_products WHERE description REGEXP '".$repl."'";
        
    $r1 mysql_query($q1) or die("Query failed : " mysql_error());
        while (
    $line mysql_fetch_array($r1)) 
        {
            
    $out str_replace($repl,'',$line[1]); // удяляем
            
    echo $ii// выводим номер операции в цикле
            
    print " <=> ";
            echo 
    $line[0]; // выводим productID товара
            
    print " <=> ";
            echo 
    $line[2]; // выводим наименование товара
            
    print "<br/>";
            
    $q "UPDATE  SS_products SET description='".$out."' WHERE productID=".$line[0];
            
    mysql_query($q) or die("Query failed : " mysql_error()); // обновляем БД
            
    $ii++;
        }
        
    mysql_free_result($result); // чистим результат
        
    mysql_close($conn); // закрываем соединение
    ?>
    Пример работы скрипта:
    script.png
     
  10. bobbig

    bobbig Создатель

    Регистр.:
    14 ноя 2007
    Сообщения:
    34
    Симпатии:
    5
    да действительно долго, согласен, но не всегда можно найти "объединяющее группу товаров слово", да и не всякий администратор магаза в код полезет...
    его ИМХО дотачивать особо не нужно, единственное, можно добавить чекбокс "Отметить все", чтобы при такой ситуации, когда подавляющее большинство товара должно быть перенесено, просто снять галочки с остающегося меньшинства.
    P.S. а ваш скрипт порой незаменим, бывает, что приходится массово удалять из описания товаров что либо, может его стоит в админку интегрировать?
     
Статус темы:
Закрыта.