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


Картинки для вариантов характеристик


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

#1 badisoft

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

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

Отправлено 24 July 2013 - 05:33 PM

По необходимости (как часть другого модуля) понадобился этот модуль. По мере изучения модуля namer-а от него остались практически рожки да ножки, но исходным прообразом был таки он, т.е. писалось не с нуля.
Основные отличия от модуля namer-а:
- картинки можно присваивать не только новым создаваемым вариантам, но и любому уже имеющемуся
- файлы картинок удаляются при удалении варианта
- файл картинки сохраняет исходное имя если такого файла нет либо получает имя *_1.*, *_2.*, *_3.* и так далее, т.е. первое по счету не занятое.

Где-то получилось сложнее, чем в модуле namer-а, где-то проще. Изменения в коде product_brief.tpl.html и product_detailed.tpl.html (пункты 7 и 8) родные namer-овские, ничего не менял, т.к. "другой модуль" этих файлы не затрагивает.

Спонсор создания инструкции - l17l

Что не понятно - спрашивайте. Но не в личке, а тут.

Админка выглядит примерно так:
Прикрепленный файл  1.JPG   48.1К   167 Количество загрузок:

================================================
Инструкция по установке модуля картинок для вариантов характеристик и вывода их (картинок) в шаблонах краткого и полного описания.

1. в файле option_functions.php

1.1 в функции optGetOptionValues строку


