Jump to content
xt:Commerce Community Forum

Zahlungsmethoden Abh?ngig Von Der Versandart Anzei


Recommended Posts

Hallo Leute,

ich habe ein kleines Problem. Und zwar kann man ja je nach Geschmack Versand- und Zahlungsmodule hinzuf?gen. Ich h?tte aber gerne Abh?ngigkeiten hergestellt. Es sollte z.B. kein Selbstabholer die Zahlungsmethode Nachnahme w?hlen k?nnen.

Die betreffende Datei (checkout_payment.php) habe ich schon gefunden. Leider kenne ich mich in PHP nicht so sehr aus. Man m??te doch nur per if-Abfrage herausbekommen, welche Versandart (sind ja auch nur 2, DHL und Selbstabholer) gew?hlt ist. In der for-Schleife, die die Zeilen mit den Zahlungsmethoden listet m??te man nur noch rausfinden, welche Zahlungsmethode gerade iteriert wird und je nachdem weitermachen oder die Zahlungsmethode ?berspringen.

Aber wie gesagt, kenne ich mich in PHP nicht so sehr aus, um zu bestimmen, welche Versandart gew?nscht ist und welche Zahlungsmethode gerade iteriert wird.

F?r Hilfe w?re ich sehr dankbar.

cya

Newlukai

Link to comment
Share on other sites

Das verstehe ich nicht.

Wenn sich ein neuer Kunde anmeldet, ist er in der Gruppe "neuer Kunde".

Er kann/soll nun z. B. zwischen Selbstabholung und Versand entscheiden.

Im Falle der "Selbstabholung" soll z. B. die Zahlungsmethode "Vorkasse" nicht ausgew?hlt werden k?nnen, sondern die Zahlungsmethode "Barzahlung" (die es Standardm?ssig nicht gibt) erscheinen.

Was soll es bringen, hier in der Gruppe "neuer Kunde" z. B. Selbstabholung zu verbieten?

Der Admin m?sste ja dann zuerst eine neue Gruppe (z. B. "Selbstabholer") anlegen und den Kunden in diese Gruppe schieben, bevor er was kaufen kann.

Irgendwie kapier ich's nicht... :wall:

Link to comment
Share on other sites

@mzanier: Nicht nur auf die Uhrzeit des Posts schauen, auch auf das Datum. Ich habe 5 Tage gewartet ;-)

@tribun: An sich ist das gar nicht so schwer. Hab's wohl zu knapp erl?utert. Wenn man etwas in einem XTC-Shop bestellt, w?hlt man doch erst einmal eine Versandart aus. Bei mir gibt es 2 M?glichkeiten: Selbstabholer und Deutsche Post. Danach kann man eine Zahlungsweise angeben.

Stell' Dir vor Du w?rst Kunde, und h?ttest Selbstabholer gew?hlt. W?rdest Du dann erwarten, bei den Versandarten die Option "Nachnahme" anw?hlen zu k?nnen? Genauso unsinnig w?re es f?r einen Kunden, der sich die Ware zuschicken l??t als Zahlungsweise "Barzahlung" anzugeben, da er dann ja auch die Ware h?tte selbst abholen k?nnen. (Hinweis: Barzahlung gibt's als Zusatz zum runterladen)

Das hat ?brigens nichts mit Kundengruppen zu tun, denn ich will ja abh?ngig von der Versandart entscheiden. Und jeder Kunde sollte grunds?tzlich mal diese und mal jene Versandart w?hlen k?nnen.

Gru?

Newlukai

Link to comment
Share on other sites

Also ich hab mal nachgeschaut. Du meinst diesen Abschnitt:

if (!isset($_SESSION['shipping'])) {

  xtc_redirect(xtc_href_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL'));

 }

Wie bekomme ich nun raus, ob Versand oder Selbstabholer? Hier wird ja wohl nur gepr?ft, ob ?berhaupt was ausgew?hlt wurde. Wie komme ich an den Wert ran?

Link to comment
Share on other sites

das hat damit nichts zu tun, im bezahlmodul selbst kannst du checken welches versandmodul gew?hlt worden ist, und das bezahlmodul dann auf false setzen.

daf?r sind jedoch einige php kentnisse erforderlich.

die n?tigen variablen stehen in der session.

Link to comment
Share on other sites

Mir war schon klar, da? der Codeabschnitt nur checkt, ob ?berhaupt was gew?hlt ist ;-) Ich dachte nur, in dieser Datei m??te ich es ?ndern. Aber egal.

Also mu? ich in den .php-Dateien /include/modules/payment die Abfragen einf?gen?

Wo wird denn die SESSION-Klasse definiert, damit ich mir die zur Verf?gung stehenden Variablen anschauen kann?

Link to comment
Share on other sites

Hmm.. hab mal ein bi?chen gesucht, und die Funktion in der payment-Klasse gefunden, die die Zahlungsmethoden in ein Array schreibt:

while (list(, $value) = each($this->modules)) {

     $class = substr($value, 0, strrpos($value, '.'));

     if ($GLOBALS[$class]->enabled) {

      $selection = $GLOBALS[$class]->selection();

      if (is_array($selection)) $selection_array[] = $selection;

     }

    }

   }

