Реально тупо и долго получается переносить большое количество товара из одной категории в другую, особенно если была удалена какая либо категория и товар оказался в корневой категории.
Можно сделать дополнительную опцию в админке (в данном случае 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 " ";
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. Критика приветствуется ))