Показаны сообщения с ярлыком ajax. Показать все сообщения
Показаны сообщения с ярлыком ajax. Показать все сообщения

пятница, 7 марта 2025 г.

Получаем цены на автозапчасти через REST API moskvorechie.ru



HTML

<div class="replacement " value="<?=$value->search_number.";".$value->brand_name?>">

                <div  class="daydeliverysupplier">

                            Доставка:

                </div>

                <div class="kolrest">

                            В наличии

                </div>

                <div class="price">

                              Цена

                </div>

</div>

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

JS

 $(document).ready(function(){

    var Arr='';

    $(".replacement").each(

        function( index, element){

            $(this).on( "getprice"+index, function(event, data) { //добавить событие к каждому .replacement

                if ( typeof(data) !== "undefined" && data !== null && Object.keys(data).length !== 0 ) {

                    if('price' in data){

                        $( this ).find(".price").text( Intl.NumberFormat("ru-RU", { style: "currency", currency: "RUB" }).format(Number(data['price']),) );

                        $( this ).find(".spinner-border").hide();

                        $( this ).find(".kolrest").text("На складе: " + data['kolrest'] + "шт." );

                        $( this ).find(".daydeliverysupplier").text("Доставка: " + (Number(data['daydeliverysupplier']) + 2) + "д." );

                    } else $( this ).hide();

                }else $( this ).hide();

            });

            xData = $.ajax({

                type: 'POST',

                cache: false,

                url: '/services/suppliers/moskvorechie/?'+$( this ).attr("value"),

                data: {partnumbrand: $( this ).attr("value")},

                success: function (data) {

console.log("mos data: ", data);

                    $('.replacement').trigger('getprice'+index, data);

                }

            });

        }

    );

});


////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/services/suppliers/moskvorechie/index.php

<?php

if ((include $_SERVER["DOCUMENT_ROOT"].'/services/include.php') != TRUE) { exit;}


function price_by_nr_firm($part_number, $brand_name){

    global $config;

    $url = $config->suppliers->moskvorechie->urlAPI

        . "l=".$config->suppliers->moskvorechie->login_name

        . '&p='.$config->suppliers->moskvorechie->login_password

        . '&act=price_by_nr_firm&v=1'

        . '&nr='.urlencode($part_number)

        . '&f='.urlencode($brand_name)

        . '&cs=utf8';

    $json = get_content($url);

    if (false === $json) {

        echo "error";

        return false;

    }

    $part = json_decode($json);

    return $json;

}


if(isset($_POST['partnumbrand'])) {

    header("Content-type: application/json; charset=UTF-8");

    header("Cache-Control: must-revalidate");

    header("Pragma: no-cache");

    header("Expires: -1");


    $array=array();

    $arr = explode(';', $_POST['partnumbrand']);

    if(count($arr)<2){

        print json_encode($array);

        exit();

    }

    error_log ("moskvorechie arr:  ".var_export($arr, true), 0);

    $c = price_by_nr_firm($arr[0], $arr[1]);

    error_log ("moskvorechie c:  ".var_export($c, true), 0);


    if($c->idtovoemshort!=null){


        if(strcasecmp($c->idtovoemshort, $arr[0]) == 0 and strcasecmp($c->nbrand, $arr[1]) == 0){

            $array[]=array(

                'value'=>$_POST['partnumbrand'],

                'kolrest'=>(string)$c->kolrest,

                'price'=>(string)$c->price,

                'daydeliverysupplier'=>(string)$c->daydeliverysupplier,

                'minpart'=>(string)$c->minpart);

        }

    }else $array[]=array('value'=>$_POST['partnumbrand']);

    print json_encode($array);

}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/services/include.php

<?php


class ConfigClass {

    public $levam;

    public $db;

    public $suppliers;


    private function array2obj($data) {

        $object = new stdClass();

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

            if (is_array($val)){

                $val = $this->array2obj($val);

            }

            $object->$key = $val;

        }

        return $object;

    }

    public function __construct(Array $data ) {

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

            if (is_array($val)){

                $this->{$key} = $this->array2obj($val);

            } else 

                $this->{$key} = $val;

        }

    }

}

