Servicii de livrare automată Bitrix. Crearea propriilor gestionatori de servicii de livrare automate. „Introducere de date cu caracter personal” dinamic

Cum să încărcați fișierul de configurare:

Cum să configurați un widget coș de cumpărături:

    În contul personal Yandex.Delivery, urmați linkul Setări din colțul din dreapta sus al paginii, apoi accesați fila Integrare → Widgeturi.

    În blocul widget-ului coș, faceți clic pe butonul Instalare și copiați codul widget-ului.

    Reveniți la setările modulului și inserați codul în câmp Cod widget coș.

Nu uitați să selectați orașul în care se află depozitul dvs. Dacă doriți să expediați comenzi într-un singur depozit, activați opțiunea Utilizați depozitul Yandex.Delivery.

Valori implicite ale expeditorului

În câmp ID-ul de expeditor implicit selectați magazinul din care sunt expediate cel mai des comenzile.

Dimensiunile produsului

Stabiliți dimensiunile și greutatea mărfurilor. Dimensiunile specificate sunt transmise către Yandex.Delivery, iar costul de livrare este calculat pe baza acestora.

Dacă nu știți ce valori să selectați în acest bloc, contactați administratorul site-ului dvs.

Comanda proprietăți

Lista din stânga listează câmpurile pe care utilizatorul le completează atunci când plasează o comandă. În lista din dreapta, selectați proprietățile de ordine corespunzătoare. O listă cu toate proprietățile este pe pagină Magazin → Proprietăți comenzi. Proprietățile selectate sunt utilizate pe cardul de comandă.

Dacă nu știți ce să selectați în acest bloc, contactați administratorul site-ului dvs.

Atenţie. Dacă setați automat setările adresei, asigurați-vă că verificați care Noul șablon este folosit în cele mai recente versiuni ale modulului „magazin”."))\"> șablon de comandă folosit pe site-ul dvs. Dacă utilizați un șablon vechi, verificați opțiunea corespunzătoare.

Starea comenzilor

Lista din stânga arată starea comenzii în sistemul Yandex.Delivery. În câmpurile din dreapta, selectați valorile corespunzătoare în sistemul dvs.

Dacă nu există nicio stare în sistemul dvs. pentru Yandex.Starea livrării, lăsați câmpul necompletat.

Proprietățile produsului

Selectați proprietatea care se potrivește cu SKU-ul comenzii. Dacă nu sunteți sigur ce proprietate să selectați, contactați administratorul site-ului.

Setări ale componentelor

Activați această opțiune astfel încât, atunci când plasează o comandă, cumpărătorul să vadă widgetul coș imediat când selectează Yandex.Delivery. Cumpărătorul nu va trebui să facă pași suplimentari atunci când plasează o comandă.

Exemplu

Cum să trimiteți comenzi către Yandex.Delivery

Pentru a trimite o comandă către Yandex.Delivery:

    Accesați pagina de pe site-ul dvs Administrare→ Magazin → Comenzi.

    Faceți clic pe ID-ul comenzii dorite, apoi pe butonul Yandex.Delivery.

Este posibil să existe un mesaj în fereastra de trimitere a comenzii „Detaliile comenzii au fost modificate, costurile de livrare trebuie recalculate”. Faceți clic pe butonul Schimbați opțiunea de livrareși selectați o nouă opțiune.

Notă. Modulul nu are capacitatea de a gestiona expedierile - acest lucru se poate face în contul personal Yandex.Delivery.

Instalarea widget-urilor

Puteți instala un widget geografic sau un widget coș de cumpărături pe site-ul dvs.

Pasul 1. Creați o pagină de test pe site

    Accesați fila Website și în panoul de sus faceți clic pe butonul Creaza o pagina.

    În fereastra care se deschide, selectați opțiuni Accesați editarea paginiiȘi Restricționați accesul la pagină. Activați accesul numai pentru administratori.

    Nu este nevoie să completați nimic altceva - faceți clic pe butonul Terminare.

Pasul 2: Configurați widgetul

    Extinde meniul Magazin → componente Yandexmarketlabși trageți Widget Yandex.Deliveryîn câmpul gol din stânga.

    Reveniți la setările modulului și inserați codul în câmpul corespunzător.

    Setați restul setărilor și faceți clic pe butonul Salvare. Dacă nu sunteți sigur ce valori să selectați, contactați administratorul site-ului.

Pasul 3. Adăugați un widget pe site-ul dvs

Rezolvarea problemelor

Modulul nu funcționează

În primul rând, asigurați-vă că site-ul dvs. îndeplinește cerințele de sistem. Acest lucru se poate face pe pagină Administrare→ Setări → Instrumente → Diagnosticare → Setări PHP. Următoarele valori ar trebui să fie afișate:

    În blocul de sus - versiunea PHP 5.3–7.0.

    În primul tabel, în linia Server API - Apache 2.0 sau mai mare.

    În tabelul MySQL, în linia de versiune Client API - versiunea 5.0 sau mai mare.

    În tabelul cURL, în linia de suport cURL - „activat”.

Dacă site-ul nu îndeplinește nicio cerință, contactați gazda site-ului.

În plus, puteți rula o scanare a site-ului pe pagină Administrare→ Setări → Instrumente → Verificarea sistemului, pe file Testarea configurațieiȘi Verificarea accesului.

La instalarea modulului, apare eroarea „Serviciul Yandex.Delivery nu a fost găsit”.

Adăugați serviciul manual. Pentru aceasta:

    Mergi la pagina Administrare→ Magazin → Setări → Servicii de livrare.

    Faceți clic pe butonul Adăugați și selectați o opțiune Serviciu de livrare automatizat.

    Pe fila Setări de manipulare Extindeți lista verticală a serviciului de livrare și selectați Yandex.Delivery.

