Jump to content

Nachnahme soll nur angezeigt werden wenn Versand x gewählt wurde


Recommended Posts

Ich benutze das COD(Cash on delivery / Nachnahme) - Modul. Leider kann man bei diesem Modul nicht die Versandkosten eingeben. Ich habe das so gelöst, dass ich einen Versanddienst "Nachnahme" eingerichtet habe, da man beim Versand die Versandkosten mit angeben kann.

 

Das heißt der Kunde wählt beim Versand "Nachnahme" und dann als Bezahlmethode ebenfalls Nachname(COD-Modul). Nun wählen aber einige Kunden als Versand "Normalen DHL-Versand" und als Bezahlmethode "Nachnahme".

 

Unter /MEINSHOPROOT/modules/cashondelivery/views/templates/hook payment.tpl wollte ich nun eine einfache if-Abfrage a la

 

{if $cart->id_carrier == 1}HTML{/if}

 

einbauen, sodass die Bezahlmethode "Nachnahme" nur zur Auswahl steht wenn der Kunde als Versandmethode "Nachnahme" gewählt hat.

 

Doch irgendwie übernimmt Prestashop meine Änderungen in der payment.tpl-Datei nicht. Egal was ich reinschreibe. Woran kann das liegen. Am Cache?

 

Weiß jemand vielleicht auch wie man das mit der Nachnahme besser lösen kann?

Link to comment
Share on other sites

Hallo Barama,

ich hatte eine solche Funktion auch früher mal. Ich hatte in der php-Datei angesetzt, wo das payment.tpl aufgerufen wird. Dort habe ich in die Funktion eine if Bedingung eingebaut, die je nachdem welche id_carrier übergeben wurde, das Bezahlverfahren angezeigt hat oder nicht. Aktuell benutzen wir ein Modul mit Gebühren-Funktion. Darum haben wir nur noch einen Versanddienst und brauchen an dieser Stelle keine Änderung mehr.

Ich finde leider den Code nicht mehr so schnell aber die Funktion müßte ungefähr so aussehen:

public function hookPayment($params)
	{
		if (!$this->active)
			return ;

		global $smarty;
/**
 * ANFANG  Blendet COD Modul bei Carrier-id 1 aus
 */
        if ($id_carrier==1) return;
/**
 * ENDE  Blendet COD Modul bei Carrier-id 1 aus
 */
       		// Check if cart has product download
		foreach ($params['cart']->getProducts() AS $product)
		{
			$pd = ProductDownload::getIdFromIdProduct((int)($product['id_product']));
			if ($pd AND Validate::isUnsignedInt($pd))
				return false;
		}

		$smarty->assign(array(
			'this_path' => $this->_path, //keep for retro compat
			'this_path_cod' => $this->_path,
			'this_path_ssl' => Tools::getShopDomainSsl(true, true).__PS_BASE_URI__.'modules/'.$this->name.'/'
		));
		return $this->display(__FILE__, 'payment.tpl');
	}

Viel Erfolg

Link to comment
Share on other sites

Hallo Luca01,

 

habe die if-Abfrage (bei mir Id = 7) in die Datei  cashondelivery.php eingebunden, doch leider ohne Erfolg. Auch wenn ich in EU-Legal den Rechtssicherer Bestellprozess deaktiviere wird die Abfrage nicht ausgeführt.

 

Die Eintragungen habe ich sowohl unter  "public function hookPayment($params)" als auch unter  "public function hookDisplayPaymentEU($params)" vorgenommen.

 

Es scheint als ob die id_carrier nicht im Modul verfügbar ist (Modul COD) oder aber der Variablenname lautet anders.

 

 

 

Gruß Michael

 

PS 1.6.0.9 und EU-Legal 1.02

 

 

 

 

 

 

Link to comment
Share on other sites

Hallo Jamgön,

 

Es scheint als ob die id_carrier nicht im Modul verfügbar ist (Modul COD) oder aber der Variablenname lautet anders.

Ich habe mir das Modul mal angesehen und ja die Variable muß erst zugewiesen werden. Ich müßte jetzt auch anfangen zu stochern, wie ich sie am besten bekommen könnte.

(int)(string)$this->context->cart->id_carrier;

wäre vielleicht eine Möglichkeit oder

(int)Tools::getValue('id_carrier');

Man müßte mal sehen was da für Werte übergeben werden :unsure:

Viele Grüße

Link to comment
Share on other sites

Hallo Jamgön,

Ich habe mir das Modul mal angesehen und ja die Variable muß erst zugewiesen werden. Ich müßte jetzt auch anfangen zu stochern, wie ich sie am besten bekommen könnte.

(int)(string)$this->context->cart->id_carrier;

 

Hallo Luca01,

 

mit

 

    if ($this->context->cart->id_carrier !== 7)

        return;

 

erreiche ich genau das was ich möchte.

 

Den Code habe ich die cashondelivery.php unterhalb von  public function hookDisplayPaymentEU($params) eingefügt. Id 7 steht für Abholung im Geschäft und somit wird COD nur angezeigt wenn man vorher unter  Versandart Selbstabholung gewählt hat. OCD ist textlich so geändert, dass dort jetzt "Zahlungen per Barzahlung bzw. EC-Karte" steht.

 

Ich danke Dir.

 

Gruß Michael

 

 

PS 1.6.0.9 EU-Legal 1.02

  • Like 1
Link to comment
Share on other sites

public function hookDisplayPaymentEU($params)
    {
        if (!$this->active)
            return ;

        global $smarty;

Wird zu:

public function hookDisplayPaymentEU($params)
    {
        if (!$this->active)
            return ;

        if ($this->context->cart->id_carrier !== 7)
            return;

        global $smarty;

Der id_carrier-Wert ist bei dir vielleicht anders.

Link to comment
Share on other sites

Wo gibt es bei Dir Versandarten? Ich seh bei mir nur Versanddienste?

 

Ausserdem braucht man bei Nachnahme ja auch die Berechnung der Versandkosten. Wie soll das zusammen funktionieren wenn man das als Versandart eingibt?

 

Id 7 steht für Abholung im Geschäft und somit wird COD nur angezeigt wenn man vorher unter  Versandart Selbstabholung gewählt hat. OCD ist textlich so geändert, dass dort jetzt "Zahlungen per Barzahlung bzw. EC-Karte" steht.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...