Oficjalne forum dyskusyjne Zen Cart Professional PL

Pełna wersja: Moduły wysyłki i płatności...
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Mam kilka pytań co do modułów wysyłki i płatności a także sumy zamówienia w Zen Cart PRO 2006 PL, mianowicie:

1. Co zrobić, żeby sklonować moduł (aby równolegle działał w sklepie), chciałbym sklonować moduł wysyłki table.php - jeden z nich naliczałby kwoty dla paczki standard a drugi dla paczki priorytetowej,

2. W OsCommerce był taki moduł o nazwie Ship2Pay który przy wyborze wysyłki przydzielał mu możliwe rodzaje płatności (dzięki czemu po wybraniu na przykład odbioru osobistego nie wyświetlała się potem wpłata na konto czy za pobraniem), czy da się to jakoś zrobić w ZenCarcie?

Ogólnie, chciałbym żeby moje moduły wyglądały następująco:

[Poczta Polska - Paczka Standard - moduł table.php] ->
* Wpłata na konto
* Za pobraniem
[Poczta Polska - Paczka Priorytetowa - sklonowany moduł table.php] ->
* Wpłata na konto
* Za pobraniem - najlepiej naliczający inną kwotę niż przy wybraniu paczki standard...
[Obiór osobisty - moduł storepickup.php] -> pomijanie wyboru płatności...