Sfat. Dacă nu ați reușit să rezolvați problema, contactați asistența din contul Yandex.Delivery.

În metodele de livrare, cumpărătorul nu vede Yandex.Livrare sau linkul „Selectați opțiunea de livrare”.

Pasul 1: Verificați serviciile de livrare

    Mergi la pagina Administrare→ Magazin → Servicii de livrareși verificați dacă pagina are Yandex.Delivery și este activă.

    Faceți clic pe Yandex.Delivery și asigurați-vă că fila Restricții din fereastra care se deschide este goală.

Pasul 2: Verificați setările modulului

Mergi la pagina AdministrareSetările produsuluiSetările modulului→ Yandex.Livrareși asigurați-vă că:

    toate setările din bloc setări de partajare sunt setate corect;

    în bloc Dimensiunile produsului toate valorile sunt date.

Pasul 3: verificați orașul dvs. prestabilit

Verificați dacă orașul magazinului este setat în setări:

    Mergi la pagina Administrare→ Proprietăți de comandă → Lista proprietăților.

    Pentru fiecare proprietate cu tipul „Locație”, faceți clic pe numărul proprietății și în fereastra care se deschide, specificați orașul în care se află magazinul sau depozitul dvs. principal.

Pasul 4: Activați modul de compatibilitate

Dacă site-ul dvs. folosește Noul șablon este folosit în cele mai recente versiuni ale modulului „magazin”.

"}}\">noul șablon de plată, activați modul de compatibilitate:

Sfat. Dacă nu ați reușit să rezolvați problema, contactați asistența din contul Yandex.Delivery.

Utilizatorul nu vede costul de livrare atunci când selectează Yandex.Delivery

Sfat. Dacă nu ați reușit să rezolvați problema, contactați asistența din contul Yandex.Delivery.

Yandex.Livrarea nu include datele cumpărătorului

Dacă cardul de comandă conține toate datele cumpărătorului, dar formularul de trimitere a unei comenzi către Yandex.Livrarea nu le conține, verificați setările proprietăților comenzii de pe pagină Administrare→ Magazin → Proprietăți comandă → Lista proprietăților.

"}}\">șablon de plată :
  • Șablon nou
  • Vechi șablon

    Lucrăm cu băieții de 2 ani acum. Echipă grozavă, selecție mare de programatori.
    Există o legătură cu managerii aproape în orice moment al zilei. Problemele critice pot fi rezolvate chiar și la ora 2 dimineața (pentru noi, ca proiect pe Internet, acest lucru este foarte important).

    Momentul în care am început să colaborăm cu Atlant este acum amintit cu un zâmbet ușor. Și apoi totul a fost foarte rău.
    Am decis să schimbăm radical site-ul - să-l demolăm pe cel vechi și să trecem la 1C-Bitrix.

    Dezvoltarea site-ului a fost încredințată unui freelancer. El a făcut totul, a conceput site-ul. Dar chiar înainte de lansare a avut niște dificultăți, am rămas fără comunicare timp de 2 săptămâni. Nu pot spune nimic rău despre el, dar este un fapt. Am rămas cu o copie neterminată a site-ului (mai mult de 30 de îmbunătățiri critice).

    Habar n-aveam cum să facem față unei astfel de situații. Am început să căutăm printre partenerii de aur ai Bitrix care ne-ar putea ajuta în această situație.
    Am scris aproximativ o sută de cereri.
    Răspunsul de la Atlas s-a remarcat printre toți! Costul lucrării s-a dovedit a fi unul dintre cele mai mici. Încrederea a fost dată de instrucțiuni pas cu pas despre ceea ce băieții urmau să facă cu site-ul.

    Drept urmare, am lansat un site web, lucrăm cu ei și nu am regretat niciodată!
    În primele 6 luni de la începerea cooperării, vânzările noastre au crescut de 2 ori. Stabilim orice sarcini, chiar și cele mai complexe. Totul se face.
    Este convenabil ca totul să fie într-un singur loc: lucru pe site, 1C, găzduire, SEO, design etc.
    Iti recomandam!

    Andrei Rudy (Director - LEDPremium)

    Lucrăm cu Atlant de doi ani acum.
    Întotdeauna ne punem ouăle în coșuri diferite și am lucrat cu mai mulți furnizori deodată.
    Pe parcursul unui an, am transferat de la 20 la 70% din aspectul site-ului web și sarcinile de configurare 1C către Atlant.
    An de an suntem surprinși de dezvoltarea și progresul companiei și ne bucurăm de alegerea noastră de succes.
    Nivelul programatorilor a crescut - prețurile sunt în cadrul pieței, răspunsul managementului este imediat.
    Ca de obicei, când totul este bine nici nu știi ce să evidențiezi și nu există niciun motiv să scrii o recenzie.
    Băieții au creat complet resursa noastră www.datakam.ru
    Nu au lăsat nicio piatră neîntoarsă de la standardul nenorocit vizual B24.
    Marketerii noștri, în rapoarte lunare, îmi arată, în calitate de manager, efectul pozitiv al schimbărilor pe site și în automatizarea procesării documentelor. Există un punct. În bani. În ruble.
    Recomandăm sincer și sincer această echipă creativă ca partener de încredere în munca noastră.
    Lucrul amuzant este că nu am văzut niciodată în persoană niciunul dintre conducere sau angajați - și, în același timp, suntem mulțumiți de calitatea și viteza de finalizare a sarcinilor.
    Iti recomandam.
    Noi raspundem.

    Vladislav Mekhantsev (director tehnic - datakam.ru)

    Lucrăm cu Atlant de mai bine de 2 ani, suntem mulțumiți de tot: rapiditatea muncii și calitatea. Se întâmplă că nu există destui programatori sau nu suntem întotdeauna de acord cu problemele de proiectare, dar toate problemele au fost rezolvate mai mult sau mai puțin rapid.

    Destul de multumit de rezultat. Mulțumesc.

    Dmitrii (Director general adjunct - Souz.com)