$q = db_query("select variantID, optionID, option_value, sort_order from ".


заменяем на


# BEGIN variants-with-pictures
#$q = db_query("select variantID, optionID, option_value, sort_order from ".
$q = db_query("select variantID, optionID, option_value, sort_order, picture from ".
# END variants-with-pictures


1.2 в конец файла добавляем функцию


# BEGIN variants-with-pictures
function optaddoptionvalue_by_namer( $optionID, $value, $sort_order, $picture )
{
db_query( "insert into ".PRODUCTS_OPTIONS_VALUES_VARIANTS_TABLE." (optionID, option_value, sort_order, picture) values('".$optionID."', '".xtotext($value)."', '".$sort_order."', '".xtotext($picture)."')");
return db_insert_id();
}
# END variants-with-pictures



2. в файле product_functions.php

2.1 в функции GetExtraParametrs

строку


$sql = 'select povvt.option_value, povvt.variantID, post.price_surplus


заменяем на


# BEGIN variants-with-pictures
#$sql = 'select povvt.option_value, povvt.variantID, post.price_surplus
$sql = 'select povvt.option_value, povvt.variantID, povvt.picture, post.price_surplus
# END variants-with-pictures


после строки


$_Row['values_to_select'][$i]['option_value'] = $_Rowue['option_value'];


вставляем


# BEGIN variants-with-pictures
$_Row['values_to_select'][$i]['picture'] = $_Rowue['picture'];
# END variants-with-pictures



3. в файле catalog_extra.php

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


if (isset($_GET["save_successful"])) //update was successful


вставляем


# BEGIN variants-with-pictures
if (!db_fetch_row(db_query("SHOW COLUMNS FROM ".PRODUCTS_OPTIONS_VALUES_VARIANTS_TABLE." LIKE 'picture'"))) db_query("ALTER TABLE ".PRODUCTS_OPTIONS_VALUES_VARIANTS_TABLE." ADD picture varchar(50) NULL");
if(!file_exists("data/option_image")) mkdir("data/option_image");
# END variants-with-pictures


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


// update existing values


вставляем


# BEGIN variants-with-pictures
$updatePictures = ScanFilesVariableWithId(array( "add_picture"));
foreach( $updatePictures as $key => $val )
{
if ( isset($val["add_picture"]) )
{
$picture = saveVariantsPicture('add_picture_'.$key);
if ($picture)
{
$row = db_fetch_assoc(db_query("SELECT picture from ".PRODUCTS_OPTIONS_VALUES_VARIANTS_TABLE." WHERE variantID=$key"));
if ($picture != $row['picture'])
{
if (!empty($row['picture']) && file_exists("data/option_image/".$row['picture'])) unlink("data/option_image/".$row['picture']);
db_query("UPDATE ".PRODUCTS_OPTIONS_VALUES_VARIANTS_TABLE." SET picture='$picture' WHERE variantID=$key");
}
}
}
}
# END variants-with-pictures



3.3 строки


optAddOptionValue($_POST["optionID"], $_POST["add_value"],
(int)$_POST["add_sort"] );


заменяем на


# BEGIN variants-with-pictures
#optAddOptionValue($_POST["optionID"], $_POST["add_value"],
#(int)$_POST["add_sort"] );
optAddOptionValue_by_namer($_POST["optionID"], $_POST["add_value"], (int)$_POST["add_sort"], saveVariantsPicture('add_option_picture'));
# END variants-with-pictures


3.4 после строки


$variantid = (int)$_GET["kill_value"];


вставляем


# BEGIN variants-with-pictures
$row = db_fetch_assoc(db_query("SELECT picture from ".PRODUCTS_OPTIONS_VALUES_VARIANTS_TABLE." WHERE variantID=".$variantid));
if (!empty($row['picture']) && file_exists("data/option_image/".$row['picture'])) unlink("data/option_image/".$row['picture']);
# END variants-with-pictures



3.5 в конец файла вставляем


# BEGIN variants-with-pictures
function saveVariantsPicture($add_picture)
{
if($_FILES[$add_picture]['tmp_name'])
{
if(!is_uploaded_file($_FILES[$add_picture]['tmp_name'])) die("Проблема загрузки файла");
if(substr($_FILES[$add_picture]['type'],0,5) != 'image') die ("Разрешена загрузка только изображений");
if (filesize($_FILES[$add_picture]['tmp_name']) > 20000) die ("Размер файла превышает допустимый (20 КБ)");
$picture = $_FILES[$add_picture]['name'];
$expl = explode(".",$picture,2);
$i=1;
while (file_exists("data/option_image/".$picture)) $picture = $expl[0]."_".$i++.".".$expl[1];
if (!move_uploaded_file($_FILES[$add_picture]['tmp_name'],"data/option_image/".$picture)) die("Не удалось скопировать файл из временного каталога сервера в каталог data/option_image");
return $picture;
}
else return NULL;
}
# END variants-with-pictures



4. в файле catalog_extra.tpl.html

4.1 вместо строки


<form action="{$smarty.const.ADMIN_FILE}" method=POST name="formext" id="formext">


вставляем


{* BEGIN variants-with-pictures *}
{*<form action="{$smarty.const.ADMIN_FILE}" method=POST name="formext" id="formext">*}
<form action="{$smarty.const.ADMIN_FILE}" method=POST name="formext" id="formext" enctype="multipart/form-data">
{* END variants-with-pictures *}


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


<td align="left" class="toph3" width="100%">{$smarty.const.ADMIN_ONE_VALUE}</td>


вставляем


{* BEGIN variants-with-pictures *}
<td align="left" class="toph3">Картинка</td>
{* END variants-with-pictures *}


4.4 строку


<td align="left"><input name="option_value_{$values[i].variantID}" type=text value="{$values[i].option_value}" class="textp" size="30"></td>


заменяем на


{* BEGIN variants-with-pictures *}
{*<td align="left"><input name="option_value_{$values[i].variantID}" type=text value="{$values[i].option_value}" class="textp" size="30"></td>*}
<td align="left" valign="middle">
{if $values[i].picture}
<img src="data/option_image/{$values[i].picture}" alt="" width="50" style="vertical-align:middle;">&nbsp;&nbsp;
{else}
<img src="data/admin/pixel.gif" alt="" width="50" height="1">&nbsp;&nbsp;
{/if}
</td>
<td align="left">
<input name="option_value_{$values[i].variantID}" type=text value="{$values[i].option_value}" class="textp" size="70">
<input type=file class="file" name="add_picture_{$values[i].variantID}" value="" size="26">
</td>
{* END variants-with-pictures *}


4.5 строки


<td align="left" width="100%">{$smarty.const.ADMIN_SORT_ORDER}</td></tr>
<tr class="lins">
<td align="left"><input name="add_value" type=text value="" class="textp" size="46"></td>


заменяем на


{* BEGIN variants-with-pictures *}
{*
<td align="left" width="100%">{$smarty.const.ADMIN_SORT_ORDER}</td></tr>
<tr class="lins">
<td align="left"><input name="add_value" type=text value="" class="textp" size="46"></td>
*}
<td align="left" width="20%">{$smarty.const.ADMIN_SORT_ORDER}</td></tr>
<tr class="lins">
<td align="left">
<input type=text class="textp" name="add_value" value="" size="70">
<input type=file class="file" name="add_option_picture" value="" size="26">
</td>
{* END variants-with-pictures *}



5. Заходим в админке в "характристики товаров". При этом создадутся новые необходимые поля в таблицах.


7. в файле product_brief.tpl.html

7.1 ниже строки


{if $smarty.section.k.index == 0}


находится шаблон select-а примерно такого вида (пустые строки и пробелы удалены):


<select name='option_select_{$select_counter_var}_{$product_info.productID}' onchange='GetCurrentCurrency_{$product_info.productID}();' class="WCHhider">
{section name=j loop=$product_info.product_extra[i].values_to_select}
<option value='{$product_info.product_extra[i].values_to_select[j].price_surplus}:{$product_info.product_extra[i].values_to_select[j].variantID}' {if $product_info.product_extra[i].values_to_select[j].variantID eq $product_info.product_extra[i].variantID}selected{/if}>{$product_info.product_extra[i].values_to_select[j].option_value}</option>
{/section}
</select>


его надо заменить на


{section name=j loop=$product_info.product_extra[i].values_to_select}
<br>
{if $product_info.product_extra[i].values_to_select[j].picture ne NULL}
<img src="data/option_image/{$product_info.product_extra[i].values_to_select[j].picture}" alt="" width="50" style="vertical-align:middle;">
{/if}
<input type="radio" onclick="GetCurrentCurrency_{$product_info.productID}({$product_info.product_extra[i].values_to_select[j].price_surplus}, {$product_info.product_extra[i].values_to_select[j].variantID});" name='option_select_{$select_counter_var}_{$product_info.productID}' value='{$product_info.product_extra[i].values_to_select[j].price_surplus}:{$product_info.product_extra[i].values_to_select[j].variantID}' {if $product_info.product_extra[i].values_to_select[j].variantID eq $product_info.product_extra[i].variantID}checked{/if}>
{$product_info.product_extra[i].values_to_select[j].option_value}
<br>
{/section}


7.2 в JS-функции GetCurrentCurrency_{$product_info.productID}()

строку


_value=document.MainForm1_{$product_info.productID}.option_select_{$select_counter_var2}_{$product_info.productID}.value;


заменяем на


_value = "";
for (var i=0; i < document.MainForm1_{$product_info.productID}.option_select_{$select_counter_var2}_{$product_info.productID}.length; i++)
if (document.MainForm1_{$product_info.productID}.option_select_{$select_counter_var2}_{$product_info.productID}[i].checked)
_value=document.MainForm1_{$product_info.productID}.option_select_{$select_counter_var2}_{$product_info.productID}[i].value;



8. в файле product_detailed.tpl.html

8.1 ниже строки


{if $smarty.section.k.index == 0}


находится шаблон select-а примерно такого вида (пустые строки и пробелы удалены):


<select name='option_select_{$select_counter_var}' onchange='GetCurrentCurrency();' class="WCHhider">
{section name=j loop=$product_extra[i].values_to_select}
<option value='{$product_extra[i].values_to_select[j].price_surplus}:{$product_extra[i].values_to_select[j].variantID}' {if $product_extra[i].values_to_select[j].variantID eq $product_extra[i].variantID}selected{/if}>{$product_extra[i].values_to_select[j].option_value}</option>
{/section}
</select>


его надо заменить на


{section name=j loop=$product_extra[i].values_to_select}
<br>
{if $product_extra[i].values_to_select[j].picture ne NULL}
<img src="data/option_image/{$product_extra[i].values_to_select[j].picture}" alt="" width="50" style="vertical-align:middle;">
{/if}
<input type="radio" onclick="GetCurrentCurrency();" name='option_select_{$select_counter_var}' value='{$product_extra[i].values_to_select[j].price_surplus}:{$product_extra[i].values_to_select[j].variantID}' {if $product_extra[i].values_to_select[j].variantID eq $product_extra[i].variantID}checked{/if}>
{$product_extra[i].values_to_select[j].option_value}
<br>
{/section}


8.2 в JS-функции GetCurrentCurrency()

строку


_value = document.MainForm.option_select_{$select_counter_var2}.value;


заменяем на


_value = "";
for (var i=0; i < document.MainForm.option_select_{$select_counter_var2}.length; i++)
if (document.MainForm.option_select_{$select_counter_var2}[i].checked)
_value=document.MainForm.option_select_{$select_counter_var2}[i].value;

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

#2 l17l

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

  • Assistent vsupport.club
  • PipPipPip
  • 106 сообщений
Репутация: -5
Начинающий

Отправлено 26 July 2013 - 06:20 AM

Хорошо придумал, меня как спонсора обозначил ), доработанную версию надеюсь то же выложишь ! с выбором вывода как селект или как выпадающие меню. и т.д
  • 0

#3 badisoft

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

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

Отправлено 26 July 2013 - 09:18 AM

Хорошо придумал, меня как спонсора обозначил

Это общая практика. Видимо, Вы просто не обращали внимания.

доработанную версию надеюсь то же выложишь

Я выкладываю в общий доступ практически все за исключением доработок, которые совсем уж индивидуальны и в общем доступе бессмысленны.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#4 badisoft

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

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

Отправлено 27 July 2013 - 08:14 AM

доработанную версию надеюсь то же выложишь ! с выбором вывода как селект или как выпадающие меню. и т.д


Доработка (по сути это довесок к предыдущей, но работает и отдельно) позволяет выбрать, в каком виде показывать список вариантов - в виде выпадающего селекта либо радиобоксов. Легко переделывается и на большее количество вариантов вывода.
Прикрепленный файл  1.JPG   26.95К   89 Количество загрузок:
=====================================

1. в файле catalog_extra.php

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


if (isset($_GET["save_successful"])) //update was successful


вставляем


# BEGIN variants-with-pictures-addon
if (!db_fetch_row(db_query("SHOW COLUMNS FROM ".PRODUCT_OPTIONS_TABLE." LIKE 'vartype'"))) db_query("ALTER TABLE ".PRODUCT_OPTIONS_TABLE." ADD vartype tinyint(1) DEFAULT 0");
# END variants-with-pictures-addon



1.2 строку


$updateOptions = ScanPostVariableWithId( array( "extra_option", "extra_sort" ) );


меняем на


# BEGIN variants-with-pictures-addon
#$updateOptions = ScanPostVariableWithId( array( "extra_option", "extra_sort" ) );
$updateOptions = ScanPostVariableWithId( array( "extra_option", "extra_sort", "vartype" ) );
# END variants-with-pictures-addon



2. в файле catalog_extra.tpl.html

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


<td align="left" class="toph3">{$smarty.const.ADMIN_VALUE_VARIANTS}</td>


вставляем


{* BEGIN variants-with-pictures-addon *}
<td align="left">Тип хар-ки</td>
{* END variants-with-pictures-addon *}


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


<td align="left" valign="middle" class="toph3"><span style="float: right;">({$options[i].count_variants})</span><a href="{$smarty.const.ADMIN_FILE}?dpt=catalog&amp;sub=extra&amp;optionID={$options[i][0]}" class="inl">{$smarty.const.ADMIN_VALUE_VARIANTS}</a></td>


вставляем


{* BEGIN variants-with-pictures-addon *}
<td align="left">
<select name="vartype_{$options[i].optionID}" title="Показывать характеристику как селект либо радиобаттоны">
<option value="0"{if $options[i].vartype==0} selected{/if}>Селект</option>
<option value="1"{if $options[i].vartype==1} selected{/if}>Радио</option>
</select>
</td>
{* END variants-with-pictures-addon *}



3. в файле option_functions.php

3.1 в функции optGetOptions ищем строку


$SQL = 'select ps.optionID, ps.name, ps.sort_order, COUNT(povv.variantID) as count_variants FROM '.PRODUCT_OPTIONS_TABLE.' as ps


и заменяем ее на


# BEGIN variants-with-pictures-addon
#$SQL = 'select ps.optionID, ps.name, ps.sort_order, COUNT(povv.variantID) as count_variants FROM '.PRODUCT_OPTIONS_TABLE.' as ps
$SQL = 'select ps.optionID, ps.name, ps.sort_order, COUNT(povv.variantID) as count_variants, ps.vartype FROM '.PRODUCT_OPTIONS_TABLE.' as ps


3.2 в функции optUpdateOptions ищем строку


"', sort_order=".(int)$val["extra_sort"]." where optionID=".(int)$key);