Z góry dziekuję.
Możesz sklonować moduł i dokonać zmiany nazwy klona np. na table1.php. Odpowiednich zmian musisz także dokonać w nazwach definicji sklonowanego modułu. Dodatkowo musisz również stworzyć pliki tłumaczenia dla nowego modułu w katalogu languages. Co do drugiej części pytania - nie ma możliwości wyłączenia metod płatności w przypadku odbioru osobistego - chociaż tak naprawdę nie jest to zbyt wielką wadą - często zdarza się sytuacja że klient zamawia towary które trzeba dopiero zamówić (i nieraz zapłacić za nie), tak więc jest nawet korzystne jak klient twojego sklepu również dokona przedpłaty za zamówienie.
Napisz proszę bardziej szczegółowo, co należy zrobić, aby taki klon działał i naliczał wg wskazanych stawek.
1. sklonowałem plik table.php z katalogu .../includes/modules/shipping/ nazywając go table1.php
Zmieniłem w nim linijkę 13, która wygląda teraz tak: class table1 extends base { oraz 49 na function table1() { i 52 na $this->code = 'table1';
2. sklonowałem plik table.php z katalogu .../includes/languages/polish/modules/shipping/ nazywając go table1.php i zmieniłem w nim linijkę 25 na define('MODULE_SHIPPING_TABLE_TEXT_TITLE', 'Poczta Polska - Priorytet');

Niestety nie wiem, co jeszcze należałoby zmienić, aby moduł zadziałał, bo pomimo zmienionych wartości naliczających koszty to sklep nalicza koszty z podstawowego modułu TABLE (opis modułu w adminie też się nie zmienia i pobierany jest z pliku table.php z katalogu .../includes/languages/polish/modules/)
Z góry dziękuję.
Cytat:Napisz proszę bardziej szczegółowo, co należy zrobić, aby taki klon działał i naliczał wg wskazanych stawek.
1. sklonowałem plik table.php z katalogu .../includes/modules/shipping/ nazywając go table1.php
Do tego punktu dobrze, a dalej masz poniżej cały kod:
Kod:
<?php
/**
* @package shippingMethod
* @copyright Copyright 2003-2005 Zen Cart Development Team
* @copyright Portions Copyright 2003 osCommerce
* @license http://www.zen-cart.com/license/2_0.txt GNU Public License V2.0
* @version $Id: table.php 3308 2006-03-29 08:21:33Z ajeh $
*/
/**
* Enter description here...
*
*/
class table1 extends base {
  /**
   * Enter description here...
   *
   * @var unknown_type
   */
  var $code;
  /**
   * Enter description here...
   *
   * @var unknown_type
   */
  var $title;
  /**
   * Enter description here...
   *
   * @var unknown_type
   */
  var $description;
  /**
   * Enter description here...
   *
   * @var unknown_type
   */
  var $icon;
  /**
   * Enter description here...
   *
   * @var unknown_type
   */
  var $enabled;
  /**
   * Enter description here...
   *
   * @return table1
   */
  function table1() {
    global $order, $db;

    $this->code = 'table1';
    $this->title = MODULE_SHIPPING_TABLE1_TEXT_TITLE;
    $this->description = MODULE_SHIPPING_TABLE1_TEXT_DESCRIPTION;
    $this->sort_order = MODULE_SHIPPING_TABLE1_SORT_ORDER;
    $this->icon = '';
    $this->tax_class = MODULE_SHIPPING_TABLE1_TAX_CLASS;
    $this->tax_basis = MODULE_SHIPPING_TABLE1_TAX_BASIS;
    // disable only when entire cart is free shipping
    if (zen_get_shipping_enabled($this->code)) {
      $this->enabled = ((MODULE_SHIPPING_TABLE1_STATUS == 'True') ? true : false);
    }

    if ( ($this->enabled == true) && ((int)MODULE_SHIPPING_TABLE1_ZONE > 0) ) {
      $check_flag = false;
      $check = $db->Execute("select zone_id from " . TABLE_ZONES_TO_GEO_ZONES . " where geo_zone_id = '" . MODULE_SHIPPING_TABLE1_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;
      }
    }
  }
  /**
   * Enter description here...
   *
   * @param unknown_type $method
   * @return unknown
   */
  function quote($method = '') {
    global $order, $shipping_weight, $shipping_num_boxes;

    // shipping adjustment
    if (MODULE_SHIPPING_TABLE1_MODE == 'price') {
      $order_total = $_SESSION['cart']->show_total() - $_SESSION['cart']->free_shipping_prices() ;
    } else {
      $order_total = $shipping_weight;
    }

    $table_cost = split("[:,]" , MODULE_SHIPPING_TABLE1_COST);
    $size = sizeof($table_cost);
    for ($i=0, $n=$size; $i<$n; $i+=2) {
      if ($order_total <= $table_cost[$i]) {
        $shipping = $table_cost[$i+1];
        break;
      }
    }

    if (MODULE_SHIPPING_TABLE1_MODE == 'weight') {
      $shipping = $shipping * $shipping_num_boxes;
      // show boxes if weight
      switch (SHIPPING_BOX_WEIGHT_DISPLAY) {
        case (0):
        $show_box_weight = '';
        break;
        case (1):
        $show_box_weight = ' (' . $shipping_num_boxes . ' ' . TEXT_SHIPPING_BOXES . ')';
        break;
        case (2):
        $show_box_weight = ' (' . number_format($shipping_weight * $shipping_num_boxes,2) . TEXT_SHIPPING_WEIGHT . ')';
        break;
        default:
        $show_box_weight = ' (' . $shipping_num_boxes . ' x ' . number_format($shipping_weight,2) . TEXT_SHIPPING_WEIGHT . ')';
        break;
      }
    }

    $this->quotes = array('id' => $this->code,
    'module' => MODULE_SHIPPING_TABLE1_TEXT_TITLE . $show_box_weight,
    'methods' => array(array('id' => $this->code,
    'title' => MODULE_SHIPPING_TABLE1_TEXT_WAY,
    'cost' => $shipping + MODULE_SHIPPING_TABLE1_HANDLING)));

    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;
  }
  /**
   * Enter description here...
   *
   * @return unknown
   */
  function check() {
    global $db;
    if (!isset($this->_check)) {
      $check_query = $db->Execute("select configuration_value from " . TABLE_CONFIGURATION . " where configuration_key = 'MODULE_SHIPPING_TABLE1_STATUS'");
      $this->_check = $check_query->RecordCount();
    }
    return $this->_check;
  }
  /**
   * Enter description here...
   *
   */
  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 Table Method', 'MODULE_SHIPPING_TABLE1_STATUS', 'True', 'Do you want to offer table 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, set_function, date_added) values ('Shipping Table', 'MODULE_SHIPPING_TABLE1_COST', '25:8.50,50:5.50,10000:0.00', 'The shipping cost is based on the total cost or weight of items. Example: 25:8.50,50:5.50,etc.. Up to 25 charge 8.50, from there to 50 charge 5.50, etc', '6', '0', 'zen_cfg_textarea(', 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 ('Table Method', 'MODULE_SHIPPING_TABLE1_MODE', 'weight', 'The shipping cost is based on the order total or the total weight of the items ordered.', '6', '0', 'zen_cfg_select_option(array('weight', 'price'), ', now())");
    $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Handling Fee', 'MODULE_SHIPPING_TABLE1_HANDLING', '0', 'Handling fee for 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, use_function, set_function, date_added) values ('Tax Class', 'MODULE_SHIPPING_TABLE1_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_TABLE1_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, use_function, set_function, date_added) values ('Shipping Zone', 'MODULE_SHIPPING_TABLE1_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())");
    $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_TABLE1_SORT_ORDER', '0', 'Sort order of display.', '6', '0', now())");
  }
  /**
   * Enter description here...
   *
   */
  function remove() {
    global $db;
    $db->Execute("delete from " . TABLE_CONFIGURATION . " where configuration_key in ('" . implode("', '", $this->keys()) . "')");
  }
  /**
   * Enter description here...
   *
   * @return unknown
   */
  function keys() {
    return array('MODULE_SHIPPING_TABLE1_STATUS', 'MODULE_SHIPPING_TABLE1_COST', 'MODULE_SHIPPING_TABLE1_MODE', 'MODULE_SHIPPING_TABLE1_HANDLING', 'MODULE_SHIPPING_TABLE1_TAX_CLASS', 'MODULE_SHIPPING_TABLE1_TAX_BASIS', 'MODULE_SHIPPING_TABLE1_ZONE', 'MODULE_SHIPPING_TABLE1_SORT_ORDER');
  }
}
?>

