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


Редактирование характеристик товара в общем списке товаров


  • Вы не можете ответить в тему
Сообщений в теме: 7

#1 badisoft

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

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

Отправлено 26 November 2012 - 07:39 PM

Модуль предназначен для быстрого изменения набора вариантов характеристик у товара прямо в общей таблице товаров, без захода в свойства товара.
Почеркиваю - ВАРИАНТОВ! Т.е. характеристик товара в виде произвольной строки этот модуль не касается.

Очень удобно в комплекте иметь установленный модуль "Характеристики по категориям" (он есть в даунлоаде сайта), чтобы в выпадающем селекте были только актуальные для этой категории характеристики. Но работает и без него.

спонсор модуля и автор идеи ssergioss25

Прикрепленный файл  optionset.JPG   118.18К   268 Количество загрузок:


1. копируем в data/admin/ файлы
chosen.css
chosen-sprite.png
chosen.jquery.min.js

2. в файле core/includes/admin/sub/catalog_products_categories.php


2.1 строку


$data = ScanPostVariableWithId( array( "price", "enable", "left", "sort_order" ) );


заменяем на


$data = ScanPostVariableWithId( array( "price", "enable", "left", "sort_order", "select" ) );



2.2 перед второй (второй! их там две!) строкой


if ( isset($val["price"]) )


вставляем


db_query("DELETE FROM ".PRODUCTS_OPTIONS_SET_TABLE." WHERE productID=$key");
db_query("UPDATE ".PRODUCT_OPTIONS_VALUES_TABLE." SET option_type=0 WHERE productID=$key");
if ( isset($val["select"]) )
foreach($val['select'] as $opt_var)
{
list($optionID,$variantID) = explode(":",$opt_var);
db_query("INSERT ".PRODUCTS_OPTIONS_SET_TABLE." SET productID=$key, optionID=".(int)$optionID.", variantID=".(int)$variantID);
db_query("REPLACE ".PRODUCT_OPTIONS_VALUES_TABLE." SET productID=$key, optionID=".(int)$optionID.", option_type=1");
}



2.3 перед строкой


$smarty->assign("products", $products );


вставляем


if (isset($_GET['categoryID']))
{
$row = db_fetch_assoc(db_query("SELECT allowed_parameters FROM ".CATEGORIES_TABLE." WHERE categoryID=".$_GET['categoryID']));
$where = $row['allowed_parameters']?" WHERE optionID IN (".$row['allowed_parameters'].")":"";
$data = db_query("SELECT optionID,name FROM ".PRODUCT_OPTIONS_TABLE.$where." ORDER BY sort_order,HEX(name)");
while ($row = db_fetch_assoc($data))
{
$data1 = db_query("SELECT variantID,option_value FROM ".PRODUCTS_OPTIONS_VALUES_VARIANTS_TABLE." WHERE optionID=".$row['optionID']." ORDER BY sort_order,HEX(option_value)");
$vars = array();
while ($row1 = db_fetch_assoc($data1)) $vars[] = $row1;
$row['variants'] = $vars;
$options[] = $row;
}
foreach ($products as $key => $product)
{
$products[$key]['select'] = $options;
foreach ($product['product_extra'] as $evar)
foreach ($evar['values_to_select'] as $vvar)
foreach ($products[$key]['select'] as $okey => $ovar)
foreach ($ovar['variants'] as $vrkey => $vrvar)
if ($vvar['variantID'] == $vrvar['variantID'])
$products[$key]['select'][$okey]['variants'][$vrkey]['set'] = 'selected';
}
}



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

3.1 перед строкой


<td align="right"><a href='{$urlToSort}&amp;sort=product_code&amp;sort_dir=ASC' title="{$smarty.const.ADMIN_ADMIN_MENUNEW11}" class="liv">{$smarty.const.ADMIN_PRODUCT_CODE}</a></td>


вставляем


<td align="left"><input type="checkbox" id="chkbox_multiselect_all" onclick="{literal}if (document.getElementById('chkbox_multiselect_all').checked){$('div[id^=\'option_multiselect_\']').attr('style','display:block');$('input[id^=\'chkbox_multiselect_\']').attr({checked:true});}else{$('div[id^=\'option_multiselect_\']').attr('style','display:none');$('input[id^=\'chkbox_multiselect_\']').attr({checked:false});}{/literal}"></td>
<td align="left">Характеристики</td>


3.2 перед строкой


<td align="right" {if !$products[i].enabled}class="toph3 gryy"{else}class="toph3{if !$products[i].product_code} bas{/if}"{/if}>{if $products[i].product_code}{$products[i].product_code}{else}{$smarty.const.ADMIN_NOCODE_PROD}{/if}</td>


вставляем