и заменяем ее на


# BEGIN variants-with-pictures-addon
#"', sort_order=".(int)$val["extra_sort"]." where optionID=".(int)$key);
"', sort_order=".(int)$val["extra_sort"].", vartype=".(isset($val["vartype"])?$val["vartype"]:0)." where optionID=".(int)$key);
# END variants-with-pictures-addon



4. в файле product_functions.php

в функции GetExtraParametrs

ищем строку


$sql = 'select povt.productID,pot.optionID,pot.name,povt.option_value,povt.option_type,povt.option_show_times, povt.variantID, povt.optionID


и заменяем ее на


# BEGIN variants-with-pictures-addon
#$sql = 'select povt.productID,pot.optionID,pot.name,povt.option_value,povt.option_type,povt.option_show_times, povt.variantID, povt.optionID
$sql = 'select povt.productID,pot.optionID,pot.name,pot.vartype,povt.option_value,povt.option_type,povt.option_show_times, povt.variantID, povt.optionID


ищем строки


'name' => $_Row['name'],
'option_value' => $_Row['option_value']


и между ними вставляем


# BEGIN variants-with-pictures-addon
'vartype' => $_Row['vartype'],
# END variants-with-pictures-addon



7. в файле product_brief.tpl.html (берем исходную версию, а не уже исправленную)