No i oczywiście nie zapomnij o plikach językowych w podkatalogu /languages/polish/modules/shipping gdzie równiez należy sklonować plik table.php jako table1.php.
(oczywiście dla pozostałych języków w sklepie również).
Po wykonaniu tych wszystkich czynności nowy moduł będzie widoczny w Panelu Administratora - trzeba go jeszcze tylko zainstalować, skonfigurować i już wszystko będzie działać.
Bardzo Ci dziękuję za pomoc, DZIAŁA !!! :grin:
Myślę, że warto też dodać (może komuś się przyda ta informacja) o konieczności wyedytowania sklonowanego pliku table.php (po sklonowaniu zapisany jako table1.php) z katalogu .../includes/languages/polish/modules/shipping/, który powinien wyglądać tak:
Kod:
<?php
//
// +----------------------------------------------------------------------+
// |zen-cart Open Source E-commerce                                       |
// +----------------------------------------------------------------------+
// | Copyright (c) 2003 The zen-cart developers                           |
// |                                                                      |  
// | http://www.zen-cart.com/index.php                                    |  
// |                                                                      |  
// | Portions Copyright (c) 2003 osCommerce                               |
// +----------------------------------------------------------------------+
// | This source file is subject to version 2.0 of the GPL license,       |
// | that is bundled with this package in the file LICENSE, and is        |
// | available through the world-wide-web at the following url:           |
// | http://www.zen-cart.com/license/2_0.txt.                             |
// | If you did not receive a copy of the zen-cart license and are unable |
// | to obtain it through the world-wide-web, please send a note to       |
// | license@zen-cart.com so we can mail you a copy immediately.          |
// +----------------------------------------------------------------------+
// $Id: table.php 1969 2005-09-13 06:57:21Z drbyte $
// Polska wersja językowa: Altkomp PHU - 2006-03-01
// http://www.zencart.com.pl ; http://www.altkomp.pl
//