<td align="left">
<input type="checkbox" id="chkbox_multiselect_{$products[i].productID}" onclick="if (document.getElementById('chkbox_multiselect_{$products[i].productID}').checked) $('div[id=\'option_multiselect_{$products[i].productID}\']').attr('style','display:block'); else $('div[id=\'option_multiselect_{$products[i].productID}\']').attr('style','display:none');">
</td>
<td align="left">
<div id="option_multiselect_{$products[i].productID}" style="display:none">
<select data-placeholder="Выберите характеристики товара" style="width:350px;" class="chzn-select" multiple tabindex="6" name="select_{$products[i].productID}[]">
{section name=o loop=$products[i].select}
<optgroup label="{$products[i].select[o].name}">
{section name=v loop=$products[i].select[o].variants}
<option value="{$products[i].select[o].optionID}:{$products[i].select[o].variants[v].variantID}" {$products[i].select[o].variants[v].set}>{$products[i].select[o].variants[v].option_value}</option>
{/section}
</optgroup>
{/section}
</select>
</div>
</td>


3.3 перед строкой


{if $navigatorHtml}


вставляем


<script>!window.jQuery && document.write('<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js"><\/script>');</script>
<script type="text/javascript" src="data/admin/chosen.jquery.min.js"></script>
<link rel="stylesheet" href="data/admin/chosen.css" type="text/css">
<script type="text/javascript">$(".chzn-select").chosen();</script>

Прикрепленные файлы

  • Прикрепленный файл  chozen.zip   9.32К   39 Количество загрузок:

  • 3
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#2 idal

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

  • Assistent vsupport.club
  • PipPipPip
  • 243 сообщений
Репутация: 7
Начинающий
  • ГородКиев

Отправлено 27 November 2012 - 12:25 AM

Установил. Все классно. Спасибо !!!

PS. Сначала не досмотрел на картинки что рядом стоит галочка, думал что уже руки из ж..пы в 4 строчках ошибку допустить, потом нажал галочку и УРА ))). Еще раз спасибо, нужная штука, существенно облегчает работу.
  • 0

#3 badisoft

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

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

Отправлено 27 November 2012 - 09:53 AM

Сначала не досмотрел на картинки что рядом стоит галочка

Галочки можно убрать, если вариантов характеристик не много и они влезают в одну строку.
Иначе таблица растягивается по высоте и занимает заметно больше места, что неудобно.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#4 badisoft

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

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

Отправлено 30 November 2012 - 09:15 AM

update: в п.2.3 добавилось исправление найденной ошибки:

if (isset($_GET['categoryID']))
{
...
}

ошибка на работоспособность никак не влияет (когда не определена categoryID результат работы этого кода не нужен), но приводит к ошибочному SQL-запросу и, как следствие, записям об ошибках в логах.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#5 etdnepr

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

  • Download User
  • PipPipPip
  • 101 сообщений
Репутация: 0
Начинающий

Отправлено 08 October 2014 - 01:46 PM

добрый день!
Спасибо за крутое дополнение! реально ввод характеристик стал куда легче
  • 0

#6 etdnepr

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

  • Download User
  • PipPipPip
  • 101 сообщений
Репутация: 0
Начинающий

Отправлено 17 November 2014 - 08:58 PM

Подскажите пожалуйста, у меня было в файле
# BEGIN New-Top-Action-products
#$data = ScanPostVariableWithId( array( "price", "enable", "left", "sort_order" ) );
$data = ScanPostVariableWithId( array( "price", "enable", "left", "sort_order", "newtopact" ) );
# END New-Top-Action-products

согласно инструкции 2.1 строку
$data = ScanPostVariableWithId( array( "price", "enable", "left", "sort_order" ) );
заменяем на
$data = ScanPostVariableWithId( array( "price", "enable", "left", "sort_order", "select" ) );

Я заменил и раскомментировал нужную строку, закоментировав другую. Получилось так:
# BEGIN New-Top-Action-products
$data = ScanPostVariableWithId( array( "price", "enable", "left", "sort_order", "select" ) );
#$data = ScanPostVariableWithId( array( "price", "enable", "left", "sort_order", "newtopact" ) );
# END New-Top-Action-products

Подскажите пожалуйста, правильно ли я сделал?
Спасибо заранее
  • 0

#7 badisoft

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

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

Отправлено 17 November 2014 - 09:15 PM

Подскажите пожалуйста, правильно ли я сделал?

Нет, не правильно.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#8 etdnepr

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

  • Download User
  • PipPipPip
  • 101 сообщений
Репутация: 0
Начинающий

Отправлено 22 November 2014 - 08:53 PM

Подскажите пожалуйста, правильно ли я сделал?

Нет, не правильно.

Не подскажете как надо было? ))
У меняя после выбора характеристик этот выбор не сохранялся. Заходишь на страницу товара, а характеристик нет. Сделал эту махинацию и начало работать. вот и подумал, что правильно))) Спасибо
  • 0