Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Utwórz niestandardową metodę wysyłki w OpenCart:część druga

W tej serii omawiamy implementację niestandardowego modułu metody wysyłki w OpenCart. W pierwszej części włączyliśmy i skonfigurowaliśmy naszą niestandardową metodę wysyłki za pomocą formularza konfiguracyjnego na zapleczu. Dzisiaj zaimplementujemy pliki wymagane przez OpenCart, aby mógł wykryć niestandardową metodę wysyłki i wyświetlić ją wraz z innymi włączonymi metodami wysyłki podczas realizacji zakupu.

Mam nadzieję, że stworzyłeś wszystkie pliki z pierwszej części tej serii. Jeśli nie przerobiłeś jeszcze pierwszej części, zachęcam Cię do przejrzenia tego, zanim przejdziesz dalej. Zakładam również, że używasz najnowszej wersji OpenCart.

Rzut oka na konfigurację plików w interfejsie

Zacznijmy od listy plików wymaganych w interfejsie użytkownika.

  • catalog/language/english/shipping/custom.php :To plik językowy, w którym zdefiniujemy etykiety.
  • catalog/model/shipping/custom.php :Jest to plik modelu, co jest ważne, ponieważ większość logiki obliczania kosztów wysyłki znajduje się tutaj.

To tyle, jeśli chodzi o konfigurację front-endu.

Konfiguracja pliku

Zacznijmy od konfiguracji pliku językowego.

Utwórz plik językowy

Utwórz plik catalog/language/english/shipping/custom.php i wklej następującą zawartość do tego pliku.

<?php
// Text
$_['text_title']       = 'Custom Rate';
$_['text_description'] = 'Custom Shipping Rate';

Myślę, że nie wymaga to żadnego wyjaśnienia, więc przejdźmy dalej!

Utwórz plik modelu

Utwórz plik catalog/model/shipping/custom.php i wklej następującą zawartość do tego pliku.

<?php
class ModelShippingCustom extends Model {
  function getQuote($address) {
    $this->load->language('shipping/custom');

    $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "zone_to_geo_zone WHERE geo_zone_id = '" . (int)$this->config->get('custom_geo_zone_id') . "' AND country_id = '" . (int)$address['country_id'] . "' AND (zone_id = '" . (int)$address['zone_id'] . "' OR zone_id = '0')");

    if (!$this->config->get('custom_geo_zone_id')) {
      $status = true;
    } elseif ($query->num_rows) {
      $status = true;
    } else {
      $status = false;
    }

    $method_data = array();

    if ($status) {
      $quote_data = array();

      $quote_data['custom'] = array(
        'code'     => 'custom.custom',
        'title'    => $this->language->get('text_description'),
        'cost'     => $this->config->get('custom_cost'),
        'tax_class_id' => $this->config->get('custom_tax_class_id'),
        'text'     => $this->currency->format($this->tax->calculate($this->config->get('custom_cost'), $this->config->get('custom_tax_class_id'), $this->config->get('config_tax')))
      );

      $method_data = array(
        'code'     => 'custom',
        'title'    => $this->language->get('text_title'),
        'quote'    => $quote_data,
        'sort_order' => $this->config->get('custom_sort_order'),
        'error'    => false
      );
    }

    return $method_data;
  }
}

Zgodnie z konwencją OpenCart nazwa klasy powinna brzmieć ModelShippingCustom i jest getQuote metoda, która jest niezbędna, aby nasza metoda wysyłki została odebrana przez OpenCart.

Powinieneś zauważyć, że $address argument jest przekazywany w getQuote sposób wysyłki, którym jest adres wysyłki klienta podczas realizacji transakcji i pozwala nam zdecydować, czy aktualna metoda wysyłki ma zastosowanie do strefy geograficznej należącej do tego adresu. Decyduje o tym następujący kod.

$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "zone_to_geo_zone WHERE geo_zone_id = '" . (int)$this->config->get('custom_geo_zone_id') . "' AND country_id = '" . (int)$address['country_id'] . "' AND (zone_id = '" . (int)$address['zone_id'] . "' OR zone_id = '0')");