7.1 ниже строки


{if $smarty.section.k.index == 0}


находится шаблон select-а примерно такого вида (пустые строки и пробелы удалены):


<select name='option_select_{$select_counter_var}_{$product_info.productID}' onchange='GetCurrentCurrency_{$product_info.productID}();' class="WCHhider">
{section name=j loop=$product_info.product_extra[i].values_to_select}
<option value='{$product_info.product_extra[i].values_to_select[j].price_surplus}:{$product_info.product_extra[i].values_to_select[j].variantID}' {if $product_info.product_extra[i].values_to_select[j].variantID eq $product_info.product_extra[i].variantID}selected{/if}>{$product_info.product_extra[i].values_to_select[j].option_value}</option>
{/section}
</select>


его надо заменить на


{if $product_info.product_extra[i].vartype eq 0}
<select name='option_select_{$select_counter_var}_{$product_info.productID}' onchange='GetCurrentCurrency_{$product_info.productID}();' class="WCHhider">
{section name=j loop=$product_info.product_extra[i].values_to_select}
<option value='{$product_info.product_extra[i].values_to_select[j].price_surplus}:{$product_info.product_extra[i].values_to_select[j].variantID}' {if $product_info.product_extra[i].values_to_select[j].variantID eq $product_info.product_extra[i].variantID}selected{/if}>{$product_info.product_extra[i].values_to_select[j].option_value}</option>
{/section}
</select>
{else}
{section name=j loop=$product_info.product_extra[i].values_to_select}
<br>
{if $product_info.product_extra[i].values_to_select[j].picture ne NULL}
<img src="data/option_image/{$product_info.product_extra[i].values_to_select[j].picture}" alt="" width="50" style="vertical-align:middle;">
{/if}
<input type="radio" onclick="GetCurrentCurrency_{$product_info.productID}({$product_info.product_extra[i].values_to_select[j].price_surplus}, {$product_info.product_extra[i].values_to_select[j].variantID});" name='option_select_{$select_counter_var}_{$product_info.productID}' value='{$product_info.product_extra[i].values_to_select[j].price_surplus}:{$product_info.product_extra[i].values_to_select[j].variantID}' {if $product_info.product_extra[i].values_to_select[j].variantID eq $product_info.product_extra[i].variantID}checked{/if}>
{$product_info.product_extra[i].values_to_select[j].option_value}
<br>
{/section}
{/if}