define('MODULE_SHIPPING_TABLE1_TEXT_TITLE', 'Poczta Polska - Priorytet');
define('MODULE_SHIPPING_TABLE1_TEXT_DESCRIPTION', 'Opłata za przesyłkę wg Tabeli');
define('MODULE_SHIPPING_TABLE1_TEXT_WAY', 'Stawka wg Tabeli');
define('MODULE_SHIPPING_TABLE1_TEXT_WEIGHT', 'Waga');
define('MODULE_SHIPPING_TABLE1_TEXT_AMOUNT', 'Ilość');
?>
Oczywiście w TITLE wpisujemy nazwę sposobu wysyłki (widoczna w adminie, kalkulatorze kosztu wysyłki i samym zamówieniu).
Proszę o informację jak stworzyć inną stawkę za "pobranie/płatność gotówką przy odbiorze" dla wygenerowanego modułu przesyłki w oparciu o "table1".

W podstawowym module "ot_cod_fee" mam ustawioną kwotę 3,50 pln. Kwota ta jest pobierana przez "table" i "table1" a chciałbym zrobić tak by dla "table" zostało bez zmian a dla "table1" ustawić na 7,00 pln.
Pozdrawiam
Cóż, w tym przypadku nie wystarczy sklonowanie modułu jak poprzednio. Konieczna jest większa ingerencja w skrypty i strukturę bazy danych. Nie jest to raczej oparacja która można opisać w kilku słowach, a poza tym bez znajomości php i sql na co najmniej średnim poziomie z założenia skazuje na niepowodzenie.
Witam,

mam wielkie problemy z modułem wysyłki, otóż po zainstalowaniu w module wysyłki paczka zwykła, odbiór własny, wyżej wymienionego table1.... jest widoczny tylko i wyłącznie odbiór własny. Zmieniałem strefy, instalowałem i deinstalowałem pojedyńcze moduły i zawsze jest tylko odbiór własny do wyboru. Np. w zwykłej pacze konfiguracja wygląda tak:
Opłata stała za zwykłą paczkę

Enable Flat Shipping
True

Shipping Cost
5.00

Tax Class
--brak--

Tax Basis
Shipping

Shipping Zone
--brak--

Sort Order
0


W samych skryptach nic nie zmieniałem, nawet zastąpiłem oryginalnym, dla pewności i nic. nie widać go przy zamówieniach.

Dzięki za pomoc!!!


Funtech
Podejrzewam że nie zrobiłeś podstawowej czynności jaką jest ustawienie odpowiedniej kolejności modułów (Sort Order). Jeżeli dwa lub więcej modułów ma tą samą wartość Sort Order (Kolejność wyświetlania) - żaden z nich nie będzie pracował poprawnie. Poustawiaj więc odpowiednie kolejności dla wszystkich zainstalowanych w tej grupie modułów (najlepiej i dla tych aktywnych ze statusem "True" jak i tych z "False" - to na wypadek jak byś chciał kiedyś włączyć nieaktywny moduł) i wszystko będzie w porządku a aktywne moduły pojawią się na stronie.
Witam,

poukładałem wszystko w kolejności od 1 do 11, jednak dalej jest wyświetlane tylko odbiór własny...


pozdrawiam

Funtech
Jeżeli naprawdę wszystko zrobiłeś przy klonowaniu modułu dokładnie tak jak jest opisane w postach powyżej - musi wszystko działać poprawnie. Jeżeli nie działa - po prostu na jakimś etapie coś pominąłeś. SprawdĽ wszystko powoli i dokładnie.
Cytat:Jeżeli naprawdę wszystko zrobiłeś przy klonowaniu modułu dokładnie tak jak jest opisane w postach powyżej - musi wszystko działać poprawnie. Jeżeli nie działa - po prostu na jakimś etapie coś pominąłeś. SprawdĽ wszystko powoli i dokładnie.


Witam,

rozwiązałem problem w inny sposób. Zmodyfikowałem plik storepickup.php (jak u kolegi wyżej z table) który był ukazywany jako odbiór w sklepie na za pobraniem, kurier itd. Inne deaktywowałem a nowe storepickup1.php itd. zainstalowałem, dodałem koszty wysyłki i wszystko gra.

Dzięki za pomoc!!!

Funtech

