2012-04-03 3 views
10

Ein Client verfügt in Zen Cart 1.5 über ein benutzerdefiniertes Versandmodul. Gestern passte ich das Modul an, um zonenbewusst zu sein (sie wollten, dass das ursprüngliche Modul für die USA gilt, und eine Kopie, die für Nicht-USA-Aufträge angepasst werden soll).Warum stimmen die Versandoptionen des Kunden nicht mit den Datenbank- oder Moduleinstellungen in Zen Cart 1.5 überein?

Jetzt habe ich nur eine Versandoption in diesem Modul, nicht die konfigurierten vier. Das Zonenbewusstsein scheint zu funktionieren (meine Testaufträge zeigen die USA-Gebühr, nicht die internationale Gebühr, für die Option, die zeigt), aber nur die erste Option erscheint.

Hier ist der Code des Moduls:

/*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' 
     ); 
    } 
} 
?> 

Die Admin-Seite zeigt acht Versandoptionen, mit den aufgeführten vier im Code ausgewählt.

Hier die entsprechenden Datenbankeinträge, einschließlich der internationalen Modul:

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) 

Aktualisierung der _SHIPPING_TYPES Einstellungen direkt in der Datenbank (beispielsweise auf 1 statt 0 Einstellung) scheint nicht, etwas zu ändern. Ich kann keinen Code finden, der diese Einstellung zu nennen scheint.

Wo bestimmt Zen Cart die Versandoptionen? Wie kann ich dafür sorgen, dass es die zeigt, die ich möchte?

+0

OK, das ist ein wenig lächerlich. Wenn diese Frage unbeantwortbar ist, könnte jemand wenigstens einen Kommentar abgeben und mir mitteilen, welche Informationen fehlen, die ihn zur Rechenschaft ziehen würden? Ist SO so groß geworden, dass Kopfgelder nicht beansprucht werden? – pjmorse

+0

ZWEI Kopfgelder nicht beansprucht? – pjmorse

+0

Ich werde versuchen, dieses Thema an diesem Wochenende zu sehen –

Antwort

0

Wenn Versandmodule nicht angezeigt werden, liegt dies normalerweise an einem Fehler in der Dateibenennung und Dateistruktur der Versandoption. Sie wissen, wie Sie 50 verschiedene Dateien erstellen müssen, nur um 1 Seite in zen cart hinzuzufügen?

Folgen Sie sorgfältig den Anweisungen hier und stellen Sie sicher, dass Ihre Namenskonventionen sowie die Dateiablage korrekt sind.

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

+0

Danke für die Antwort! Ich arbeite nicht mehr an diesem Projekt, also kann ich nicht überprüfen, ob es funktioniert, aber hoffentlich, wenn jemand anderes die Frage findet, auf die sie sich beziehen sollen. – pjmorse

+0

Ich frage mich, wie ich zu einem 2012 Post kam. = \ – Nazca

+0

Die Suche macht es normalerweise für mich. – pjmorse

Verwandte Themen