7.2 в JS-функции GetCurrentCurrency_{$product_info.productID}()

строку


_value=document.MainForm1_{$product_info.productID}.option_select_{$select_counter_var2}_{$product_info.productID}.value;


заменяем на


{if $product_info.product_extra[i].vartype eq 0}
_value=document.MainForm1_{$product_info.productID}.option_select_{$select_counter_var2}_{$product_info.productID}.value;
{else}
_value = "";
for (var i=0; i < document.MainForm1_{$product_info.productID}.option_select_{$select_counter_var2}_{$product_info.productID}.length; i++)
if (document.MainForm1_{$product_info.productID}.option_select_{$select_counter_var2}_{$product_info.productID}[i].checked)
_value=document.MainForm1_{$product_info.productID}.option_select_{$select_counter_var2}_{$product_info.productID}[i].value;
{/if}



8. в файле product_detailed.tpl.html (берем исходную версию, а не уже исправленную)

8.1 ниже строки


{if $smarty.section.k.index == 0}


находится шаблон select-а примерно такого вида (пустые строки и пробелы удалены):


<select name='option_select_{$select_counter_var}' onchange='GetCurrentCurrency();' class="WCHhider">
{section name=j loop=$product_extra[i].values_to_select}
<option value='{$product_extra[i].values_to_select[j].price_surplus}:{$product_extra[i].values_to_select[j].variantID}' {if $product_extra[i].values_to_select[j].variantID eq $product_extra[i].variantID}selected{/if}>{$product_extra[i].values_to_select[j].option_value}</option>
{/section}
</select>


его надо заменить на


{if $product_extra[i].vartype eq 0}
<select name='option_select_{$select_counter_var}' onchange='GetCurrentCurrency();' class="WCHhider">
{section name=j loop=$product_extra[i].values_to_select}
<option value='{$product_extra[i].values_to_select[j].price_surplus}:{$product_extra[i].values_to_select[j].variantID}' {if $product_extra[i].values_to_select[j].variantID eq $product_extra[i].variantID}selected{/if}>{$product_extra[i].values_to_select[j].option_value}</option>
{/section}
</select>
{else}
{section name=j loop=$product_extra[i].values_to_select}
<br>
{if $product_extra[i].values_to_select[j].picture ne NULL}
<img src="data/option_image/{$product_extra[i].values_to_select[j].picture}" alt="" width="50" style="vertical-align:middle;">
{/if}
<input type="radio" onclick="GetCurrentCurrency();" name='option_select_{$select_counter_var}' value='{$product_extra[i].values_to_select[j].price_surplus}:{$product_extra[i].values_to_select[j].variantID}' {if $product_extra[i].values_to_select[j].variantID eq $product_extra[i].variantID}checked{/if}>
{$product_extra[i].values_to_select[j].option_value}
<br>
{/section}
{/if}


8.2 в JS-функции GetCurrentCurrency()

строку


_value = document.MainForm.option_select_{$select_counter_var2}.value;


заменяем на


{if $product_extra[i].vartype eq 0}
_value = document.MainForm.option_select_{$select_counter_var2}.value;
{else}
_value = "";
for (var i=0; i < document.MainForm.option_select_{$select_counter_var2}.length; i++)
if (document.MainForm.option_select_{$select_counter_var2}[i].checked)
_value=document.MainForm.option_select_{$select_counter_var2}[i].value;
{/if}

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

#5 badisoft

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

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

Отправлено 05 August 2013 - 09:40 PM

Заменил радиобаттоны более эстетичным набором картинок с бордером. Т.е. бордер вокруг выбранной картинки аналогичен точке в кружочке радиобаттона.
Примерно так:
Прикрепленный файл  1.JPG   26.33К   81 Количество загрузок:
Общий смысл прост - радиобаттоны ставятся с картинками в один <label>, но убираются путем style="position: absolute; left: -9999px;" за пределы экрана. А на onclick назначается смена бордера у картинок.

Это довесок к предыдущей инструкции (замена пунктов).

------------------
7. в файле product_brief.tpl.html (берем исходную версию, а не уже исправленную)

