2012-04-03 9 views
10

Un client ha un modulo di spedizione personalizzato in Zen Cart 1.5. Ieri ho adattato il modulo alla conoscenza della zona (volevano che il modulo originale si applicasse agli Stati Uniti e una copia da ritoccare per gli ordini non statunitensi).Perché le opzioni di spedizione del cliente non corrispondono al database o alle impostazioni del modulo in Zen Cart 1.5?

Ora ho solo un'opzione di spedizione in quel modulo, non i quattro configurati. La consapevolezza della zona sembra funzionare (i miei ordini di test mostrano la commissione USA, non quella internazionale, per l'opzione che mostra) ma viene visualizzata solo la prima opzione.

Ecco il codice del modulo:

/*include functions/functions_categories.pnp for zen_product_in_category method 
*/ 
class tfn 
{ 
    var $code, $title, $description, $icon, $enabled, $types; 

    // class constructor 
    function tfn() { 
     global $order, $db, $types, $fees; 

     $this->code = 'tfn'; 
     $this->title = MODULE_SHIPPING_TFN_TEXT_TITLE; 
     $this->description = MODULE_SHIPPING_TFN_TEXT_DESCRIPTION; 
     $this->sort_order = MODULE_SHIPPING_TFN_SORT_ORDER; 
     $this->icon = ''; 
     $this->tax_class = MODULE_SHIPPING_TFN_TAX_CLASS; 
     $this->tax_basis = MODULE_SHIPPING_TFN_TAX_BASIS; 

     // disable only when entire cart is free shipping 
     if (zen_get_shipping_enabled($this->code)) { 
      $this->enabled = ((MODULE_SHIPPING_TFN_STATUS == 'True') ? true : false); 
     } 

     if (($this->enabled == true) && ((int)MODULE_SHIPPING_TFN_ZONE > 0)) { 
      $check_flag = false; 
      $check = $db->Execute("select zone_id from " . TABLE_ZONES_TO_GEO_ZONES . " where geo_zone_id = '" . MODULE_SHIPPING_TFN_ZONE . "' and zone_country_id = '" . $order->delivery['country']['id'] . "' order by zone_id"); 
      while (!$check->EOF) { 
       if ($check->fields['zone_id'] < 1) { 
        $check_flag = true; 
        break; 
       } elseif ($check->fields['zone_id'] == $order->delivery['zone_id']) { 
        $check_flag = true; 
        break; 
       } 
       $check->MoveNext(); 
      } 

      if ($check_flag == false) { 
       $this->enabled = false; 
      } 
     } 

     $types = array(
      'STD' => 'Standard', 
      'FXH' => 'USPS Priority Mail', 
      'FXES' => 'USPS Express Mail', 
      'FXSO' => 'FedEx Overnight' 
     ); 
     // 'FAM' => 'Foreign Airmail', 
     // 'FXG' => 'USPS Priority Mail with Delivery Confirmation', 
     // 'FX2D' => 'FedEx 2nd Day', 

     $fees = array(
      'STD' => '0.00', 
      'FXH' => '4.50', 
      'FXES' => '17.50', 
      'FXSO' => '28.00' 
     ); 
     // 'FAM' => '15.00', 
     // 'FXG' => '5.50', 
     // 'FX2D' => '10.00', 
    } 

    // class methods 
    function quote($method = '') { 
     global $order, $types, $fees; 

     $methods = array(); 

     $this->quotes = array(
      'id'  => $this->code, 
      'module' => $this->title 
     ); 

     if (($method == '') || (!isset($method))) { 
      foreach ($fees as $type => $cost) { 
       $methods[] = array(
        'id' => $type, 
        'title' => $types[$type], 
        'cost' => $this->_calculateBaseCost() + $cost 
       ); 
      } 
     } else { 
      $cost = $fees[$method]; 
      $methods[] = array(
       'id' => $method, 
       'title' => $types[$method], 
       'cost' => $this->_calculateBaseCost() + $cost 
      ); 
     } 

     $this->quotes['methods'] = $methods; 
     if ($this->tax_class > 0) { 
      $this->quotes['tax'] = zen_get_tax_rate($this->tax_class, $order->delivery['country']['id'], $order->delivery['zone_id']); 
     } 

     if (zen_not_null($this->icon)) $this->quotes['icon'] = zen_image($this->icon, $this->title); 

     return $this->quotes; 
    } 

    function _calculateBaseCost() { 
     global $db, $shipping_cost; 

     $total_count = $_SESSION['cart']->count_contents(); 
     $total_count = $total_count - $_SESSION['cart']->free_shipping_items(); 
     $foreign_charge = $this->_additionalForeignCharge(); 
     $shipping_cost = ($total_count * (MODULE_SHIPPING_TFN_BASE_COST + $foreign_charge)); 

     return $shipping_cost; 
    } 

    function _additionalForeignCharge() { 
     global $db, $order; 

     $foreign_charge = 0; 

     $dest_country = $order->delivery['country']['iso_code_2']; 

     if ($dest_country != 'US') { 
      $foreign_charge = MODULE_SHIPPING_TFN_FOREIGN_COST; 
     } 

     return $foreign_charge; 
    } 

    function check() { 
     global $db; 
     if (!isset($this->_check)) { 
      $check_query = $db->Execute("select configuration_value from " . TABLE_CONFIGURATION . " where configuration_key = 'MODULE_SHIPPING_TFN_STATUS'"); 
      $this->_check = $check_query->RecordCount(); 
     } 

     return $this->_check; 
    } 

