Спонсор дополнения - Jeck2000
1. в файле core/tpl/admin/catalog_products_categories.tpl.html
перед
| <a href="#" onclick="document.getElementById('add_command').value='prod_dell'; document.getElementById('form').submit(); return false" class="inl">Удалить</a> |
вставляем
{* BEGIN OptionCopy *}
{if $option_get}
| <a href="#" onclick="document.getElementById('add_command').value='option_put'; document.getElementById('form').submit(); return false" class="inl">Put Options</a>
{else}
| <a href="#" onclick="document.getElementById('add_command').value='option_get'; document.getElementById('form').submit(); return false" class="inl">Get Options</a>
{/if}
{* END OptionCopy *}
2. в файле core/functions/product_functions.php
вставляем
// BEGIN OptionCopy
function prdCopyOptions($ProductID_from,$ProductID_to)
{
$tables = array(PRODUCT_OPTIONS_VALUES_TABLE,PRODUCTS_OPTIONS_SET_TABLE);
foreach ($tables as $table)
{
$data = mysql_query("DESC $table");
$desc = array();
while ($row = mysql_fetch_assoc($data)) $desc[] = $row;
$data = mysql_query("SELECT * FROM $table WHERE productID=$ProductID_from");
while ($row = mysql_fetch_assoc($data))
{
$row['productID'] = $ProductID_to;
$set = array();
foreach ($row as $key => $value)
{
if (isset($value))
{
foreach ($desc as $field) if(in_array($key,$field)) $type = $field['Type'];
switch ($type)
{
case 'int(11)':
$set[] = "$key=$value";
break;
case 'double':
$set[] = "$key=$value";
break;
case 'varchar(255)':
$set[] = "$key='$value'";
break;
}
}
}
mysql_query("REPLACE INTO $table SET ".implode(",",$set));
}
}
}
// END OptionCopy
3. в файле core/includes/admin/sub/catalog_products_categories.php
3.1 в условие
if ( isset($_POST["add_command"]) && ($_POST["add_command"]=="prod_off" || $_POST["add_command"]=="prod_on" || $_POST["add_command"]=="prod_dell" || $_POST["add_command"]=="prod_move"
добавляем
|| $_POST["add_command"]=="option_get" || $_POST["add_command"]=="option_put"
3.2 перед строкой (их там две таких, так вот только перед первой)
if ( CONF_UPDATE_GCV == '1' ) update_psCount(1);
вместо двух закрывающих фигурных собок } и } вставляем
// BEGIN OptionCopy
elseif ( $_POST["add_command"]=="option_get") $_SESSION['option_copy'][]=$key;
elseif ( $_POST["add_command"]=="option_put") foreach ($_SESSION['option_copy'] as $prod_from) prdCopyOptions($prod_from,$key);
// END OptionCopy
}
}
// BEGIN OptionCopy
if ($_POST["add_command"]=="option_put") unset($_SESSION['option_copy']);
// END OptionCopy
3.3 после строки
$smarty->assign( "cats", $cats );
вставляем
// BEGIN OptionCopy
if (isset($_SESSION['option_copy'])) $smarty->assign("option_get",1);
// END OptionCopy
4. Как оно работает:
- галочками выбираем товары, ОТКУДА надо скопировать характеристики.
Обычно это один товар, хотя никто не мешает выбрать два или более.
Надо понимать, что характеристики переписываются последовательно и
характеристики нижестоящего товара при копировании перекроют совпадающие
характеристики от вышестоящего товара в случае "произвольная строка",
но добавятся в случае "выбор из списка".
- жмем "Get options", которое при этом сменится на "Put options".
- ставим галки товарам, в которые хотим скопировать характеристики.
Это не обязательно делать на этой же странице, можно перейти на другую, с другими товарами.
Список товаров-доноров хранится в $_SESSION пока не будет нажата "Put options" либо не будет
закрыта сессия.
- нажимаем "Put Option"