if(file_exists($_SERVER["DOCUMENT_ROOT"].'/services/.config.php')){

    $config = new ConfigClass(include ($_SERVER["DOCUMENT_ROOT"].'/services/.config.php'));

}

function get_content($URL){

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

    curl_setopt($ch, CURLOPT_URL, $URL);

    $data = curl_exec($ch);

    curl_close($ch);

    return $data;

}

}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/services/.config.php

<?php


return array(

     'db' =>

    array(

        'host' => 'localhost',

        'database' => 'bitrix',

        'login' => 'root',

        'password' => 'password',

    ),

    'suppliers' =>

        'moskvorechie' =>

        array(

            'urlAPI' => 'http://portal.moskvorechie.ru/portal.api?',

            'login_name' => 'lunevstes',

            'login_password' => 'hrRqxsfPYr5HARELrEzhkw9ecYwyTa9RPExCGIdeSS9GTSDOeTnx5q4CHzhtAED8',

            'margin'=>'',

            'deliverydays'=>'',

        ),

    ),

);

пятница, 10 января 2025 г.

Bitrix / Добавляем в корзину товар, которого нет в каталоге.

ajax запрос...

$(".cartr").on("click", function() {

        $.ajax({

            type: 'POST',

            cache: false,

            url: '/services/cart/',

            data: {item: $(this).closest('.replacement').attr('value')+';'+$(this).closest('.replacement').find(".price").text()},

            success: function (data) {

                $('.basket-line-block-icon-cart').text(data['count']+" позиции");

                $(this).find("path").css('stroke: #836063;');

            }

    });

        return false;

});



Обработка ajax запрос...

/services/cart/index.php

 <?php

require_once($_SERVER['DOCUMENT_ROOT'] . "/bitrix/modules/main/include/prolog_before.php");

use \Bitrix\Main\Loader;


Loader::includeModule('iblock');

Loader::includeModule('sale');

Loader::includeModule('catalog');


if ((include $_SERVER["DOCUMENT_ROOT"].'/services/include.php') != TRUE) {

    exit;

}


if(isset($_POST['item'])) {

    $json = $_POST['item'];

    header("Content-type: application/json; charset=UTF-8");

    header("Cache-Control: must-revalidate");

    header("Pragma: no-cache");

    header("Expires: -1");

    $arr = explode(';', $json);

    $vowels = array(" ", "₽", " ");

    $siteId = 's1'; // ID сайта, к которому будет привязана корзина

    $basket = \Bitrix\Sale\Basket::create($siteId);


    $item = $basket->createItem('catalog', rand(10000000000, 11000000000));

    $item->setFields([

            'QUANTITY' => '1',

            'CURRENCY' => Bitrix\Currency\CurrencyManager::getBaseCurrency(),

            'LID' => Bitrix\Main\Context::getCurrent()->getSite(),

            'NAME' => $arr[0]." / ".$arr[1],

            'PRICE' => ceil(floatval(str_replace($vowels, "", $arr[2]))),

            'CUSTOM_PRICE' => 'Y',

    ]);

    $b = $basket->save();

    $dbRes = \Bitrix\Sale\Basket::getList(

[

'select' => ['NAME', 'QUANTITY'],

'filter' => [

'=FUSER_ID' => \Bitrix\Sale\Fuser::getId(), 

'=ORDER_ID' => null,

'=LID' => \Bitrix\Main\Context::getCurrent()->getSite(),

'=CAN_BUY' => 'Y',

]

]

    );

    $c=0;

    while ($item = $dbRes->fetch())

    {

        $c++;

    }

    print json_encode(array('result' => $b->isSuccess(), 'count' =>  $c, 'user' => \Bitrix\Sale\Fuser::getId()));

}


вторник, 20 октября 2015 г.

Bitrix. Очистить корзину. Ajax.

Шаблон формы авторизации:


<a href="#" class="delete-cart-link">очистить корзину</a>

Ajax скрипт:


$(document).ready(function (){

 $.ajax({
  type: 'POST',
  url: "/include/cart.php",
  data: {mode:'delcart'},
  dataType: 'json',
  success: function(result){
   if(result.status){
    location.href = "/personal/cart/";
    return false;
   }
  },
 });
});