if (!$this->config->get('custom_geo_zone_id')) {
  $status = true;
} elseif ($query->num_rows) {
  $status = true;
} else {
  $status = false;
}

Następnie, jeśli metoda wysyłki ma zastosowanie, przygotowujemy wymagane zmienne tablicowe zgodnie z konwencjami.

if ($status) {
  $quote_data = array();

  $quote_data['custom'] = array(
      'code'         => 'custom.custom',
      'title'        => $this->language->get('text_description'),
      'cost'         => $this->config->get('custom_cost'),
      'tax_class_id' => $this->config->get('custom_tax_class_id'),
      'text'         => $this->currency->format($this->tax->calculate($this->config->get('custom_cost'), $this->config->get('custom_tax_class_id'), $this->config->get('config_tax')))
  );

  $method_data = array(
      'code'       => 'custom',
      'title'      => $this->language->get('text_title'),
      'quote'      => $quote_data,
      'sort_order' => $this->config->get('custom_sort_order'),
      'error'      => false
  );
}

Jak widać, używamy $this->config->get metoda ładowania wartości zmiennych konfiguracyjnych, takich jak „custom_cost”, „custom_tax_class_id” i „custom_sort_order”. Przypomnij sobie pierwszą część, w której skonfigurowaliśmy te wartości za pomocą niestandardowego formularza konfiguracji!

Ważnym fragmentem do zauważenia jest również wartość text klucz w $quote_data szyk. Oblicza i formatuje całkowitą kwotę, która zostanie naliczona za naszą niestandardową metodę wysyłki. W szczególności sprawdza, czy do „kosztu” metody wysyłki należy doliczyć dodatkowy podatek. Przypomnij klasę podatkową ustawienie, które podaliśmy w naszym formularzu konfiguracyjnym, w którym wybraliśmy Towary podlegające opodatkowaniu . W związku z tym do całkowitej kwoty metody wysyłki dodany zostanie dodatkowy podatek!

Staraliśmy się, aby nasz model był prosty, ale możesz wykonać wszystkie obliczenia w tym pliku zgodnie z interfejsami API metody wysyłki, jeśli takie istnieją. To tyle, jeśli chodzi o część modelową.

Demo w interfejsie

W interfejsie dodaj kilka produktów do koszyka i rozpocznij proces kasy. W Kroku 4:Metoda dostawy , powinieneś być w stanie zobaczyć naszą niestandardową metodę wysyłki wymienioną na poniższym zrzucie ekranu.

Jest wymieniony z tytułem „Niestandardowa stawka wysyłki – 14,00 USD” . Możesz być zaskoczony, że chociaż skonfigurowaliśmy Koszt parametr na 10 , pokazuje 14 na liście. Jak wspomniałem wcześniej, skonfigurowaliśmy towary podlegające opodatkowaniu w klasie podatkowej pole w formularzu konfiguracyjnym na zapleczu.

Przejdź do Lokalizacja> Podatki> Klasy podatkowe i edytuj Towary podlegające opodatkowaniu . Zobaczysz, że 20% VAT i płaskie 2$ Podatek ekologiczny są skonfigurowane dla tej klasy podatkowej. W ten sposób dodaje kolejne 4 USD do kosztu metody wysyłki! Oczywiście, jeśli ustawisz klasę podatkową do żadnego, podatek w ogóle nie zostanie naliczony!

Więc to tyle na dzisiaj. Teraz pomyślnie stworzyliśmy w pełni rozwinięty moduł niestandardowej metody wysyłki w OpenCart!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL Wybierz pierwsze N ​​wierszy

  2. Znajdź i zamień tekst w całej tabeli za pomocą zapytania MySQL

  3. Korzystanie z automatyzacji w celu przyspieszenia testów wersji w klastrze Galera z ClusterControl

  4. Wstaw MySQL do z jednej bazy danych w innej

  5. Używanie zmiennej env w application.properties Spring Boot