Создание собственных/пользовательских методов

Вы можете создавать любое количество собственных методов расчета ставок или модифицировать системные. При этом обновления модуля не затронут ваши методы.

Внимание!

Информация приведенная ниже предназначена только для людей, знакомых с языком программирования PHP.

Если вам нужно разработать собственный метод, а в штате нет программиста, свяжитесь с нами, мы сделаем метод под ваши запросы.

Алгоритмы системных методов вы можете посмотреть в файле /bitrix/modules/wtc.easydirect/classes/general/CCalculate.php

Все файлы пользовательских методов лежат в папке /bitrix/modules/wtc.easydirect/user_methods/

Пользовательские методы реализуются на базе анонимных функций. Для добавления собственного метода нужно создать файл и на PHP описать алгоритм метода. Каждый пользовательский метод должен находится в отдельном файле.

Важные замечания:

  • Названия функций всех пользовательских методов должны начинаться с префикса "user_"
  • Файлы с пользовательскими методами должны быть в кодировке UTF-8 не зависимо от кодировки сайта. Это должен быть файл php с расширением ".php"
  • Название файла должно совпадать с названием функции метода и переменной которой присваивается функция.
  • Обратите внимание на точку с запятой после "}" в самом конце файла. Она обязательна, т.к. это анонимная функция.
  • Если метод возвращает ставку 0, значит ставка изменена не будет.

Константы:
EDIRECT_YALIMIT_MIN_YANDEX_SEARCH_PRICE - минимальная разрешенная ставка для поиска в рублях. Если надо отключить показы по слову на поиске, возвращайте эту ставку. Вероятность показов с такой ставкой очень мала.
EDIRECT_YALIMIT_MIN_YANDEX_RSYA_IMG_PRICE - минимальная ставка в рублях для отображения картинки в РСЯ.

В начале файла, в комментариях, указываются значения полей для авто-регистрации метода.

  • //field_NAME=    - название метода для отображения
  • //field_FNAME=    - название функции пользовательского метода. Должно совпадать с названием файла и переменной которой присваивается функция
  • //field_TYPE=    - тип метода, возможные значения:
    • SEARCH - для кампаний на поиске
    • RSYA - для кампаний в РСЯ
    • UNI - универсальный
  • //field_IS_IMPORTANT=    - должно быть равно "N"
  • //field_DESCRIPTION=    - описание метода
  • //field_SORT=    - значение сортировки

Пример файла пользовательского метода на базе "Главного метода" (скачать):

//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)
                    }
                    ...
                ]	
);
Политика конфиденциальности     © Лёгкий.Директ модуль для 1С-Битрикс