7.1 ниже строки


{if $smarty.section.k.index == 0}


находится шаблон select-а примерно такого вида (пустые строки и пробелы удалены):


<select name='option_select_{$select_counter_var}_{$product_info.productID}' onchange='GetCurrentCurrency_{$product_info.productID}();' class="WCHhider">
{section name=j loop=$product_info.product_extra[i].values_to_select}
<option value='{$product_info.product_extra[i].values_to_select[j].price_surplus}:{$product_info.product_extra[i].values_to_select[j].variantID}' {if $product_info.product_extra[i].values_to_select[j].variantID eq $product_info.product_extra[i].variantID}selected{/if}>{$product_info.product_extra[i].values_to_select[j].option_value}</option>
{/section}
</select>


его надо заменить на


{if $product_info.product_extra[i].vartype eq 0}
<select name='option_select_{$select_counter_var}_{$product_info.productID}' onchange='GetCurrentCurrency_{$product_info.productID}();' class="WCHhider">
{section name=j loop=$product_info.product_extra[i].values_to_select}
<option value='{$product_info.product_extra[i].values_to_select[j].price_surplus}:{$product_info.product_extra[i].values_to_select[j].variantID}' {if $product_info.product_extra[i].values_to_select[j].variantID eq $product_info.product_extra[i].variantID}selected{/if}>{$product_info.product_extra[i].values_to_select[j].option_value}</option>
{/section}
</select>
{else}
{section name=j loop=$product_info.product_extra[i].values_to_select}
<label>
<input type="radio"
name="option_select_{$select_counter_var}_{$product_info.productID}"
value='{$product_info.product_extra[i].values_to_select[j].price_surplus}:{$product_info.product_extra[i].values_to_select[j].variantID}'
style="position: absolute; left: -9999px;"
onclick="
GetCurrentCurrency_{$product_info.productID}();
$('img[id^=\'img_select_{$product_info.productID}_{$select_counter_var}_\']').css({literal}{border:'solid white'}{/literal});
$('img[id=\'img_select_{$product_info.productID}_{$select_counter_var}_{$product_info.product_extra[i].values_to_select[j].variantID}\']').css({literal}{border:'solid red'}{/literal});"
{if $product_info.product_extra[i].values_to_select[j].variantID eq $product_info.product_extra[i].variantID}checked{/if}
>
<img id="img_select_{$product_info.productID}_{$select_counter_var}_{$product_info.product_extra[i].values_to_select[j].variantID}"
src="{if $product_info.product_extra[i].values_to_select[j].picture}data/option_image/{$product_info.product_extra[i].values_to_select[j].picture}{else}data/empty.gif{/if}"
width="50"
style="vertical-align:middle;border:solid {if $product_info.product_extra[i].values_to_select[j].variantID eq $product_info.product_extra[i].variantID}red{else}white{/if}"
title="{$product_info.product_extra[i].values_to_select[j].option_value}"
>
</label>
{/section}
<br>
{/if}

Цвета рамок white и red поправить по вкусу, размер фотки width="50" тоже

7.2 в JS-функции GetCurrentCurrency_{$product_info.productID}()

строку


_value=document.MainForm1_{$product_info.productID}.option_select_{$select_counter_var2}_{$product_info.productID}.value;


заменяем на


{if $product_info.product_extra[i].vartype eq 0}
_value=document.MainForm1_{$product_info.productID}.option_select_{$select_counter_var2}_{$product_info.productID}.value;
{else}
_value = "";
for (var i=0; i < document.MainForm1_{$product_info.productID}.option_select_{$select_counter_var2}_{$product_info.productID}.length; i++)
if (document.MainForm1_{$product_info.productID}.option_select_{$select_counter_var2}_{$product_info.productID}[i].checked)
_value=document.MainForm1_{$product_info.productID}.option_select_{$select_counter_var2}_{$product_info.productID}[i].value;
{/if}


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

7.3.1 убираем два <br>, расположенных между кодом из 7.1 и кодом из 7.2

7.3.2 выше и ниже строки


{$product_info.product_extra[i].name}{if $product_info.product_extra[i].option_show_times > 1} ({$smarty.section.k.index+1}):{else}:{/if}


добавляем


{if $product_info.product_extra[i].vartype eq 1}<br>{/if}



8. в файле product_detailed.tpl.html (берем исходную версию, а не уже исправленную)

8.1 ниже строки


{if $smarty.section.k.index == 0}


находится шаблон select-а примерно такого вида (пустые строки и пробелы удалены):


<select name='option_select_{$select_counter_var}' onchange='GetCurrentCurrency();' class="WCHhider">
{section name=j loop=$product_extra[i].values_to_select}
<option value='{$product_extra[i].values_to_select[j].price_surplus}:{$product_extra[i].values_to_select[j].variantID}' {if $product_extra[i].values_to_select[j].variantID eq $product_extra[i].variantID}selected{/if}>{$product_extra[i].values_to_select[j].option_value}</option>
{/section}
</select>