Обработчик /include/cart.php


<?

require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");

$result = array();

$result['status'] = false;

$result['message'] = '';



if (isset($_POST['mode'])){

 $mode=htmlspecialcharsbx($_POST['mode']);

 switch($mode)

 {

 case 'delcart':

  CModule::IncludeModule("sale");

  CSaleBasket::DeleteAll($_SESSION["SALE_USER_ID"]);

  $result['status']=true;

  break;

 }

}



exit(json_encode($result));



require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_after.php");

понедельник, 19 октября 2015 г.

Bitrix. Авторизация по номеру телефона



Шаблон формы авторизации:


 <form id="fnt" name="system_auth_form<?=$arResult['RND']?>" method="post" target="_top" action="#"  data-ajax-href="/include/auth.php">

  <input type="hidden" name="mode" value="login" />

  <?if (strlen($arParams["BACKURL"]) > 0 || strlen($arResult["BACKURL"]) > 0):?>

  <input type="hidden" name="backurl" value="<?=($arParams["BACKURL"] ? $arParams["BACKURL"] : $arResult["BACKURL"])?>" />

  <?endif?>

  <input type="text" name="USER_LOGINt" maxlength="255" required placeholder="+7">

  <input type="password" name="USER_PASSWORD" maxlength="255">

  <input type="checkbox"  name="USER_REMEMBER" id="USER_REMEMBER" checked>

  <input type="submit" name="Login" class="" value="вход" />

 </form>


Ajax скрипт:


$(document).ready( function(){

  var form_item5 = $('#fnt');

  form_item5.validate({

   rules: {

    USER_LOGIN: {required: true}

   },

   messages: {USER_LOGIN: 'Ошибка в форме'},

   errorClass: 'error',

   validClass: 'valid',

   invalidHandler: function(event, validator) {},

   errorPlacement: function(error, element) {

    var cur = element;

    error.addClass('error-message').insertAfter(cur);

   },

   submitHandler: function(form,event) {

     var msgdata=$("#fnt").serialize();

     $.ajax({

      type: 'POST',

      url: form_item5.attr('data-ajax-href'),

      data: msgdata,

      dataType: 'json',

      success: function(result){

       if(result.status){

        $.fancybox.open('<div  id="popup-success">\

        <div class="title">Здравствуйте '+result.message+'!</div>\

        </div>',{wrapCSS: 'fancybox-popup', padding: ['0','0','0','0'], closeClick  : false,'beforeClose': function() { location.href = result.backurl; }, hideOnContentClick: false });

        form_item5.get(0).reset();

        form_item5.find('.valid').removeClass('valid');

       }

      }

     });

     event.preventDefault();

   }

  });

});


Обработчик /include/auth.php



<?

require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");



global $USER;

if(!is_object($USER)) $USER = new CUser;

$result = array();

$result['status'] = false;

$result['message'] = '';

if (isset($_POST['mode'])){

 $mode=htmlspecialcharsbx($_POST['mode']);

 switch($mode)

 {

 case 'login':

  if(!$USER->IsAuthorized())

  {

   $user_tel = htmlspecialcharsbx($_POST['USER_LOGINt']);

   $filter = Array("PERSONAL_PHONE" => $user_tel);

   $sql = CUser::GetList(($by="id"), ($order="desc"), $filter);

   if($sql->NavNext(true, "f_"))

   {

    if($_POST['USER_REMEMBER']=="on") $rem="Y"; else $rem="N";

    $arAuthResult = $USER->Login($f_LOGIN, $_POST['USER_PASSWORD'], $rem);

    $result['status']=true;

    $result['message']=$f_NAME;

    $result['backurl']=$_POST['backurl'];

    $APPLICATION->arAuthResult = $arAuthResult;

   }

  }

  break;

 }

}

exit(json_encode($result));
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_after.php");

Split / разбить dump

//Разбить дамп по 50000 строк for i in `ls *.sql`; do split -d -l 50000 -a 4 --additional-suffix=.sql $i "$(basename "$i" .sq...