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


[модуль] Колонки цен


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

#1 badisoft

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

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

Отправлено 01 March 2015 - 09:57 PM

Модуль Колонки цен (в обсуждаемом девичестве - модуль "три цены").

Позволяет:
- создать любое количество дополнительных колонок цен (хоть одну, хоть десять)
- изначально скопировать туда штатную цену плюс-минус процент. Например, в колонку "Опт" -10%, а в колонку "Крупный опт" -20%.
- менять потом эту цену обычным образом, как и штатную. Но только в общей таблице. В карточке товара я поленился сделать.
- привязать группы клиентов к соответствующим колонкам цен.
- Клиенту по всему сайту выдается цена из колонки именно его группы.

Главная радость - клиент в зависимости от группы получает не процентную скидку от штатной (базовой) цены, что не очень удобно, а именно свою конкретную колонку цен. Процентная скидка, если она есть у этой группы, работает так же, как и раньше, т.е. проявляется только на этапе оформления заказа и применяется к цене из колонки клиента.

Пример админки модуля "Колнки цен":
Прикрепленный файл  1.JPG   54.65К   76 Количество загрузок:
Пример админки раздела "Группы покупателей":
Прикрепленный файл  2.JPG   54.83К   106 Количество загрузок:
Пример админки раздела "Каталог товаров":
Прикрепленный файл  3.JPG   125.5К   84 Количество загрузок:

Установка:
----------
1. копируем файлы

addon.php -> core/includes/admin
modules_multiprice.php -> core/includes/admin/sub/
modules_multiprice.tpl.html -> core/tpl/admin/
multiprice_functions.php -> core/functions/

Файл addon.php нужен ОДИН РАЗ для создания в таблицах новых полей.
После первого же захода в админку его можно удалить, если он не удалился сам.

2. в файле default.tpl.html перед строкой


<div class="marg"><a href="{$smarty.const.ADMIN_FILE}?dpt=modules&amp;sub=yandex">{$smarty.const.ADMIN_STRING_YANDEX}</a></div>


вставляем


{* BEGIN multiprice *}
<div class="marg"><a href="{$smarty.const.ADMIN_FILE}?dpt=modules&amp;sub=multiprice">Колонки цен</a></div>
{* END multiprice *}



3. в файле core/tpl/admin/menu.tpl.html перед строкой


<table class="adn topj"><tr><td><img src="data/admin/drs.gif" alt=""></td><td width="100%"><a href="{$smarty.const.ADMIN_FILE}?dpt=modules&amp;sub=yandex">{$smarty.const.ADMIN_STRING_YANDEX}</a></td></tr></table>


вставляем


{* BEGIN multiprice *}
<table class="adn topj"><tr><td><img src="data/admin/drs.gif" alt=""></td><td width="100%"><a href="{$smarty.const.ADMIN_FILE}?dpt=modules&amp;sub=multiprice">Колонки цен</a></td></tr></table>
{* END multiprice *}



4. в файле core/includes/admin/modules.php перед строкой


array("id"=>"yandex", "name"=>"Яндекс.Маркет" )


вставляем


# BEGIN multiprice
array("id"=>"multiprice", "name"=>"Колонки цен"),
# END multiprice



5. в файле catalog_products_categories.php

5.1. перед


$callBackParam = array();


вставляем


# BEGIN multiprice
$multiprice_name = mPriceGetAllNames();
$smarty->assign("multiprice_name", $multiprice_name );
# END multiprice


5.2. вместо


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


вставляем


# BEGIN multiprice
#$data = ScanPostVariableWithId( array( "price", "enable", "left", "sort_order" ) );
$data = ScanPostVariableWithId( array( "price", "enable", "left", "sort_order", "multiprices" ) );
# END multiprice


5.3. чуть ниже после