http://www.funtech24.eu
chciałem stworzyć klon jak kolega w temacie, zastosowałem się do wskazówek, tak jak to dokładnie w punktach opisaliście
i wyskakuje mi błąd przy próbie zainstalowania nowego modułu (tego table1)
Kod:
1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'True', 'False'), ', now())' at line 1
in:
[insert into configuration (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) VALUES ('Enable Table Method', 'MODULE_SHIPPING_TABLE1_STATUS', 'True', 'Do you want to offer table rate shipping?', '6', '0', 'zen_cfg_select_option(array('True', 'False'), ', now())]
If you were entering information, press the BACK button in your browser and re-check the information you had entered to be sure you left no blank fields.
mam wersję ZC 2007 PRO PL, wcześniej miałem 2006 PRO, którą upgradowałem do 2007

Co jest Ľle, co mam zrobić by to zainstalować?
Cosik Ci się linia Ľle kończy w miejscu przerwania skryptu (przed at line 1):
Cytat:, now())'
a powinno być:
Cytat:, now())");
SprawdĽ też przy okazji pozostałe.
no właśnie nie, w skrypcie jest dobrze, sprawdzałem, skopiowałem to co jest powyżej w poście którymś. Komunikat tylko tak obcięte wyświetla.
Jakieś jeszcze sugestie co zrobić by to zainstalować?
(21-12-2007 10:44:12)waldi napisał(a): [ -> ]no właśnie nie, w skrypcie jest dobrze, sprawdzałem, skopiowałem to co jest powyżej w poście którymś. Komunikat tylko tak obcięte wyświetla.
Jakieś jeszcze sugestie co zrobić by to zainstalować?

Witam
Wątek trochę już stary ale może udało Ci się rozwiązać problem z tym błędem podczas instalacji modułu (tego table1)? Właśnie chciałem to zrobić ale pojawia mi się identyczny błąd w kodzie jest dobrze a nie można go zainstalować


dzięki za pomoc
pozdr
Witam.

Mam pytanko odnośnie modułu wysyłki table niby jest ok ale gdy mam ustawiony np:
0.040:6.33,0.090:7.63,0.315:8.24,0.450:8.86,0.900:12.30,1.800:16.11

to moduł nadal działa poprawnie do momentu gdy paczka nie przekroczy 1.8kg wartości a potem ku dziwota pokazuje 0.00 PLN za przesyłkę i można ją wybrać.
Czy mam uszkodzony moduł?
Czy jest na to jakiś sposób by moduł gdy waga przekracza jego możliwości pokazywał np: STOP albo znikł z możliwości wyboru?
Dwa rozwiązania:

1. - co stoi na przeszkodzie abyś "pociągnął" dalej tą tabelkę? np. 1.840:22.44,1.890:23.74 itd, aż do jakiejś rozsądnej granicy (np. 5 paczek max.) Wtedy zawsze będziesz miał poprawnie wyliczoną opłatę za 1 paczkę 1.800, po przekroczeniu 1.800 będzie doliczana opłata za kolejną paczkę itd.

2. - w zakładce Konfiguracja w ustawieniach głównych opcji wysyłki możesz wstawić wartość wagową maksymalnej wagi jednej paczki, do tego jest właśnie ta opcja, aby program sam naliczał wielokrotność paczek po przekroczeniu granicznej wagi. Problem jest tylko taki, że w "wolnej" wersji 1.3.8a Zen Carta ta opcja nie zawsze chciała działać poprawnie - nie wiem jak jest w 1.3.9.
Tak właśnie myślałem że będę to to musiał zrobić 1. sposobem.
Ale wolałem się upewnić czy to jest normalne.
Dzięki.
Idea
Zrozumiałem błąd
Program został napisany na tylko jeden table a ja mam parę klonów i na wszystkie działa ten sam max o którym piszesz w 2. punkcie.
Jak by tam można było też zrobić max oddzielny dla każdej z table to by było wszystko ok ale to w sumie dużo roboty a zmiana końcowa zbyt mała.
Jeszcze raz dzięki.
W tabele wprowadziłem dane i zaznaczyłem stawkę podatku.

Problem w tym, że osoby nie zalogowane dodając do koszyka przedmioty widzą cenę bez podatku a po zalogowaniu (dodawany jest ten zaznaczony podatek)

Jaki pomysł?
Przekierowanie