Indiferent cât de mult ai hrăni lupul, porcul va avea un gust mai bun

Bitrix: crearea unui handler de servicii de livrare automată

Bitrix are două tipuri de servicii de livrare: personalizate și automate. Acest articol va descrie cum să creați un administrator de servicii de livrare automată.

Ce este acest handler automat?

Toate handlerele preinstalate se află în folderul /bitrix/modules/sale/lang/ru/delivery/. Managerii dvs. ar trebui să fie localizați în folderul /bitrix/php_interface/include/sale_delivery/ (această cale poate fi schimbată în proprietățile modulului magazinului online).

Handler-ul este o clasă a unei structuri specifice cu un șir de conexiune pentru handler-ul de livrare a evenimentelor onSaleDeliveryHandlersBuildList.

Clasa de gestionare a livrării trebuie să aibă un număr de metode, ale căror tipuri de acțiuni sunt descrise în metoda Init a clasei.

1. Init - câmpurile principale sunt inițializate.

2. DBGETSETTINGS - metoda de citire a valorilor parametrilor.

3. DBSETSETTINGS - metoda de setare a valorilor parametrilor.

4. GETCONFIG - definirea configurației setărilor (acestea pot fi împărțite în file).

5. COMPATIBILITATE - verificarea compatibilității profilurilor procesorului cu comanda.

6. CALCULATOR - calculul costurilor de livrare.

1. SID - Identificatorul unic de șir al handlerului.
2. NUME — Numele operatorului.
3. DESCRIERE - Descriere text a handlerului
4. DESCRIPTION_INNER — Descrierea internă a handler-ului, afișată la configurarea handler-ului în Panoul de control.
5. BASE_CURRENCY — Identificatorul monedei de bază a operatorului
6. HANDLER — Calea către fișierul handler. Necesar pentru copierea automată corectă a handler-ului (nu este încă implementat). În marea majoritate a cazurilor, valoarea __FILE__ este suficientă

Trebuie specificat și cel puțin unul profilul de livrare.

"Plain", // Identificatorul serviciului de livrare "NAME" => "Curier Krasnaya Presnya", "DESCRIPTION" => "Descriere pentru clienții site-ului", "DESCRIPTION_INNER" => "Descriere pentru administratorii site-ului", "BASE_CURRENCY" = > "RUR", "HANDLER" => __FILE__, /* Definirea metodelor */ "DBGETSETTINGS" => array("CDeliveryPlain", "GetSettings"), "DBSETSETTINGS" => array("CDeliveryPlain", "SetSettings"), " GETCONFIG" => array("CDeliveryPlain", "GetConfig"), "COMPABILITY" => array ("CDeliveryPlain", "Compability"), "CALCULATOR" => array ("CDeliveryPlain", "Calculate"), /* Listează profiluri */ "PROFILES" => array("all" => array("TITLE" => "Fără restricții", "DESCRIPTION" => "Profil de livrare fără restricții", "RESTRICTIONS_WEIGHT" => matrice (0 ) , "RESTRICTIONS_SUM" => matrice(0),),)); ) /* Setarea parametrilor */ funcția SetSettings($arSettings) ( foreach ($arSettings ca $key => $value) ( ​​​​if (strlen($value) > 0) $arSettings[$key] = doubleval($value) ); else unset($arSettings[$key]); return serialize($arSettings) /* Solicitați setări */ function GetSettings($strSettings) ( return unserialize($strSettings); ) /* Solicitați configurarea serviciului de livrare */ GetConfig() ( $arConfig = array("CONFIG_GROUPS" => array("all" => "Parametri",), "CONFIG" => array("DELIVERY_PRICE" => array(// "TYPE" => "STRING ", // "DEFAULT" => "200", // "TITLE" => "Cost de livrare", // "GROUP" => "toate",)),); return $arConfig; ) /* Verificare conformitate profil de livrare a comenzii */ function Compability($arOrder, $arConfig) ( return array("toate"); ) /* Calcul cost de livrare*/ function Calculate($profil, $arConfig, $arOrder, $STEP, $TEMP = false ) ( // obține costul coșului // Afișează coșul curent pentru utilizatorul curent $arBasketItems = array(); $dbBasketItems = CSaleBasket::GetList(array("NAME" => "ASC", "ID" => "ASC"), array("FUSER_ID" => CSaleBasket::GetBasketUserID(), "LID" => SITE_ID, „ORDER_ID” => „NULL”), fals, false, array(„ID”, „CALLBACK_FUNC”, „MODULE”, „PRODUCT_ID”, „QUANTITY”, „DELAY”, „CAN_BUY”, „PRICE”, „QUANTITY” " ")); while ($arItems = $dbBasketItems->Fetch()) ( dacă (strlen($arItems["CALLBACK_FUNC"]) > 0) ( CSaleBasket::UpdatePrice($arItems["ID"], $arItems["CALLBACK_FUNC"] , $arItems["MODULE"], $arItems["PRODUCT_ID"], $arItems["QUANTITY"]); $arItems = CSaleBasket::GetByID($arItems["ID"] ) $arBasketItems = $arItems; / Imprimați o matrice care conține coșul curent pentru fiecare ($arBasketItems ca $num => $item) ( $TotalSumArr = $item["PRICE"]*$item["QUANTITY"]; ) // suma tuturor produselor ținând cont cantitatea $TotalSum = array_sum($TotalSumArr); // în funcție de sumă, faceți un markup pentru livrare // de la 1500 la 5000 de livrare 750 de ruble dacă($TotalSum >= 1500 && $TotalSum<= 5000) $DeliveryCost = 750; elseif($TotalSum >= 5000) $DeliveryCost = 0; return array("RESULT" => "OK", "VALUE" => $_SESSION["ORDER_DELIVERY_PRICE"], "VALUE" => $DeliveryCost); ) ) AddEventHandler("vânzare", "onSaleDeliveryHandlersBuildList", array("CDeliveryPlain", "Init")); ?>