    function install() { 
     global $db; 
     $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Enable Item Shipping', 'MODULE_SHIPPING_TFN_STATUS', 'True', 'Do you want to offer per item rate shipping?', '6', '0', 'zen_cfg_select_option(array(\'True\', \'False\'), ', now())"); 
     $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Shipping Cost', 'MODULE_SHIPPING_TFN_BASE_COST', '2.50', 'The shipping cost will be multiplied by the number of items in an order that uses this shipping method.', '6', '0', now())"); 
     $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Additional Foreign Shipping Cost', 'MODULE_SHIPPING_TFN_FOREIGN_COST', '4.00', 'The additional foreign shipping cost will be multiplied by the number of items and added to the base cost.', '6', '0', now())"); 
     $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, use_function, set_function, date_added) values ('Tax Class', 'MODULE_SHIPPING_TFN_TAX_CLASS', '0', 'Use the following tax class on the shipping fee.', '6', '0', 'zen_get_tax_class_title', 'zen_cfg_pull_down_tax_classes(', now())"); 
     $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Tax Basis', 'MODULE_SHIPPING_TFN_TAX_BASIS', 'Shipping', 'On what basis is Shipping Tax calculated. Options are<br />Shipping - Based on customers Shipping Address<br />Billing Based on customers Billing address<br />Store - Based on Store address if Billing/Shipping Zone equals Store zone', '6', '0', 'zen_cfg_select_option(array(\'Shipping\', \'Billing\', \'Store\'), ', now())"); 
     $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Sort Order', 'MODULE_SHIPPING_TFN_SORT_ORDER', '0', 'Sort order of display.', '6', '0', now())"); 
     $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Sort Order', 'MODULE_SHIPPING_TFN_SHIPPING_TYPES', '0', 'Code and Name for each kind of shipping offered.', '6', '0', now())"); 
     $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Shipping Methods: <br />Standard, Foreign Airmail, FedEx Home Delivery, FedEx Ground, FedEx Express Saver, FedEx 2nd Day, FedEx Standard Overnight', 'MODULE_SHIPPING_TFN_TYPES', 'STD, FAM, FXHD, FXG, FXES, FX2D, FXSO', 'Select the TFN services to be offered.', '6', '13', 'zen_cfg_select_multioption(array(\'STD\',\'FAM\',\'FXHD\', \'FXG\', \'FXES\', \'FX2D\', \'FXSO\'), ', now())"); 
     $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, use_function, set_function, date_added) values ('Shipping Zone', 'MODULE_SHIPPING_TFN_ZONE', '0', 'If a zone is selected, only enable this shipping method for that zone.', '6', '0', 'zen_get_zone_class_title', 'zen_cfg_pull_down_zone_classes(', now())"); 
    } 

    function remove() { 
     global $db; 
     $db->Execute("delete from " . TABLE_CONFIGURATION . " where configuration_key in ('" . implode("', '", $this->keys()) . "')"); 
    } 

    function keys() { 
     return array(
      'MODULE_SHIPPING_TFN_STATUS', 'MODULE_SHIPPING_TFN_BASE_COST', 
      'MODULE_SHIPPING_TFN_FOREIGN_COST', 'MODULE_SHIPPING_TFN_TAX_CLASS', 
      'MODULE_SHIPPING_TFN_TAX_BASIS', 'MODULE_SHIPPING_TFN_SORT_ORDER', 
      'MODULE_SHIPPING_TFN_TYPES', 'MODULE_SHIPPING_TFN_ZONE' 
     ); 
    } 
} 
?> 

La pagina di amministrazione mostra otto opzioni di spedizione, con i quattro elencati nel codice selezionato.

Ecco le voci del database pertinenti, tra cui il modulo internazionale:

mysql> select configuration_value, configuration_key from configuration where configuration_key LIKE 'MODULE_SHIPPING_%_TYPES'; 
+-----------------------+----------------------------------------+ 
| configuration_value | configuration_key      | 
+-----------------------+----------------------------------------+ 
| 0      | MODULE_SHIPPING_TFN_INT_SHIPPING_TYPES | 
| STD     | MODULE_SHIPPING_TFN_INT_TYPES   | 
| 0      | MODULE_SHIPPING_TFN_SHIPPING_TYPES  | 
| STD, FXHD, FXES, FXSO | MODULE_SHIPPING_TFN_TYPES    | 
+-----------------------+----------------------------------------+ 
4 rows in set (0.00 sec) 

Aggiornamento delle impostazioni _SHIPPING_TYPES direttamente nel database (ad esempio, impostandolo a 1 invece di 0) non sembra cambiare nulla. Non riesco a trovare alcun codice che sembra chiamare questa impostazione.

Dove è il carrello Zen a determinare le opzioni di spedizione? Come posso farlo mostrare quelli che voglio?

+0

OK, questo è un po 'ridicolo. Se questa domanda è senza risposta, qualcuno potrebbe almeno commentare e farmi sapere quali informazioni mancano che potrebbero renderlo rispondente? È così cresciuta così grande che le taglie non vengono reclamate? – pjmorse

+0

DUE taglie non reclamate? – pjmorse

+0

Proverò a cercare questo problema questo fine settimana –

risposta

0

Quando i moduli di spedizione non vengono visualizzati di solito a causa di un errore nella denominazione dei file e nella struttura dei file dell'opzione di spedizione. Sai come devi fare 50 file diversi solo per aggiungere 1 pagina nel carrello zen?

Seguire attentamente le istruzioni qui e assicurarsi che le convenzioni di denominazione e il posizionamento dei file siano tutti corretti.

http://www.zen-cart.com/wiki/index.php/Creating_Your_Own_Shipping_Module

+0

Grazie per la risposta! Non sto più lavorando a questo progetto, quindi non posso controllare se funzioni, ma spero che qualcun altro trovi la domanda a cui faranno riferimento. – pjmorse

+0

Mi chiedo come sono arrivato a un post del 2012. = \ – Nazca

+0

La ricerca di solito lo fa per me. – pjmorse

Problemi correlati