его надо заменить на


{if $product_extra[i].vartype eq 0}
<select name='option_select_{$select_counter_var}' onchange='GetCurrentCurrency();' class="WCHhider">
{section name=j loop=$product_extra[i].values_to_select}
<option value='{$product_extra[i].values_to_select[j].price_surplus}:{$product_extra[i].values_to_select[j].variantID}' {if $product_extra[i].values_to_select[j].variantID eq $product_extra[i].variantID}selected{/if}>{$product_extra[i].values_to_select[j].option_value}</option>
{/section}
</select>
{else}
{section name=j loop=$product_extra[i].values_to_select}
<label>
<input type="radio"
name="option_select_{$select_counter_var}"
value='{$product_extra[i].values_to_select[j].price_surplus}:{$product_extra[i].values_to_select[j].variantID}'
style="position: absolute; left: -9999px;"
onclick="
GetCurrentCurrency();
$('img[id^=\'img_select_{$select_counter_var}_\']').css({literal}{border:'solid white'}{/literal});
$('img[id=\'img_select_{$select_counter_var}_{$product_extra[i].values_to_select[j].variantID}\']').css({literal}{border:'solid red'}{/literal});"
{if $product_extra[i].values_to_select[j].variantID eq $product_extra[i].variantID}checked{/if}
>
<img id="img_select_{$select_counter_var}_{$product_extra[i].values_to_select[j].variantID}"
src="{if $product_extra[i].values_to_select[j].picture}data/option_image/{$product_extra[i].values_to_select[j].picture}{else}data/empty.gif{/if}"
width="50"
style="vertical-align:middle;border:solid {if $product_extra[i].values_to_select[j].variantID eq $product_extra[i].variantID}red{else}white{/if}"
title="{$product_extra[i].values_to_select[j].option_value}"
>
</label>
{/section}
<br>
{/if}


8.2 в JS-функции GetCurrentCurrency()

строку


_value = document.MainForm.option_select_{$select_counter_var2}.value;


заменяем на


{if $product_extra[i].vartype eq 0}
_value = document.MainForm.option_select_{$select_counter_var2}.value;
{else}
_value = "";
for (var i=0; i < document.MainForm.option_select_{$select_counter_var2}.length; i++)
if (document.MainForm.option_select_{$select_counter_var2}[i].checked)
_value=document.MainForm.option_select_{$select_counter_var2}[i].value;
{/if}


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

8.3.1 убираем два <br>, расположенных между кодом из 7.1 и кодом из 7.2

8.3.2 выше и ниже строк


{$product_extra[i].name}{if $product_extra[i].option_show_times > 1 }
({counter name=option_show_times}):{else}:{/if}


добавляем


{if $product_extra[i].vartype eq 1}<br>{/if}



9. Если jquery еще не используется и не подключается, то в head.tpl.html

после строки


{* подключение скриптов *}


вставляем


<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js"></script>

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

#6 Kyborg

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

  • Assistent vsupport.club
  • PipPipPip
  • 31 сообщений
Репутация: 1
Начинающий

Отправлено 04 April 2014 - 06:28 AM

не выводит фото если вариант только один. К примеру:
характеристика -ПРОИЗВОДИТЕЛЬ,
варианты - Самсунг, Сони, Панасоник и т.д.
Каждому варианту присваиваю логотип
Поставил галочку самсунг - выводит логотип самсунга и тд.
А работает только если выбрать два бренда одновременно

Нужно найти эту строку в product_detailed.tpl.html
{if $product_extra[i].values_to_select_count == 1} <b>{$product_extra[i].values_to_select[0].option_value}</b><br>
<input type="hidden" name="option_select_{$select_counter_var}" value='{$product_extra[i].values_to_select[0].price_surplus}:{$product_extra[i].values_to_select[0].variantID}'>
и заменить на
{if $product_extra[i].values_to_select_count == 1} <b>{$product_extra[i].values_to_select[0].option_value}</b><br><img src="data/default/pixel.gif" alt="" name="option_select_pic_{$select_counter_var}"><br />
<input type="hidden"  onload="GetCurrentCurrency();" name="option_select_{$select_counter_var}" value='{$product_extra[i].values_to_select[0].price_surplus}:{$product_extra[i].values_to_select[0].variantID}:{$product_ext

Пробовал менять, но не получается исправить проблему.
  • 0

#7 badisoft

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

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

Отправлено 04 April 2014 - 11:53 AM

О чем этот бред?
В цитате сказано про галочки, но в описанных дополнениях НЕТ НИ ОДНОЙ ГАЛОЧКИ.
А приведенные изменения вообще хрен знает откуда взяты.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#8 Kyborg

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

  • Assistent vsupport.club
  • PipPipPip
  • 31 сообщений
Репутация: 1
Начинающий

Отправлено 04 April 2014 - 02:41 PM

О чем этот бред?
В цитате сказано про галочки, но в описанных дополнениях НЕТ НИ ОДНОЙ ГАЛОЧКИ.
А приведенные изменения вообще хрен знает откуда взяты.


