[Ищу] Массовое перемещение товаров в другую категорию

Тема в разделе "Shop-script", создана пользователем v-i-k, 15 фев 2012.

Модераторы: kadurinho
  1. v-i-k

    v-i-k Создатель

    Регистр.:
    10 май 2008
    Сообщения:
    48
    Симпатии:
    0
    Всем привет.
    Подскажите есть ли мод или что-то подобное для "Массового перемещение товаров в другую категорию" как в WA?

    товаров много, перемещать по 1 штуке очень долго.
    для SSpro.

    буду благодарен за любую помощь в данном направлении..
     
  2. paqwerty

    paqwerty Постоялец

    Регистр.:
    22 апр 2009
    Сообщения:
    53
    Симпатии:
    2
    можно в phpmyadmin сделать с помощью запроса, на все-провсе нужна одна строчка запроса mysql, но там надо прописывать id всех товаров. Но на базе этого запроса можно сделать мод и самому. Если интересует, то можно попробовать вместе сварганить...
     
  3. v-i-k

    v-i-k Создатель

    Регистр.:
    10 май 2008
    Сообщения:
    48
    Симпатии:
    0
    через phpmyadmin не вариант, особенно если каталог товаров будет вести человек далекий даже от HTML.


    сварганить вместе - конечно можно попробовать.
    какие есть мысли?
     
  4. paqwerty

    paqwerty Постоялец

    Регистр.:
    22 апр 2009
    Сообщения:
    53
    Симпатии:
    2
    Сегодня уже поздно, а завтра попробую набросать нечто подобное. А какие тут мысли, если впринципе все уже есть, только надо приспосбить к SC.

    Утро вечера мудренее, так что завтра попробуем.
     
  5. paqwerty

    paqwerty Постоялец

    Регистр.:
    22 апр 2009
    Сообщения:
    53
    Симпатии:
    2
    Привет!

    Вроде сделал...

    В общем делаем так:


    1. Открываем файл sitename.ru/templates/backend/catalog_products_categories.tpl.html.
    Находим
    HTML:
    <td width=1%>{$smarty.const.ADMIN_PRODUCT_ENABLED}</td>
    Вставляем перед этим
    HTML:
    <td style="text-align: left;">Выделить<br />все<br /><input type="checkbox" value="Выделить все" onclick="checkAll()"></td>
    Находим
    HTML:
    <tr bgcolor=#DAD5A3 align=center>
    Вставляем перед этим
    [ HTML ]{literal}
    <script language='JavaScript'>
    function checkAll() {
    var obj=document.getElementsByName('cb')
    for (i=0; i<obj.length; i++) {
    obj.checked=true
    }
    }
    </script>
    {/literal}[/ HTML ]
    Находим
    [ HTML ]<td align=center>
    <input type=hidden name=enable_{$products.productID}
    {if $products.enabled}value='1'{else}value='0'{/if}[/ HTML ]
    Вставляем перед этим
    HTML:
    <td><input name="s[]" id="cb" type="checkbox" value="{$products[i].productID}" /></td>
    Находим
    HTML:
    {if $searched_done}
    <a href='admin.php?dpt=catalog&sub=products_categories&categoryID={$categoryID}'>
    {$smarty.const.ADMIN_SHOW_ALL_PRODUCT_IN_THIS_CATEGORY}
    </a>
    &nbsp;
    {/if}
    Вставляем после
    HTML:
    <input name="move_selected" type="submit" value='Переместить в ...'/>
    <select name="new_cat">
    <option value="1">{$smarty.const.ADMIN_CATEGORY_ROOT}</option>
    {section name=i loop=$pexr}<option value="{$pexr[i].new_cat_id}">
    {$pexr[i].name}
    </option>{/section}
    </select>
    2. Открываем файл sitename.ru/includes/admin/sub/catalog_products_categories.php
    Находим
    PHP:
    Redirect("admin.php?dpt=catalog&sub=products_categories&categoryID=".
    $_GET["categoryID"].
    "&couldntToDeleteThisProducts=1" );
    }
    Вставляем после
    PHP:
    /////////////////////////////////////////////////
    //Массовое перемещение товаров в другую категорию
    else if (isset($_POST["move_selected"]) && isset($_POST["s"])) {
    $new_cat $_POST["new_cat"];
    // echo $_POST["new_cat"];
    foreach ($_POST['s'] as $k => $v) {
    // echo $v;
    db_query("UPDATE SS_products SET categoryID = '".$new_cat."' WHERE productID = '".$v."'");
    }
    }
    /////////////////////////////////////////////////
    Находим
    PHP:
    $smarty->assign("navigatorHtml"$navigatorHtml );
    Вставляем после
    PHP:
    /////////////////////////////////////////////////
    //Наполняем <select> всеми категориями
    $cats catGetCategoryCList();
    foreach (
    $cats as $k => $v) {
    // echo $v["categoryID"]." - ";
    // $xx = $v["categoryID"]." - ";
    $yy $v["categoryID"];
    $xx "";
    for (
    $j=0$j<$v["level"]; $j++) {
    // echo "&nbsp;&nbsp;";
    $xx .= "&nbsp;&nbsp;";
    }
    // echo $v["name"]." - ".$v["level"]."<br>";
    $xx .= $v["name"]."<br>";
    $zz = array (
    "name" => $xx,
    "new_cat_id" => $yy);
    // echo $xx;
    $qq[] = $zz;
    }
    /////////////////////////////////////////////////
    Находим
    PHP:
    count($products), ADMIN_N_RECORD_IS_SEARCHED ) );
    Вставляем после
    PHP:
    /////////////////////////////////////////////////
    //Передаем Значения <select> в шаблон
    $smarty->assign("pexr"$qq );
    /////////////////////////////////////////////////


    Вроде ничего не забыл сказать, так что это получается все.
    Как попробуешь, отпишись о результатах.
     
  6. v-i-k

    v-i-k Создатель

    Регистр.:
    10 май 2008
    Сообщения:
    48
    Симпатии:
    0
    сейчас попробую и отпишусь
     
  7. v-i-k

    v-i-k Создатель

    Регистр.:
    10 май 2008
    Сообщения:
    48
    Симпатии:
    0
    Работает!! СПАСИБО ОГРОМНОЕ.
    за исключением "Выделить все" - это не срабатывает, выделение всех товаров не происходит.
    надо это доработать.
    насколько я смог разобраться, проблема в том, что на одной странице нельзя использовать одинаковые id (в нашем случае у всех чекбоксов id="cb")
    getElementsByName('cb') - не срабатывает.

    некоторое время назад я сам ковырялся в данном вопросе и делал обнуление цены для всех товаров
    поиск по getElementsByName обнулял только первый найденный элемент.
    пришлось использовать getElementsByClassName и все получилось.
    прописав input-ам отвечающим за вывод цены class="price" и добавил кнопку
    <input type="button" value="Обнулить цены" onclick="var elems = document.getElementsByClassName('price'); for (var i = 0; i < elems.length; i++) elems.value = '0';")>
    происходит изменение значения поля на '0' и жмем кнопку сохранить.
    а вот аналогично сделать для чекбокса (включать/отключать все товары) у меня таким же способом не получилось :( почему не знаю, может ошибку где допустил в синтаксисе, надо бы разобраться совместными усилиями.
    и в связи с этим вот еще идеи появились такие:
    массовое удаление выбранный товаров (поумолчанию есть только кнопка удаляющая ВСЕ товары в текущей категории или надо удалять по 1штуке, что долго если в категории много товаров)

    сам наковырял что есть функция DeleteProduct в файле (/core_functions/product_functions.php) - корректно удаляет всё связанное с продуктом.
    но сам пока не могу разобраться как это использовать...

    ну и разобраться с "включить/отключить ВСЕ товары в категории" или галочку
    "Выделить все" относящуюся к Включению товаров.
    поумолчанию нужно поочередно отметить галочками каждый товар и нажать кнопку "сохранить" - что тоже не совсем удобно.
     
  8. paqwerty

    paqwerty Постоялец

    Регистр.:
    22 апр 2009
    Сообщения:
    53
    Симпатии:
    2
    На счет "Выделить все" странно, т.к. я проверял ее неоднократно и все работало. Единственное но - это то, что я проверял только в опере, а ты в чем проверял. Может в этом проблема.

    Ну да ладно, в пн посмотрю...
     
  9. v-i-k

    v-i-k Создатель

    Регистр.:
    10 май 2008
    Сообщения:
    48
    Симпатии:
    0
    вот нашел способ выделения "нужных" чекбоксов с использованием идентификатора "class"
    проверил, работает. Только тут используется jquery. Его конечно же нужно не забыть подключить.

    ниже просто приведен пример который я нашел в инете.



    Добавляем основной checkbox
    Код:

    <input type="checkbox" value="" name="main_checkbox" id="checkall" title="Отметить все" />
    Форма
    Код:

    <form action="" id="form">
    <input type="checkbox" class="checkit" name="{$somename}" value="1" />
    <input type="checkbox" class="checkit" name="{$somename}" value="2" />
    <input type="checkbox" class="checkit" name="{$somename}" value="3" />
    <input type="checkbox" class="checkit" name="{$somename}" value="4" />
    <input type="checkbox" class="checkit" name="{$somename}" value="5" />
    </form>
    Код jquery
    Код:

    <script type="text/javascript">
    $(document).ready(function() {
    $("#checkall").click(function() {
    if($(this).attr('checked') )
    {
    $('.checkit').attr('checked', true);
    }
    else
    {
    $('.checkit').attr('checked', false);
    }
    });
    });
    </script>
     
  10. v-i-k

    v-i-k Создатель

    Регистр.:
    10 май 2008
    Сообщения:
    48
    Симпатии:
    0
    ну тут действительно может зависит от браузера.
    я проверял в хроме, ИЕ, фаирфоксе - нигде не работало. А оперой как раз и не пробовал.


    что думаешь о "массовое удаление выбранных товаров" ?
    попробуешь сделать?