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


Правила форума

Внимание!!! Если не можете скачать, пожалуйста ознакомьтесь с условиями получения доступа с файлам форума. Правила форума


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


В теме одно сообщение

#1 badisoft

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

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

Отправлено 29 августа 2013 - 18:38

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

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

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

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

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

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

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

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

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

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

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

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();


вставляем

# 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


3.2 после строк

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


вставляем

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


3.3 в строку

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"


добавляем

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

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


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

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


вставляем

# 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


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

#2 Revived

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

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

Отправлено 26 июля 2018 - 22:31

Цитата

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