Jump to content
xt:Commerce Community Forum
Sign in to follow this  
Newlukai

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

Share this post


Link to post
Share on other sites

nach 2h kannst du keine antwort erwarten, bei nachfragen verl?ngert sich die antwortzeit gleichmal um paar stunden.

du brauchst nichts programmieren, sondern nur bei der kundengruppe die module angeben, dort steht, "nicht erlaubte versandarten"

Share this post


Link to post
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:

Share this post


Link to post
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

Share this post


Link to post
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?

Share this post


Link to post
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.

Share this post


Link to post
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?

Share this post


Link to post
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?

Share this post


Link to post
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?

Share this post


Link to post
Share on other sites

Ein einfaches $this->enabled = false; hat mir best?tigt: Ja, da mu? ich ansetzen.

Allerdings wei? ich noch immer nicht genau, woher ich wei?, welche Versandart gew?hlt wurde. Bitte, bitte, ein kleiner Tip.

Share this post


Link to post
Share on other sites

$_SESSION['shipping'] da stehen bei Auswahl der entsprechende Systemname der Versandart drin. Systemname kannst Du im Admin bei den Versandmodulen rausbekommen.

Share this post


Link to post
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...

Share this post


Link to post
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

Share this post


Link to post
Share on other sites

Hallo Newlukai,

k?nntest Du kurz erkl?ren, was man genau machen muss, um dieses zu bewerkstelligen??? Ich w?rde gerne die Versandart "Abholung" mit "Barzahlung" kombinieren, hab's aber noch nicht hinbekommen. Bin noch PHP Laie... :cry:

Share this post


Link to post
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.

Share this post


Link to post
Share on other sites

Klase, das hat gut geklappt.

K?nnte auch jemand eins posten wenn man auf selbstabholler geht, dass dann alles au?er barzahlung ausgeblendet wird?

benutze nachnahme und DP

THX

Share this post


Link to post
Share on other sites

Hallo,

es klappt bei mir mit den Standard modulen .. aber ich habe ein Versandmodul installiert, dass den Versand nach Postleitzahlen ermöglicht und da scheint es nicht zu gehen ? ,., muss ich da was beachten?

Share this post


Link to post
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.

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

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites
Sign in to follow this  

×
×
  • Create New...