Я хотел поинтересоваться, как можно сделать, чтобы фотка выводилась не только когда выбрано несколько параметров характеристик товара, а например когда один в режиме радиобатона. Возможно просто у меня не работает или не правильно поставил.
  • 0

#9 badisoft

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

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

Отправлено 04 April 2014 - 03:04 PM

Возможно просто у меня не работает или не правильно поставил.

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

#10 Kyborg

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

  • Assistent vsupport.club
  • PipPipPip
  • 31 сообщений
Репутация: 1
Начинающий

Отправлено 04 April 2014 - 04:31 PM

Поставил модуль все работает отлично, респект!.

Возник только один небольшой вопрос, в IE не работает выбор характеристик (фотографий), на мозиле и сафари все норм.

Прикрепленный файл  Без-имени-3.jpg   26.11К   30 Количество загрузок:

Есть решения этой проблемы?
  • 0

#11 badisoft

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

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

Отправлено 04 April 2014 - 04:57 PM

Есть решения этой проблемы?

Пока нет. Помню, что проверял в IE8 и работало. А сейчас зашел в тот же товар - действительно, не работает. Либо что-то обновилось в IE, либо я неверно помню, что проверял :).
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#12 paradoxUA

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

  • Пользователи
  • PipPipPip
  • 31 сообщений
Репутация: 0
Начинающий

Отправлено 04 April 2014 - 09:50 PM

Подскажите, пожалуйста, а вывести перечень вариантов одной из характеристик(например производителей) с картинками в отдельном блоке сложно? То есть при добавлении очередного производителя с картинкой, он выводился в этом отдельном блоке.
  • 0

#13 badisoft

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

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

Отправлено 04 April 2014 - 10:05 PM

Подскажите, пожалуйста, а вывести перечень вариантов одной из характеристик(например производителей) с картинками в отдельном блоке сложно? То есть при добавлении очередного производителя с картинкой, он выводился в этом отдельном блоке.

Нет, не сложно. См. сайт в подписи. Там самый верхний центральный блок это именно оно и есть - картинки (варианты) характеристики "Производители".
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#14 paradoxUA

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

  • Пользователи
  • PipPipPip
  • 31 сообщений
Репутация: 0
Начинающий

Отправлено 05 April 2014 - 06:51 AM

Подскажите, пожалуйста, а вывести перечень вариантов одной из характеристик(например производителей) с картинками в отдельном блоке сложно? То есть при добавлении очередного производителя с картинкой, он выводился в этом отдельном блоке.

Нет, не сложно. См. сайт в подписи. Там самый верхний центральный блок это именно оно и есть - картинки (варианты) характеристики "Производители".

Мм, шикарно. Блок запилен с помощью данного модуля, верно?
  • 0

#15 badisoft

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

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

Отправлено 05 April 2014 - 06:13 PM

Мм, шикарно. Блок запилен с помощью данного модуля, верно?

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

#16 Lada

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

  • Download User
  • PipPipPip
  • 107 сообщений
Репутация: 7
Начинающий
  • ГородЧита

Отправлено 25 June 2014 - 02:26 PM

Спасибо, badisoft отличное и нужное дополнение получилось, как раз делаю мебельный магазин и там Фасад, Столешницы и прочее в характеристиках сейчас с фото прописалось - класс.. Такой вопрос - где сменить количество выводимых в ряду позиций? То есть сейчас там 4 в ряду, а мне нужно 5... для симметрии.
  • 0

#17 badisoft

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

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

Отправлено 25 June 2014 - 04:19 PM

где сменить количество выводимых в ряду позиций? То есть сейчас там 4 в ряду, а мне нужно 5...

Насколько помню, там нет никакого ограничения в четыре позиции. Сколько влезло, столько и выводится. Что не влезло - переносится.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#18 Lada

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

  • Download User
  • PipPipPip
  • 107 сообщений
Репутация: 7
Начинающий
  • ГородЧита

Отправлено 25 June 2014 - 04:35 PM

где сменить количество выводимых в ряду позиций? То есть сейчас там 4 в ряду, а мне нужно 5...

Насколько помню, там нет никакого ограничения в четыре позиции. Сколько влезло, столько и выводится. Что не влезло - переносится.

Да, переносится, и это хорошо, но переносится уже 5 картинка, то есть 4 вряд и менне - норма, 8 вряд то же смотрится нормально, но когда их 10 и хочется в две строки по 5 - это ах... по 4 переносит
То есть сейчас у меня когда ставлю 10 характеристик, получается - четыре первая строчка, 4 вторая, и 2 третья, а хотелось бы что бы 5 первая, 5 вторая...
  • 0

#19 Lada

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

  • Download User
  • PipPipPip
  • 107 сообщений
Репутация: 7
Начинающий
  • ГородЧита

Отправлено 26 June 2014 - 02:59 PM

Аааа.. извиняюсь - попробовали на других (больших) мониторах - все замечательно!!! Выстраивается как нужно...
  • 0