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


Изменение/округление цены по категории и "Для выбранных"


  • Вы не можете ответить в тему
В теме одно сообщение

#1 badisoft

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

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

Отправлено 29 August 2013 - 06:38 PM

Это дополнение является продолжением (расширением) предыдущего аналогичного и:

1. добавляет в поиск в каталоге товаров (в админке) поиск по полному описанию товара

2. добавляет возможность изменения цен товара на процент или абсолютную величину.
В категории - для этой категории, а при установленной галке и для подкатегорий.

3. добавляет возможность округления цен товара (в данном виде - 1-60=>50, а 61-99=>90).
В категории - для этой категории, а при установленной галке и для подкатегорий.

4. "Для выбранных" товаров тоже можно проделать (2) и (3). Собственно, для этого (1) и нужно было.

Дополнение как бы "три-в-одном", можно установить любое из трех отдельно исходя из комментария:

Search-in-description это поиск по полному описанию
Percentable-change это изменение цен на процент либо абсолют
RoundPrice это округление

Спонсор дополнения: golftuning

Код изменения цены на процент либо абсолют оставлен "как есть". Автора не знаю.

Выглядит как-то так:
Прикрепленный файл  1.JPG   22.61К   42 Количество загрузок:

Установка:
==========

1. в файле catalog_products_categories.tpl.html

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


<option value='name' {if $search_criteria == 'name'} selected {/if} > {$smarty.const.TABLE_PRODUCT_NAME} </option>


вставляем


{* BEGIN Search-in-description *}
<option value='description' {if $search_criteria == 'description'} selected {/if} > Описание </option>
{* END Search-in-description *}


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


{if $products}<table class="adw"><tr><td class="se5"></td></tr><tr class="link"><td>C отмеченными:&nbsp;&nbsp;<a href="#" onclick="document.getElementById('add_command').value='prod_on'; document.getElementById('form').submit(); return false" class="inl">Включить</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href="#" onclick="document.getElementById('add_command').value='prod_off'; document.getElementById('form').submit(); return false" class="inl">Выключить</a>


вставляем


{* BEGIN Percentable-change *}
&nbsp;&nbsp;|&nbsp;&nbsp;<a href="#" onclick="if (window.confirm('Вы уверены, что хотите изменить цену?')) {literal}{document.getElementById('add_command').value='change_price'; document.getElementById('form').submit()}{/literal}; return false" class="inl">Изменить цену на</a>
<input type="text" name="new_price" size="5" class="textp" value="" />
<select name="ed">
<option value="2" selected>%</option>
<option value="3" >y.e.</option>
</select>
{* END Percentable-change *}

{* BEGIN RoundPrice *}
&nbsp;&nbsp;|&nbsp;&nbsp;<a href="#" onclick="if (window.confirm('Вы уверены, что хотите изменить цену?')) {literal}{document.getElementById('add_command').value='round_price'; document.getElementById('form').submit()}{/literal}; return false" class="inl">Округлить цену</a>
{* END RoundPrice *}


1.3 после строк


</select>&nbsp;&nbsp;<a href="#" onclick="document.getElementById('add_command').value='prod_move'; document.getElementById('form').submit(); return false" class="inl">Переместить</a></td></tr></table>{/if}
</form>
{/if}


вставляем


{* BEGIN Percentable-change *}
{if !$search_value}
<form method="POST" name="change_price" action='{$urlToSubmit}&amp;change_price=yes' id="change_price">
<br><a href="#" onclick="if (window.confirm('Вы уверены, что хотите изменить цену?')) document.getElementById('change_price').submit(); return false" class="inl">Изменить цену всех товаров в категории на</a>&nbsp;&nbsp;
<input type="text" name="new_price" size="5" class="textp" value="" />&nbsp;
<select name="ed">
<option value="2" selected>%</option>
<option value="3" >y.e.</option>
</select>
<label><input type="checkbox" name="change_subcat" value="1" checked>Включая подкатегории</label>
</form>
{/if}
{* END Percentable-change *}

{* BEGIN RoundPrice *}
{if !$search_value}
<form method="POST" name="round_price" action='{$urlToSubmit}&amp;round_price=yes' id="round_price">
<br><a href="#" onclick="if (window.confirm('Вы уверены, что хотите округлить цену?')) document.getElementById('round_price').submit(); return false" class="inl">Округлить цену всех товаров в категории</a>
<label><input type="checkbox" name="round_subcat" value="1" checked>Включая подкатегории</label>
</form>
{/if}
{* END RoundPrice *}



2. в файле product_functions.php

в функции prdSearchProductByTemplateAdmin

2.1 после блока


if ( isset($callBackParam["product_code"]) )
{
for( $i=0; $i<count($callBackParam["product_code"]); $i++ )
{
$callBackParam["product_code"][$i] = xToText(trim($callBackParam["product_code"][$i] ));
}
_deletePercentSymbol( $callBackParam["product_code"] );
}


вставляем аналогичный блок


# BEGIN Search-in-description
if ( isset($callBackParam["description"]) )
{
for( $i=0; $i<count($callBackParam["description"]); $i++ )
{
$callBackParam["description"][$i] = xToText(trim($callBackParam["description"][$i] ));
}
_deletePercentSymbol( $callBackParam["description"] );
}
# END Search-in-description


2.2 после блока


// take into "product_code" parameter
if ( isset($callBackParam["product_code"]) )
{
foreach( $callBackParam["product_code"] as $product_code )
{
if ( $where_clause != "" )
$where_clause .= " AND ";
$where_clause .= " LOWER(product_code) LIKE '%".xToText(trim(strtolower($product_code)))."%' ";
}
}