Ich sch?tze mal, hier mu? ich die Abfrage einf?gen?

Link to comment
Share on other sites

OK. Also. Am Beispiel "invoice". Da gibt's gleich zu Anfang (Klasseninitialisierung) die Eigenschaft "enabled":


function invoice() {

   global $order;


   $this->code = 'invoice';

   $this->title = MODULE_PAYMENT_INVOICE_TEXT_TITLE;

   $this->description = MODULE_PAYMENT_INVOICE_TEXT_DESCRIPTION;

   $this->sort_order = MODULE_PAYMENT_INVOICE_SORT_ORDER;

   $this->enabled = ((MODULE_PAYMENT_INVOICE_STATUS == 'True') ? true : false);

Sollte ich da ansetzen?

Link to comment
Share on other sites

Also in $_SESSION['shipping'] steht nur "Array". Also habe ich mal versucht, $_SESSION['shipping']['code'] auszugeben. Da steht aber nix drin.

Meine PHP-Kenntnisse sind nicht so toll. F?r ein paar Schleifen und Abfragen reichts. Ich wei? auch, was ein Array ist. Aber ich wei? nicht, wie ich an die Array-Felder komme. Ich such aber weiter...

Link to comment
Share on other sites

Danke. Jetzt klappt's.

F?r alle Interessierten:

In dem Verzeichnis /includes/modules/payment befinden sich die .php-Dateien zu den einzelnen Zahlungsarten.

In diesen Dateien werden die Zahlungsarten mit der Variablen 'enabled' (de)aktiviert (boolean).

Und in der $_SESSION['shipping']['id'] findet sich der Code der Versandart (bei mir: dp_dp oder selfpickup_selfpickup).

cya

Newlukai

Link to comment
Share on other sites

so jetzt aber leserlich:

Ich hab's:

einfach in den gew?nschten Zahlungarten (includes\modules\payment) nach ...


if ($this->enabled == true) {

if ($order->content_type == 'virtual') {

$this->enabled = false;

}

} 

folgendes erg?nzen:

if ($this->enabled == true) {

if ($_SESSION['shipping']['id'] == 'selfpickup_selfpickup') {

$this->enabled = false;

}

}

wobei bei der angegebenen Lieferart diese Zahlungsart dann deaktiviert wird! Im Beispiel oben wird z.B. die Nachnahme bei Selbstabholung deaktiviert.

Link to comment
Share on other sites

  • 4 months later...
  • 4 years later...
  • 3 weeks later...

so jetzt aber leserlich:

Ich hab's:

einfach in den gew?nschten Zahlungarten (includes\modules\payment) nach ...


if ($this->enabled == true) {

if ($order->content_type == 'virtual') {

$this->enabled = false;

}

} 

folgendes erg?nzen:

if ($this->enabled == true) {

if ($_SESSION['shipping']['id'] == 'selfpickup_selfpickup') {

$this->enabled = false;

}

}

wobei bei der angegebenen Lieferart diese Zahlungsart dann deaktiviert wird! Im Beispiel oben wird z.B. die Nachnahme bei Selbstabholung deaktiviert.

Hallo,

das funktioniert super,

nun möchte ich gerne das auch bei Pauschalen Versandkosten kein Nachnahme angeboten wird, ich habe nun schon die verschiedensten Versionen probiert, aber ich bekomme es nicht hin, entweder werden Fehler angezeigt oder Nachnahme kommt wieder zum Vorschein.

Wie kann ich diese beiden vereinen, also Pauschale Versandkosten und Selbstabholung ohne Nachnahme?

Für eine Antwort wäre ich sehr dankbar1

Link to comment
Share on other sites

  • 1 year later...

So wir haben in unserem Shop ein ähnliches Problem.

Wenn man bei uns "Selbstabholung" wählt sollte eigentlich nur "Barzahlung bei Abholung" stehen. Leider steht da aber auch noch "Barzahlung bei Abholung" (moneyorder).

Mit der hilfe hier habe ich Paypal schon rausbekommen, aber moneyorder bekomme ich einfach nicht raus.

hier ist der Code

function update_status() {

		global $order;


		[B]if (($this->enabled == true) && ((int) MODULE_PAYMENT_MONEYORDER_ZONE > 0)) {

			if ($_SESSION['shipping']['id'] == 'selfpickup_selfpickup') {

				$this->enabled = false;

				}[/B]			$check_flag = false;

			$check_query = xtc_db_query("select zone_id from ".TABLE_ZONES_TO_GEO_ZONES." where geo_zone_id = '".MODULE_PAYMENT_MONEYORDER_ZONE."' and zone_country_id = '".$order->billing['country']['id']."' order by zone_id");

			while ($check = xtc_db_fetch_array($check_query)) {

				if ($check['zone_id'] < 1) {

					$check_flag = true;

					break;

				}

				elseif ($check['zone_id'] == $order->billing['zone_id']) {

					$check_flag = true;

					break;

				}

			}


			if ($check_flag == false) {

				$this->enabled = false;

			}

		}

	}

Was ich in den Code eingefügt habe ist Fett Markiert.

Hat da vielleicht jemand eine ahnung und kann mir helfen.

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
  • Create New...