Nesta série, estamos discutindo a implementação de um módulo de método de envio personalizado no OpenCart. Na primeira parte, habilitamos e configuramos nosso método de envio personalizado usando o formulário de configuração no back-end. Hoje, implementaremos os arquivos exigidos pelo OpenCart para que ele possa detectar o método de envio personalizado e listá-lo junto com os outros métodos de envio ativados durante a finalização da compra.
Espero que você tenha criado todos os arquivos da primeira parte desta série. Se você ainda não passou pela primeira parte, eu o encorajo a passar por isso antes de prosseguir. Além disso, presumo que você esteja usando a versão mais recente do OpenCart.
Uma olhada na configuração do arquivo no front-end
Vamos começar com uma lista dos arquivos necessários no front-end.
catalog/language/english/shipping/custom.php
:é um arquivo de idioma no qual definiremos os rótulos.catalog/model/shipping/custom.php
:é um arquivo de modelo, o que é importante porque a maior parte da lógica de cálculo de frete vai aqui.
Então é isso no que diz respeito à configuração do front-end.
Configuração de arquivo
Vamos começar com a configuração do arquivo de idioma.
Criar um arquivo de idioma
Crie um arquivo
catalog/language/english/shipping/custom.php
e cole o seguinte conteúdo nesse arquivo. <?php // Text $_['text_title'] = 'Custom Rate'; $_['text_description'] = 'Custom Shipping Rate';
Eu não acho que requer qualquer explicação, então vamos seguir em frente!
Criar um arquivo de modelo
Crie um arquivo
catalog/model/shipping/custom.php
e cole o seguinte conteúdo nesse arquivo. <?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; } }
De acordo com as convenções do OpenCart, o nome da classe deve ser
ModelShippingCustom
e há um getQuote
método que é obrigatório para que nosso método de envio seja retirado pelo OpenCart. Você deve notar que o
$address
argumento é passado no getQuote
método, que é o endereço de entrega do cliente durante o checkout, e nos permite decidir se o método de envio atual é aplicável para a zona geográfica pertencente a esse endereço. É decidido pelo código a seguir. $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; }
Em seguida, se o método de envio for aplicável, preparamos as variáveis de matriz necessárias de acordo com as convenções.
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 ); }
Como você pode ver, estamos usando o comando
$this->config->get
para carregar os valores das variáveis de configuração como "custom_cost", "custom_tax_class_id" e "custom_sort_order". Lembre-se da primeira parte, na qual configuramos esses valores usando o formulário de configuração personalizado! Além disso, um snippet importante a ser observado é o valor do
text
digite o arquivo $quote_data
variedade. Ele calcula e formata o valor total que será cobrado pelo nosso método de envio personalizado. Especificamente, verifica se algum imposto adicional deve ser adicionado ao "custo" do método de envio. Lembre-se da Classe Fiscal configuração que fornecemos em nosso formulário de configuração, no qual selecionamos Mercadorias tributáveis . Assim, adicionará um imposto extra ao valor total do método de envio! Tentamos manter nossa parte do modelo simples, mas você pode fazer todos os cálculos neste arquivo de acordo com suas APIs de método de envio, se houver. Então é isso no que diz respeito à parte do modelo.
Demonstração no front-end
No front-end, adicione alguns produtos ao carrinho e inicie o processo de checkout. Na Etapa 4:Método de entrega , você poderá ver nosso método de envio personalizado listado conforme mostrado na captura de tela a seguir.
Está listado com o título "Taxa de envio personalizada - US$ 14,00" . Você pode se surpreender que, embora tenhamos configurado o Custo parâmetro para 10 , está mostrando 14 na lista. Como mencionei anteriormente, configuramos Mercadorias tributáveis na Classe Fiscal campo no formulário de configuração no back-end.
Navegue até Localização> Impostos> Classes de impostos e edite Mercadorias tributáveis . Você verá que 20% de IVA e um apartamento 2$ Eco imposto estão configurados para esta classe de imposto. Assim, adiciona mais $ 4 ao custo do método de envio! Claro, se você definir Classe Fiscal para Nenhum, imposto não será aplicado em tudo!
Então, é isso por hoje. Agora criamos com sucesso um módulo de método de envio personalizado completo no OpenCart!