Вы можете создавать любое количество собственных методов расчета ставок или модифицировать системные. При этом обновления модуля не затронут ваши методы.
Информация приведенная ниже предназначена только для людей, знакомых с языком программирования PHP.
Если вам нужно разработать собственный метод, а в штате нет программиста, свяжитесь с нами, мы сделаем метод под ваши запросы.
Алгоритмы системных методов вы можете посмотреть в файле /bitrix/modules/wtc.easydirect/classes/general/CCalculate.php
Все файлы пользовательских методов лежат в папке /bitrix/modules/wtc.easydirect/user_methods/
Пользовательские методы реализуются на базе анонимных функций. Для добавления собственного метода нужно создать файл и на PHP описать алгоритм метода. Каждый пользовательский метод должен находится в отдельном файле.
В начале файла, в комментариях, указываются значения полей для авто-регистрации метода.
Пример файла пользовательского метода на базе "Главного метода" (скачать):
//field_NAME=Главный метод - клон //field_FNAME=user_main //field_TYPE=SEARCH //field_IS_IMPORTANT=N //field_DESCRIPTION=Главный метод - клон //field_SORT=900 $user_main=function($params) { $retstavk=0; //check right params or not if( !( is_array($params["PRICES"]) && count($params["PRICES"]) ) ){ return 0;} $PRICES=CEDirectCalculate::convertPricesAr($params["PRICES"]); //minGuarantePrice price in guarante if($PRICES["P23"]["Price"]>0) $minGuarantePrice=$PRICES["P23"]["Price"]; else $minGuarantePrice=$params['MINBET']; //minPremiumPrice price in spec if($PRICES["P14"]["Price"]>0) $minPremiumPrice=$PRICES["P14"]["Price"]; else $minPremiumPrice=$params['PREMIUMMIN']; if($minGuarantePrice<=$params['MAX_PRICE']){ //premium Calculate $spec=0; if($minPremiumPrice<=$params['MAX_PRICE']){ $dopusk=11; if( $PRICES["P11"]["Price"]>0 && ($PRICES["P11"]["Bid"]/2)<$PRICES["P11"]["Price"] && $PRICES["P11"]["Price"]<=$params['MAX_PRICE'] && CEDirectCalculate::getDiffInPerc($PRICES["P11"]["Price"],$minPremiumPrice)<$dopusk ) $spec=$PRICES["P11"]["Bid"]; else if( $PRICES["P12"]["Price"]>0 && ($PRICES["P12"]["Bid"]/2)<$PRICES["P12"]["Price"] && $PRICES["P12"]["Price"]<=$params['MAX_PRICE'] && CEDirectCalculate::getDiffInPerc($PRICES["P12"]["Price"],$minPremiumPrice)<$dopusk ) $spec=$PRICES["P12"]["Bid"]; else if( $PRICES["P13"]["Price"]>0 && ($PRICES["P13"]["Bid"]/2)<$PRICES["P13"]["Price"] && $PRICES["P13"]["Price"]<=$params['MAX_PRICE'] && CEDirectCalculate::getDiffInPerc($PRICES["P13"]["Price"],$minPremiumPrice)<$dopusk ) $spec=$PRICES["P13"]["Bid"]; else $spec=$params['PREMIUMMIN']; } //guarante Calcuate $dopusk=5; if( $PRICES["P21"]["Price"]>0 && ($PRICES["P21"]["Bid"]/3)<$PRICES["P21"]["Price"] && $PRICES["P21"]["Price"]<=$params['MAX_PRICE'] && CEDirectCalculate::getDiffInPerc($PRICES["P21"]["Price"],$minGuarantePrice)<$dopusk ) $gar=$PRICES["P21"]["Bid"]; else if( $PRICES["P22"]["Price"]>0 && ($PRICES["P22"]["Bid"]/3)<$PRICES["P22"]["Price"] && $PRICES["P22"]["Price"]<=$params['MAX_PRICE'] && CEDirectCalculate::getDiffInPerc($PRICES["P22"]["Price"],$minGuarantePrice)<$dopusk ) $gar=$PRICES["P22"]["Bid"]; else if( $PRICES["P23"]["Price"]>0 && ($PRICES["P23"]["Bid"]/3)<$PRICES["P23"]["Price"] && $PRICES["P23"]["Price"]<=$params['MAX_PRICE'] && CEDirectCalculate::getDiffInPerc($PRICES["P23"]["Price"],$minGuarantePrice)<$dopusk ) $gar=$PRICES["P23"]["Bid"]; else $gar=$params['MINBET']; if($params['MESTO_SEO']>0&&$params['MESTO_SEO']<4) $retstavk=$gar; //For TOP3 else if($spec>0) $retstavk=$spec; else $retstavk=$gar; } else $retstavk=$params['MAX_PRICE']; return $retstavk; };
Описание полей массива $params, который передается в каждый метод:
$params=array( 'ID_COMPANY' - ID компании 'NAME' - фраза для которой делается расчет 'MAX_PRICE' - максимальная цена для фразы, которую указывает пользователь 'MESTO_SEO' - позиция в СЕО, если 0 - не входит в ТОП50. 'PRICE_ON_SEARCH' - списываемая на поиске цена по данному слову 'SHOWS' - кол-во показов на поиске за последние 28 дней 'CLICKS' - кол-во кликов на поиске за последние 28 дней 'CTR' - CTR 'PRICE' - текущая цена установленная для слова на поиске 'PREMIUMMAX' - Ставка для 1-го места над результатами поиска. Это ставка, я не списываемая цена! 'PREMIUMMIN' - Ставка для входа в блок над результатами поиска. Это ставка, я не списываемая цена! 'MAXBET' - Ставка для первого мест под результатми поиска. Это ставка, я не списываемая цена! 'MINBET' - Ставка для входа в блок под результатами поиска. Это ставка, я не списываемая цена! 'PRICES' - массив с ценами для фраз на поиске [ { "Position": (string), "Bid": (float), "Price": (float) } ... ] //---Параметры для фраз в РСЯ--- 'CONTEXTSHOWS' - кол-во показов за последние 28 дней в РСЯ 'CONTEXTCLICKS' - кол-во кликов за последние 28 дней в РСЯ 'CONTEXTPRICE' - текущая цена установленная для слова в РСЯ 'CONTEXTCTR' - CTR в РСЯ 'CONTEXTCOVERAGE' - массив с ценами для фраз в РСЯ [ { "Probability": (int) "Price": (float) } ... ] );