вставляем аналогичный блок


# BEGIN Search-in-description
// take into "description" parameter
if ( isset($callBackParam["description"]) )
{
foreach( $callBackParam["description"] as $description )
{
if ( $where_clause != "" )
$where_clause .= " AND ";
$where_clause .= " LOWER(description) LIKE '%".xToText(trim(strtolower($description)))."%' ";
}
}
# BEGIN Search-in-description


3. в файле catalog_products_categories.php

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

[php]
$callBackParam = array();
[/php]

вставляем

[php]
# BEGIN Percentable-change
if ( isset($_GET["change_price"]) )
{
if (strlen($_POST["new_price"]) > 0 and preg_match("|^-?[\d]+$|", $_POST["new_price"]))
{
$new_price = trim($_POST["new_price"]);
$catid =$_GET["categoryID"];
///Округление действует согласно указанной позиции. Например: Цена товара 3029.64 рубля. Если в округлении указано 2, то цена товара не изменится, так как округление идет до двух знаков в дробной части. Если будет указано 0, то цена товара будет выводиться как 3029 рублей. Если указано -1, то цена товара будет выводиться как 3030 поскольку округление задано в один знак до дробной части.
$func = 'ROUND';
$cc = currGetCurrencyByID($_SESSION["current_currency"]);
$roundval = isset($cc["roundval"]) ? $cc["roundval"] : 2;
if((int)$roundval == 0) $func = 'TRUNCATE';
//if((int)$roundval == -1) $func = 'TRUNCATE';
if ($_POST["ed"] == 2)
{
$expression = "Price*$new_price/100";
}
elseif ($_POST["ed"] == 3)
{
$expression = $new_price;
}
# BEGIN модификация для апдейта и дочерних категорий тоже
if (isset($_POST['change_subcat']))
{
function change_recursiveCat($catID, $arrayID=array()) {
global $fc;
foreach ($fc as $val) if ($val['parent'] == $catID) $arrayID = change_recursiveCat($val['categoryID'],$arrayID);
$arrayID[]=$catID;
return $arrayID;}
db_query( "UPDATE ".PRODUCTS_TABLE." SET Price=".$func."(Price+".$expression.", $roundval) WHERE categoryID IN (".implode(",",change_recursiveCat($catid)).")");
}
else
# END модификация для апдейта и дочерних категорий тоже
db_query( "UPDATE ".PRODUCTS_TABLE." SET Price=".$func."(Price+".$expression.", $roundval) WHERE categoryID=".(int)$catid );
}
}
# END Percentable-change


# BEGIN RoundPrice
$round_str = "UPDATE ".PRODUCTS_TABLE." SET Price=IF(MOD(Price,100)>60,TRUNCATE(Price,-2)+90,TRUNCATE(Price,-2)+50) ";
if ( isset($_GET["round_price"]) && isset($_GET['categoryID']))
{
if (isset($_POST['round_subcat']))
{
function round_recursiveCat($catID, $arrayID=array()) {
global $fc;
foreach ($fc as $val) if ($val['parent'] == $catID) $arrayID = round_recursiveCat($val['categoryID'],$arrayID);
$arrayID[]=$catID;
return $arrayID;}
db_query($round_str."WHERE categoryID IN(".implode(",",round_recursiveCat($_GET['categoryID'])).")");
}
else db_query($round_str."WHERE categoryID=".$_GET['categoryID']);
}
# END RoundPrice
[/php]

3.2 после строк

[php]
if ( $search_criteria == "product_code" )
$callBackParam["product_code"] = $search_value_array;
[/php]

вставляем

[php]
# BEGIN Search-in-description
if ( $search_criteria == "description" )
$callBackParam["description"] = $search_value_array;
# END Search-in-description
[/php]

3.3 в строку

[php]
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"
[/php]

добавляем

[php]
# BEGIN Percentable-change
|| $_POST["add_command"]=="change_price"
# END Percentable-change

# BEGIN RoundPrice
|| $_POST["add_command"]=="round_price"
# END RoundPrice
[/php]

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

[php]
elseif ( $_POST["add_command"]=="prod_move"){db_query( "UPDATE ".PRODUCTS_TABLE." SET categoryID = ".(int)$_POST["prod_categoryID"]." WHERE productID=".(int)$key);}
[/php]

вставляем

[php]
# BEGIN Percentable-change
elseif ( $_POST["add_command"]=="change_price")
{
if (strlen($_POST["new_price"]) > 0 and preg_match("|^-?[\d]+$|", $_POST["new_price"]))
{
$new_price = trim($_POST["new_price"]);
$catid =$_GET["categoryID"];
$func = 'ROUND';
$cc = currGetCurrencyByID($_SESSION["current_currency"]);
$roundval = isset($cc["roundval"]) ? $cc["roundval"] : 2;
if((int)$roundval == 0) $func = 'TRUNCATE';
if ($_POST["ed"] == 2) $expression = "Price*$new_price/100";
elseif ($_POST["ed"] == 3) $expression = $new_price;
db_query( "UPDATE ".PRODUCTS_TABLE." SET Price=".$func."(Price+".$expression.", $roundval) WHERE productID=".(int)$key );
}
}
# END Percentable-change

# BEGIN RoundPrice
elseif ( $_POST["add_command"]=="round_price") db_query($round_str."WHERE productID=".(int)$key);
# END RoundPrice

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

#2 Revived

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

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

Отправлено 26 July 2018 - 10:31 PM

3. добавляет возможность округления цен товара (в данном виде - 1-60=>50, а 61-99=>90).

В смысле 1,6 станет 50, а 61,99 станет 90?
  • 0