Handler-ul contine un cod care calculeaza continutul cosului si, in functie de pret, ofera diferite costuri de transport.

Am analizat procesul de instalare a unei noi componente de comandă. A testat proiectul timp de câteva zile și a venit timpul să profite de oportunitățile pentru care a meritat trecerea la noua platformă 1C-Bitrix.

Înlocuire automată implicită a orașului

Acest exemplu va fi util atât pentru magazinele regionale mici, cât și pentru proiectele mari.

Regiunea de livrare este primul element major al procesului de comandă. Să presupunem că trebuie să folosim înlocuirea automată a numelui „Kaliningrad” pentru a crește conversia și a reduce problemele cu plasarea comenzilor.

Acum, când vă conectați pentru prima dată, arată astfel:

Clienții, desigur, pot face clic pe butonul „Kaliningrad”, după care câmpul va fi completat, dar mulți pur și simplu omit acest pas, rezultând o eroare:

Această problemă a fost identificată de Metrica Webvisor. Desigur, după aceasta clientul completează totul corect, dar rămâne un reziduu, în ciuda faptului că în multe magazine, ridicarea este un criteriu important (până la 80% din comenzi), iar în acest caz, umplerea corectă a orașului numele nu este critic.

Să setăm orașul implicit și să vedem dacă înlocuirea funcționează. Să mergem la secțiunea administrativă a magazinului și apoi la setările proprietății:

Și setați locația implicită:

Acum să plasăm o comandă pentru a verifica:

Grozav, locația este completată și clientul trebuie doar să facă clic pe „Următorul”. Acum comanda va fi plasată cu inconveniente minime pentru client și vom maximiza conversia. În ceea ce privește magazinele mari, acestea pot colecta statistici privind frecvența comenzilor din anumite orașe și pot face butoane de selecție rapidă, ca în captura de ecran: „Kaliningrad”, „Zelenogradsk”, „Svetlogorsk”.

Puteți seta cel mai popular oraș în mod implicit, deoarece este întotdeauna mai ușor să îl schimbați sau să îl clarificați prin telefon decât să pierdeți un client.

Restricții suplimentare de plată

Următorul pas în plasarea unei comenzi este blocarea plății. Un tip de restricție poate fi interzicerea plății în numerar la livrarea prin curier. Acest lucru poate fi util în cazurile în care femeile lucrează în cariere și a căror sănătate nu vor să riște atunci când transportă sume mari.

Vom introduce o restricție legată de anumite servicii de livrare și de suma maximă a cecului. Pentru a face acest lucru, accesați interfața administrativă în fila „Restricții”, pentru o anumită metodă de plată:

În acest caz, va trebui să efectuați două sisteme de plată în numerar:

  • într-una vom limita utilizarea pentru punctul de ridicare, dar fără restricții de preț,
  • iar in al doilea ne vom limita la servicii de curierat si adaugam o limita la suma.
Mai întâi, să stabilim o limită de preț:

Acum restricții de livrare:

Ca rezultat, obținem următoarele:

Să verificăm executarea unei comenzi cu mărfuri în valoare mai mică de 10.000 de ruble și livrarea prin curier:

Totul este în regulă, plata necesară este acolo, comanda poate fi plasată.

Să verificăm cu mărfuri în valoare de peste 10.000 de ruble:

Super, nu exista plata cash, puteti plasa o comanda cu plata in alte moduri, fara a risca curieri si bani.

Când sunt introduse restricții, clienții nu văd metode de plată „interzise” și, prin urmare, nu se vor certa cu operatorii, care altfel ar trebui să explice constant de ce compania dumneavoastră nu va livra comanda plasată.

Servicii suplimentare de livrare

De multe ori ni s-a cerut să oferim posibilitatea de a crea serviciile necesare în livrări. Acest lucru a fost implementat în noua platformă. Beneficiul serviciilor suplimentare este de a crește factura medie a comenzii.

Accesați setările de livrare:

În interfață a apărut o filă separată cu servicii suplimentare care vor fi afișate în blocul de livrare. Sunt acceptate trei tipuri de servicii:

  • Lista serviciilor. Clientului i se cere să selecteze un articol dintr-o listă de servicii. În mod implicit, primul articol este selectat, deci dacă nu trebuie să creșteți prețul, atunci primul serviciu din listă ar trebui să fie cu un preț zero.

Serviciu cantitativ. Se creează un serviciu cu un preț pe unitate, iar clientul poate specifica câtă cantitate are nevoie.

Serviciu unic. Un serviciu independent, afișat ca casetă de selectare. Valoarea implicită nu este aplicată clientul trebuie să o selecteze în mod independent pe cea de care are nevoie.

Să vedem cum sunt configurate aceste reguli:

Setările pentru toate tipurile de servicii sunt foarte asemănătoare: există două blocuri care controlează elementele principale. În primul rând, trebuie să setați numele și descrierea serviciului. Apoi specificați cine poate folosi serviciul:

  • Manager - serviciul va fi afișat în interfața administrativă.
  • Client - serviciul va fi afișat în timpul comenzii în partea publică a site-ului.