foreach( $data as $key => $val )
{


вставляем


# BEGIN multiprice
if ( isset($val["multiprices"]) )
foreach ($val["multiprices"] as $key1 => $val1)
if ($val1) db_query("REPLACE ".DB_PRFX."multiprice SET prdID=$key, priceID=".$multiprice_name[$key1]['priceID'].", mprice=$val1");
# END multiprice


5.4. перед


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


вставляем


# BEGIN multiprice
foreach ($products as $key => $product)
{
$data = db_query("SELECT priceID, mprice FROM ".DB_PRFX."multiprice WHERE prdID=".$product['productID']);
$price = $priceID = array();
while ($row = db_fetch_assoc($data))
{
$price[] = $row['mprice'];
$priceID[] = $row['priceID'];
}
$multiprice = array();
foreach ($multiprice_name as $key1 => $val1)
{
if (($price_exist = array_search($val1['priceID'],$priceID)) === false)
$multiprice[$key1]['price'] = 0;
else
$multiprice[$key1]['price'] = $price[$price_exist];
}
$products[$key]['multiprice'] = $multiprice;
}
# END multiprice



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

6.1. после


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


вставляем


{* BEGIN multiprice *}
{section name=m loop=$multiprice_name}<td align="center">{$multiprice_name[m].name}</td>{/section}
{* END multiprice *}


6.2. после


<td align="right"><input type="text" name="price_{$products[i].productID}" value="{$products[i].Price}" class="prc prcs{if !$products[i].enabled} gryy{/if}"></td>


вставляем


{* BEGIN multiprice *}
{section name=m loop=$products[i].multiprice}
<td align="center"><input type="text" name="multiprices_{$products[i].productID}[]" class="prc prcs{if !$products[i].enabled} gryy{/if}" value="{$products[i].multiprice[m].price}"></td>
{/section}
{* END multiprice *}



7. в файле product_functions.php

7.1. в функции DeleteProduct

перед


$whereClause = " where productID=".(int)$productID;


вставляем


# BEGIN multiprice
db_query("DELETE FROM ".DB_PRFX."multiprice WHERE prdID=".(int)$productID);
# END multiprice



7.2. в функции prdSearchProductByTemplate (это нужно, чтобы штатный фильтр правильно искал по цене)

7.2.1. перед


$where_clause .= " Price>=".(double)$from." ";


вставляем


# BEGIN multiprice
if (CONF_MULTIPRICE_ENABLE && CONF_MULTIPRICE_COLUMN)
$where_clause .= " IFNULL(mprice,Price)>=".(double)$from." ";
else
# END multiprice


7.2.2. перед


$where_clause .= " Price<=".(double)$to." ";


вставляем


# BEGIN multiprice
if (CONF_MULTIPRICE_ENABLE && CONF_MULTIPRICE_COLUMN)
$where_clause .= " IFNULL(mprice,Price)<=".(double)$to." ";
else
# END multiprice


7.2.3. перед


$sqlQueryCount = "select count(*) from ".PRODUCTS_TABLE." ".$where_clause;


вставляем


# BEGIN multiprice
if (CONF_MULTIPRICE_ENABLE && CONF_MULTIPRICE_COLUMN)
$sqlQueryCount = "select count(*) from ".PRODUCTS_TABLE." ".
"LEFT JOIN ".DB_PRFX."multiprice ON productID=prdID AND priceID=".CONF_MULTIPRICE_COLUMN." ".
$where_clause;
else
# END multiprice


7.2.4. перед


$where_clause." ".$order_by_clause.$limit_clause;


вставляем


# BEGIN multiprice
((CONF_MULTIPRICE_ENABLE && CONF_MULTIPRICE_COLUMN)?("LEFT JOIN ".DB_PRFX."multiprice ON productID=prdID AND priceID=".CONF_MULTIPRICE_COLUMN." "):"").
# END multiprice



8. в файле index.php

после


session_start();


вставляем


# BEGIN multiprice
define(CONF_MULTIPRICE_COLUMN, isset($_SESSION["log"])?mPriceGetPriceID($_SESSION["log"]):0);
# END multiprice



9. в файле custgroup_functions.php в функции GetAllCustGroups

вместо


$q=db_query("select custgroupID, custgroup_name, custgroup_discount, sort_order from ".


вставляем


# BEGIN multiprice
#$q=db_query("select custgroupID, custgroup_name, custgroup_discount, sort_order from ".
$q=db_query("select custgroupID, custgroup_name, custgroup_discount, sort_order, priceID from ".
# END multiprice



10. в файле custord_custgroup.php

10.1. после


foreach( $_POST as $key => $val )
{


вставляем


# BEGIN multiprice
if (strstr($key, "multiprice_")) db_query("UPDATE ".CUSTGROUPS_TABLE." SET priceID=$val WHERE custgroupID=".str_replace("multiprice_","",$key));
# END multiprice


10.2. перед


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


вставляем


# BEGIN multiprice
$smarty->assign("multiprice_name", mPriceGetAllNames());
# END multiprice



11. в файле custord_custgroup.tpl.html

11.1. после


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


вставляем


{* BEGIN multiprice *}
{if $smarty.const.CONF_MULTIPRICE_ENABLE}<td>Колонка цен</td>{/if}
{* END multiprice *}


11.2. после


<td align="left"><input type=text name='custgroup_name_{$custgroups[i].custgroupID}' value='{$custgroups[i].custgroup_name}' class="prc" size="36"></td>


вставляем


{* BEGIN multiprice *}
{if $smarty.const.CONF_MULTIPRICE_ENABLE}
<td>
<select name="multiprice_{$custgroups[i].custgroupID}">
<option value="0">Штатные цены</option>
{foreach from=$multiprice_name item=multiprice}
<option value="{$multiprice.priceID}"{if $multiprice.priceID == $custgroups[i].priceID} selected{/if}>{$multiprice.name}</option>
{/foreach}
</select>
</td>
{/if}
{* END multiprice *}



99. выполняем инструкцию к дополнению "Price как функция"

------------------

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

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

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

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

#2 badisoft

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

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

Отправлено 02 June 2016 - 04:02 PM

Update1:
В каталоге товаров тоже появилась возможность копировать цены из колонки в колонку. Либо только в текущей категории, либо включая дочерние.

Прикрепленный файл  multiprice_copy.jpg   58.79К   19 Количество загрузок:

Update2:
Добавлена работа с импортом/экспортом через CSV-файл. Теперь колонки цен можно выгрузить в штатный CSV-файл, изменить в Экселе цены и загрузить обратно. Также можно добавлять колонки цен путем создания новых в CSV-файле. Процесс полностью аналогичен штатному изменению/созданию характеристик товара.

Прикрепленный файл  multiprice_csv.jpg   33.09К   26 Количество загрузок:
  • 1
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)