Перейти к содержимому


Копирование всех дополнительных характеристик одного товара в другой (другие)


  • Вы не можете ответить в тему
В этой теме нет ответов

#1 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 24 October 2012 - 07:06 PM

Дополнение, позволяющее копировать весь набор дополнительных характеристик одного товара в другой товар.
Спонсор дополнения :) - Jeck2000


1. в файле core/tpl/admin/catalog_products_categories.tpl.html

перед


&nbsp;&nbsp;|&nbsp;&nbsp;<a href="#" onclick="document.getElementById('add_command').value='prod_dell'; document.getElementById('form').submit(); return false" class="inl">Удалить</a>&nbsp;&nbsp;|&nbsp;&nbsp;


вставляем


{* BEGIN OptionCopy *}
{if $option_get}
&nbsp;&nbsp;|&nbsp;&nbsp;<a href="#" onclick="document.getElementById('add_command').value='option_put'; document.getElementById('form').submit(); return false" class="inl">Put Options</a>
{else}
&nbsp;&nbsp;|&nbsp;&nbsp;<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"
  • 2
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)