Iată cum arată adăugarea unui serviciu în interfața administrativă atunci când creați o comandă sau faceți modificări:

„Introducere de date cu caracter personal” dinamic

Livrările au fost finalizate, acum puteți trece la unul dintre cele mai importante elemente în plasarea unei comenzi - solicitarea datelor de la utilizator pentru livrare sau expediere. În componenta anterioară, clientului i s-a solicitat același set de câmpuri. A trebuit să aleagă ce câmpuri să completeze, ceea ce era oarecum incomod.

Noua componentă de plată poate solicita diferite seturi de câmpuri. De cele mai multe ori, proprietarii magazinelor reduc cantitatea de informații care trebuie introduse în timpul ridicării. Poate că în acest caz va fi suficient să știm:

  • Telefon.
  • E-mail. Acest articol poate fi, de asemenea, eliminat, dar uneori doriți să „răsfățați” clientul cu buletine informative despre produse noi.
Să mergem la secțiunea administrativă „Proprietăți de comandă” -> „Lista de proprietăți” și să selectăm proprietatea adresei de schimbat:

Vom lega doar acele „Servicii de livrare” care ar trebui să afișeze acest câmp. Apoi mergem la secțiunea publică și încercăm să plasăm o comandă. Alegem ridicarea si vedem ca magazinul nu ne cere adresa de livrare.

Aceasta este o funcționalitate utilă și binevenită. La urma urmei, trebuie să recunoști că nu este foarte plăcut să răspunzi la întrebările clienților: „De ce ai nevoie de adresa mea dacă voi ridica singur comanda?” Acum nu trebuie să faci asta.

Punct de ridicare a comenzii

În cele din urmă, aș dori să vorbesc despre modificările din blocul de selecție „Puncte de ridicare a comenzilor”. În versiunea anterioară, principalele plângeri au fost probleme cu afișarea unui număr mare de puncte de preluare, a unei hărți mici și lipsa selecției automate a unui punct de preluare (dacă era doar unul, de exemplu).

Noua versiune a componentei are setări adăugate pentru afișarea punctului de preluare a comenzii. Dacă este singurul dintr-un oraș, atunci arătăm imediat blocul prăbușit și afișăm toate datele sale cu o imagine, sau arătăm blocul extins. În primul caz, pentru a afișa harta va trebui să intri în bloc, iar în al doilea, harta va fi afișată imediat.

Procesoarele automate pentru servicii de livrare vă permit să implementați în mod programatic o logică arbitrară pentru calcularea costurilor de livrare pe baza parametrilor comenzii și a propriilor setări. Algoritmii de calcul pot fi arbitrari - cost fix, solicitări către servicii web la distanță, calcul pe baza tabelelor de date proprii etc.

Un handler este o clasă sau un set de funcții cu următoarea structură:

Metodă Descriere
Descrierea manipulatorului O funcție care returnează o descriere a handlerului, numele metodelor, o listă de profiluri de handler etc.
Setări de manipulare O funcție care returnează o serie de setări ale handlerului
Setări de procesare Un set de funcții responsabile cu pregătirea setărilor pentru intrarea în baza de date și conversia inversă.
Verificare compatibilitate O metodă care verifică compatibilitatea profilurilor unui anumit procesor cu o comandă.
Funcția de calcul O metodă care calculează costurile de livrare pe baza setărilor procesorului și a parametrilor comenzii.

Deoarece lucrul cu un set de funcții individuale este incomod, se recomandă să le combinați într-o clasă (spațiu de nume). Pe baza acestei recomandări, va urma o descriere ulterioară, precum și exemplul dat va fi implementat. În exemplu, handlerul „Livrare prin curier” este implementat ca clasa CDeliveryMySimple.

Descrierea manipulatorului

Descrierea handlerului este o metodă care returnează o matrice asociativă cu următoarea structură:

Parametru Descriere
SID Identificatorul unic de șir al handlerului.
NUME Numele handlerului.
DESCRIERE Descriere text a handlerului
DESCRIPTION_INNER Descrierea internă a handler-ului, afișată la configurarea handler-ului în Panoul de control.
BASE_CURRENCY ID-ul monedei de bază a operatorului
MANIPUL Calea către fișierul handler. Necesar pentru copierea automată corectă a handler-ului (nu este încă implementat). În marea majoritate a cazurilor, valoarea __FILE__ este suficientă
GETCONFIG Numele metodei care returnează o serie de setări ale validatorului. Dacă handler-ul este implementat ca o clasă, valoarea este o matrice ("class_name", "method_name").
DBSETĂRI Numele metodei responsabile pentru verificarea setărilor handlerului și conversia matricei de setări într-un șir pentru salvare. Dacă handler-ul este implementat ca o clasă, valoarea este o matrice ("class_name", "method_name"). Dacă această metodă este absentă, matricea de setări va fi salvată în baza de date în formă serializată.
DBGETSETTINGS Numele metodei responsabile pentru convertirea șirului de setări ale handlerului înapoi într-o matrice. Dacă handler-ul este implementat ca o clasă, valoarea este o matrice ("class_name", "method_name").
COMPATIBILITATE Numele metodei responsabile pentru verificarea suplimentară a compatibilității profilurilor de procesare cu parametrii de comandă. Dacă metoda lipsește, nu se va efectua nicio verificare suplimentară. Dacă handler-ul este implementat ca o clasă, valoarea este o matrice ("class_name", "method_name").
CALCULATOR Numele metodei care calculează costurile de transport. Dacă handler-ul este implementat ca o clasă, valoarea este o matrice ("class_name", "method_name").
PROFILE Gamă de profiluri de procesare. Trebuie să conțină cel puțin un profil. Pentru formatul descrierii vezi mai jos.

