sql >> Base de Datos >  >> RDS >> Mysql

Crear un método de envío personalizado en OpenCart:segunda parte

En esta serie, estamos discutiendo la implementación de un módulo de método de envío personalizado en OpenCart. En la primera parte, habilitamos y configuramos nuestro método de envío personalizado utilizando el formulario de configuración en el back-end. Hoy, implementaremos los archivos que requiere OpenCart para que pueda detectar el método de envío personalizado y enumerarlo junto con los otros métodos de envío habilitados durante el pago.

Espero que haya creado todos los archivos de la primera parte de esta serie. Si aún no has pasado por la primera parte, te animo a que lo hagas antes de continuar. Además, asumo que estás usando la última versión de OpenCart.

Un vistazo a la configuración de archivos en el front-end

Comencemos con una lista de los archivos requeridos en el front-end.

  • catalog/language/english/shipping/custom.php :Es un archivo de idioma en el que definiremos las etiquetas.
  • catalog/model/shipping/custom.php :Es un archivo modelo, lo cual es importante ya que la mayor parte de la lógica de cálculo de envío va aquí.

Así que eso es todo en lo que respecta a la configuración de front-end.

Configuración de archivo

Comencemos con la configuración del archivo de idioma.

Crear un archivo de idioma

Cree un archivo catalog/language/english/shipping/custom.php y pegue los siguientes contenidos en ese archivo.

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

No creo que requiera ninguna explicación, ¡así que sigamos!

Crear un archivo de modelo

Cree un archivo catalog/model/shipping/custom.php y pegue los siguientes contenidos en ese archivo.

<?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;
  }
}

Según las convenciones de OpenCart, el nombre de la clase debe ser ModelShippingCustom y hay un getQuote que es imprescindible para que OpenCart recoja nuestro método de envío.

Debes notar que la $address el argumento se pasa en el getQuote método, que es la dirección de envío del cliente durante el pago, y nos permite decidir si el método de envío actual es aplicable para la zona geográfica que pertenece a esa dirección. Se decide por el siguiente código.

$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;
}

Luego, si el método de envío es aplicable, preparamos las variables de matriz requeridas según las convenciones.

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 puede ver, estamos usando $this->config->get para cargar los valores de las variables de configuración como "custom_cost", "custom_tax_class_id" y "custom_sort_order". ¡Recuerde la primera parte, en la que configuramos estos valores utilizando el formulario de configuración personalizada!

Además, un fragmento importante a tener en cuenta es el valor del text ingrese el $quote_data formación. Calcula y formatea el monto total que se cobrará por nuestro método de envío personalizado. En concreto, comprueba si se debe añadir algún impuesto adicional al "coste" del método de envío. Recuperar la clase fiscal configuración que proporcionamos en nuestro formulario de configuración, en el que seleccionamos Bienes imponibles . ¡Por lo tanto, agregará un impuesto adicional al monto total del método de envío!

Hemos tratado de mantener nuestra parte del modelo simple, pero puede hacer todos los cálculos en este archivo según las API de su método de envío, si corresponde. Así que eso es todo en lo que respecta a la parte del modelo.

Demostración en el Front-End

En el front-end, agregue algunos productos en el carrito e inicie el proceso de pago. En Paso 4:Método de entrega , debería poder ver nuestro método de envío personalizado como se muestra en la siguiente captura de pantalla.

Aparece con el título "Tarifa de envío personalizado - $14,00" . Puede que te sorprenda que aunque configuramos el Coste parámetro a 10 , muestra 14 en la lista. Como mencioné anteriormente, configuramos Bienes imponibles en la clase fiscal campo en el formulario de configuración en el back-end.

Vaya a Localización> Impuestos> Clases de impuestos y edite Bienes imponibles . Verás que 20% de IVA y un piso 2$ Impuesto ecológico están configurados para esta clase de impuestos. ¡Por lo tanto, agrega $ 4 adicionales al costo del método de envío! Por supuesto, si configura Clase de impuestos a Ninguno, ¡El impuesto no se aplicará en absoluto!

Entonces, eso es todo por hoy. ¡Ahora hemos creado con éxito un módulo de método de envío personalizado completo en OpenCart!