Как работи пазарската количка в OpenCart 2.3

Как работи пазарската количка Opencart 2.3 и защо не е толкова лесно да я смените (но ще успеем). Цел: да направите плащане на една страница без регистрации и SMS.

С оглед на последната актуализация на opencart и предстоящите, които пренаписват контролери - примерите на кода са безполезни, основното е общата линия на мислене.

Изтеглянето започва от контролера за плащане/плащане. Той подготвя страницата и показва „празното“ за кошницата. Тогава всичко работи на js, манипулаторите, които водят потребителя стъпка по стъпка до печелившата поръчка.
0 Стъпка. Потребителите не го виждат - това се случва в tpl частта на контролера за плащане/плащане. Определя се дали клиентът е регистриран, ако не е регистриран, се извиква контролер за плащане/влизане (За да видите стъпка 1.) - или контролер за регистрирани потребители (не се разглежда тук).
Етап 1. На този етап клиентът прави първия избор - регистрирайте се, влезте или направете поръчка без регистрация.

За регистрация без регистрация (не забравяйте да я разрешите в администраторския панел), разгледайте формата:

Първо, има проверка дали потребителят е регистриран. Много подобно на наследството на предишната версия, тъй като го проверихме отново в стъпка 0. В браузъра разглеждаме идентификатора на бутона, който ще ви помогне да проектирате без регистрация: бутон-акаунт. И ние намираме манипулатор за такъв бутон. Манипулаторът получава стойността на радио бутона, това е важно - тъй като това е името на следващия контролер.

Стъпка 2. Контролер заявка/гост.

Този контролер е важен, тъй като задава сесията (хранилище за данни за всички, които са влезли в сайта) стойностите по подразбиране на променливите, важни за opencart. Все пак ще му се обадим. Освен това, задавайки стандартните стойности и получавайки променливите, необходими за шаблона, той го извиква.

Отворете tpl файла, написан в контролера, виждаме много html с формуляри, но ни интересува js. В js те се наблюдават по ред: сортиране на полета, заявки ajax при промяна на някои полета, можете да прикачите файл . И това е, няма манипулатор за бутона за изпращане. Това означава, че по същество не се нуждаем от файла, отиваме да го потърсим на контролера от стъпка 0.

На този етап манипулаторът на бутона за изпращане на информация за плащане събира данни от целия формуляр, пакетира ги в json и ги изпраща на контролера checkout/guest/и функциите за запис.

За да не се ангажирате с дълъг анализ на формуляра, можете да „прихванете“ данните.

Нека да се справим с функцията за запазване на контролера за плащане/гост:

  • Проверка дали потребителят е регистриран
  • Проверява дали има нещо в кошницата
  • Проверете отново дали гостите могат да поръчат
  • Ако досега всичко е наред, полетата се проверяват
  • Най-интересният момент е попълването на полетата. Тук ще спрем работата на стандартния контролер и ще напишем отговора - ще запишем в json всички данни, които сме получили при попълване на формуляра.

След като попълнихме всички полета правилно, получаваме масив, който ще ни бъде полезен за попълване с фалшиви данни.

Връщаме всичко на мястото си, Да видим какво ще стане по-нататък. След това отново виждаме разклонение в логиката:

Този контролер също не променя нищо, той получава само данните от формуляра, НО ако бъде извикан успешно, втората заявка ajax незабавно се изпраща на контролера checkout/guest_shipping, който попълва тиха стъпка 3. Това също е важен контролер, който записва стойности по подразбиране в сесията.

В случай на успешно завършване на този етап, заявка отива към checkout/Payment_method. Отново важен контролер, който попълва някои стойности по подразбиране.

Натискането на бутона "продължи" - прави всичко според нарязания шаблон. Извикваме функцията за запис, потвърждаваме, пишем какво не е наред, изведнъж какво - и чукваме на следващия контролер.

Стъпка 6. плащане/потвърждаване.

Този контролер накрая проверява необходимите стъпки и прави поръчка. Но отново, до локалното хранилище, извикване на следващия контролер - плащания.

Тъй като трябва да използвате всеки модул за плащане - включително различни системи за плащане, като например виза, ние няма да засегнем този етап.

Нека обобщим какво трябва да направим:

  1. Променете извикването на шаблон в контролера за плащане/плащане, например на checkout2.tpl.
  2. В него напишете куп извиквания на ajax, за да получите данни (копирайте от съществуващите скриптове, като изрежете функциите за запис)
  3. Като щракнете върху бутона за проверка на данните, извикайте на свой ред всички функции save ()
  4. Ако всичко е наред - получете отговор от последния етап с табелка за поръчка и бутон "продължи", генериран от някакъв модул за плащане.

  1. плащане/гост
  2. плащане/гост/запазване
  3. checkout/shipping_method
  4. checkout/guest_shipping/save
  5. checkout/shipping_method/save
  6. метод за плащане/плащане
  7. checkout/method_method/save

Също така ще трябва да копирате разписката чрез метода за доставка и плащане (те са в началото на контролера) в началото на функцията в checkout/shipping_method/save и checkout/Payment_method/save.

Тази поръчка ще ви позволи да не нарушавате логиката на поръчката и всичко ще работи както трябва.

opencart

Файлове от osStore 2.3, използвани при писането на тази статия (внимание, заменете системните!):
1pagecart2.3.zip

UPD: opencart, както обикновено, промени нещо тихо и куп модули се счупиха. Този път проверка на пощата. Ако има грешка в пазарската кошница по тази тема - пот кръпка: гост2. (досега само при най-новата компилация на opencard 2.3.0.2 чиста, руските компилации не са се променили)