Descrierea profilului este o matrice cu următorul format:

"string_profile_identifier" => matrice ("TITLE" => " Numele profilului", "DESCRIPTION" => " profile_description", // greutățile sunt indicate în grame "RESTRICTIONS_WEIGHT" => matrice( greutate_minimă, Limită de greutate), // sumele sunt indicate în moneda de bază a handler-ului „RESTRICTIONS_SUM” => array( sumă_comandă_minimă, sumă_maximală_comandă));

Dacă matricea RESTRICTIONS_WEIGHT sau RESTRICTIONS_SUM conține un element, atunci acesta este considerat valoarea minimă. Dacă nu sunt necesare restricții, trebuie specificată matricea(0).

Funcția Init() ( return array(/* Descriere de bază */ "SID" => "simplu", "NAME" => "Livrare prin curier", "DESCRIPTION" => "", "DESCRIPTION_INNER" =>
" .", "BASE_CURRENCY" => COption::GetOptionString("sale", "default_currency", "RUB"), "HANDLER" => __FILE__, /* Metode de gestionare */ "DBGETSETTINGS" => array(" CDeliveryMySimple" , "GetSettings"), "DBSETSETTINGS" => array("CDeliveryMySimple", "SetSettings"), "GETCONFIG" => array("CDeliveryMySimple", "GetConfig"), "COMPABILITY" => array("CDeliveryMySimple" , " Compatibilitate"), "CALCULATOR" => array("CDeliveryMySimple", "Calculate"), /* Lista profilurilor de livrare */ "PROFILES" => array("simple" => array("TITLE" => "livrare" , "DESCRIPTION" => "Timp de livrare până la 3 zile", "RESTRICTIONS_WEIGHT" => array(0), "RESTRICTIONS_SUM" => array(0),),));

Parametrii validatorului

Metoda specificată de elementul GETCONFIG trebuie să returneze o matrice de elemente de forma:

Array("CONFIG_GROUPS" => matrice(" grup_id1" => "nume_grup1", "grup_id2" => "nume_grup2", /* ..................... */), "CONFIG" => matrice (" parameter_identifier1" => matrice ("TITLE" => " nume_parametru1", "TYPE" => " tip_parametru1", "DEFAULT" => " valoarea_default a parametrului1", "GROUP" => " parameter_group_identifier1", "VALORI" => matrice(" parametru_valoare1" => "nume_valoare1_parametru1", "valoare2_parametru1" => "nume_valoare2_parametru1", /* ....................... */)), /* ........................ */))

Grupurile de parametri descrise într-un element de matrice cu tasta „CONFIG_GROUPS” sunt afișate ca file separate în formularul pentru editarea parametrilor de gestionare care conțin parametrii alocați acestui grup. Un element de matrice cu tasta „CONFIG” specifică o listă de parametri. Tipul de parametru poate lua una dintre următoarele valori:

  • ŞIR- câmp de introducere a textului
  • PAROLA- câmp de introducere a parolei
  • CASETA DE BIFAT- un element de tip „checkbox” cu valoarea „Y”
  • RADIO
  • SCAPĂ JOS- un set de opțiuni sub forma unei liste derulante
  • SELECTARE MULTIPLA- un set de opțiuni sub forma unei liste cu variante multiple
  • RADIO- un set de opțiuni sub formă de butoane radio

Pentru tipurile de parametri, implicând o alegere dintre mai multe opțiuni de valoare ( SCAPĂ JOS, SELECTARE MULTIPLAȘi RADIO) lista de valori este specificată de un element al matricei descriptive cu cheia „VALORI”. Pentru alte tipuri de parametri, acest element este ignorat.

Funcția GetConfig() ( $arConfig = array("CONFIG_GROUPS" => array("all" => "Costul de livrare",), "CONFIG" => array(),); // parametrii de gestionare în acest caz sunt valori de cost livrare la diferite grupuri de locații // pentru aceasta vom crea o listă de parametri bazată pe lista de grupuri $dbLocationGroups = CSaleLocationGroup::GetList($arLocationGroup = $dbLocationGroups->Fetch()) ( $arConfig[); "CONFIG"][" price_".$arLocationGroup["ID"]] = array("TYPE" => "STRING", "DEFAULT" => "", "TITLE" => "Costul de livrare la grupul "\" " .$arLocationGroup[" NAME "]."\" " .(".COption::GetOptionString("sale", "default_currency", "RUB").")", "GROUP" => "toate",) ) return $arConfig;

Parametrii de procesare

Manipularea parametrilor handler necesită două metode, specificate în descriere prin parametrii DBSETSETTINGS și DBGETSETTINGS . Primul dintre ei primește ca intrare o matrice de valori ale parametrilor de forma „ parameter_identifier" => "valoare_parametru" și ar trebui să returneze reprezentarea șirului lor. Al doilea este de a face conversia inversă. Ambele metode pot efectua și manipulări arbitrare ale valorilor parametrilor.

Funcția SetSettings($arSettings) ( // Verificați lista valorilor. Îndepărtați valorile goale din listă. foreach ($arSettings ca $key => $value) ( ​​​​if (strlen($value) > 0) $arSettings[$key] = doubleval($value); else unset($arSettings[$key]) // returnează valorile ca o matrice serializată // în cazul unei liste mai simple de setări pot fi folosite funcția GetSettings($strSettings) ( // returnează matricea deserializată de setări return unserialize($strSettings); )

Verificare compatibilitate

Compatibilitatea profilurilor procesorului cu comanda este verificată folosind metoda specificată în descriere prin parametrul „COMPABILITATE”. Această metodă ia 2 parametri ca intrare - o matrice descriptivă a comenzii și o matrice de setări ale handlerului. Răspunsul metodei așteaptă o matrice care să conțină identificatori ai profilurilor de livrare adecvate pentru o anumită comandă. Verificarea specificată de valorile „RESTRICTIONS_WEIGHT” și „RESTRICTIONS_SUM” din setările profilului este efectuată în afara handlerului și nu este necesară aici. Formatul datelor acceptate ca intrare este următorul:

Primul parametru - informații de comandă - este o matrice cu următoarele chei:

Al doilea parametru este valoarea matricei specificate de elementul cu tasta „CONFIG” din handler, fiecărui element căruia i se adaugă valoarea parametrului cu cheia „VALUE” .

În exemplul pe care îl luăm în considerare, singura condiție de compatibilitate este prezența în setările handlerului a unei valori de cost de livrare pentru cel puțin unul dintre grupurile de locații care include locația transmisă în comandă.

// introduce o metodă de utilitate care definește un grup de locații și returnează costul pentru acel grup. funcția __GetLocationPrice($LOCATION_ID, $arConfig) ( // obține o listă de grupuri pentru locația transmisă $dbLocationGroups = CSaleLocationGroup::GetLocationList(array("LOCATION_ID" => $LOCATION_ID)); while ($arLocationGroup = $dbLocationGroups->Fetch()) { if (array_key_exists("price_".$arLocationGroup["LOCATION_GROUP_ID"], $arConfig) && strlen($arConfig["price_".$arLocationGroup["LOCATION_GROUP_ID"]]["VALUE"] > 0)) { // если есть непустая запись в массиве настроек для данной группы, вернем ее значение return $arConfig["price_".$arLocationGroup["LOCATION_GROUP_ID"]]["VALUE"]; } } // если не найдено подходящих записей, вернем false return false; } // метод проверки совместимости в данном случае практически аналогичен рассчету стоимости function Compability($arOrder, $arConfig) { // проверим наличие стоимости доставки $price = CDeliveryMySimple::__GetLocationPrice($arOrder["LOCATION_TO"], $arConfig); if ($price === false) return array(); // если стоимость не найдено, вернем пустой массив - не подходит ни один профиль else return array("simple"); // в противном случае вернем массив, содержащий идентфиикатор единственного профиля доставки } !}

Handler

Principala metodă de calcul a costurilor de livrare primește următorii parametri de intrare:

  • identificatorul profilului de livrare;
  • matrice de setări de gestionare a livrării;
  • matrice descriptivă de ordine;
  • pasul curent de calcul;
  • date temporare transferate de la pasul de calcul anterior.

Ieșirea operatorului ar trebui să fie costul de livrare în moneda specificată în parametri sau o matrice cu următoarea structură:

Cheie Descriere
REZULTAT ID de răspuns. Valori posibile:
  • "Bine" - costul de livrare a fost calculat cu succes;
  • "EROARE" - a apărut o eroare în timpul procesului de calcul;
  • "URMATORUL PAS" - trebuie să treceți la pasul următor pentru a continua calculul.
VALOARE Valoarea costului de livrare în moneda specificată în parametri. (REZULTAT = „OK”)
TRANZIT Durata de livrare în zile (REZULTAT = „OK”). Dacă lipsește, durata nu este afișată.
perioadaDe la Linii de livrare a serviciilor de livrare automate. Din numărul specificat de zile. Necesar pentru transmiterea timpilor de livrare către Yandex.market. Folosit la dezvoltarea propriilor servicii de livrare.
perioadaTo Linii de livrare a serviciilor de livrare automate. Până la numărul specificat de zile. Necesar pentru transmiterea timpilor de livrare către Yandex.market. Folosit la dezvoltarea propriilor servicii de livrare.
TEXT Text de eroare sau text care însoțește tranziția la pasul următor (RESULT = ("EROARE"|"NEXT_STEP")).
TEMP Un șir care conține date intermediare a trecut la pasul următor (RESULT = „NEXT_STEP”).

În exemplul pe care îl descriem, un proces în mai multe etape nu este implicat, prin urmare calculul este simplu.

Funcția Calculate($profil, $arConfig, $arOrder, $STEP, $TEMP = false) ( // metoda de calcul al utilitarului este definită mai sus, trebuie doar să redirecționăm valoarea pe care o returnează la ieșire. return array("RESULT" => "OK", "VALUE" => CDeliveryMySimple::__GetLocationPrice($arOrder["LOCATION_TO"], $arConfig) )

Integrare Handler

Calea către fișierele de gestionare conectate automat este setată în setările modulului „Magazin online”. Calea implicită este /bitrix/php_interface/include/sale_delivery/ Astfel de fișiere trebuie să aibă un prefix livrare_, altfel vor fi ignorate. Dacă sistemul detectează un fișier care are același nume cu cel de sistem, acesta va fi conectat în locul celui de sistem. Activarea livrării automate într-un fișier se face prin setarea metodei descriptive ca handler pentru evenimentul onSaleDeliveryHandlersBuildList.

Exemplu

Rezumând toate cele de mai sus, să creăm un simplu handler de livrare. Clasa de gestionare va fi localizată în fișierul /bitrix/php_interface/include/sale_delivery/delivery_mysimple.php

"simple", "NAME" => "Livrare prin curier", "DESCRIPTION" => "", "DESCRIPTION_INNER" => "Un simplu handler pentru livrarea prin curier. Pentru a funcționa, " ." trebuie să fie prezent cel puțin un grup de locații . Când configurați operatorul, trebuie să specificați „ .cost fix de livrare pentru fiecare grup de locații. Pentru a preveni participarea unui „ .grup la procesare, lăsați necompletat câmpul de cost pentru acest grup”. "
" ."" .Editați grupuri de locații." .", "BASE_CURRENCY" => COption::GetOptionString("sale", "default_currency", "RUB"), "HANDLER" => __FILE__, /* Metode de gestionare */ "DBGETSETTINGS" => array("CDeliveryMySimple", "GetSettings"), "DBSETSETTINGS" => array("CDeliveryMySimple", "SetSettings"), "GETCONFIG" => array("CDeliveryMySimple", "GetConfig"), "COMPABILITY" => array("CDeliveryMySimple", "Compability" "), "CALCULATOR" => array("CDeliveryMySimple", "Calculate"), /* Lista profilurilor de livrare */ "PROFILES" => array("simple" => array("TITLE" => "livrare", " DESCRIPTION" => "Timp de livrare pana la 3 zile", "RESTRICTIONS_WEIGHT" => array(0), // fara restrictii "RESTRICTIONS_SUM" => array(0), // fara restrictii),) ) //); funcția de setări ale handlerului GetConfig() ( $arConfig = array("CONFIG_GROUPS" => array("all" => "Costul de livrare",), "CONFIG" => array(),); // setările handlerului în acest caz sunt livrarea valorilor de cost către diferite grupuri de locații // pentru aceasta vom crea o listă de setări bazată pe lista de grupuri $dbLocationGroups = CSaleLocationGroup::GetList(); while ($arLocationGroup = $dbLocationGroups->Fetch()) ( $arConfig["CONFIG"]["price_".$arLocationGroup["ID"]] = array("TYPE" => "STRING", "DEFAULT" = > "", "TITLE" => "Costul de livrare către grupul \"" .$arLocationGroup["NAME"].."\" " ."(".COption::GetOptionString("sale", "default_currency", " RUB ").")", "GROUP" => "toate",); ) return $arConfig; ) // pregătirea setărilor pentru intrarea în funcția de bază de date SetSettings($arSettings) ( // Verificați lista valorilor de cost. Eliminați valorile goale din listă. foreach ($arSettings ca $key => $value) ( ​​​​​if (strlen($value) > 0) $arSettings[$key] = doubleval($value else unset($arSettings[$key]) // returnează valorile ca o matrice serializată //; dintr-o listă mai simplă de setări, pot fi utilizate metode mai simple serialize return serialize($arSettings ) // pregătește setările obținute din funcția de bază de date GetSettings($strSettings) ( // returnează matricea deserializată return unserialize($). strSettings); // introduce o metodă de serviciu care determină grupul de locații și returnează valoarea pentru acest grup. funcția __GetLocationPrice($LOCATION_ID, $arConfig) ( // obține o listă de grupuri pentru locația transmisă $dbLocationGroups = CSaleLocationGroup::GetLocationList(array("LOCATION_ID" => $LOCATION_ID)); while ($arLocationGroup = $dbLocationGro) Fetch() ) (dacă (array_key_exists(„preț_”). $arLocationGroup["LOCATION_GROUP_ID"], $arConfig) && strlen($arConfig["price_".$arLocationGroup["LOCATION_GROUP_ID"]]["VALUE"] > 0)) ( // dacă există o intrare nevide în matricea de setări pentru acest grup, returnează valoarea acestuia return $arConfig["price_".$arLocationGroup["LOCATION_GROUP_ID"]]["VALUE"] ) ) // dacă nu sunt găsite înregistrări care se potrivesc, returnează false return false; ) // metoda de verificare a compatibilității în acest caz este aproape similară cu calcularea funcției de cost Compability($arOrder, $arConfig) ( // verificați prezența costurilor de livrare $price = CDeliveryMySimple::__GetLocationPrice($arOrder["LOCATION_TO) "], $arConfig); dacă ($preț === false) returnează matrice(); // dacă prețul nu este găsit, returnează o matrice goală - niciun profil nu se potrivește altfel returnează matrice ("simple"); // în caz contrar , returnează o matrice care conține identificatorul unui singur profil de livrare ) // de fapt, calculând funcția de cost Calculate($profil, $arConfig, $arOrder, $STEP, $TEMP = false) ( // este definită metoda de calcul al utilității. mai sus, trebuie doar să redirecționăm valoarea pe care o returnează la matricea returnată de ieșire(" RESULT" => "OK", "VALUE" => CDeliveryMySimple::__GetLocationPrice($arOrder["LOCATION_TO"], $arConfig)); ) ) // setați metoda CDeliveryMySimple::Init ca un handler de evenimente AddEventHandler("sale" , "onSaleDeliveryHandlersBuildList", array("CDeliveryMySimple", "Init")); ?>

Post factum

Câteva sfaturi finale:

  • Dacă procesorul dvs. utilizează calcule care consumă mult resurse, apeluri la baze de date, solicitări către servere la distanță etc., atunci categoric Este recomandat să folosiți una sau alta opțiune de cache a rezultatelor, implementată în așa fel încât rezultatele să fie memorate cel puțin pentru o comandă cu acești parametri. Acest lucru este necesar din cauza faptului că în timpul procesului de plasare și procesare a unei comenzi, poate apărea de mai multe ori o solicitare către procesator pentru a calcula costul comenzii. Handler-urile furnizate folosesc un mecanism de caching gestionat, configurat ținând cont de specificul algoritmului de calcul al costurilor unui anumit serviciu de livrare.
  • Pentru a personaliza gestionarea sistemului, copiați fișierul acestuia (împreună cu fișierele însoțitoare, aflate de obicei într-un director cu același nume) în directorul /bitrix/php_interface/include/sale_deivery/, păstrând numele. În acest caz se va conecta în loc de sistemică.