2012-04-03 4 views
10

Klient ma niestandardowy moduł wysyłki w Zen Cart 1.5. Wczoraj zaadaptowałem moduł, aby był świadomy strefy (chcieli, aby oryginalny moduł został zastosowany do USA, a kopia została zmodyfikowana dla zamówień poza USA).Dlaczego opcje wysyłki klienta nie odpowiadają ustawieniom bazy danych lub modułu w Zen Cart 1.5?

Teraz mam tylko jedną opcję wysyłki w tym module, a nie skonfigurowane cztery. Wydaje się, że strefa świadomości działa (moje zlecenia testowe pokazują opłatę USA, a nie opłatę międzynarodową za opcję, która się pokazuje), ale pojawia się tylko pierwsza opcja.

Oto kod modułu:

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

stronie Administrator pokazuje osiem opcji wysyłki, z czterech wymienionych w kodzie wybrany.

Oto odpowiednie wpisy bazy danych, w tym modułu międzynarodowego:

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) 

Aktualizowanie ustawień _SHIPPING_TYPES bezpośrednio w bazie danych (np ustawienie jej na 1 zamiast 0) nie wydaje się, aby cokolwiek zmienić. Nie mogę znaleźć kodu, który wydaje się wywoływać to ustawienie.

Gdzie jest Zen Cart określający opcje wysyłki? Jak mogę sprawić, by pokazywał te, które chcę?

+0

OK, to trochę śmieszne. Jeśli to pytanie nie jest do udzielenia odpowiedzi, czy ktoś może przynajmniej skomentować i poinformować mnie, jakich informacji brakuje, aby można było na nie odpowiedzieć? Czy był tak duży, że nagrody nie zostały odebrane? – pjmorse

+0

DWA nagrody nieodebrane? – pjmorse

+0

Spróbuję spojrzeć na ten problem w ten weekend –

Odpowiedz

0

Podczas wysyłania modułów nie pojawiają się zwykle z powodu pomyłki w nazwie pliku i strukturze pliku opcji wysyłki. Wiesz, jak zrobić 50 różnych plików, aby dodać 1 stronę w koszyku zen?

Należy uważnie przestrzegać instrukcji tutaj i upewnić się, że konwencje nazewnictwa oraz rozmieszczenie plików są poprawne.

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

+0

Dzięki za odpowiedź! Nie pracuję już nad tym projektem, więc nie mogę sprawdzić, czy to działa, ale mam nadzieję, że jeśli ktoś znajdzie pytanie, do którego będzie się odwoływał. – pjmorse

+0

Zastanawiam się, jak dostałem się do postu z 2012 roku. = \ – Nazca

+0

Wyszukiwanie zwykle robi to za mnie. – pjmorse

Powiązane problemy